SerializableXmlFile.h

Go to the documentation of this file.
00001 /*
00002  * This program is free software; you can redistribute it and/or modify
00003  * it under the terms of the GNU General Public License as published by
00004  * the Free Software Foundation; either version 3 of the License, or
00005  * (at your option) any later version.
00006  *
00007  * Written (W) 2010 Soeren Sonnenburg
00008  * Copyright (C) 2010 Berlin Institute of Technology
00009  */
00010 #ifndef __SERIALIZABLE_XML_FILE_H__
00011 #define __SERIALIZABLE_XML_FILE_H__
00012 
00013 #include "lib/config.h"
00014 #ifdef HAVE_XML
00015 
00016 #include "lib/SerializableFile.h"
00017 #include "base/DynArray.h"
00018 
00019 #include <libxml/parser.h>
00020 #include <libxml/tree.h>
00021 
00022 #define STR_TRUE                   "true"
00023 #define STR_FALSE                  "false"
00024 
00025 #define STR_ITEM                   "i"
00026 #define STR_STRING                 "s"
00027 #define STR_SPARSE                 "r"
00028 
00029 #define STR_PROP_TYPE              "type"
00030 #define STR_PROP_IS_NULL           "is_null"
00031 #define STR_PROP_INSTANCE_NAME     "instance_name"
00032 #define STR_PROP_GENERIC_NAME      "generic_name"
00033 #define STR_PROP_VECINDEX          "vec_index"
00034 #define STR_PROP_FEATINDEX         "feat_index"
00035 
00036 namespace shogun
00037 {
00038 #define IGNORE_IN_CLASSLIST
00039 IGNORE_IN_CLASSLIST class CSerializableXmlFile
00040     :public CSerializableFile
00041 {
00042     friend class SerializableXmlReader00;
00043 
00044     DynArray<xmlNode*> m_stack_stream;
00045     xmlDocPtr m_doc;
00046     bool m_format;
00047 
00048     void init(bool format);
00049     bool push_node(const xmlChar* name);
00050     bool join_node(const xmlChar* name);
00051     bool next_node(const xmlChar* name);
00052     void pop_node(void);
00053 
00054 protected:
00055     virtual TSerializableReader* new_reader(
00056         char* dest_version, size_t n);
00057 
00058     virtual bool write_scalar_wrapped(
00059         const TSGDataType* type, const void* param);
00060 
00061     virtual bool write_cont_begin_wrapped(
00062         const TSGDataType* type, index_t len_real_y,
00063         index_t len_real_x);
00064     virtual bool write_cont_end_wrapped(
00065         const TSGDataType* type, index_t len_real_y,
00066         index_t len_real_x);
00067 
00068     virtual bool write_string_begin_wrapped(
00069         const TSGDataType* type, index_t length);
00070     virtual bool write_string_end_wrapped(
00071         const TSGDataType* type, index_t length);
00072 
00073     virtual bool write_stringentry_begin_wrapped(
00074         const TSGDataType* type, index_t y);
00075     virtual bool write_stringentry_end_wrapped(
00076         const TSGDataType* type, index_t y);
00077 
00078     virtual bool write_sparse_begin_wrapped(
00079         const TSGDataType* type, index_t vec_index,
00080         index_t length);
00081     virtual bool write_sparse_end_wrapped(
00082         const TSGDataType* type, index_t vec_index,
00083         index_t length);
00084 
00085     virtual bool write_sparseentry_begin_wrapped(
00086         const TSGDataType* type, const TSparseEntry<char>* first_entry,
00087         index_t feat_index, index_t y);
00088     virtual bool write_sparseentry_end_wrapped(
00089         const TSGDataType* type, const TSparseEntry<char>* first_entry,
00090         index_t feat_index, index_t y);
00091 
00092     virtual bool write_item_begin_wrapped(
00093         const TSGDataType* type, index_t y, index_t x);
00094     virtual bool write_item_end_wrapped(
00095         const TSGDataType* type, index_t y, index_t x);
00096 
00097     virtual bool write_sgserializable_begin_wrapped(
00098         const TSGDataType* type, const char* sgserializable_name,
00099         EPrimitiveType generic);
00100     virtual bool write_sgserializable_end_wrapped(
00101         const TSGDataType* type, const char* sgserializable_name,
00102         EPrimitiveType generic);
00103 
00104     virtual bool write_type_begin_wrapped(
00105         const TSGDataType* type, const char* name,
00106         const char* prefix);
00107     virtual bool write_type_end_wrapped(
00108         const TSGDataType* type, const char* name,
00109         const char* prefix);
00110 
00111 public:
00113     explicit CSerializableXmlFile(void);
00114 
00121     explicit CSerializableXmlFile(const char* fname, char rw='r',
00122                                   bool format=false);
00123 
00125     virtual ~CSerializableXmlFile();
00126 
00128     inline virtual const char* get_name() const {
00129         return "SerializableXmlFile";
00130     }
00131 
00132     virtual void close(void);
00133     virtual bool is_opened(void);
00134 };
00135 }
00136 #endif /* HAVE_XML  */
00137 #endif /* __SERIALIZABLE_XML_FILE_H__  */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

SHOGUN Machine Learning Toolbox - Documentation