MeVisLabToolboxReference
MeVis/Foundation/Sources/DicomTree/MLDicomTree/DCMTree_Serialization.h
Go to the documentation of this file.
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