00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef DBCNV_DBGENERICCONVERTER_H
00012 #define DBCNV_DBGENERICCONVERTER_H
00013
00014
00015
00016 #include "GaudiKernel/DataObject.h"
00017 #include "DbCnvFactory.h"
00018 #include "DbBaseConverter.h"
00019
00044 class DbGenericConverter : public DbBaseConverter {
00046 friend CnvFactory<DbGenericConverter>;
00047 protected:
00049 DbGenericConverter(const CLID& clid, IOODataBase* db, ISvcLocator* svc);
00051 virtual ~DbGenericConverter();
00053 void clearBuffers(DefHandle& objH);
00055 virtual dbHandle<DbObject> createPersistent(dbHandle<DbContainer>& cntH);
00056
00058 virtual StatusCode beginPersistentUpdate( DefHandle& objH, const DataObject* pObject);
00060 virtual StatusCode endPersistentUpdate( DefHandle& objH, const DataObject* pObject);
00062 virtual StatusCode doPersistentUpdate( DefHandle& objH, const DataObject* pObject);
00063
00065 virtual StatusCode beginTransientUpdate( DefHandle& objH, DataObject* pObject);
00067 virtual StatusCode endTransientUpdate( DefHandle& objH, DataObject* pObject);
00069 virtual StatusCode doTransientUpdate( DefHandle& objH, DataObject* pObject);
00070 };
00071
00072 template <class T> class DbOOMsConverter : public DbGenericConverter {
00073 friend DbOOMsCnvFactory< DbOOMsConverter < T > >;
00074 public:
00075 DbOOMsConverter(IOODataBase* db, ISvcLocator* svc)
00076 : DbGenericConverter(classID(), db, svc)
00077 {
00078 }
00079 virtual ~DbOOMsConverter() {
00080 }
00081 virtual DataObject* createTransient() {
00082 return new T();
00083 }
00084 static const CLID& classID() {
00085 return T::classID();
00086 }
00087 };
00088
00089 template <> class DbOOMsConverter<DataObject> : public DbGenericConverter {
00090 friend DbOOMsCnvFactory< DbOOMsConverter < DataObject > >;
00091 public:
00092 DbOOMsConverter(IOODataBase* db, ISvcLocator* svc)
00093 : DbGenericConverter(classID(), db, svc)
00094 {
00095 }
00096 virtual ~DbOOMsConverter() {
00097 }
00098 virtual DataObject* createTransient() {
00099 return new DataObject();
00100 }
00101 static const CLID& classID() {
00102 return CLID_DataObject;
00103 }
00104 };
00105
00106
00116 #define _ImplementConverter( Transient ) \
00117 static DbOOMsCnvFactory< DbOOMsConverter < Transient > > s_##DBOOMs##Transient##factory; \
00118 const ICnvFactory& DbOOMs##Transient##CnvFactory = s_##DBOOMs##Transient##factory;
00119
00120 #define _ImplementNameSpaceConverter( NameSpace, Transient ) \
00121 static DbOOMsCnvFactory< DbOOMsConverter < NameSpace##::##Transient > > s_##DBOOMs##NameSpace##Transient##factory; \
00122 const ICnvFactory& DbOOMs##NameSpace##Transient##CnvFactory = s_##DBOOMs##NameSpace##Transient##factory;
00123
00124 #endif // DBCNV_DBGENERICCONVERTER_H