ATLAS Offline Software
Loading...
Searching...
No Matches
ByteStreamAddressProviderSvc.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5// Include files
9
11#include "GaudiKernel/TypeNameString.h"
12#include "GaudiKernel/IClassIDSvc.h"
13
14#include "eformat/SourceIdentifier.h"
15
17ByteStreamAddressProviderSvc::ByteStreamAddressProviderSvc(const std::string& name, ISvcLocator* pSvcLocator)
18 : base_class(name, pSvcLocator), m_clidSvc("ClassIDSvc", name) {}
19//________________________________________________________________________________
21 ATH_MSG_INFO("Initializing");
22
23 // Retrieve ClassIDSvc
24 ATH_CHECK( m_clidSvc.retrieve() );
25
27 ATH_MSG_FATAL("Invalid StoreID " << m_storeID);
28 return StatusCode::FAILURE;
29 }
30 ATH_MSG_INFO("-- Will fill Store with id = " << m_storeID.value());
31 return StatusCode::SUCCESS;
32}
33//________________________________________________________________________________
35 ATH_MSG_DEBUG("in preLoadAddress");
36 if (id != m_storeID) {
37 ATH_MSG_DEBUG("StoreID = " << id << " does not match required id (" << m_storeID << ") skip");
38 return StatusCode::SUCCESS;
39 }
40
41 for (const std::string& typeName : m_typeNames) {
42 Gaudi::Utils::TypeNameString item(typeName);
43 const std::string& t = item.type();
44 const std::string& nm = item.name();
45 CLID classid;
46 if (!m_clidSvc->getIDOfTypeName(t, classid).isSuccess()) {
47 ATH_MSG_WARNING("Cannot create TAD for (type, name)" << " no CLID for " << t << " " << nm);
48 } else {
49 SG::TransientAddress* tad = new SG::TransientAddress(classid, nm);
50 tlist.push_back(tad);
51 ATH_MSG_DEBUG("Created TAD for (type, clid, name)" << t << " " << classid << " " << nm);
52 // save the clid and key.
53 m_clidKey[classid].insert(nm);
54 }
55 }
56 return StatusCode::SUCCESS;
57}
58//________________________________________________________________________________
61 const EventContext& ctx) {
62 if (id != m_storeID) {
63 return StatusCode::FAILURE;
64 }
65 CLID clid = tad->clID();
66 std::string nm = tad->name();
67 auto it = m_clidKey.find(clid);
68 if (it == m_clidKey.end() || it->second.count(nm) == 0) {
69 return StatusCode::FAILURE;
70 }
71 ATH_MSG_DEBUG("Creating address for " << clid << " " << nm);
72 ByteStreamAddress* add = new ByteStreamAddress(clid, nm, "");
73 add->setEventContext(ctx);
74 tad->setAddress(add);
75 return StatusCode::SUCCESS;
76}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
uint32_t CLID
The Class ID type.
virtual StatusCode preLoadAddresses(StoreID::type id, tadList &tlist) override
Gaudi::Property< std::vector< std::string > > m_typeNames
virtual StatusCode updateAddress(StoreID::type id, SG::TransientAddress *tad, const EventContext &ctx) override
update an existing transient Address
virtual StatusCode initialize() override
ByteStreamAddressProviderSvc(const std::string &name, ISvcLocator *pSvcLocator)
Standard constructor.
ServiceHandle< IClassIDSvc > m_clidSvc
std::map< unsigned int, std::set< std::string > > m_clidKey
IOpaqueAddress for ByteStreamCnvSvc, with ROB ids.
CLID clID() const
Retrieve string key:
const std::string & name() const
Get the primary (hashed) SG key.
void setAddress(CxxUtils::RefCountedPtr< IOpaqueAddress > pAddress)
Retrieve primary clid.
@ UNKNOWN
Definition StoreID.h:32
bool add(const std::string &hname, TKey *tobj)
Definition fastadd.cxx:55