ATLAS Offline Software
AthCnvSvc.cxx
Go to the documentation of this file.
1 
3 /*
4  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
5 */
6 
7 // AthCnvSvc.cxx
8 // Implementation file for class AthCnvSvc
9 // Author: S.Binet<binet@cern.ch>
11 
12 // STL includes
13 
14 // Framework includes
15 #include "Gaudi/Property.h"
16 #include "GaudiKernel/DataObject.h"
17 #include "GaudiKernel/System.h"
18 #include "GaudiKernel/IConverter.h"
19 #include "GaudiKernel/IDataProviderSvc.h"
20 #include "GaudiKernel/IOpaqueAddress.h"
21 
22 // AthenaBaseComps includes
24 
25 #include "GaudiKernel/Converter.h"
26 
28 
38 };
39 
41 // Public methods:
43 
44 // Constructors
46 AthCnvSvc::AthCnvSvc (const std::string& name,
47  ISvcLocator* pSvcLocator,
48  long type) :
49  ::AthService (name, pSvcLocator),
50  m_dataSvc (0),
51  m_addressCreator(0),
52  m_type (type),
53  m_workers ( )
54 {
55  //
56  // Property declaration
57  //
58  //declareProperty( "Property", m_nProperty );
59  AthCnvSvc::setAddressCreator(this).ignore();
60 
61  m_cnvSvc = this;
62 }
63 
64 // Destructor
67 {
68  // the following is hopefully (!) temporary hack to prevent deleting
69  // services we hold a reference count to.
70  // the problem is that these references might point back to us (so we
71  // end up recursively calling the d-tor) or be double-deleted later on
72  // by the ServiceManager.
73  // the correct fix is to have everybody use SmartIF<T> all over the code...
74  //
75  // "temporary hack" ha ha! (CGL 5/2014)
76  //
77  if (m_cnvSvc) {
78  m_cnvSvc->addRef();
79  m_cnvSvc = 0;
80  }
81  if (m_addressCreator) {
82  m_addressCreator->addRef();
83  m_addressCreator = 0;
84  }
85  if (m_dataSvc) {
86  m_dataSvc->addRef();
87  m_dataSvc = 0;
88  }
89 
90  ATH_MSG_DEBUG ("release-ing all workers (" << m_workers.size() << ")...");
91  for ( Workers::iterator
92  i = m_workers.begin(),
93  iend = m_workers.end();
94  i != iend;
95  ++i ) {
96  IConverter *cnv = i->second.m_converter;
97  if (cnv) {
98 
99  if (!cnv->release()) {
100  i->second.m_converter = 0;
101  }
102  }
103  }
104  ATH_MSG_DEBUG ("release-ing all workers (" << m_workers.size() << ")... [done]");
105  m_workers.clear();
106 
107 }
108 
109 // Athena Service's Hooks
112 {
113  return StatusCode::SUCCESS;
114 }
115 
117 {
118  ATH_MSG_DEBUG ("releasing all workers");
119  for ( Workers::iterator
120  i = m_workers.begin(),
121  iend = m_workers.end();
122  i != iend;
123  ++i ) {
124  if (!i->second.converter()->finalize().isSuccess()) {
125  ATH_MSG_ERROR ("finalizing worker w/ clid=[" << i->first << "]");
126  }
127  i->second.converter()->release();
128  }
129  //m_workers.clear();
130  Workers().swap (m_workers);
131 
132  if (m_addressCreator) m_addressCreator->addRef();
133  if (m_dataSvc) m_dataSvc->addRef();
134  if (m_cnvSvc) m_cnvSvc->addRef();
135 
136  m_addressCreator = 0;
137  m_dataSvc = 0;
138  m_cnvSvc = 0;
139 
140  return StatusCode::SUCCESS;
141 }
142 
143 // Query the interfaces.
144 // Input: riid, Requested interface ID
145 // ppvInterface, Pointer to requested interface
146 // Return: StatusCode indicating SUCCESS or FAILURE.
147 // N.B. Don't forget to release the interface after use!!!
148 StatusCode
149 AthCnvSvc::queryInterface(const InterfaceID& riid, void** ppvInterface)
150 {
151  if ( riid == IConversionSvc::interfaceID() ) {
152  *ppvInterface = (IConversionSvc*)this;
153  }
154  else if ( riid == IConverter::interfaceID() ) {
155  *ppvInterface = (IConverter*)this;
156  }
157  else if ( riid == IAddressCreator::interfaceID() ) {
158  *ppvInterface = (IAddressCreator*)this;
159  }
160  else {
161  // Interface is not directly available: try out a base class
162  return AthService::queryInterface(riid, ppvInterface);
163  }
164  addRef();
165  return StatusCode::SUCCESS;
166 }
167 
169 
170 long
173 {
174  return m_type;
175 }
176 
178 const CLID&
180 {
181  return CLID_NULL;
182 }
183 
189 AthCnvSvc::setDataProvider(IDataProviderSvc* pDataSvc)
190 {
191  if ( !pDataSvc ) return StatusCode::SUCCESS; //Atlas does not use DataSvc
192  if ( m_dataSvc ) m_dataSvc->release();
193  m_dataSvc = pDataSvc;
194  m_dataSvc->addRef();
197  for(Workers::iterator i=start; i != stop; ++i ) {
198  IConverter* cnv = i->second.converter();
199  if ( 0 != cnv ) {
200  if (cnv->setDataProvider(m_dataSvc).isFailure()) {
201  ATH_MSG_ERROR ("setting Data Provider");
202  }
203  }
204  }
205  return StatusCode::SUCCESS;
206 }
207 
211 SmartIF<IDataProviderSvc>&
213 {
214  // FIXME: Ideally the return type should be const, but that would require
215  // changes in the Gaudi IConverter base class.
216  SmartIF<IDataProviderSvc>& svc ATLAS_THREAD_SAFE =
217  const_cast<SmartIF<IDataProviderSvc>&>(m_dataSvc);
218  return svc;
219 }
220 
224 AthCnvSvc::setConversionSvc(IConversionSvc* /*svc*/)
225 {
226  return StatusCode::FAILURE;
227 }
228 
231 SmartIF<IConversionSvc>&
233 {
234  // FIXME: Ideally the return type should be const, but that would require
235  // changes in the Gaudi IConverter base class.
236  SmartIF<IConversionSvc>& svc ATLAS_THREAD_SAFE =
237  const_cast<SmartIF<IConversionSvc>&>(m_cnvSvc);
238  return svc;
239 }
240 
243 AthCnvSvc::setAddressCreator(IAddressCreator* creator)
244 {
245  m_addressCreator = creator;
248  for(Workers::iterator i=start; i != stop; ++i ) {
249  IConverter* cnv = i->second.converter();
250  if ( 0 != cnv ) {
251  if (cnv->setAddressCreator(m_addressCreator).isFailure()) {
252  ATH_MSG_ERROR ("setting Address Creator");
253  }
254  }
255  }
256  return StatusCode::SUCCESS;
257 }
258 
260 SmartIF<IAddressCreator>&
262 {
263  // FIXME: Ideally the return type should be const, but that would require
264  // changes in the Gaudi IConverter base class.
265  SmartIF<IAddressCreator>& svc ATLAS_THREAD_SAFE =
266  const_cast<SmartIF<IAddressCreator>&>(m_addressCreator);
267  return svc;
268 }
269 
273 AthCnvSvc::createObj(IOpaqueAddress* pAddress,DataObject*& refpObject)
274 {
275  return makeCall (CREATE_OBJ, false, true, false, pAddress, refpObject);
276 }
277 
281 AthCnvSvc::fillObjRefs(IOpaqueAddress* pAddress, DataObject* pObject)
282 {
283  return makeCall (FILL_OBJ_REFS, false, true, true, pAddress, pObject);
284 }
285 
289 AthCnvSvc::updateObj(IOpaqueAddress* pAddress, DataObject* pObject)
290 {
291  return makeCall (UPDATE_OBJ, false, true, false, pAddress, pObject);
292 }
293 
297 AthCnvSvc::updateObjRefs(IOpaqueAddress* pAddress, DataObject* pObject)
298 {
299  return makeCall (UPDATE_OBJ_REFS, false, true, true, pAddress, pObject);
300 }
301 
305 AthCnvSvc::createRep(DataObject* pObject, IOpaqueAddress*& refpAddress)
306 {
307  return makeCall (CREATE_REP, true, false, false, refpAddress, pObject);
308 }
309 
313 AthCnvSvc::fillRepRefs(IOpaqueAddress* pAddress,DataObject* pObject)
314 {
315  return makeCall (FILL_REP_REFS, true, false, false, pAddress, pObject);
316 }
317 
321 AthCnvSvc::updateRep(IOpaqueAddress* pAddress, DataObject* pObject)
322 {
323  return makeCall (UPDATE_REP, true, false, false, pAddress, pObject);
324 }
325 
329 AthCnvSvc::updateRepRefs(IOpaqueAddress* pAddress, DataObject* pObject)
330 {
331  return makeCall (UPDATE_REP_REFS, true, false, false, pAddress, pObject);
332 }
333 
337 {
338  // First look for the more specific converter
339  long typ = repSvcType();
340  IConverter* pConverter = createConverter(typ, clid, 0);
341  if ( 0 != pConverter ) {
342  StatusCode status = configureConverter( typ, clid, pConverter );
343  if ( status.isSuccess() ) {
344  status = initializeConverter( typ, clid, pConverter );
345  if ( status.isSuccess() ) {
346  status = activateConverter( typ, clid, pConverter );
347  if ( status.isSuccess() ) {
348  long conv_typ = pConverter->repSvcType();
349  const CLID& conv_clid = pConverter->objType();
350  typ = (typ<0xFF) ? typ : typ&0xFFFFFF00;
351  conv_typ = (conv_typ<0xFF) ? conv_typ : conv_typ&0xFFFFFF00;
352  if ( conv_typ == typ && conv_clid == clid ) {
353  return addConverter(pConverter);
354  }
355  }
356  }
357  }
358  pConverter->release();
359  }
360  return Status::NO_CONVERTER;
361 }
362 
365 AthCnvSvc::addConverter(IConverter* pConverter)
366 {
367  if ( 0 != pConverter ) {
368  const CLID& clid = pConverter->objType();
369  removeConverter(clid).ignore();
370  m_workers.insert (std::make_pair(clid,WorkerEntry(clid, pConverter)));
371  pConverter->addRef();
372  return StatusCode::SUCCESS;
373  }
374  return Status::NO_CONVERTER;
375 }
376 
380 {
381  Workers::iterator worker = m_workers.find (clid);
382  if ( worker != m_workers.end() ) {
383  worker->second.converter()->finalize().ignore();
384  worker->second.converter()->release();
385 
386  m_workers.erase (worker);
387  return StatusCode::SUCCESS;
388  }
389  return Status::NO_CONVERTER;
390 }
391 
393 IConverter*
395 {
396  std::lock_guard<CallMutex> lock(m_conv_mut);
397  Workers::iterator worker = m_workers.find (clid);
398  if ( worker != m_workers.end() ) {
399  return worker->second.converter();
400  }
401  if (addConverter (clid).isSuccess()) {
402  worker = m_workers.find (clid);
403  if (worker != m_workers.end()) {
404  return worker->second.converter();
405  }
406  } else {
407  ATH_MSG_INFO("problem adding converter for CLID [" << clid << "]");
408  }
409  return 0;
410 }
411 
415  const std::string& /*openMode*/)
416 {
417  return connectOutput (outputFile);
418 }
419 
422 AthCnvSvc::connectOutput(const std::string& /*output*/)
423 {
424  return StatusCode::SUCCESS;
425 }
426 
429 AthCnvSvc::commitOutput(const std::string& /*output*/, bool /*do_commit*/)
430 {
431  return StatusCode::SUCCESS;
432 }
434 
437 AthCnvSvc::disconnectOutput(const std::string& /*output*/)
438 {
439  return StatusCode::SUCCESS;
440 }
441 
443 
447 AthCnvSvc::createAddress (long /*svc_type*/,
448  const CLID& /*clid*/,
449  const std::string* /*par*/,
450  const unsigned long* /*ip*/,
451  IOpaqueAddress*& refpAddress)
452 {
453  refpAddress = 0;
454  return StatusCode::FAILURE;
455 }
456 
459 AthCnvSvc::convertAddress (const IOpaqueAddress* /*pAddress*/,
460  std::string& refAddress)
461 {
462  refAddress = "";
463  return StatusCode::FAILURE;
464 }
465 
468 AthCnvSvc::createAddress (long /*svc_type*/,
469  const CLID& /*clid*/,
470  const std::string& /*refAddress*/,
471  IOpaqueAddress*& refpAddress)
472 {
473  refpAddress = 0;
474  return StatusCode::FAILURE;
475 }
476 
479 AthCnvSvc::updateServiceState(IOpaqueAddress* /*pAddress*/)
480 {
481  return StatusCode::SUCCESS;
482 }
484 
486 // Protected methods:
488 
490 IConverter*
492  const CLID& clid,
493  const ICnvFactory* /*fac*/)
494 {
495 
496  std::unique_ptr<IConverter> cnv{Converter::Factory::create
497  (ConverterID(typ,clid), serviceLocator().get() )};
498 
499  if (!cnv) {
500  typ = (typ<0xFF) ? typ : typ&0xFFFFFF00;
501  cnv = Converter::Factory::create
502  (ConverterID(typ,clid), serviceLocator().get() );
503  }
504  return cnv.release();
505 
506 }
507 
510 AthCnvSvc::configureConverter (long /*typ*/, const CLID& /*clid*/,
511  IConverter* cnv)
512 {
513  if (cnv) {
514  cnv->setConversionSvc(this).ignore();
515  cnv->setAddressCreator(m_addressCreator).ignore();
516  cnv->setDataProvider(m_dataSvc).ignore();
517  return StatusCode::SUCCESS;
518  }
519  return Status::NO_CONVERTER;
520 
521 }
522 
525 AthCnvSvc::initializeConverter (long /*typ*/, const CLID& /*clid*/,
526  IConverter* cnv)
527 {
528  if (cnv) {
529  return cnv->initialize();
530  }
531  return Status::NO_CONVERTER;
532 }
533 
536 AthCnvSvc::activateConverter (long /*typ*/, const CLID& /*clid*/,
537  IConverter* cnv)
538 {
539  if (cnv) {
540  return StatusCode::SUCCESS;
541  }
542  return Status::NO_CONVERTER;
543 }
544 
546 void
547 AthCnvSvc::loadConverter(DataObject* /*pObject*/)
548 {
549 }
550 
551 
552 StatusCode
554  bool ignore_add,
555  bool ignore_obj,
556  bool update,
557  IOpaqueAddress*& pAddress,
558  DataObject*& pObject)
559 {
560  if ( 0 != pAddress || ignore_add ) {
561  if ( 0 != pObject || ignore_obj ) {
562  const CLID& obj_class =
563  (0 != pObject && !ignore_obj) ? pObject->clID()
564  : (0 != pAddress && !ignore_add)
565  ? pAddress->clID()
566  : CLID_NULL;
567  IConverter* cnv = converter(obj_class);
568  if ( !cnv && pObject ) {
569  //Give it a try to autoload the class (dictionary) for which the converter is needed
570  loadConverter( pObject);
571  cnv = converter(obj_class);
572  }
573 
574  StatusCode status(StatusCode::FAILURE);
575  if ( 0 != cnv ) {
576  switch(typ) {
577  case CREATE_OBJ:
578  status = cnv->createObj(pAddress, pObject);
579  break;
580  case FILL_OBJ_REFS:
581  status = cnv->fillObjRefs(pAddress, pObject);
582  break;
583  case UPDATE_OBJ:
584  status = cnv->updateObj(pAddress, pObject);
585  break;
586  case UPDATE_OBJ_REFS:
587  status = cnv->updateObjRefs(pAddress, pObject);
588  break;
589  case CREATE_REP:
590  status = cnv->createRep(pObject, pAddress);
591  break;
592  case FILL_REP_REFS:
593  status = cnv->fillRepRefs(pAddress, pObject);
594  break;
595  case UPDATE_REP:
596  status = cnv->updateRep(pAddress, pObject);
597  break;
598  case UPDATE_REP_REFS:
599  status = cnv->updateRepRefs(pAddress, pObject);
600  break;
601  default:
602  status = StatusCode::FAILURE;
603  break;
604  }
605  if ( status.isSuccess() && update ) {
606  status = updateServiceState(pAddress);
607  }
608  return status;
609  }
610  status.ignore();
611  msg(MSG::INFO) << "No converter for object ";
612  if ( pObject != 0 ) {
613  msg(MSG::INFO) << System::typeinfoName(typeid(*pObject));
614  }
615  msg(MSG::INFO) << " CLID= " << obj_class << endmsg;
616  return Status::NO_CONVERTER;
617  }
618  return Status::INVALID_OBJECT;
619  }
620  return Status::INVALID_ADDRESS;
621 }
622 
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
AthCnvSvc::makeCall
StatusCode makeCall(int typ, bool ignore_add, bool ignore_obj, bool update, IOpaqueAddress *&pAddress, DataObject *&pObject)
Definition: AthCnvSvc.cxx:553
AthCnvSvc::finalize
virtual StatusCode finalize()
Definition: AthCnvSvc.cxx:116
UPDATE_REP
@ UPDATE_REP
Definition: AthCnvSvc.cxx:36
AthCnvSvc::updateObjRefs
virtual StatusCode updateObjRefs(IOpaqueAddress *pAddress, DataObject *pObject)
Implementation of IConverter: Update the references of an updated transient object.
Definition: AthCnvSvc.cxx:297
CREATE_REP
@ CREATE_REP
Definition: AthCnvSvc.cxx:34
AthCnvSvc::queryInterface
virtual StatusCode queryInterface(const InterfaceID &riid, void **ppvInterface)
Definition: AthCnvSvc.cxx:149
AthCnvSvc::removeConverter
virtual StatusCode removeConverter(const CLID &clid)
Remove converter object from conversion service (if present).
Definition: AthCnvSvc.cxx:379
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
AthCnvSvc::WorkerEntry
Definition: AthCnvSvc.h:71
AthCnvSvc::m_conv_mut
CallMutex m_conv_mut
Definition: AthCnvSvc.h:324
mergePhysValFiles.start
start
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:14
AthCnvSvc::activateConverter
virtual StatusCode activateConverter(long typ, const CLID &clid, IConverter *cnv)
Activate the new converter after initialization.
Definition: AthCnvSvc.cxx:536
AthCnvSvc::updateServiceState
virtual StatusCode updateServiceState(IOpaqueAddress *pAddress)
Update state of the service.
Definition: AthCnvSvc.cxx:479
AthCnvSvc.h
AthCnvSvc::m_addressCreator
SmartIF< IAddressCreator > m_addressCreator
Pointer to the address creation service interface.
Definition: AthCnvSvc.h:315
AthCnvSvc::initialize
virtual StatusCode initialize()
Gaudi Service Implementation.
Definition: AthCnvSvc.cxx:111
FILL_OBJ_REFS
@ FILL_OBJ_REFS
Definition: AthCnvSvc.cxx:31
PixelModuleFeMask_create_db.stop
int stop
Definition: PixelModuleFeMask_create_db.py:76
AthCnvSvc::AthCnvSvc
AthCnvSvc()
Default constructor:
AthCnvSvc::convertAddress
virtual StatusCode convertAddress(const IOpaqueAddress *pAddress, std::string &refAddress)
Convert an address to string form.
Definition: AthCnvSvc.cxx:459
AthCnvSvc::connectOutput
virtual StatusCode connectOutput(const std::string &outputFile, const std::string &openMode)
Connect the output file to the service with open mode.
Definition: AthCnvSvc.cxx:414
AthCnvSvc::setAddressCreator
virtual StatusCode setAddressCreator(IAddressCreator *creator)
Set address creator facility.
Definition: AthCnvSvc.cxx:243
AthCnvSvc::addressCreator
virtual SmartIF< IAddressCreator > & addressCreator() const
Retrieve address creator facility.
Definition: AthCnvSvc.cxx:261
compareGeometries.outputFile
string outputFile
Definition: compareGeometries.py:25
m_type
TokenType m_type
the type
Definition: TProperty.cxx:44
AthCnvSvc::configureConverter
virtual StatusCode configureConverter(long typ, const CLID &clid, IConverter *cnv)
Configure the new converter before initialize is called.
Definition: AthCnvSvc.cxx:510
UPDATE_REP_REFS
@ UPDATE_REP_REFS
Definition: AthCnvSvc.cxx:37
AthCnvSvc::setConversionSvc
virtual StatusCode setConversionSvc(IConversionSvc *svc)
Implementation of IConverter: Set conversion service the converter is connected to.
Definition: AthCnvSvc.cxx:224
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
AthCnvSvc::createAddress
virtual StatusCode createAddress(long svc_type, const CLID &clid, const std::string *par, const unsigned long *ip, IOpaqueAddress *&refpAddress)
Create a Generic address using explicit arguments to identify a single object.
Definition: AthCnvSvc.cxx:447
AthCnvSvc::conversionSvc
virtual SmartIF< IConversionSvc > & conversionSvc() const
Implementation of IConverter: Get conversion service the converter is connected to.
Definition: AthCnvSvc.cxx:232
lumiFormat.i
int i
Definition: lumiFormat.py:92
AthCnvSvc::updateRepRefs
virtual StatusCode updateRepRefs(IOpaqueAddress *pAddress, DataObject *pObject)
Implementation of IConverter: Update the references of an already converted object.
Definition: AthCnvSvc.cxx:329
AthCnvSvc::setDataProvider
virtual StatusCode setDataProvider(IDataProviderSvc *pService)
Implementation of IConverter: Set Data provider service.
Definition: AthCnvSvc.cxx:189
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AthCnvSvc::createRep
virtual StatusCode createRep(DataObject *pObject, IOpaqueAddress *&refpAddress)
Implementation of IConverter: Convert the transient object to the requested representation.
Definition: AthCnvSvc.cxx:305
AthService
Definition: AthService.h:32
AthCnvSvc::objType
const CLID & objType() const
Implementation of IConverter: dummy call.
Definition: AthCnvSvc.cxx:179
AthCnvSvc::createObj
virtual StatusCode createObj(IOpaqueAddress *pAddress, DataObject *&refpObject)
Implementation of IConverter: Create the transient representation of an object.
Definition: AthCnvSvc.cxx:273
AthCnvSvc::m_cnvSvc
SmartIF< IConversionSvc > m_cnvSvc
Pointer to the IConversionSvc interface of this.
Definition: AthCnvSvc.h:317
Handler::svc
AthROOTErrorHandlerSvc * svc
Definition: AthROOTErrorHandlerSvc.cxx:10
CLID
uint32_t CLID
The Class ID type.
Definition: Event/xAOD/xAODCore/xAODCore/ClassID_traits.h:47
AthCnvSvc::dataProvider
virtual SmartIF< IDataProviderSvc > & dataProvider() const
Implementation of IConverter: Get Data provider service.
Definition: AthCnvSvc.cxx:212
AthCnvSvc::m_workers
Workers m_workers
List of conversion workers.
Definition: AthCnvSvc.h:321
AthCnvSvc::initializeConverter
virtual StatusCode initializeConverter(long typ, const CLID &clid, IConverter *cnv)
Initialize the new converter.
Definition: AthCnvSvc.cxx:525
AthCnvSvc::updateRep
virtual StatusCode updateRep(IOpaqueAddress *pAddress, DataObject *pObject)
Implementation of IConverter: Update the converted representation of a transient object.
Definition: AthCnvSvc.cxx:321
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
AthCnvSvc::addConverter
virtual StatusCode addConverter(const CLID &clid)
Add converter object to conversion service.
Definition: AthCnvSvc.cxx:336
AthCnvSvc::fillRepRefs
virtual StatusCode fillRepRefs(IOpaqueAddress *pAddress, DataObject *pObject)
Implementation of IConverter: Resolve the references of the converted object.
Definition: AthCnvSvc.cxx:313
UPDATE_OBJ_REFS
@ UPDATE_OBJ_REFS
Definition: AthCnvSvc.cxx:33
AthCnvSvc::fillObjRefs
virtual StatusCode fillObjRefs(IOpaqueAddress *pAddress, DataObject *pObject)
Implementation of IConverter: Resolve the references of the created transient object.
Definition: AthCnvSvc.cxx:281
AthCnvSvc::updateObj
virtual StatusCode updateObj(IOpaqueAddress *pAddress, DataObject *refpObject)
Implementation of IConverter: Update the transient object from the other representation.
Definition: AthCnvSvc.cxx:289
AthCnvSvc::createConverter
virtual IConverter * createConverter(long typ, const CLID &clid, const ICnvFactory *fac)
Create new Converter using factory.
Definition: AthCnvSvc.cxx:491
AthCnvSvc::commitOutput
virtual StatusCode commitOutput(const std::string &output, bool do_commit)
Commit pending output.
Definition: AthCnvSvc.cxx:429
AthCnvSvc::converter
virtual IConverter * converter(const CLID &wanted)
Retrieve converter from list.
Definition: AthCnvSvc.cxx:394
AthCnvSvc::~AthCnvSvc
virtual ~AthCnvSvc()
Destructor:
Definition: AthCnvSvc.cxx:66
dqt_zlumi_pandas.update
update
Definition: dqt_zlumi_pandas.py:42
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
AthCommonMsg< Service >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
get
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition: hcg.cxx:127
AthCnvSvc::loadConverter
virtual void loadConverter(DataObject *pObject)
Load converter or dictionary needed by the converter.
Definition: AthCnvSvc.cxx:547
AthCnvSvc::Workers
std::unordered_map< CLID, WorkerEntry > Workers
Definition: AthCnvSvc.h:106
AthCnvSvc::m_dataSvc
SmartIF< IDataProviderSvc > m_dataSvc
Pointer to data provider service.
Definition: AthCnvSvc.h:313
AthCnvSvc::disconnectOutput
virtual StatusCode disconnectOutput(const std::string &output)
Disconnect output files from the service.
Definition: AthCnvSvc.cxx:437
merge.status
status
Definition: merge.py:17
ATLAS_THREAD_SAFE
#define ATLAS_THREAD_SAFE
Definition: checker_macros.h:211
checker_macros.h
Define macros for attributes used to control the static checker.
CnvSvcAction
CnvSvcAction
Definition: AthCnvSvc.cxx:29
FILL_REP_REFS
@ FILL_REP_REFS
Definition: AthCnvSvc.cxx:35
AthCnvSvc::repSvcType
virtual long repSvcType() const
Retrieve the class type of the data store the converter uses.
Definition: AthCnvSvc.cxx:172
CREATE_OBJ
@ CREATE_OBJ
Definition: AthCnvSvc.cxx:30
AthCnvSvc::m_type
long m_type
Conversion service type.
Definition: AthCnvSvc.h:319
UPDATE_OBJ
@ UPDATE_OBJ
Definition: AthCnvSvc.cxx:32