Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework  master (d98a2936)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
ConversionSvc.h
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2025 CERN for the benefit of the LHCb and ATLAS collaborations *
3 * *
4 * This software is distributed under the terms of the Apache version 2 licence, *
5 * copied verbatim in the file "LICENSE". *
6 * *
7 * In applying this licence, CERN does not waive the privileges and immunities *
8 * granted to it by virtue of its status as an Intergovernmental Organization *
9 * or submit itself to any jurisdiction. *
10 \***********************************************************************************/
11 #pragma once
12 
16 #include <GaudiKernel/Kernel.h>
17 #include <GaudiKernel/Service.h>
18 #include <algorithm>
19 #include <utility>
20 #include <vector>
21 
53 class GAUDI_API ConversionSvc : public extends<Service, IConversionSvc, IAddressCreator> {
54  class WorkerEntry final {
57 
58  public:
59  WorkerEntry( const CLID& cl, IConverter* cnv ) : m_class( cl ), m_converter( cnv ) {
60  if ( m_converter ) m_converter->addRef();
61  }
62 
64  if ( m_converter ) m_converter->release();
65  }
66 
67  WorkerEntry( WorkerEntry&& orig ) noexcept
68  : m_class{ orig.m_class }, m_converter{ std::exchange( orig.m_converter, nullptr ) } {}
69 
70  WorkerEntry& operator=( WorkerEntry&& orig ) noexcept {
71  m_class = orig.m_class;
72  std::swap( m_converter, orig.m_converter );
73  return *this;
74  }
75 
76  WorkerEntry( const WorkerEntry& copy ) = delete;
77  WorkerEntry& operator=( const WorkerEntry& copy ) = delete;
78 
79  IConverter* converter() { return m_converter; }
80 
81  const CLID& clID() const { return m_class; }
82  };
83 
84 public:
86  ConversionSvc( const std::string& name, ISvcLocator* svc, long type );
87 
89  ConversionSvc( const ConversionSvc& ) = delete;
90  ConversionSvc& operator=( const ConversionSvc& ) = delete;
91 
93  StatusCode initialize() override;
94 
96  StatusCode finalize() override;
97 
99  long repSvcType() const override;
100 
102  const CLID& objType() const override;
103 
108  StatusCode setDataProvider( IDataProviderSvc* pService ) override;
109 
113  SmartIF<IDataProviderSvc>& dataProvider() const override;
114 
116  StatusCode setConversionSvc( IConversionSvc* svc ) override;
117 
119  SmartIF<IConversionSvc>& conversionSvc() const override;
120 
122  StatusCode setAddressCreator( IAddressCreator* creator ) override;
123 
125  SmartIF<IAddressCreator>& addressCreator() const override;
126 
128  StatusCode createObj( IOpaqueAddress* pAddress, DataObject*& refpObject ) override;
129 
131  StatusCode fillObjRefs( IOpaqueAddress* pAddress, DataObject* pObject ) override;
132 
134  StatusCode updateObj( IOpaqueAddress* pAddress, DataObject* refpObject ) override;
135 
137  StatusCode updateObjRefs( IOpaqueAddress* pAddress, DataObject* pObject ) override;
138 
140  StatusCode createRep( DataObject* pObject, IOpaqueAddress*& refpAddress ) override;
141 
143  StatusCode fillRepRefs( IOpaqueAddress* pAddress, DataObject* pObject ) override;
144 
146  StatusCode updateRep( IOpaqueAddress* pAddress, DataObject* pObject ) override;
147 
149  StatusCode updateRepRefs( IOpaqueAddress* pAddress, DataObject* pObject ) override;
150 
152  StatusCode addConverter( const CLID& clid ) override;
153 
155  StatusCode addConverter( IConverter* pConverter ) override;
156 
158  StatusCode removeConverter( const CLID& clid ) override;
159 
161  IConverter* converter( const CLID& wanted ) override;
162 
164  StatusCode connectOutput( const std::string& outputFile, const std::string& openMode ) override;
165 
167  StatusCode connectOutput( const std::string& output ) override;
168 
170  StatusCode commitOutput( const std::string& output, bool do_commit ) override;
171 
173  StatusCode createAddress( long svc_type, const CLID& clid, const std::string* par, const unsigned long* ip,
174  IOpaqueAddress*& refpAddress ) override;
175 
177  StatusCode convertAddress( const IOpaqueAddress* pAddress, std::string& refAddress ) override;
178 
180  StatusCode createAddress( long svc_type, const CLID& clid, const std::string& refAddress,
181  IOpaqueAddress*& refpAddress ) override;
182 
184  virtual StatusCode updateServiceState( IOpaqueAddress* pAddress );
185 
186 protected:
188  virtual IConverter* createConverter( long typ, const CLID& clid, const ICnvFactory* fac );
189 
191  virtual StatusCode configureConverter( long typ, const CLID& clid, IConverter* cnv );
192 
194  virtual StatusCode initializeConverter( long typ, const CLID& clid, IConverter* cnv );
195 
197  virtual StatusCode activateConverter( long typ, const CLID& clid, IConverter* cnv );
198 
200  virtual void loadConverter( DataObject* pObject );
201 
203  virtual SmartIF<IAddressCreator>& addressCreator() { return m_addressCreator; }
204 
205 protected:
206  StatusCode makeCall( int typ, bool ignore_add, bool ignore_obj, bool update, IOpaqueAddress*& pAddress,
207  DataObject*& pObject );
208 
216  long m_type;
218  std::vector<WorkerEntry> m_workers;
219 };
ConversionSvc
Definition: ConversionSvc.h:53
ConversionSvc::WorkerEntry::WorkerEntry
WorkerEntry(const CLID &cl, IConverter *cnv)
Definition: ConversionSvc.h:59
IAddressCreator
Definition: IAddressCreator.h:33
ConversionSvc::m_addressCreator
SmartIF< IAddressCreator > m_addressCreator
Pointer to the address creation service interface.
Definition: ConversionSvc.h:212
ConversionSvc::WorkerEntry::operator=
WorkerEntry & operator=(const WorkerEntry &copy)=delete
ConversionSvc::addressCreator
virtual SmartIF< IAddressCreator > & addressCreator()
Retrieve address creation interface.
Definition: ConversionSvc.h:203
IOpaqueAddress
Definition: IOpaqueAddress.h:28
IAddressCreator.h
ISvcLocator
Definition: ISvcLocator.h:42
ConversionSvc::WorkerEntry::m_converter
IConverter * m_converter
Definition: ConversionSvc.h:56
IConverter
Definition: IConverter.h:65
ConversionSvc::WorkerEntry::~WorkerEntry
~WorkerEntry()
Definition: ConversionSvc.h:63
ConversionSvc::WorkerEntry
Definition: ConversionSvc.h:54
IInterface::addRef
virtual unsigned long addRef() const =0
Increment the reference count of Interface instance.
gaudirun.output
output
Definition: gaudirun.py:521
ConversionSvc::WorkerEntry::converter
IConverter * converter()
Definition: ConversionSvc.h:79
IDataProviderSvc.h
compareOutputFiles.par
par
Definition: compareOutputFiles.py:477
StatusCode
Definition: StatusCode.h:64
ConversionSvc::WorkerEntry::clID
const CLID & clID() const
Definition: ConversionSvc.h:81
ConversionSvc::WorkerEntry::WorkerEntry
WorkerEntry(const WorkerEntry &copy)=delete
Write.creator
creator
Definition: Write.py:23
ConversionSvc::m_type
long m_type
Conversion service type.
Definition: ConversionSvc.h:216
ConversionSvc::operator=
ConversionSvc & operator=(const ConversionSvc &)=delete
SmartIF< IDataProviderSvc >
CLID
unsigned int CLID
Class ID definition.
Definition: ClassID.h:16
extends
Base class used to extend a class implementing other interfaces.
Definition: extends.h:19
Service.h
ConversionSvc::m_cnvSvc
SmartIF< IConversionSvc > m_cnvSvc
Pointer to the IConversionSvc interface of this.
Definition: ConversionSvc.h:214
gaudirun.type
type
Definition: gaudirun.py:160
ConditionsStallTest.name
name
Definition: ConditionsStallTest.py:77
GaudiPython.Pythonizations.update
update
Definition: Pythonizations.py:145
Kernel.h
ConversionSvc::WorkerEntry::operator=
WorkerEntry & operator=(WorkerEntry &&orig) noexcept
Definition: ConversionSvc.h:70
DataObject
Definition: DataObject.h:37
IDataProviderSvc
Definition: IDataProviderSvc.h:48
IConversionSvc.h
ConversionSvc::m_dataSvc
SmartIF< IDataProviderSvc > m_dataSvc
Pointer to data provider service.
Definition: ConversionSvc.h:210
ConversionSvc::WorkerEntry::m_class
CLID m_class
Definition: ConversionSvc.h:55
GAUDI_API
#define GAUDI_API
Definition: Kernel.h:49
IInterface::release
virtual unsigned long release() const =0
Release Interface instance.
ConversionSvc::WorkerEntry::WorkerEntry
WorkerEntry(WorkerEntry &&orig) noexcept
Definition: ConversionSvc.h:67
ConversionSvc::m_workers
std::vector< WorkerEntry > m_workers
List of conversion workers.
Definition: ConversionSvc.h:218
ConversionSvc::ConversionSvc
ConversionSvc(const ConversionSvc &)=delete
disable copy and assignment
IConversionSvc
Definition: IConversionSvc.h:43