17 #define STR_ROOT_NAME_00 \
18 "_SHOGUN_SERIALIZABLE_XML_FILE_V_00_"
22 CSerializableXmlFile::CSerializableXmlFile()
25 CSerializableXmlFile::CSerializableXmlFile(
const char* fname,
char rw,
29 CSerializableFile::init(NULL, rw, fname);
33 CSerializableXmlFile::~CSerializableXmlFile()
39 CSerializableXmlFile::new_reader(
char* dest_version,
size_t n)
43 if ((name = xmlGetNodePath(m_stack_stream.back())) == NULL)
46 strncpy(dest_version, (
const char*) (name+1), n);
49 if (strcmp(STR_ROOT_NAME_00, dest_version) == 0)
50 return new SerializableXmlReader00(
this);
56 CSerializableXmlFile::push_node(
const xmlChar* name)
59 = xmlNewChild(m_stack_stream.back(), NULL, name, NULL);
61 m_stack_stream.push_back(node);
67 CSerializableXmlFile::join_node(
const xmlChar* name)
69 for (xmlNode* cur=m_stack_stream.back()->children; cur!=NULL;
71 if (cur->type != XML_ELEMENT_NODE
72 || xmlStrcmp(cur->name, name) != 0)
continue;
74 m_stack_stream.push_back(cur);
82 CSerializableXmlFile::next_node(
const xmlChar* name)
84 for (xmlNode* cur=m_stack_stream.back()->next; cur!=NULL;
86 if (cur->type != XML_ELEMENT_NODE
87 || xmlStrcmp(cur->name, name) != 0)
continue;
90 m_stack_stream.push_back(cur);
98 CSerializableXmlFile::pop_node()
100 m_stack_stream.pop_back();
104 CSerializableXmlFile::init(
bool format)
106 m_format = format, m_doc = NULL;
110 if (m_filename == NULL || *m_filename ==
'\0') {
111 SG_WARNING(
"Filename not given for opening file!\n")
115 SG_DEBUG("Opening '%s'\n", m_filename)
120 if ((m_doc = xmlReadFile(m_filename, NULL, XML_PARSE_HUGE | XML_PARSE_NONET)) == NULL
121 || (tmp = xmlDocGetRootElement(m_doc)) == NULL)
123 SG_WARNING(
"Could not open file `%s' for reading!\n", m_filename)
126 m_stack_stream.push_back(tmp);
129 m_doc = xmlNewDoc(BAD_CAST XML_DEFAULT_VERSION);
130 m_stack_stream.push_back(xmlNewNode(
131 NULL, BAD_CAST STR_ROOT_NAME_00));
132 xmlDocSetRootElement(m_doc, m_stack_stream.back());
135 SG_WARNING("Could not open file `%s', unknown mode!\n",
142 CSerializableXmlFile::close()
144 while (m_stack_stream.get_num_elements() > 0) pop_node();
148 && xmlSaveFormatFileEnc(m_filename, m_doc,
"UTF-8",
150 SG_WARNING(
"Could not close file `%s' for writing!\n",
154 xmlFreeDoc(m_doc); m_doc = NULL;
160 CSerializableXmlFile::is_opened()
162 return m_doc != NULL;
166 CSerializableXmlFile::write_scalar_wrapped(
173 if (snprintf(buf,
STRING_LEN,
"%s", *(
bool*) param? STR_TRUE
174 : STR_FALSE) <= 0)
return false;
177 if (snprintf(buf,
STRING_LEN,
"%c", *(
char*) param
178 ) <= 0)
return false;
181 if (snprintf(buf,
STRING_LEN,
"%" PRIi8, *(int8_t*) param
182 ) <= 0)
return false;
185 if (snprintf(buf,
STRING_LEN,
"%" PRIu8, *(uint8_t*) param
186 ) <= 0)
return false;
189 if (snprintf(buf,
STRING_LEN,
"%" PRIi16, *(int16_t*) param
190 ) <= 0)
return false;
193 if (snprintf(buf,
STRING_LEN,
"%" PRIu16, *(uint16_t*) param
194 ) <= 0)
return false;
197 if (snprintf(buf,
STRING_LEN,
"%" PRIi32, *(int32_t*) param
198 ) <= 0)
return false;
201 if (snprintf(buf,
STRING_LEN,
"%" PRIu32, *(uint32_t*) param
202 ) <= 0)
return false;
205 if (snprintf(buf,
STRING_LEN,
"%" PRIi64, *(int64_t*) param
206 ) <= 0)
return false;
209 if (snprintf(buf,
STRING_LEN,
"%" PRIu64, *(uint64_t*) param
210 ) <= 0)
return false;
214 ) <= 0)
return false;
218 ) <= 0)
return false;
222 param) <= 0)
return false;
225 if (snprintf(buf,
STRING_LEN,
"(%.16lg,%.16lg)",
227 ) <= 0)
return false;
231 SG_ERROR(
"write_scalar_wrapped(): Implementation error during"
232 " writing XmlFile!");
236 xmlNodeAddContent(m_stack_stream.back(), BAD_CAST buf);
241 CSerializableXmlFile::write_cont_begin_wrapped(
248 CSerializableXmlFile::write_cont_end_wrapped(
252 if (len_real_y*len_real_x>0)
259 CSerializableXmlFile::write_string_begin_wrapped(
266 CSerializableXmlFile::write_string_end_wrapped(
273 CSerializableXmlFile::write_stringentry_begin_wrapped(
276 if (!push_node(BAD_CAST STR_STRING))
return false;
282 CSerializableXmlFile::write_stringentry_end_wrapped(
291 CSerializableXmlFile::write_sparse_begin_wrapped(
298 CSerializableXmlFile::write_sparse_end_wrapped(
305 CSerializableXmlFile::write_sparseentry_begin_wrapped(
309 push_node(BAD_CAST STR_SPARSE);
312 snprintf(buf,
STRING_LEN,
"%" PRIi32, feat_index);
313 if (xmlNewProp(m_stack_stream.back(), BAD_CAST STR_PROP_FEATINDEX,
314 BAD_CAST buf) == NULL)
return false;
319 CSerializableXmlFile::write_sparseentry_end_wrapped(
329 CSerializableXmlFile::write_item_begin_wrapped(
335 if (x != 0) pop_node();
338 if (!push_node(BAD_CAST buf_x))
return false;
342 push_node(BAD_CAST STR_ITEM);
348 CSerializableXmlFile::write_item_end_wrapped(
357 CSerializableXmlFile::write_sgserializable_begin_wrapped(
358 const TSGDataType* type,
const char* sgserializable_name,
359 EPrimitiveType
generic)
361 if (*sgserializable_name ==
'\0') {
362 if (xmlNewProp(m_stack_stream.back(), BAD_CAST STR_PROP_IS_NULL,
363 BAD_CAST STR_TRUE) == NULL)
return false;
367 if (xmlNewProp(m_stack_stream.back(),
368 BAD_CAST STR_PROP_INSTANCE_NAME,
369 BAD_CAST sgserializable_name) == NULL)
return false;
374 if (xmlNewProp(m_stack_stream.back(),
375 BAD_CAST STR_PROP_GENERIC_NAME, BAD_CAST buf)
376 == NULL)
return false;
383 CSerializableXmlFile::write_sgserializable_end_wrapped(
384 const TSGDataType* type,
const char* sgserializable_name,
385 EPrimitiveType
generic)
391 CSerializableXmlFile::write_type_begin_wrapped(
392 const TSGDataType* type,
const char* name,
const char* prefix)
394 if (!push_node(BAD_CAST name))
return false;
400 if (xmlNewProp(m_stack_stream.back(), BAD_CAST STR_PROP_TYPE,
401 BAD_CAST buf) == NULL)
return false;
407 CSerializableXmlFile::write_type_end_wrapped(
408 const TSGDataType* type,
const char* name,
const char* prefix)
std::complex< float64_t > complex128_t
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)