SerializableFile.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) 1999-2009 Soeren Sonnenburg
00008  * Copyright (C) 1999-2009 Fraunhofer Institute FIRST and Max-Planck-Society
00009  * Copyright (C) 2010 Berlin Institute of Technology
00010  */
00011 
00012 #ifndef __SERIALIZABLE_FILE_H__
00013 #define __SERIALIZABLE_FILE_H__
00014 
00015 #include <stdio.h>
00016 #include <shogun/base/SGObject.h>
00017 #include <shogun/lib/DataType.h>
00018 #include <shogun/lib/SGSparseVector.h>
00019 
00020 namespace shogun
00021 {
00022     class CSGObject;
00023 
00025 class CSerializableFile :public CSGObject
00026 {
00027 public:
00029     struct TSerializableReader :public CSGObject {
00030 
00031         /* ******************************************************** */
00032         /* Begin of abstract write methods  */
00033 
00034 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00035         virtual bool read_scalar_wrapped(
00036             const TSGDataType* type, void* param) = 0;
00037 
00038         virtual bool read_cont_begin_wrapped(
00039             const TSGDataType* type, index_t* len_read_y,
00040             index_t* len_read_x) = 0;
00041         virtual bool read_cont_end_wrapped(
00042             const TSGDataType* type, index_t len_read_y,
00043             index_t len_read_x) = 0;
00044 
00045         virtual bool read_string_begin_wrapped(
00046             const TSGDataType* type, index_t* length) = 0;
00047         virtual bool read_string_end_wrapped(
00048             const TSGDataType* type, index_t length) = 0;
00049 
00050         virtual bool read_stringentry_begin_wrapped(
00051             const TSGDataType* type, index_t y) = 0;
00052         virtual bool read_stringentry_end_wrapped(
00053             const TSGDataType* type, index_t y) = 0;
00054 
00055         virtual bool read_sparse_begin_wrapped(
00056             const TSGDataType* type, index_t* length) = 0;
00057         virtual bool read_sparse_end_wrapped(
00058             const TSGDataType* type, index_t length) = 0;
00059 
00060         virtual bool read_sparseentry_begin_wrapped(
00061             const TSGDataType* type, SGSparseVectorEntry<char>* first_entry,
00062             index_t* feat_index, index_t y) = 0;
00063         virtual bool read_sparseentry_end_wrapped(
00064             const TSGDataType* type, SGSparseVectorEntry<char>* first_entry,
00065             index_t* feat_index, index_t y) = 0;
00066 
00067         virtual bool read_item_begin_wrapped(
00068             const TSGDataType* type, index_t y, index_t x) = 0;
00069         virtual bool read_item_end_wrapped(
00070             const TSGDataType* type, index_t y, index_t x) = 0;
00071 
00072         virtual bool read_sgserializable_begin_wrapped(
00073             const TSGDataType* type, char* sgserializable_name,
00074             EPrimitiveType* generic) = 0;
00075         virtual bool read_sgserializable_end_wrapped(
00076             const TSGDataType* type, const char* sgserializable_name,
00077             EPrimitiveType generic) = 0;
00078 
00079         virtual bool read_type_begin_wrapped(
00080             const TSGDataType* type, const char* name,
00081             const char* prefix) = 0;
00082         virtual bool read_type_end_wrapped(
00083             const TSGDataType* type, const char* name,
00084             const char* prefix) = 0;
00085 
00086 #endif
00087         /* End of abstract write methods  */
00088         /* ******************************************************** */
00089 
00090     }; /* struct TSerializableReader  */
00091 /* public:  */
00092 private:
00094     TSerializableReader* m_reader;
00095 
00096     bool is_task_warn(char rw, const char* name, const char* prefix);
00097     bool false_warn(const char* prefix, const char* name);
00098 
00099 protected:
00101     FILE* m_fstream;
00103     char m_task;
00105     char* m_filename;
00106 
00112     virtual void init(FILE* fstream, char task, const char* filename);
00113 
00114     /* ************************************************************ */
00115     /* Begin of abstract write methods  */
00116 
00117 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00118     virtual TSerializableReader* new_reader(
00119         char* dest_version, size_t n) = 0;
00120 
00121     virtual bool write_scalar_wrapped(
00122         const TSGDataType* type, const void* param) = 0;
00123 
00124     virtual bool write_cont_begin_wrapped(
00125         const TSGDataType* type, index_t len_real_y,
00126         index_t len_real_x) = 0;
00127     virtual bool write_cont_end_wrapped(
00128         const TSGDataType* type, index_t len_real_y,
00129         index_t len_real_x) = 0;
00130 
00131     virtual bool write_string_begin_wrapped(
00132         const TSGDataType* type, index_t length) = 0;
00133     virtual bool write_string_end_wrapped(
00134         const TSGDataType* type, index_t length) = 0;
00135 
00136     virtual bool write_stringentry_begin_wrapped(
00137         const TSGDataType* type, index_t y) = 0;
00138     virtual bool write_stringentry_end_wrapped(
00139         const TSGDataType* type, index_t y) = 0;
00140 
00141     virtual bool write_sparse_begin_wrapped(
00142         const TSGDataType* type, index_t length) = 0;
00143     virtual bool write_sparse_end_wrapped(
00144         const TSGDataType* type, index_t length) = 0;
00145 
00146     virtual bool write_sparseentry_begin_wrapped(
00147         const TSGDataType* type, const SGSparseVectorEntry<char>* first_entry,
00148         index_t feat_index, index_t y) = 0;
00149     virtual bool write_sparseentry_end_wrapped(
00150         const TSGDataType* type, const SGSparseVectorEntry<char>* first_entry,
00151         index_t feat_index, index_t y) = 0;
00152 
00153     virtual bool write_item_begin_wrapped(
00154         const TSGDataType* type, index_t y, index_t x) = 0;
00155     virtual bool write_item_end_wrapped(
00156         const TSGDataType* type, index_t y, index_t x) = 0;
00157 
00158     virtual bool write_sgserializable_begin_wrapped(
00159         const TSGDataType* type, const char* sgserializable_name,
00160         EPrimitiveType generic) = 0;
00161     virtual bool write_sgserializable_end_wrapped(
00162         const TSGDataType* type, const char* sgserializable_name,
00163         EPrimitiveType generic) = 0;
00164 
00165     virtual bool write_type_begin_wrapped(
00166         const TSGDataType* type, const char* name,
00167         const char* prefix) = 0;
00168     virtual bool write_type_end_wrapped(
00169         const TSGDataType* type, const char* name,
00170         const char* prefix) = 0;
00171 #endif
00172 
00173     /* End of abstract write methods  */
00174     /* ************************************************************ */
00175 
00176 public:
00178     explicit CSerializableFile();
00179 
00185     explicit CSerializableFile(FILE* fstream, char rw);
00186 
00192     explicit CSerializableFile(const char* fname, char rw='r');
00193 
00195     virtual ~CSerializableFile();
00196 
00198     virtual void close();
00199 
00201     virtual bool is_opened();
00202 
00203     /* ************************************************************ */
00204     /* Begin of public wrappers  */
00205 
00206 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00207     virtual bool write_scalar(
00208         const TSGDataType* type, const char* name, const char* prefix,
00209         const void* param);
00210     virtual bool read_scalar(
00211         const TSGDataType* type, const char* name, const char* prefix,
00212         void* param);
00213 
00214     virtual bool write_cont_begin(
00215         const TSGDataType* type, const char* name, const char* prefix,
00216         index_t len_real_y, index_t len_real_x);
00217     virtual bool read_cont_begin(
00218         const TSGDataType* type, const char* name, const char* prefix,
00219         index_t* len_read_y, index_t* len_read_x);
00220 
00221     virtual bool write_cont_end(
00222         const TSGDataType* type, const char* name, const char* prefix,
00223         index_t len_real_y, index_t len_real_x);
00224     virtual bool read_cont_end(
00225         const TSGDataType* type, const char* name, const char* prefix,
00226         index_t len_read_y, index_t len_read_x);
00227 
00228     virtual bool write_string_begin(
00229         const TSGDataType* type, const char* name, const char* prefix,
00230         index_t length);
00231     virtual bool read_string_begin(
00232         const TSGDataType* type, const char* name, const char* prefix,
00233         index_t* length);
00234 
00235     virtual bool write_string_end(
00236         const TSGDataType* type, const char* name, const char* prefix,
00237         index_t length);
00238     virtual bool read_string_end(
00239         const TSGDataType* type, const char* name, const char* prefix,
00240         index_t length);
00241 
00242     virtual bool write_stringentry_begin(
00243         const TSGDataType* type, const char* name, const char* prefix,
00244         index_t y);
00245     virtual bool read_stringentry_begin(
00246         const TSGDataType* type, const char* name, const char* prefix,
00247         index_t y);
00248 
00249     virtual bool write_stringentry_end(
00250         const TSGDataType* type, const char* name, const char* prefix,
00251         index_t y);
00252     virtual bool read_stringentry_end(
00253         const TSGDataType* type, const char* name, const char* prefix,
00254         index_t y);
00255 
00256     virtual bool write_sparse_begin(
00257         const TSGDataType* type, const char* name, const char* prefix,
00258         index_t length);
00259     virtual bool read_sparse_begin(
00260         const TSGDataType* type, const char* name, const char* prefix,
00261          index_t* length);
00262 
00263     virtual bool write_sparse_end(
00264         const TSGDataType* type, const char* name, const char* prefix,
00265         index_t length);
00266     virtual bool read_sparse_end(
00267         const TSGDataType* type, const char* name, const char* prefix,
00268          index_t length);
00269 
00270     virtual bool write_sparseentry_begin(
00271         const TSGDataType* type, const char* name, const char* prefix,
00272         const SGSparseVectorEntry<char>* first_entry, index_t feat_index,
00273         index_t y);
00274     virtual bool read_sparseentry_begin(
00275         const TSGDataType* type, const char* name, const char* prefix,
00276         SGSparseVectorEntry<char>* first_entry, index_t* feat_index,
00277         index_t y);
00278 
00279     virtual bool write_sparseentry_end(
00280         const TSGDataType* type, const char* name, const char* prefix,
00281         const SGSparseVectorEntry<char>* first_entry, index_t feat_index,
00282         index_t y);
00283     virtual bool read_sparseentry_end(
00284         const TSGDataType* type, const char* name, const char* prefix,
00285         SGSparseVectorEntry<char>* first_entry, index_t* feat_index,
00286         index_t y);
00287 
00288     virtual bool write_item_begin(
00289         const TSGDataType* type, const char* name, const char* prefix,
00290         index_t y, index_t x);
00291     virtual bool read_item_begin(
00292         const TSGDataType* type, const char* name, const char* prefix,
00293         index_t y, index_t x);
00294 
00295     virtual bool write_item_end(
00296         const TSGDataType* type, const char* name, const char* prefix,
00297         index_t y, index_t x);
00298     virtual bool read_item_end(
00299         const TSGDataType* type, const char* name, const char* prefix,
00300         index_t y, index_t x);
00301 
00302     virtual bool write_sgserializable_begin(
00303         const TSGDataType* type, const char* name, const char* prefix,
00304         const char* sgserializable_name, EPrimitiveType generic);
00305     virtual bool read_sgserializable_begin(
00306         const TSGDataType* type, const char* name, const char* prefix,
00307         char* sgserializable_name, EPrimitiveType* generic);
00308 
00309     virtual bool write_sgserializable_end(
00310         const TSGDataType* type, const char* name, const char* prefix,
00311         const char* sgserializable_name, EPrimitiveType generic);
00312     virtual bool read_sgserializable_end(
00313         const TSGDataType* type, const char* name, const char* prefix,
00314         const char* sgserializable_name, EPrimitiveType generic);
00315 
00316     virtual bool write_type_begin(
00317         const TSGDataType* type, const char* name, const char* prefix);
00318     virtual bool read_type_begin(
00319         const TSGDataType* type, const char* name, const char* prefix);
00320 
00321     virtual bool write_type_end(
00322         const TSGDataType* type, const char* name, const char* prefix);
00323     virtual bool read_type_end(
00324         const TSGDataType* type, const char* name, const char* prefix);
00325 #endif
00326     /* End of public wrappers  */
00327     /* ************************************************************ */
00328 };
00329 }
00330 #endif // __SERIALIZABLE_FILE_H__
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

SHOGUN Machine Learning Toolbox - Documentation