CMS 3D CMS Logo

/data/git/CMSSW_5_3_11_patch5/src/CondCore/ORA/src/QueryableVectorStreamer.h

Go to the documentation of this file.
00001 #ifndef INCLUDE_ORA_QUERYABLEVECTORSTREAMER_H
00002 #define INCLUDE_ORA_QUERYABLEVECTORSTREAMER_H
00003 
00004 #include "PVectorStreamer.h"
00005 #include "DataElement.h"
00006 //
00007 #include <memory>
00008 #include <boost/shared_ptr.hpp>
00009 // externals
00010 #include "Reflex/Type.h"
00011 
00012 namespace ora {
00013 
00014   class MappingElement;
00015   class ContainerSchema;
00016   class IRelationalData;
00017   class IArrayHandler;
00018   class MultiRecordInsertOperation;
00019   class IVectorLoader;
00020   
00021   class QueryableVectorWriter: public IRelationalWriter {
00022     
00023     public:
00025       QueryableVectorWriter( const Reflex::Type& objectType, MappingElement& mapping, ContainerSchema& contSchema );
00026       virtual ~QueryableVectorWriter();
00027 
00028       bool build( DataElement& offset, IRelationalData& relationalData, RelationalBuffer& operationBuffer );
00029       void setRecordId( const std::vector<int>& identity );
00030       void write( int oid,const void* data );
00031     private:
00032       Reflex::Type m_objectType;
00033       DataElement* m_offset;
00034       DataElement m_localElement;
00035     private:  
00036       PVectorWriter m_writer;
00037   };
00038   
00039   class QueryableVectorUpdater : public IRelationalUpdater {
00040 
00041     public:
00042 
00044     QueryableVectorUpdater(const Reflex::Type& objectType, MappingElement& mapping, ContainerSchema& contSchema );
00045     virtual ~QueryableVectorUpdater();
00046 
00047     bool build( DataElement& offset, IRelationalData& relationalData, RelationalBuffer& operationBuffer);
00048     void setRecordId( const std::vector<int>& identity );
00049     void update( int oid,const void* data );
00050 
00051     private:
00052       Reflex::Type m_objectType;
00053       DataElement* m_offset;
00054       DataElement m_localElement;
00055     private:
00056     PVectorUpdater m_updater;
00057   };
00058 
00059   class QueryableVectorReader : public IRelationalReader {
00060 
00061     public:
00062     
00064     QueryableVectorReader(const Reflex::Type& objectType, MappingElement& mapping, ContainerSchema& contSchema );
00065 
00066     virtual ~QueryableVectorReader();
00067     
00068     bool build( DataElement& offset, IRelationalData& relationalData );
00069     void select( int oid );
00070     void setRecordId( const std::vector<int>& identity );
00071     void read( void* address );
00072     void clear();
00073 
00074     private:
00075     Reflex::Type m_objectType;
00076     MappingElement& m_mapping;
00077     ContainerSchema& m_schema;
00078     DataElement* m_dataElement;
00079     std::vector<boost::shared_ptr<IVectorLoader> > m_loaders;
00080     std::vector<int> m_tmpIds;
00081   };
00082 
00083   class QueryableVectorStreamer : public IRelationalStreamer 
00084   {
00085     public:
00086     QueryableVectorStreamer( const Reflex::Type& objectType, MappingElement& mapping, ContainerSchema& contSchema );
00087 
00088     ~QueryableVectorStreamer();
00089 
00090     IRelationalWriter* newWriter();
00091 
00092     IRelationalUpdater* newUpdater();
00093 
00094     IRelationalReader* newReader();
00095     
00096     private:
00097     Reflex::Type m_objectType;
00098     MappingElement& m_mapping;
00099     ContainerSchema& m_schema;
00100   }; 
00101 
00102   
00103 }
00104 
00105 #endif
00106 
00107