1// This file's extension implies that it's C, but it's really -*- C++ -*-.
4 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
7/***************************************************************************
8 implementation of DataProxy_cast operator
9 -----------------------------------------
11***************************************************************************/
13// $Id: DataProxy.icc,v 1.6 2008-07-14 22:16:25 calaf Exp $
15#include "AthenaKernel/DataBucketBase.h"
16#include "AthenaKernel/StorableConversions.h"
17#include "AthenaKernel/ClassID_traits.h"
19# include "AthenaKernel/getMessageSvc.h"
20# include "GaudiKernel/MsgStream.h"
27/// Retrieve data object key == string
29const SG::DataProxy::name_type& SG::DataProxy::name() const
32 return m_tAddress.name();
36/// Retrieve data object key == string
37/// duplicated for Gaudi folks does same as name()
39const SG::DataProxy::id_type& SG::DataProxy::identifier() const
42 return m_tAddress.name();
46/// Retrieve DataObject
48DataObject* SG::DataProxy::object ATLAS_NOT_CONST_THREAD_SAFE () const
54/// Retrieve IOpaqueAddress
56IOpaqueAddress* SG::DataProxy::address() const
58 lock_t lock (m_mutex);
59 return m_tAddress.address();
63/// set DataSvc (Gaudi-specific); do nothing for us
65IDataProviderSvc* SG::DataProxy::dataSvc() const
70///< Get the primary (hashed) SG key.
72SG::sgkey_t SG::DataProxy::sgkey() const
74 // No lock; underlying member is atomic.
75 return m_tAddress.sgkey();
79/// Set the primary (hashed) SG key.
81void SG::DataProxy::setSGKey (sgkey_t sgkey)
83 lock_t lock (m_mutex);
84 m_tAddress.setSGKey (sgkey);
88///< Return the ID of the store containing this proxy.
90StoreID::type SG::DataProxy::storeID() const
92 lock_t lock (m_mutex);
93 return m_tAddress.storeID();
97///< check if it is a transient ID (primary or symLinked):
99bool SG::DataProxy::transientID (CLID id) const
101 lock_t lock (m_mutex);
102 return m_tAddress.transientID (id);
106///< return the list of transient IDs (primary or symLinked):
108SG::DataProxy::CLIDCont_t SG::DataProxy::transientID() const
110 lock_t lock (m_mutex);
111 return m_tAddress.transientID();
115/// Add a new transient ID
117void SG::DataProxy::setTransientID(CLID id)
119 lock_t lock (m_mutex);
120 m_tAddress.setTransientID (id);
124/// access set of proxy aliases
125/// Returns a COPY of the alias set.
127SG::DataProxy::AliasCont_t SG::DataProxy::alias() const
129 lock_t lock (m_mutex);
130 return m_tAddress.alias();
134/// Add a new proxy alias.
136void SG::DataProxy::setAlias(const std::string& key)
138 lock_t lock (m_mutex);
139 m_tAddress.setAlias (key);
143/// Test to see if a given string is in the alias set.
145bool SG::DataProxy::hasAlias(const std::string& key) const
147 lock_t lock (m_mutex);
148 return m_tAddress.hasAlias (key);
152/// remove alias from proxy
154bool SG::DataProxy::removeAlias(const std::string& key)
156 lock_t lock (m_mutex);
157 return m_tAddress.removeAlias (key);
161/// Return the address provider.
163IAddressProvider* SG::DataProxy::provider()
165 lock_t lock (m_mutex);
166 return m_tAddress.provider();
170/// Set the address provider.
172void SG::DataProxy::setProvider(IAddressProvider* provider,
173 StoreID::type storeID)
175 lock_t lock (m_mutex);
176 m_tAddress.setProvider (provider, storeID);
180/// Set the CLID / key.
181/// This will only succeed if the clid/key are currently clear.
183void SG::DataProxy::setID (CLID id, const std::string& key)
185 lock_t lock (m_mutex);
186 m_tAddress.setID (id, key);
192bool SG::DataProxy::isValid() const
194 return (isValidObject() || isValidAddress());
198/// is the object valid?
200bool SG::DataProxy::isValidObject() const
202 // FIXME: should we try to chase?
203 return (0!= m_dObject);
207/// Access DataObject on-demand using conversion service
208///@throws runtime_error when converter fails
210DataObject* SG::DataProxy::accessData()
212 // Inlined part: return m_dObject if it's valid.
213 // Otherwise, call the out-of-line part of the code.
214 if (0 != m_dObject) return m_dObject; // cached object
215 return accessDataOol();
220SG::DataProxy::ErrNo SG::DataProxy::errNo() const
222 lock_t lock (m_objMutex);
229CLID SG::DataProxy::clID() const
231 // No lock; underlying member is atomic.
232 return m_tAddress.clID();
236/// Check if it is a const object
238bool SG::DataProxy::isConst() const
240 // No lock; underlying member is atomic.
245/// set the reset only flag: Clear Store will reset and not delete.
247void SG::DataProxy::resetOnly(const bool& flag)
249 lock_t lock (m_mutex);
256bool SG::DataProxy::isResetOnly() const
258 lock_t lock (m_mutex);
263/// Set the store of which we're a part.
265void SG::DataProxy::setStore (IProxyDict* store)
270/// Return the store of which we're a part.
272IProxyDict* SG::DataProxy::store()
278/// Return the store of which we're a part.
280const IProxyDict* SG::DataProxy::store() const
287IConverter* SG::DataProxy::loader()
289 lock_t lock (m_mutex);