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

DbPersistent.cpp

Go to the documentation of this file.
00001 //====================================================================
00002 //      DbPersistent implementation
00003 //--------------------------------------------------------------------
00004 //
00005 //      Package    : DbCnv ( The LHCb Offline System)
00006 //
00007 //  Description: Generic data persistency
00008 //
00009 //      Author     : M.Frank
00010 //  History    :
00011 // +---------+----------------------------------------------+---------
00012 // |    Date |                 Comment                      | Who     
00013 // +---------+----------------------------------------------+---------
00014 // | 11/07/99| Initial version                              | MF
00015 // +---------+----------------------------------------------+---------
00016 //====================================================================
00017 #define DBCNV_DVPERSISTENT_CPP
00018 
00019 #include "GaudiDb/DbLink.h"
00020 #include "GaudiDb/DbPersistent.h"
00021 #include "GaudiDb/DbContainer.h"
00022 #include "GaudiDb/DbObjectGuard.h"
00023 
00024 void DbPersistent::release()    {
00025   delete this;
00026 }
00027 
00028 DbPersistentGuard* DbPersistent::createGuard()   {
00029   return new DbObjectGuard();
00030 }
00031 
00032 void* DbPersistent::allocate ( const dbHandle<DbContainer>& cntH, const DbTypeInfo& type )   {
00033   if ( cntH.isValid() )   {
00034     DbPersistent* persistent = type.create(cntH);
00035     void* transient          = type.allocate();
00036     DbObjectGuard* guard     = new DbObjectGuard(type.type(), persistent, cntH);
00037     DbPersistent::setGuard( (DbObject*)transient, guard );
00038     return transient;
00039   }
00040   return 0;
00041 }
00042 
00043 DbObject* DbPersistent::create (const DbTypeInfo* type, DbPersistent* persistent, const dbHandle<DbContainer>& cntH)    {
00044   void* transient        = type->allocate();
00045   DbObject* pObj         = type->construct(transient);
00046   DbObjectGuard* guard   = new DbObjectGuard(type->type(), persistent, cntH);
00047   DbPersistent::setGuard( pObj, guard );
00048   return pObj;
00049 }
00050 
00051 DbObject* DbPersistent::load (DbPersistent* persistent, const dbHandle<DbContainer>& cntH)    {
00052   const DbTypeInfo* type = persistent->typeInfo();
00053   DbObject* pObj = create(type, persistent, cntH);
00054   persistent->load(pObj);
00055   return pObj;
00056 }
00057 
00058 bool DbPersistent::load(DbObject* pObj)   {
00059   // Stream here all data items of obj!
00060   DbPersistentGuard* g = DbPersistent::guard(pObj);
00061   // Read/Write object buffer
00062   if ( getBuffer(0, g->objectSize(), g->objBuffer()) )    {
00063     // Read/Write link buffer
00064     if ( getBuffer(g->objectSize(), g->size()-g->objectSize(), g->linkBuffer()) )    {
00065       return true;
00066     }
00067   }
00068   return false;
00069 }
00070 
00071 bool DbPersistent::save(const DbObject* pObj)   {
00072   // Stream here all data items of obj!
00073   const DbPersistentGuard* g = DbPersistent::guard(pObj);
00074   long linkSize = g->linkBuffer().buffPointer();
00075   long objSize  = g->objBuffer().buffPointer();
00076   // Read/Write object buffer
00077   if ( setBuffer(0, objSize, g->objBuffer()) )    {
00078     // Read/Write link buffer
00079     if ( setBuffer(objSize, linkSize, g->linkBuffer()) )    {
00080       return true;
00081     }
00082   }
00083   return false;
00084 }

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