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 push_object(json_object_new_double(
188 push_object(json_object_new_double(
192 push_object(json_object_new_double(
196 SG_ERROR(
"Not supported for complex128_t for writing into JsonFile!");
199 SG_ERROR(
"Implementation error during writing JsonFile!");
201 case PT_UNDEFINED:
default:
202 SG_ERROR(
"Implementation error: undefined primitive type\n");
207 if (is_error(m_stack_stream.back()))
214 CSerializableJsonFile::write_cont_begin_wrapped(
217 push_object(json_object_new_array());
220 json_object_array_add(m_stack_stream.back(),
221 json_object_new_array());
227 CSerializableJsonFile::write_cont_end_wrapped(
234 CSerializableJsonFile::write_string_begin_wrapped(
237 push_object(json_object_new_array());
243 CSerializableJsonFile::write_string_end_wrapped(
250 CSerializableJsonFile::write_stringentry_begin_wrapped(
257 CSerializableJsonFile::write_stringentry_end_wrapped(
260 json_object* array = m_stack_stream.get_element(
261 m_stack_stream.get_num_elements() - 2);
263 if (json_object_array_put_idx( array, y, m_stack_stream.back()))
271 CSerializableJsonFile::write_sparse_begin_wrapped(
274 push_object(json_object_new_object());
276 json_object* buf = json_object_new_array();
280 json_object_object_add(m_stack_stream.back(),
281 STR_KEY_SPARSE_FEATURES, buf);
288 CSerializableJsonFile::write_sparse_end_wrapped(
296 CSerializableJsonFile::write_sparseentry_begin_wrapped(
300 json_object* buf = json_object_new_object();
301 if (json_object_array_put_idx(m_stack_stream.back(), y, buf))
306 buf = json_object_new_int(feat_index);
310 json_object_object_add(m_stack_stream.back(),
311 STR_KEY_SPARSE_FEATINDEX, buf);
317 CSerializableJsonFile::write_sparseentry_end_wrapped(
321 json_object* o = m_stack_stream.get_element(
322 m_stack_stream.get_num_elements() - 2);
324 json_object_object_add(o, STR_KEY_SPARSE_ENTRY,
325 m_stack_stream.back());
327 pop_object(); pop_object();
332 CSerializableJsonFile::write_item_begin_wrapped(
339 CSerializableJsonFile::write_item_end_wrapped(
342 json_object* array = m_stack_stream.get_element(
343 m_stack_stream.get_num_elements() - 2);
346 array = json_object_array_get_idx(array, x);
348 json_object_array_put_idx(array, y, m_stack_stream.back());
355 CSerializableJsonFile::write_sgserializable_begin_wrapped(
356 const TSGDataType* type,
const char* sgserializable_name,
357 EPrimitiveType
generic)
359 if (*sgserializable_name ==
'\0') {
364 push_object(json_object_new_object());
367 buf = json_object_new_string(sgserializable_name);
371 json_object_object_add(m_stack_stream.back(),
372 STR_KEY_INSTANCE_NAME, buf);
377 buf = json_object_new_string(buf_str);
381 json_object_object_add(m_stack_stream.back(),
382 STR_KEY_GENERIC_NAME, buf);
385 buf = json_object_new_object();
388 json_object_object_add(m_stack_stream.back(), STR_KEY_INSTANCE,
396 CSerializableJsonFile::write_sgserializable_end_wrapped(
397 const TSGDataType* type,
const char* sgserializable_name,
398 EPrimitiveType
generic)
400 if (*sgserializable_name ==
'\0')
return true;
407 CSerializableJsonFile::write_type_begin_wrapped(
408 const TSGDataType* type,
const char* name,
const char* prefix)
410 json_object* buf = json_object_new_object();
414 json_object_object_add(m_stack_stream.back(), name, buf);
419 buf = json_object_new_string(str_buf);
423 json_object_object_add(m_stack_stream.back(), STR_KEY_TYPE, buf);
429 CSerializableJsonFile::write_type_end_wrapped(
430 const TSGDataType* type,
const char* name,
const char* prefix)
432 json_object_object_add(
433 m_stack_stream.get_element(
434 m_stack_stream.get_num_elements() - 2), STR_KEY_DATA,
435 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)