Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

DbContainerConverter.h

Go to the documentation of this file.
00001 //====================================================================
00002 //      DbContainerConverter definition
00003 //--------------------------------------------------------------------
00004 //
00005 //      Package    : System ( The LHCb Offline System)
00006 //
00007 //  Description: Generic Db data converter for container objects
00008 //
00009 //      Author     : M.Frank
00010 //====================================================================
00011 #ifndef DBCNV_DBCONTAINERCONVERTER_H
00012 #define DBCNV_DBCONTAINERCONVERTER_H
00013 // $Header: /nfs/slac/g/glast/ground/cvs/GaudiDb/GaudiDb/DbContainerConverter.h,v 1.1.1.1 2001/04/18 21:13:34 tlindner Exp $
00014 
00015 // Framework include files
00019 #include "GaudiKernel/IObjectFactory.h"
00020 #include "DbGenericConverter.h"
00021 
00022 // Forward declarations
00023 class IContainedObjectCreator;
00024 
00048 class DbContainerConverter : public DbGenericConverter     {
00050   friend CnvFactory<DbContainerConverter>;
00051 protected:
00053   void*   m_factories;
00055   DbContainerConverter(const CLID& clid, IOODataBase* db, ISvcLocator* svc);
00057   virtual ~DbContainerConverter();
00059   virtual StatusCode doTransientUpdate( dbHandle<DbDefObject>& objH, DataObject* pObject);
00061   virtual StatusCode doPersistentUpdate( dbHandle<DbDefObject>& objH, const DataObject* pObject);
00063   ContainedObject* createContained(const CLID& clid);
00065   IContainedObjectFactory* locateCreator(const CLID& clid);
00067   IContainedObjectFactory* objCreator(const CLID& clid);
00069   StatusCode checkObject( ContainedObject* pObj, const CLID& clid );
00070 };
00071 
00072 template <class T> class DbOOMsContainerConverter : public DbContainerConverter   {
00073   friend DbOOMsCnvFactory< DbOOMsContainerConverter < T > >;
00074 public:
00075   DbOOMsContainerConverter(IOODataBase* db, ISvcLocator* svc) 
00076     : DbContainerConverter(classID(), db, svc)
00077   {
00078   }
00079   virtual ~DbOOMsContainerConverter()    {
00080   }
00081   virtual DataObject* createTransient()  {
00082     return new T();
00083   }
00084   static const CLID& classID()    {
00085     return T::classID();
00086   }
00087 };
00088 
00098 #define _ImplementContainerConverters(Transient)                                  \
00099 /*  Declaration of the Db converter factory for ObjectVectors:*/                  \
00100 static DbOOMsCnvFactory<DbOOMsContainerConverter< ObjectVector < Transient > > >  \
00101   s_##DbOOMs##Transient##VectorFactory;                                           \
00102 const ICnvFactory& DbOOMs##Transient##VectorCnvFactory =                          \
00103   s_##DbOOMs##Transient##VectorFactory;                                           \
00104 /*  Declaration of the Db converter factory for ObjectLists:  */                  \
00105 static DbOOMsCnvFactory<DbOOMsContainerConverter< ObjectList < Transient > > >    \
00106   s_##DbOOMs##Transient##ListFactory;                                             \
00107 const ICnvFactory& DbOOMs##Transient##ListCnvFactory =                            \
00108   s_##DbOOMs##Transient##ListFactory;
00109 
00110 #define _ImplementNameSpaceContainerConverters(NameSpace,Transient)                             \
00111 /*  Declaration of the Db converter factory for ObjectVectors:*/                                \
00112 static DbOOMsCnvFactory<DbOOMsContainerConverter< ObjectVector < NameSpace::Transient > > > \
00113   s_##DbOOMs##NameSpace##Transient##VectorFactory;                                              \
00114 const ICnvFactory& DbOOMs##NameSpace##Transient##VectorCnvFactory =                             \
00115   s_##DbOOMs##NameSpace##Transient##VectorFactory;                                              \
00116 /*  Declaration of the Db converter factory for ObjectLists:  */                                \
00117 static DbOOMsCnvFactory<DbOOMsContainerConverter< ObjectList < NameSpace::Transient > > >   \
00118   s_##DbOOMs##NameSpace##Transient##ListFactory;                                                \
00119 const ICnvFactory& DbOOMs##NameSpace##Transient##ListCnvFactory =                               \
00120   s_##DbOOMs##NameSpace##Transient##ListFactory;
00121 
00122 #endif    // DBCNV_DBCONTAINERCONVERTER_H

Generated at Wed Nov 21 12:22:19 2001 by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000