ATLAS Offline Software
ByteStreamCnvSvcBase.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 
8 #include "GaudiKernel/IOpaqueAddress.h"
9 #include "GaudiKernel/GenericAddress.h"
10 #include "GaudiKernel/IConverter.h"
11 #include "GaudiKernel/ServiceHandle.h"
12 #include "GaudiKernel/IIncidentSvc.h"
13 #include "GaudiKernel/IClassIDSvc.h"
14 
15 //______________________________________________________________________________
16 ByteStreamCnvSvcBase::ByteStreamCnvSvcBase(const std::string& name, ISvcLocator* pSvcLocator) :
17  ::AthCnvSvc(name, pSvcLocator, ByteStreamAddress::storageType())
18 {
19  declareProperty("InitCnvs", m_initCnvs);
20 }
21 //______________________________________________________________________________
24 }
25 //______________________________________________________________________________
28  if (!::AthCnvSvc::initialize().isSuccess()) {
29  ATH_MSG_FATAL("Cannot initialize AthCnvSvc base class.");
30  return(StatusCode::FAILURE);
31  }
32 
33  ServiceHandle<IIncidentSvc> incsvc("IncidentSvc", this->name());
34  if (!incsvc.retrieve().isSuccess()) {
35  ATH_MSG_FATAL("Cannot get IncidentSvc.");
36  return(StatusCode::FAILURE);
37  }
38  incsvc->addListener(this, "BeginRun", 0, false, true); // true for singleshot
39  return(StatusCode::SUCCESS);
40 }
41 //_______________________________________________________________________
42 StatusCode ByteStreamCnvSvcBase::queryInterface(const InterfaceID& riid, void** ppvInterface) {
43  if (IByteStreamEventAccess::interfaceID().versionMatch(riid)) {
44  *ppvInterface = dynamic_cast<IByteStreamEventAccess*>(this);
45  } else {
46  // Interface is not directly available: try out a base class
47  return(::AthCnvSvc::queryInterface(riid, ppvInterface));
48  }
49  addRef();
50  return(StatusCode::SUCCESS);
51 }
52 //______________________________________________________________________________
54  if (pAddress != 0) {
55  GenericAddress* pAddr = dynamic_cast<GenericAddress*>(pAddress);
56  if (pAddr != 0) {
57  return(StatusCode::SUCCESS);
58  }
59  }
60  return(StatusCode::FAILURE);
61 }
62 //______________________________________________________________________________
63 void ByteStreamCnvSvcBase::handle(const Incident& /*incident*/) {
64  ServiceHandle<IClassIDSvc> clidSvc("ClassIDSvc", name());
65  if (!clidSvc.retrieve().isSuccess()) {
66  ATH_MSG_ERROR("Cannot get ClassIDSvc.");
67  return;
68  }
69  // Initialize the converters
70  for (const std::string& cnv : m_initCnvs) {
71  ATH_MSG_DEBUG("Accessing Converter for " << cnv);
72  CLID id;
73  if (!clidSvc->getIDOfTypeName(cnv, id).isSuccess()) {
74  ATH_MSG_WARNING("Cannot get CLID for " << cnv);
75  } else {
76  IConverter* cnv = converter(id);
77  if (cnv == 0) {
78  ATH_MSG_WARNING("Cannot get converter for " << cnv);
79  }
80  }
81  }
82  return;
83 }
ByteStreamCnvSvcBase::ByteStreamCnvSvcBase
ByteStreamCnvSvcBase(const std::string &name, ISvcLocator *pSvcLocator)
Standard Service Constructor.
Definition: ByteStreamCnvSvcBase.cxx:16
ByteStreamCnvSvcBase::handle
virtual void handle(const Incident &) override
Implementation of IIncidentListener: Handle for EndEvent incidence.
Definition: ByteStreamCnvSvcBase.cxx:63
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
AthCnvSvc::queryInterface
virtual StatusCode queryInterface(const InterfaceID &riid, void **ppvInterface)
Definition: AthCnvSvc.cxx:149
ByteStreamCnvSvcBase::~ByteStreamCnvSvcBase
virtual ~ByteStreamCnvSvcBase()
Destructor.
Definition: ByteStreamCnvSvcBase.cxx:23
IByteStreamEventAccess
interface for accessing raw data .
Definition: IByteStreamEventAccess.h:17
AthCnvSvc::initialize
virtual StatusCode initialize()
Gaudi Service Implementation.
Definition: AthCnvSvc.cxx:111
ByteStreamCnvSvcBase::queryInterface
virtual StatusCode queryInterface(const InterfaceID &riid, void **ppvInterface) override
Required of all Gaudi services: see Gaudi documentation for details.
Definition: ByteStreamCnvSvcBase.cxx:42
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
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
ByteStreamCnvSvcBase::m_initCnvs
std::vector< std::string > m_initCnvs
Definition: ByteStreamCnvSvcBase.h:40
ByteStreamAddress
IOpaqueAddress for ByteStreamCnvSvc, with ROB ids.
Definition: ByteStreamAddress.h:28
ByteStreamAddress.h
CLID
uint32_t CLID
The Class ID type.
Definition: Event/xAOD/xAODCore/xAODCore/ClassID_traits.h:47
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:194
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
AthCnvSvc::converter
virtual IConverter * converter(const CLID &wanted)
Retrieve converter from list.
Definition: AthCnvSvc.cxx:394
IByteStreamEventAccess::interfaceID
static const InterfaceID & interfaceID()
Gaudi interface id.
Definition: IByteStreamEventAccess.h:20
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
ByteStreamCnvSvcBase.h
ByteStreamCnvSvcBase::updateServiceState
virtual StatusCode updateServiceState(IOpaqueAddress *pAddress) override
Checks whether an IOpaqueAddress is a GenericAddress.
Definition: ByteStreamCnvSvcBase.cxx:53
AthCnvSvc
Definition: AthCnvSvc.h:67
ByteStreamCnvSvcBase::initialize
virtual StatusCode initialize() override
Required of all Gaudi Services.
Definition: ByteStreamCnvSvcBase.cxx:27
ServiceHandle< IIncidentSvc >