00001 //==================================================================== 00002 // DbContainer handle definitions 00003 //-------------------------------------------------------------------- 00004 // 00005 // Package : DbCnv ( The LHCb Offline System) 00006 // Author : M.Frank 00007 //==================================================================== 00008 #ifndef DBCNV_DBCONTAINER_H 00009 #define DBCNV_DBCONTAINER_H 00010 00011 // Forward declarations 00012 class ISelectStatement; 00013 class DbLink; 00014 class DbObject; 00015 class DbCursor; 00016 class DbDataBase; 00017 class DbContainer; 00018 class IDbContainer; 00019 class IDbCursor; 00020 template <class T> class dbHandle; 00021 typedef dbHandle<DbContainer> dbHandle_DbContainer; 00022 00023 // Framework include files 00024 #include "GaudiDb/DbBase.h" 00025 #include "GaudiDb/DbTypeInfo.h" 00026 00048 template <> class dbHandle<DbContainer> : public dbHandleBase<DbContainer> { 00049 public: 00050 // friend class declaration 00051 friend class DbContainer; 00052 friend class DbContainerImplementation; 00053 private: 00055 mutable std::string m_name; 00057 mutable DbAccessMode m_mode; 00058 private: 00060 dbHandle<DbContainer> (DbContainer* ptr); 00062 void switchPtr(DbContainer* obj) const; 00064 DbResult i_addEntry(const dbHandle<DbObject>& handle); 00066 DbResult i_updateEntry(const dbHandle<DbObject>& handle); 00068 IDbContainer* info() const; 00069 00070 public: 00072 dbHandle () 00073 : dbHandleBase<DbContainer>(), m_mode(DbOOMs::READ) { 00074 } 00076 dbHandle(unsigned char type) 00077 : dbHandleBase<DbContainer>(), m_mode(DbOOMs::READ) { 00078 m_type = type; 00079 } 00081 dbHandle(const dbHandle<DbContainer>& copy) 00082 : dbHandleBase<DbContainer>() { 00083 *this = copy; 00084 } 00086 virtual ~dbHandle() { 00087 switchPtr( 0 ); 00088 } 00090 dbHandle<DbContainer>& operator=(const dbHandle<DbContainer>& copy) { 00091 switchPtr( copy.m_ptr ); 00092 m_name = copy.m_name; 00093 m_mode = copy.m_mode; 00094 return *this; 00095 } 00097 const std::string& name() const { 00098 return m_name; 00099 } 00101 bool isValid() const { 00102 return 0 != m_ptr; 00103 } 00105 long addRef() const; 00107 long release() const; 00109 long size() const; 00111 DbAccessMode openMode() const; 00113 dbHandle<DbDataBase> containedIn() const; 00115 dbHandle<DbObject> find(const dbHandle<DbLink>& handle) const; 00117 DbResult remove(dbHandle<DbObject>& objH); 00119 template <class T> DbResult addEntry(const dbHandle<T>& objH) { 00120 return i_addEntry(objH); 00121 } 00123 template <class T> DbResult updateEntry(const dbHandle<T>& objH) { 00124 return i_updateEntry(objH); 00125 } 00127 DbResult select(ISelectStatement* sel) const; 00129 DbResult unselect() const; 00131 DbResult close() const; 00133 DbResult open(dbHandle<DbDataBase>& file, const std::string& name, const DbTypeInfo& info, DbAccessMode mode) const; 00135 DbResult open(dbHandle<DbDataBase>& file, const std::string& name) const; 00137 IDbCursor* makeCursor() const; 00139 IOODataBase* db(); 00141 const DbTypeInfo* typeInfo() const; 00143 IMessageSvc* msgSvc(); 00144 }; 00145 00146 #endif // DBCNV_DBCONTAINER_H
1.2.3 written by Dimitri van Heesch,
© 1997-2000