MeVisLabToolboxReference
|
00001 //----------------------------------------------------------------------------- 00002 // **InsertLicense** code 00003 //----------------------------------------------------------------------------- 00005 00010 //----------------------------------------------------------------------------- 00011 00012 #ifndef CLASS_DCMTREE_SERIALIZATION 00013 #define CLASS_DCMTREE_SERIALIZATION 00014 00015 #include "DCMTree_Defines.h" 00016 #include "boost/cstdint.hpp" 00017 #include "boost/limits.hpp" 00018 #include <string> 00019 00020 namespace DCMTree_Serialization 00021 { 00026 enum TypeCode 00027 { 00029 TC_BOOL, 00031 TC_SIGNED_INT, 00033 TC_UNSIGNED_INT, 00035 TC_SIGNED_SHORT, 00037 TC_UNSIGNED_SHORT, 00039 TC_SIGNED_LONG, 00041 TC_UNSIGNED_LONG, 00043 TC_FLOAT, 00045 TC_DOUBLE, 00047 TC_STRING, 00049 TC_PAIR, 00051 TC_VECTOR, 00053 TC_MAP, 00055 TC_SET, 00057 TC_MULTIMAP, 00059 TC_ENUM, 00061 TC_OTHER, 00063 TC_SIGNED_LONG_LONG, 00065 TC_UNSIGNED_LONG_LONG, 00066 }; 00067 00069 class DCMTREE_EXPORT Sink { 00070 public: 00071 virtual ~Sink(){}; 00072 00076 void writeX(const std::string &value); 00077 00081 void writeTypeX(TypeCode tc) 00082 { 00083 boost::uint32_t c = static_cast<boost::uint32_t>(tc); 00084 writeX(&c, sizeof(boost::uint32_t)); 00085 } 00086 00088 virtual void writeX(const void *data, boost::uint32_t size) = 0; 00089 }; 00090 00092 class DCMTREE_EXPORT Source { 00093 public: 00094 virtual ~Source(){}; 00095 00096 void readX(std::string &value); 00097 00102 void readTypeX(TypeCode expected); 00103 00107 virtual void readX(void *data, boost::uint32_t size) = 0; 00108 00109 virtual void rewind()=0; 00110 }; 00111 00113 class DCMTREE_EXPORT Serializable { 00114 public: 00142 virtual void serializeX(Sink &sink) const = 0; 00143 00145 virtual ~Serializable(){} 00146 }; 00147 00149 class DCMTREE_EXPORT Deserializable { 00150 public: 00156 virtual void deserializeX(Source &source) = 0; 00157 00159 virtual ~Deserializable(){} 00160 }; 00161 00163 template<typename T> 00164 class SerializerIntf { 00165 public: 00166 virtual ~SerializerIntf(){} 00167 00172 virtual void serializeX(Sink &sink, const T &value) = 0; 00173 }; 00174 00176 template<typename T> 00177 class DeserializerIntf { 00178 public: 00179 virtual ~DeserializerIntf(){} 00180 00185 virtual T deserializeX(Source &source) = 0; 00186 }; 00187 } 00188 00189 #endif 00190 00191