Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework  v31r0 (aeb156f0)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
ConversionSvc.h
Go to the documentation of this file.
1 #ifndef GAUDIKERNEL_CONVERSIONSVC_H
2 #define GAUDIKERNEL_CONVERSIONSVC_H 1
3 
4 // Include files
8 #include "GaudiKernel/Kernel.h"
9 #include "GaudiKernel/Service.h"
10 #include <algorithm>
11 #include <utility>
12 #include <vector>
13 
45 class GAUDI_API ConversionSvc : public extends<Service, IConversionSvc, IAddressCreator> {
46  class WorkerEntry final {
49 
50  public:
51  WorkerEntry( const CLID& cl, IConverter* cnv ) : m_class( cl ), m_converter( cnv ) {
52  if ( m_converter ) m_converter->addRef();
53  }
54 
56  if ( m_converter ) m_converter->release();
57  }
58 
59  WorkerEntry( WorkerEntry&& orig ) noexcept
60  : m_class{orig.m_class}, m_converter{std::exchange( orig.m_converter, nullptr )} {}
61 
62  WorkerEntry& operator=( WorkerEntry&& orig ) noexcept {
63  m_class = orig.m_class;
64  std::swap( m_converter, orig.m_converter );
65  return *this;
66  }
67 
68  WorkerEntry( const WorkerEntry& copy ) = delete;
69  WorkerEntry& operator=( const WorkerEntry& copy ) = delete;
70 
71  IConverter* converter() { return m_converter; }
72 
73  const CLID& clID() const { return m_class; }
74  };
75 
76 public:
78  ConversionSvc( const std::string& name, ISvcLocator* svc, long type );
79 
81  ConversionSvc( const ConversionSvc& ) = delete;
82  ConversionSvc& operator=( const ConversionSvc& ) = delete;
83 
85  StatusCode initialize() override;
86 
88  StatusCode finalize() override;
89 
91  long repSvcType() const override;
92 
94  const CLID& objType() const override;
95 
100  StatusCode setDataProvider( IDataProviderSvc* pService ) override;
101 
105  SmartIF<IDataProviderSvc>& dataProvider() const override;
106 
108  StatusCode setConversionSvc( IConversionSvc* svc ) override;
109 
111  SmartIF<IConversionSvc>& conversionSvc() const override;
112 
114  StatusCode setAddressCreator( IAddressCreator* creator ) override;
115 
117  SmartIF<IAddressCreator>& addressCreator() const override;
118 
120  StatusCode createObj( IOpaqueAddress* pAddress, DataObject*& refpObject ) override;
121 
123  StatusCode fillObjRefs( IOpaqueAddress* pAddress, DataObject* pObject ) override;
124 
126  StatusCode updateObj( IOpaqueAddress* pAddress, DataObject* refpObject ) override;
127 
129  StatusCode updateObjRefs( IOpaqueAddress* pAddress, DataObject* pObject ) override;
130 
132  StatusCode createRep( DataObject* pObject, IOpaqueAddress*& refpAddress ) override;
133 
135  StatusCode fillRepRefs( IOpaqueAddress* pAddress, DataObject* pObject ) override;
136 
138  StatusCode updateRep( IOpaqueAddress* pAddress, DataObject* pObject ) override;
139 
141  StatusCode updateRepRefs( IOpaqueAddress* pAddress, DataObject* pObject ) override;
142 
144  StatusCode addConverter( const CLID& clid ) override;
145 
147  StatusCode addConverter( IConverter* pConverter ) override;
148 
150  StatusCode removeConverter( const CLID& clid ) override;
151 
153  IConverter* converter( const CLID& wanted ) override;
154 
156  StatusCode connectOutput( const std::string& outputFile, const std::string& openMode ) override;
157 
159  StatusCode connectOutput( const std::string& output ) override;
160 
162  StatusCode commitOutput( const std::string& output, bool do_commit ) override;
163 
165  StatusCode createAddress( long svc_type, const CLID& clid, const std::string* par, const unsigned long* ip,
166  IOpaqueAddress*& refpAddress ) override;
167 
169  StatusCode convertAddress( const IOpaqueAddress* pAddress, std::string& refAddress ) override;
170 
172  StatusCode createAddress( long svc_type, const CLID& clid, const std::string& refAddress,
173  IOpaqueAddress*& refpAddress ) override;
174 
176  virtual StatusCode updateServiceState( IOpaqueAddress* pAddress );
177 
178 protected:
180  virtual IConverter* createConverter( long typ, const CLID& clid, const ICnvFactory* fac );
181 
183  virtual StatusCode configureConverter( long typ, const CLID& clid, IConverter* cnv );
184 
186  virtual StatusCode initializeConverter( long typ, const CLID& clid, IConverter* cnv );
187 
189  virtual StatusCode activateConverter( long typ, const CLID& clid, IConverter* cnv );
190 
192  virtual void loadConverter( DataObject* pObject );
193 
195  virtual SmartIF<IAddressCreator>& addressCreator() { return m_addressCreator; }
196 
197 protected:
198  StatusCode makeCall( int typ, bool ignore_add, bool ignore_obj, bool update, IOpaqueAddress*& pAddress,
199  DataObject*& pObject );
200 
208  long m_type;
211 };
212 #endif // GAUDIKERNEL_CONVERSIONSVC_H
IConverter * converter()
Definition: ConversionSvc.h:71
virtual SmartIF< IAddressCreator > & addressCreator()
Retrieve address creation interface.
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Definition: ISvcLocator.h:25
The data converters are responsible to translate data from one representation into another...
Definition: IConverter.h:58
T swap(T...args)
IAddressCreator interface definition.
~WorkerEntry()
Definition: ConversionSvc.h:55
const CLID & clID() const
Definition: ConversionSvc.h:73
Definition: ConversionSvc.h:46
SmartIF< IAddressCreator > m_addressCreator
Pointer to the address creation service interface.
Data provider interface definition.
PropertyMgr & operator=(const PropertyMgr &)=delete
STL class.
CLID m_class
Definition: ConversionSvc.h:47
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
WorkerEntry(const CLID &cl, IConverter *cnv)
Definition: ConversionSvc.h:51
unsigned int CLID
Class ID definition.
Definition: ClassID.h:8
SmartIF< IDataProviderSvc > m_dataSvc
Pointer to data provider service.
STL class.
virtual unsigned long release()=0
Release Interface instance.
Base class used to extend a class implementing other interfaces.
Definition: extends.h:10
SmartIF< IConversionSvc > m_cnvSvc
Pointer to the IConversionSvc interface of this.
long m_type
Conversion service type.
virtual unsigned long addRef()=0
Increment the reference count of Interface instance.
Opaque address interface definition.
Base class for all conversion services.
Definition: ConversionSvc.h:45
std::vector< WorkerEntry > m_workers
List of conversion workers.
#define GAUDI_API
Definition: Kernel.h:71
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
WorkerEntry(WorkerEntry &&orig) noexcept
Definition: ConversionSvc.h:59
IConverter * m_converter
Definition: ConversionSvc.h:48
WorkerEntry & operator=(WorkerEntry &&orig) noexcept
Definition: ConversionSvc.h:62