17 #define STR_KEY_FILETYPE "filetype"
18 #define STR_FILETYPE_00 \
19 "_SHOGUN_SERIALIZABLE_JSON_FILE_V_00_"
23 CSerializableJsonFile::CSerializableJsonFile()
26 CSerializableJsonFile::CSerializableJsonFile(
const char* fname,
char rw)
29 CSerializableFile::init(NULL, rw, fname);
33 CSerializableJsonFile::~CSerializableJsonFile()
39 CSerializableJsonFile::new_reader(
char* dest_version,
size_t n)
44 bool success = json_object_object_get_ex(
45 m_stack_stream.back(), STR_KEY_FILETYPE, &buf);
47 if (!success || buf == NULL
49 || (ftype = json_object_get_string(buf)) == NULL)
52 strncpy(dest_version, ftype, n);
54 if (strcmp(STR_FILETYPE_00, dest_version) == 0)
55 return new SerializableJsonReader00(
this);
60 void CSerializableJsonFile::push_object(json_object* o)
62 m_stack_stream.push_back(o);
66 void CSerializableJsonFile::pop_object()
68 json_object_put(m_stack_stream.back());
69 m_stack_stream.pop_back();
73 CSerializableJsonFile::get_object_any(
74 json_object** dest, json_object* src,
const char* key)
76 return json_object_object_get_ex(src, key, & *dest);
80 CSerializableJsonFile::get_object(json_object** dest, json_object* src,
81 const char* key, json_type t)
84 success = json_object_object_get_ex(src, key, & *dest);
86 return success && *dest != NULL && !is_error(*dest)
87 && json_object_is_type(*dest, t);
91 CSerializableJsonFile::init(
const char* fname)
93 if (m_filename == NULL || *m_filename ==
'\0') {
94 SG_WARNING(
"Filename not given for opening file!\n")
102 buf = json_object_from_file((
char*) fname);
104 SG_ERROR(
"Could not open file `%s' for reading!\n",
108 m_stack_stream.push_back(buf);
111 m_stack_stream.push_back(json_object_new_object());
112 buf = json_object_new_string(STR_FILETYPE_00);
113 json_object_object_add(m_stack_stream.back(),
114 STR_KEY_FILETYPE, buf);
117 SG_WARNING(
"Could not open file `%s', unknown mode!\n",
125 CSerializableJsonFile::close()
127 while (m_stack_stream.get_num_elements() > 1)
130 if (m_stack_stream.get_num_elements() == 1) {
132 && json_object_to_file(m_filename, m_stack_stream.back()))
134 SG_WARNING(
"Could not close file `%s' for writing!\n",
143 CSerializableJsonFile::is_opened()
145 return m_stack_stream.get_num_elements() > 0;
149 CSerializableJsonFile::write_scalar_wrapped(
154 push_object(json_object_new_boolean(*(
bool*) param));
157 push_object(json_object_new_int((
int) *(
char*) param));
160 push_object(json_object_new_int((
int) *(int8_t*) param));
163 push_object(json_object_new_int((
int) *(uint8_t*) param));
166 push_object(json_object_new_int((
int) *(int16_t*) param));
169 push_object(json_object_new_int((
int) *(uint16_t*) param));
172 push_object(json_object_new_int((
int) *(int32_t*) param));
175 push_object(json_object_new_int((
int) *(uint32_t*) param));
178 push_object(json_object_new_int((
int) *(int64_t*) param));
181 push_object(json_object_new_int((
int) *(uint64_t*) param));
184 #if JSON_C_MINOR_VERSION >= 12
185 push_object(json_object_new_double_s(
187 std::to_string((
double) *(
float32_t*) param).c_str()
190 push_object(json_object_new_double((
double) *(
float32_t*) param));
194 #if JSON_C_MINOR_VERSION >= 12
195 push_object(json_object_new_double_s(
197 std::to_string((
double) *(
float64_t*) param).c_str()
200 push_object(json_object_new_double((
double) *(
float64_t*) param));
204 #if JSON_C_MINOR_VERSION >= 12
205 push_object(json_object_new_double_s(
207 std::to_string((
double) *(
floatmax_t*) param).c_str()
210 push_object(json_object_new_double((
double) *(
floatmax_t*) param));
214 SG_ERROR(
"Not supported for complex128_t for writing into JsonFile!");
217 SG_ERROR(
"Implementation error during writing JsonFile!");
219 case PT_UNDEFINED:
default:
220 SG_ERROR(
"Implementation error: undefined primitive type\n");
225 if (is_error(m_stack_stream.back()))
232 CSerializableJsonFile::write_cont_begin_wrapped(
235 push_object(json_object_new_array());
238 json_object_array_add(m_stack_stream.back(),
239 json_object_new_array());
245 CSerializableJsonFile::write_cont_end_wrapped(
252 CSerializableJsonFile::write_string_begin_wrapped(
255 push_object(json_object_new_array());
261 CSerializableJsonFile::write_string_end_wrapped(
268 CSerializableJsonFile::write_stringentry_begin_wrapped(
275 CSerializableJsonFile::write_stringentry_end_wrapped(
278 json_object* array = m_stack_stream.get_element(
279 m_stack_stream.get_num_elements() - 2);
281 if (json_object_array_put_idx( array, y, m_stack_stream.back()))
289 CSerializableJsonFile::write_sparse_begin_wrapped(
292 push_object(json_object_new_object());
294 json_object* buf = json_object_new_array();
298 json_object_object_add(m_stack_stream.back(),
299 STR_KEY_SPARSE_FEATURES, buf);
306 CSerializableJsonFile::write_sparse_end_wrapped(
314 CSerializableJsonFile::write_sparseentry_begin_wrapped(
318 json_object* buf = json_object_new_object();
319 if (json_object_array_put_idx(m_stack_stream.back(), y, buf))
324 buf = json_object_new_int(feat_index);
328 json_object_object_add(m_stack_stream.back(),
329 STR_KEY_SPARSE_FEATINDEX, buf);
335 CSerializableJsonFile::write_sparseentry_end_wrapped(
339 json_object* o = m_stack_stream.get_element(
340 m_stack_stream.get_num_elements() - 2);
342 json_object_object_add(o, STR_KEY_SPARSE_ENTRY,
343 m_stack_stream.back());
345 pop_object(); pop_object();
350 CSerializableJsonFile::write_item_begin_wrapped(
357 CSerializableJsonFile::write_item_end_wrapped(
360 json_object* array = m_stack_stream.get_element(
361 m_stack_stream.get_num_elements() - 2);
364 array = json_object_array_get_idx(array, x);
366 json_object_array_put_idx(array, y, m_stack_stream.back());
373 CSerializableJsonFile::write_sgserializable_begin_wrapped(
374 const TSGDataType* type,
const char* sgserializable_name,
375 EPrimitiveType
generic)
377 if (*sgserializable_name ==
'\0') {
382 push_object(json_object_new_object());
385 buf = json_object_new_string(sgserializable_name);
389 json_object_object_add(m_stack_stream.back(),
390 STR_KEY_INSTANCE_NAME, buf);
395 buf = json_object_new_string(buf_str);
399 json_object_object_add(m_stack_stream.back(),
400 STR_KEY_GENERIC_NAME, buf);
403 buf = json_object_new_object();
406 json_object_object_add(m_stack_stream.back(), STR_KEY_INSTANCE,
414 CSerializableJsonFile::write_sgserializable_end_wrapped(
415 const TSGDataType* type,
const char* sgserializable_name,
416 EPrimitiveType
generic)
418 if (*sgserializable_name ==
'\0')
return true;
425 CSerializableJsonFile::write_type_begin_wrapped(
426 const TSGDataType* type,
const char* name,
const char* prefix)
428 json_object* buf = json_object_new_object();
432 json_object_object_add(m_stack_stream.back(), name, buf);
437 buf = json_object_new_string(str_buf);
441 json_object_object_add(m_stack_stream.back(), STR_KEY_TYPE, buf);
447 CSerializableJsonFile::write_type_end_wrapped(
448 const TSGDataType* type,
const char* name,
const char* prefix)
450 json_object_object_add(
451 m_stack_stream.get_element(
452 m_stack_stream.get_num_elements() - 2), STR_KEY_DATA,
453 m_stack_stream.back());
static void ptype_to_string(char *dest, EPrimitiveType ptype, size_t n)
Datatypes that shogun supports.
void to_string(char *dest, size_t n) const
all of classes and functions are contained in the shogun namespace
template class SGSparseVectorEntry
char string_t[STRING_LEN]
void init(FILE *fstream, char task, const char *filename)