Gaudi Framework, version v23r2

Home   Generated: Thu Jun 28 2012

PersistencySvc.h

Go to the documentation of this file.
00001 //      ============================================================
00002 //
00003 //      PersistencySvc.h
00004 //      ------------------------------------------------------------
00005 //
00006 //      Package   : PersistencySvc
00007 //
00008 //      Author    : Markus Frank
00009 //
00010 //      ===========================================================
00011 #ifndef PERSISTENCYSVC_PERSISTENCYSVC_H
00012 #define PERSISTENCYSVC_PERSISTENCYSVC_H 1
00013 
00014 // Framework include files
00015 #include "GaudiKernel/Service.h"
00016 #include "GaudiKernel/IConversionSvc.h"
00017 #include "GaudiKernel/IPersistencySvc.h"
00018 #include "GaudiKernel/IAddressCreator.h"
00019 
00020 // STL include files
00021 #include <map>
00022 #include <algorithm>
00023 #include <functional>
00024 
00025 // Forward declarations
00026 template <class TYPE> class SvcFactory;
00027 namespace { template <class P, class S> class Factory; }
00028 
00053 class PersistencySvc  : public extends3<Service,
00054                                         IConversionSvc,
00055                                         IPersistencySvc,
00056                                         IAddressCreator> {
00057 protected:
00058   friend class SvcFactory<PersistencySvc>;
00059   friend class Factory<PersistencySvc,IService* (std::string,ISvcLocator *)>;
00060 
00061   class ServiceEntry {
00062     long             m_serviceType;
00063     mutable SmartIF<IService>        m_service;
00064     mutable SmartIF<IConversionSvc>  m_cnvService;
00065     mutable SmartIF<IAddressCreator> m_addrCreator;
00066   public:
00067     ServiceEntry( long type,
00068         SmartIF<IService>& svc,
00069         SmartIF<IConversionSvc>& cnv,
00070         SmartIF<IAddressCreator>& cr)  {
00071       m_serviceType  = type;
00072       m_addrCreator  = cr;
00073       m_cnvService   = cnv;
00074       m_service      = svc;
00075     }
00076     ServiceEntry( long type,
00077         IService* svc,
00078         IConversionSvc* cnv,
00079         IAddressCreator* cr)  {
00080       m_serviceType  = type;
00081       m_addrCreator  = cr;
00082       m_cnvService   = cnv;
00083       m_service      = svc;
00084     }
00085     ServiceEntry(const ServiceEntry& copy)  {
00086       m_serviceType  = copy.m_serviceType;
00087       m_addrCreator  = copy.m_addrCreator;
00088       m_cnvService   = copy.m_cnvService;
00089       m_service      = copy.m_service;
00090     }
00091     virtual ~ServiceEntry()  {
00092     }
00093     SmartIF<IService>&           service()   const   {
00094       return m_service;
00095     }
00096     SmartIF<IConversionSvc>&     conversionSvc()  const    {
00097       return m_cnvService;
00098     }
00099     SmartIF<IAddressCreator>&    addrCreator()  const    {
00100       return m_addrCreator;
00101     }
00102     long svcType()  const {
00103       return m_serviceType;
00104     }
00105   };
00106   typedef std::map<long,ServiceEntry> Services;
00107 /*
00108   class SvcTest : public std::unary_function<ServiceEntry, bool>   {
00109   public:
00110     SvcTest(long test) : m_test(test)    {
00111     }
00112     virtual ~SvcTest()    {
00113     }
00114     bool operator()( const ServiceEntry& testee )  {
00115         return m_test == testee.svcType() ? true : false;
00116     }
00117   protected:
00118        long m_test;
00119   };
00120 */
00121 public:
00122 
00125 
00126   long repSvcType() const;
00127 
00129   const CLID& objType() const;
00130 
00132   virtual StatusCode createObj(IOpaqueAddress* pAddress,DataObject*& refpObject);
00133 
00135   virtual StatusCode fillObjRefs(IOpaqueAddress* pAddress, DataObject* pObject);
00136 
00138   virtual StatusCode updateObj(IOpaqueAddress* pAddress, DataObject* refpObject);
00139 
00141   virtual StatusCode updateObjRefs(IOpaqueAddress* pAddress, DataObject* pObject);
00142 
00144   virtual StatusCode createRep(DataObject* pObject, IOpaqueAddress*& refpAddress);
00145 
00147   virtual StatusCode fillRepRefs(IOpaqueAddress* pAddress,DataObject* pObject);
00148 
00150   virtual StatusCode updateRep(IOpaqueAddress* pAddress, DataObject* pObject);
00151 
00153   virtual StatusCode updateRepRefs(IOpaqueAddress* pAddress, DataObject* pObject);
00154 
00156   virtual StatusCode setDataProvider(IDataProviderSvc* pStore);
00157 
00159   virtual SmartIF<IDataProviderSvc>& dataProvider()    const;
00160 
00162   virtual StatusCode setConversionSvc(IConversionSvc* svc);
00163 
00165   virtual SmartIF<IConversionSvc>& conversionSvc()    const;
00166 
00168   virtual StatusCode setAddressCreator(IAddressCreator* creator);
00169 
00171   virtual SmartIF<IAddressCreator>& addressCreator()   const;
00172 
00174   virtual StatusCode addConverter(IConverter* pConverter);
00175 
00177   virtual StatusCode addConverter(const CLID& clid);
00178 
00180   virtual IConverter* converter(const CLID& clid);
00181 
00183   virtual StatusCode removeConverter(const CLID& clid);
00184 
00186   virtual StatusCode connectOutput(const std::string& outputFile,
00187                                    const std::string& openMode);
00189   virtual StatusCode connectOutput(const std::string& outputFile);
00190 
00192   virtual StatusCode commitOutput(const std::string& output, bool do_commit);
00193 
00195   virtual StatusCode createAddress(long svc_type,
00196                                    const CLID& clid,
00197                                    const std::string* pars,
00198                                    const unsigned long* ipars,
00199                                    IOpaqueAddress*& refpAddress);
00200 
00202   virtual StatusCode convertAddress( const IOpaqueAddress* pAddress,
00203                                      std::string& refAddress);
00204 
00206   virtual StatusCode createAddress( long svc_type,
00207                                     const CLID& clid,
00208                                     const std::string& refAddress,
00209                                     IOpaqueAddress*& refpAddress);
00211 
00214 
00215   virtual StatusCode addCnvService(IConversionSvc* service);
00216 
00218   virtual StatusCode removeCnvService(long type);
00219 
00221   virtual StatusCode setDefaultCnvService(long type);
00222 
00224   virtual StatusCode getService(long service_type, IConversionSvc*& refpSvc);
00225 
00227   virtual StatusCode getService(const std::string& service_type, IConversionSvc*& refpSvc);
00229 
00232 
00233   virtual StatusCode initialize();
00234 
00236   virtual StatusCode finalize();
00238 
00241 
00242   PersistencySvc(const std::string& name, ISvcLocator* svc);
00243 
00245   virtual ~PersistencySvc();
00246 protected:
00247 
00249   SmartIF<IConversionSvc>& service(const std::string& nam);
00250 
00252   SmartIF<IConversionSvc>& service(long service_type);
00253 
00255   SmartIF<IAddressCreator>& addressCreator(long service_type);
00256 
00258   void encodeAddrHdr(long service_type,
00259                      const CLID& clid,
00260                      std::string& address) const;
00261 
00263   void decodeAddrHdr(const std::string& address,
00264                      long& service_type,
00265                      CLID& clid,
00266                      std::string& address_trailer) const;
00267 
00268 
00270   StatusCode makeCall(int typ, IOpaqueAddress*& pAddress, DataObject*& pObject);
00271 
00273   bool enable(bool value);
00275 
00277   void svcNamesHandler( Property& theProp );
00278 
00280   long                m_cnvDefType;
00282   mutable SmartIF<IDataProviderSvc>   m_dataSvc;
00284   Services            m_cnvServices;
00286   mutable SmartIF<IConversionSvc>     m_cnvDefault;
00290   StringArrayProperty m_svcNames;
00292   bool                m_enable;
00293 
00295   mutable SmartIF<IAddressCreator> m_addrCreator;
00296 };
00297 #endif // PERSISTENCYSVC_PERSISTENCYSVC_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines

Generated at Thu Jun 28 2012 23:27:16 for Gaudi Framework, version v23r2 by Doxygen version 1.7.2 written by Dimitri van Heesch, © 1997-2004