00001 #ifndef COND_TBUFFERBLOBSTREAMER_H 00002 #define COND_TBUFFERBLOBSTREAMER_H 00003 00004 #include <cstddef> 00005 #include "RelationalStorageService/IBlobStreamingService.h" 00006 #include "CoralBase/Blob.h" 00007 #include "Reflex/Type.h" 00008 #include "TClass.h" 00009 00010 namespace cond { 00011 class TBufferBlobTypeInfo 00012 { 00013 public: 00014 TBufferBlobTypeInfo( const ROOT::Reflex::Type& type ); 00015 00017 std::size_t m_arraySize; 00018 00020 TClass *m_class; 00021 00023 unsigned int m_primitive; 00024 }; 00025 00026 class TBufferBlobWriter : virtual public pool::IBlobWriter 00027 { 00028 public: 00030 explicit TBufferBlobWriter( const ROOT::Reflex::Type& type ); 00031 00033 virtual ~TBufferBlobWriter(); 00034 00036 const coral::Blob& write( const void* addressOfInputData ); 00037 00038 private: 00040 TBufferBlobTypeInfo m_type; 00041 00043 coral::Blob m_blob; 00044 }; 00045 00046 00047 class TBufferBlobReader : virtual public pool::IBlobReader 00048 { 00049 public: 00051 TBufferBlobReader( const ROOT::Reflex::Type& type ); 00052 00054 virtual ~TBufferBlobReader(); 00055 00057 void read( const coral::Blob& blobData, 00058 void* containerAddress ) const; 00059 00060 private: 00062 TBufferBlobTypeInfo m_type; 00063 }; 00064 00065 } 00066 00067 #endif // COND_TBUFFERBLOBSTREAMER_H