Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework  v31r0 (aeb156f0)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
PersistencySvc.h
Go to the documentation of this file.
1 // ============================================================
2 //
3 // PersistencySvc.h
4 // ------------------------------------------------------------
5 //
6 // Package : PersistencySvc
7 //
8 // Author : Markus Frank
9 //
10 // ===========================================================
11 #ifndef PERSISTENCYSVC_PERSISTENCYSVC_H
12 #define PERSISTENCYSVC_PERSISTENCYSVC_H 1
13 
14 // Framework include files
19 #include "GaudiKernel/Service.h"
20 
21 // STL include files
22 #include <algorithm>
23 #include <functional>
24 #include <map>
25 
50 class PersistencySvc : public extends<Service, IConversionSvc, IPersistencySvc, IAddressCreator> {
51 protected:
52  class ServiceEntry final {
57 
58  public:
60  : m_serviceType( type )
61  , m_service( std::move( svc ) )
62  , m_cnvService( std::move( cnv ) )
63  , m_addrCreator( std::move( cr ) ) {}
65  m_serviceType = type;
66  m_addrCreator = cr;
67  m_cnvService = cnv;
68  m_service = svc;
69  }
70  ServiceEntry( const ServiceEntry& ) = default;
71 
72  SmartIF<IService>& service() const { return m_service; }
75  long svcType() const { return m_serviceType; }
76  };
78  /*
79  class SvcTest final {
80  public:
81  SvcTest(long test) : m_test(test) {
82  }
83  bool operator()( const ServiceEntry& testee ) const {
84  return m_test == testee.svcType();
85  }
86  private:
87  long m_test;
88  };
89  */
90 public:
93  long repSvcType() const override;
95 
97  const CLID& objType() const override;
98 
100  StatusCode createObj( IOpaqueAddress* pAddress, DataObject*& refpObject ) override;
101 
103  StatusCode fillObjRefs( IOpaqueAddress* pAddress, DataObject* pObject ) override;
104 
106  StatusCode updateObj( IOpaqueAddress* pAddress, DataObject* refpObject ) override;
107 
109  StatusCode updateObjRefs( IOpaqueAddress* pAddress, DataObject* pObject ) override;
110 
112  StatusCode createRep( DataObject* pObject, IOpaqueAddress*& refpAddress ) override;
113 
115  StatusCode fillRepRefs( IOpaqueAddress* pAddress, DataObject* pObject ) override;
116 
118  StatusCode updateRep( IOpaqueAddress* pAddress, DataObject* pObject ) override;
119 
121  StatusCode updateRepRefs( IOpaqueAddress* pAddress, DataObject* pObject ) override;
122 
124  StatusCode setDataProvider( IDataProviderSvc* pStore ) override;
125 
127  SmartIF<IDataProviderSvc>& dataProvider() const override;
128 
130  StatusCode setConversionSvc( IConversionSvc* svc ) override;
131 
133  SmartIF<IConversionSvc>& conversionSvc() const override;
134 
136  StatusCode setAddressCreator( IAddressCreator* creator ) override;
137 
139  SmartIF<IAddressCreator>& addressCreator() const override;
140 
142  StatusCode addConverter( IConverter* pConverter ) override;
143 
145  StatusCode addConverter( const CLID& clid ) override;
146 
148  IConverter* converter( const CLID& clid ) override;
149 
151  StatusCode removeConverter( const CLID& clid ) override;
152 
154  StatusCode connectOutput( const std::string& outputFile, const std::string& openMode ) override;
156  StatusCode connectOutput( const std::string& outputFile ) override;
157 
159  StatusCode commitOutput( const std::string& output, bool do_commit ) override;
160 
162  StatusCode createAddress( long svc_type, const CLID& clid, const std::string* pars, const unsigned long* ipars,
163  IOpaqueAddress*& refpAddress ) override;
164 
166  StatusCode convertAddress( const IOpaqueAddress* pAddress, std::string& refAddress ) override;
167 
169  StatusCode createAddress( long svc_type, const CLID& clid, const std::string& refAddress,
170  IOpaqueAddress*& refpAddress ) override;
172 
177 
179  StatusCode removeCnvService( long type ) override;
180 
182  StatusCode setDefaultCnvService( long type ) override;
183 
185  StatusCode getService( long service_type, IConversionSvc*& refpSvc ) override;
186 
188  StatusCode getService( const std::string& service_type, IConversionSvc*& refpSvc ) override;
190 
193  StatusCode initialize() override;
195 
197  StatusCode finalize() override;
199 
202  using extends::extends;
204 
205 protected:
208 
210  SmartIF<IConversionSvc>& service( long service_type );
211 
213  SmartIF<IAddressCreator>& addressCreator( long service_type );
214 
216  void encodeAddrHdr( long service_type, const CLID& clid, std::string& address ) const;
217 
219  void decodeAddrHdr( const std::string& address, long& service_type, CLID& clid, std::string& address_trailer ) const;
220 
222  StatusCode makeCall( int typ, IOpaqueAddress*& pAddress, DataObject*& pObject );
223 
225  bool enable( bool value );
227 
233  Services m_cnvServices;
236 
238  this,
239  "CnvServices",
240  {},
241  [this]( auto& p ) {
242  if ( this->msgLevel( MSG::DEBUG ) ) this->debug() << p << endmsg;
243  },
244  "Names of services to be requested from the service locator and added by default"};
245 
247  bool m_enable = true;
248 
251 };
252 #endif // PERSISTENCYSVC_PERSISTENCYSVC_H
SmartIF< IAddressCreator > m_addrCreator
Pointer to the IAddressCreator interface of this, for addressCreator().
long svcType() const
const long TEST_StorageType
Definition: ClassID.h:49
SmartIF< IConversionSvc > & conversionSvc() const
SmartIF< IAddressCreator > & addressCreator() const override
Retrieve address creator facility.
SmartIF< IAddressCreator > & addrCreator() const
The data converters are responsible to translate data from one representation into another...
Definition: IConverter.h:58
long m_cnvDefType
Default service type.
StatusCode initialize() override
Initialize the service.
Implementation of property with value of concrete type.
Definition: Property.h:352
StatusCode connectOutput(const std::string &outputFile, const std::string &openMode) override
Connect the output file to the service with open mode.
Gaudi::Property< std::vector< std::string > > m_svcNames
SmartIF< IService > & service() const
IAddressCreator interface definition.
bool m_enable
Flag to indicate that the service is enabled.
StatusCode setConversionSvc(IConversionSvc *svc) override
Set conversion service the converter is connected to.
STL namespace.
StatusCode makeCall(int typ, IOpaqueAddress *&pAddress, DataObject *&pObject)
Implementation helper.
SmartIF< IService > m_service
Data provider interface definition.
StatusCode removeConverter(const CLID &clid) override
Remove converter object from conversion service (if present).
StatusCode updateRep(IOpaqueAddress *pAddress, DataObject *pObject) override
Implementation of IConverter: Update the converted representation of a transient object.
StatusCode updateObjRefs(IOpaqueAddress *pAddress, DataObject *pObject) override
Implementation of IConverter: Update the references of an updated transient object.
StatusCode addConverter(IConverter *pConverter) override
Add converter object to conversion service.
StatusCode convertAddress(const IOpaqueAddress *pAddress, std::string &refAddress) override
Convert an address to string form.
STL class.
StatusCode fillObjRefs(IOpaqueAddress *pAddress, DataObject *pObject) override
Implementation of IConverter: Resolve the references of the created transient object.
bool enable(bool value)
Set enabled flag.
StatusCode setDataProvider(IDataProviderSvc *pStore) override
Define transient datastore.
void encodeAddrHdr(long service_type, const CLID &clid, std::string &address) const
Retrieve string from storage type and clid.
General service interface definition.
Definition: IService.h:18
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
StatusCode createRep(DataObject *pObject, IOpaqueAddress *&refpAddress) override
Implementation of IConverter: Convert the transient object to the requested representation.
StatusCode finalize() override
stop the service.
StatusCode getService(long service_type, IConversionSvc *&refpSvc) override
Retrieve conversion service identified by technology.
ServiceEntry(long type, IService *svc, IConversionSvc *cnv, IAddressCreator *cr)
ServiceEntry(long type, SmartIF< IService > svc, SmartIF< IConversionSvc > cnv, SmartIF< IAddressCreator > cr)
SmartIF< IConversionSvc > m_cnvDefault
Default output service.
StatusCode commitOutput(const std::string &output, bool do_commit) override
Commit pending output.
PersistencySvc class implementation definition.
StatusCode fillRepRefs(IOpaqueAddress *pAddress, DataObject *pObject) override
Implementation of IConverter: Resolve the references of the converted object.
SmartIF< IDataProviderSvc > & dataProvider() const override
Access reference to transient datastore.
SmartIF< IConversionSvc > m_cnvService
unsigned int CLID
Class ID definition.
Definition: ClassID.h:8
StatusCode addCnvService(IConversionSvc *service) override
Add a new Service.
StatusCode removeCnvService(long type) override
Remove a Service.
StatusCode updateObj(IOpaqueAddress *pAddress, DataObject *refpObject) override
Implementation of IConverter: Update the transient object from the other representation.
StatusCode createAddress(long svc_type, const CLID &clid, const std::string *pars, const unsigned long *ipars, IOpaqueAddress *&refpAddress) override
Create a Generic address using explicit arguments to identify a single object.
std::map< long, ServiceEntry > Services
long m_serviceType
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Base class used to extend a class implementing other interfaces.
Definition: extends.h:10
StatusCode createObj(IOpaqueAddress *pAddress, DataObject *&refpObject) override
Implementation of IConverter: Create the transient representation of an object.
Services m_cnvServices
List of convermsion workers.
StatusCode setAddressCreator(IAddressCreator *creator) override
Set address creator facility.
void decodeAddrHdr(const std::string &address, long &service_type, CLID &clid, std::string &address_trailer) const
Retrieve storage type and clid from address header of string.
SmartIF< IAddressCreator > m_addrCreator
Opaque address interface definition.
StatusCode setDefaultCnvService(long type) override
Set default service type.
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
const CLID & objType() const override
Retrieve the class type of objects the converter produces. (DUMMY)
StatusCode updateRepRefs(IOpaqueAddress *pAddress, DataObject *pObject) override
Implementation of IConverter: Update the references of an already converted object.
long repSvcType() const override
Return default service type.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
SmartIF< IDataProviderSvc > m_dataSvc
Pointer to datma provider service.
IConverter * converter(const CLID &clid) override
Retrieve converter from list.
MSG::Level msgLevel() const
get the cached level (originally extracted from the embedded MsgStream)