ATLAS Offline Software
Loading...
Searching...
No Matches
SG::DataStore Class Reference

Hold DataProxy instances associated with a store. More...

#include <DataStore.h>

Inheritance diagram for SG::DataStore:
Collaboration diagram for SG::DataStore:

Public Types

typedef IStringPool::sgkey_t sgkey_t
typedef std::map< CLID, SG::ProxyMapStoreMap
typedef StoreMap::iterator StoreIterator
typedef StoreMap::const_iterator ConstStoreIterator
typedef std::pair< SG::ConstProxyIterator, SG::ConstProxyIteratorconstProxyRange

Public Member Functions

 DataStore (IProxyDict &pool)
 Constructor.
virtual ~DataStore ()
void setStoreID (StoreID::type id)
virtual StoreID::type storeID () const override
void clearStore (bool force, bool hard, MsgStream *pmlog)
 If HARD is true, then the bound objects should also clear any data that depends on the identity of the current event store.

Implementation of IProxyRegistry.

using KeyMap_t = ConcurrentSGKeyMap<DataProxy*>
 Map of hashed sgkey -> DataProxy.
IProxyDictm_pool
 The string pool associated with this store.
std::vector< DataProxy * > m_proxies
 All proxies managed by this store.
StoreMap m_storeMap
 Maps locating proxies by clid/key.
KeyMap_t m_keyMap
StoreID::type m_storeID
T2pMap m_t2p
SmartIF< ISGAudSvcm_pSGAudSvc
bool m_noAudSvc
ISvcLocator * m_pSvcLoc
virtual StatusCode addToStore (const CLID &id, DataProxy *proxy) override
 add proxy to store.
virtual DataProxyproxy (const TransientAddress *tAddr) const override
 return proxy for a given type/key pair if key is empty returns the default proxy (currently last registered)
virtual DataProxyproxy (const CLID &id, const std::string &key=SG::DEFAULTKEY) const override
 get proxy with given id. Returns 0 to flag failure
virtual SG::DataProxyproxy_exact (sgkey_t sgkey) const override
 get proxy with given key.
SG::DataProxyproxy_exact_unlocked (sgkey_t sgkey, std::recursive_mutex &mutex) const
 Like proxy_exact, but intended to be called without holding the store lock.
virtual SG::DataProxyproxy_exact (const CLID &id, const std::string &key) const override
 get proxy with given id.
StatusCode removeProxy (DataProxy *proxy, bool forceRemove, bool hard)
 remove proxy from store, unless proxy is reset only.
StatusCode addSymLink (const CLID &linkid, DataProxy *proxy)
 add symlink to store:
virtual StatusCode addAlias (const std::string &aliasKey, DataProxy *proxy) override
 add alias to store
int typeCount (const CLID &id) const
 Count number of object of a given type in store.
StatusCode tRange (ConstStoreIterator &f, ConstStoreIterator &e) const
 Return an iterator over the StoreMap:
StatusCode pRange (const CLID &id, SG::ConstProxyIterator &f, SG::ConstProxyIterator &e) const
 Return an iterator over proxy for a given CLID:
void setPac (IPageAccessControlSvc *pac)
 set IPageAccessControlSvc ptr in T2PMap
std::vector< const DataProxy * > pacReport () const
 request an access control report, i.e. a list of proxies that have not been accessed since monitored
StatusCode t2pRegister (const void *const pTrans, DataProxy *const pPers)
 methods to query the T2PMap:
void t2pRemove (const void *const pTrans)
DataProxylocatePersistent (const void *const pTransient) const
 locate the persistent (proxy) for a given T* (void*):
void keys (const CLID &id, std::vector< std::string > &vkeys, bool includeAlias, bool onlyValid)
const std::vector< DataProxy * > & proxies () const
 All proxies managed by this store.
void setSGAudSvc ()
bool doAudit ()
StatusCode setSvcLoc ()
StatusCode removeFromKeyMap (DataProxy *proxy)
 Look for (and convert) a matching dummy proxy.
StatusCode removeProxyImpl (DataProxy *proxy, int index)
 Helper for removing a proxy.

Detailed Description

Hold DataProxy instances associated with a store.

We hold proxies in several ways, for efficiency.

First, all proxies that we manage are entered in the m_proxies vector. A given proxy appears only once in this list.

Second, m_keyMap stores proxies indexed by the hashed CLID/key. A proxy may be entered here multiple times in the case of symlinks or alias; however, the entry corresponding to what proxy->sgkey() returns is called the `primary' entry.

Third, proxies are stored by CLID/key in m_storeMap. This is a map indexed by CLID; the values are maps indexed by key. A proxy may again be stored several times in this map in the case of symlinks/aliases.

A proxy may be given to the store that has the hashed key set, but not the CLID/key. This is referred to as a `dummy' proxy. This can happen when we read a link to an object that's not described in the event's DataHeader. In this case, the proxy is entered in m_proxies and m_keyMap, but not in m_storeMap. If we later look for a proxy by CLID/key and don't find it, we also look in m_keyMap to see if a dummy proxy has been entered there. If so, that point we fill in the CLID/key fields of the proxy and also enter it in m_storeMap.

Definition at line 73 of file Control/SGTools/SGTools/DataStore.h.

Member Typedef Documentation

◆ constProxyRange

◆ ConstStoreIterator

typedef StoreMap::const_iterator SG::DataStore::ConstStoreIterator

Definition at line 81 of file Control/SGTools/SGTools/DataStore.h.

◆ KeyMap_t

Map of hashed sgkey -> DataProxy.

Definition at line 186 of file Control/SGTools/SGTools/DataStore.h.

◆ sgkey_t

◆ StoreIterator

typedef StoreMap::iterator SG::DataStore::StoreIterator

Definition at line 80 of file Control/SGTools/SGTools/DataStore.h.

◆ StoreMap

Definition at line 79 of file Control/SGTools/SGTools/DataStore.h.

Constructor & Destructor Documentation

◆ DataStore()

DataStore::DataStore ( IProxyDict & pool)

Constructor.

Parameters
poolThe string pool associated with this store.

Definition at line 29 of file Control/SGTools/src/DataStore.cxx.

30 : m_pool (pool),
31 m_storeMap(),
32 m_keyMap(KeyMap_t::Updater_t()),
35{
36 setSvcLoc().ignore();
37}
IProxyDict & m_pool
The string pool associated with this store.
StoreMap m_storeMap
Maps locating proxies by clid/key.
@ UNKNOWN
Definition StoreID.h:32

◆ ~DataStore()

DataStore::~DataStore ( )
virtual

Definition at line 40 of file Control/SGTools/src/DataStore.cxx.

41{
42 clearStore(false, true, nullptr);
43}
void clearStore(bool force, bool hard, MsgStream *pmlog)
If HARD is true, then the bound objects should also clear any data that depends on the identity of th...

Member Function Documentation

◆ addAlias()

StatusCode DataStore::addAlias ( const std::string & aliasKey,
DataProxy * proxy )
overridevirtual

add alias to store

Implements IProxyRegistry.

Definition at line 377 of file Control/SGTools/src/DataStore.cxx.

378{
379 for (CLID clid : dp->transientID()) {
380 // locate proxy map and add alias to proxymap
381 ProxyMap& pmap = m_storeMap[clid];
382
383 // check if another proxy for the same type caries the same alias.
384 // if yes, then remove that alias from that proxy and establish the
385 // alias in the new proxy.
386 // pmap.insert will overwrite, associate alias with new proxy.
387 ConstProxyIterator p_iter = pmap.find(aliasKey);
388 if (p_iter != pmap.end() && dp->clID() == p_iter->second->clID()) {
389 if (dp->name() == p_iter->second->name()) return StatusCode::SUCCESS;
390 p_iter->second->removeAlias(aliasKey);
391 p_iter->second->release();
392 }
393 dp->addRef();
394 pmap[aliasKey] = dp;
395 m_keyMap.emplace (m_pool.stringToKey (aliasKey, clid), dp);
396 }
397
398 // set alias in proxy
399 dp->setAlias(aliasKey);
400
401 return StatusCode::SUCCESS;
402}
uint32_t CLID
The Class ID type.
std::map< std::string, DataProxy * > ProxyMap
Definition ProxyMap.h:22
ProxyMap::const_iterator ConstProxyIterator
Definition ProxyMap.h:24

◆ addSymLink()

StatusCode DataStore::addSymLink ( const CLID & linkid,
DataProxy * proxy )

add symlink to store:

Definition at line 330 of file Control/SGTools/src/DataStore.cxx.

331{
332 // Make sure the symlink doesn't already exist.
333 DataProxy* exist = proxy_exact (linkid, dp->name());
334 if (exist == dp) {
335 // Entry already exists pointing at the desired proxy.
336 return StatusCode::SUCCESS;
337 }
338 else if (!exist) {
339 dp->setTransientID(linkid);
340 return addToStore(linkid, dp);
341 }
342
343 // Already an existing proxy.
344 if (exist->isValidObject()) {
345 // And it's set to something. Ok if it's the same DataObject.
346 // Otherwise fail.
347 if (exist->object() == dp->object()) {
348 dp->setTransientID(linkid);
349 return StatusCode::SUCCESS;
350 }
351 return StatusCode::FAILURE;
352 }
353 if (!dp->object()) {
354 return StatusCode::FAILURE;
355 }
356 if (exist->loader()) {
357 return StatusCode::FAILURE;
358 }
359
360 // The existing proxy is not set to anything, and it doesn't have a loader.
361 // It may have been created by a forward-declared link to a base class.
362 // In that case, set the existing proxy to also point at the same DataObject.
363 const SG::BaseInfoBase* bib = SG::BaseInfoBase::find (dp->clID());
364 if (bib && bib->is_base (exist->clID())) {
365 dp->setTransientID(linkid);
366 exist->setObject (dp->object(), false);
367 return StatusCode::SUCCESS;
368 }
369
370 // Entry already exists pointing at another proxy.
371 // Don't change the existing entry.
372 return StatusCode::FAILURE;
373}
static const BaseInfoBase * find(CLID clid)
Find the BaseInfoBase instance for clid.
Definition BaseInfo.cxx:570
bool is_base(CLID clid) const
Return true if clid is the ID of a class that is known to be a base of T.
Definition BaseInfo.cxx:344
virtual StatusCode addToStore(const CLID &id, DataProxy *proxy) override
add proxy to store.
virtual SG::DataProxy * proxy_exact(sgkey_t sgkey) const override
get proxy with given key.

◆ addToStore()

StatusCode DataStore::addToStore ( const CLID & id,
DataProxy * proxy )
overridevirtual

add proxy to store.

If this proxy has not yet been added to the store, then make an entry for it in m_proxies.

Implements IProxyRegistry.

Definition at line 140 of file Control/SGTools/src/DataStore.cxx.

141{
142 if (!dp) {
143 return StatusCode::FAILURE;
144 }
145
148 bool primary = false;
149 if (dp->store() == nullptr) {
150 m_proxies.push_back (dp);
151 primary = true;
152 }
153
154 if (id == 0 && dp->clID() == 0 && dp->sgkey() != 0) {
155 // Handle a dummied proxy.
156 m_keyMap.emplace (dp->sgkey(), dp);
157 }
158 else {
159 ProxyMap& pmap = m_storeMap[id];
160
161 // Set the primary key.
162 sgkey_t primary_sgkey = m_pool.stringToKey (dp->name(), dp->clID());
163 sgkey_t sgkey = primary_sgkey;
164 if (id != dp->clID()) {
165 sgkey = m_pool.stringToKey (dp->name(), id);
166 }
167 if (dp->sgkey() == 0) {
168 dp->setSGKey (sgkey);
169 }
170
171 if (!m_keyMap.emplace (sgkey, dp).second) {
172 if (primary) {
173 m_proxies.pop_back();
174 }
175 return StatusCode::FAILURE;
176 }
177
178 pmap.insert(ProxyMap::value_type(dp->name(), dp));
179 }
180
181 // Note : No checking if proxy already exists in store because it
182 // is already checked in StoreGateSvc.
183 // if (pmap.find(dp->name()) == pmap.end()) {
184 dp->addRef(); // The store now owns this
185 dp->setT2p(&m_t2p);
186 dp->setStore(&m_pool);
187
188 return StatusCode::SUCCESS;
189}
std::vector< DataProxy * > m_proxies
All proxies managed by this store.
sgkey(tool)
Definition common.py:1027

◆ clearStore()

void DataStore::clearStore ( bool force,
bool hard,
MsgStream * pmlog )

If HARD is true, then the bound objects should also clear any data that depends on the identity of the current event store.

(See IResetable.h.)

Be careful with changing this — it's important for performance for some analysis use cases.

Rather than dealing with erasures in m_keyMap, we first do the removals just from m_storeMap, remembering along the way the set of proxies to be removed (not reset-ony). Then if there were any such proxies, we run through the entries in m_keyMap and copy all that match one of the reset-only proxies to a new map and then swap. (We can't ask the proxy itself if it's reset-only at this point because if it isn't, it'll have been deleted.)

Go through the list of unique proxies, and run requestRelease() on each. If that returns true, then we're meant to remove this proxy from the store. Be careful that removing a proxy from the store will modify the m_proxies list, so if the proxy is successfully removed, we should not bump the index.

Definition at line 66 of file Control/SGTools/src/DataStore.cxx.

67{
70
78 std::unordered_set<DataProxy*> removed;
79
85 for (size_t i = 0; i < m_proxies.size(); ) {
86 SG::DataProxy* dp = m_proxies[i];
87 if (dp->requestRelease (force, hard)) [[unlikely]] {
88 removed.insert (dp);
89 if (removeProxyImpl (dp, i).isFailure()) {
90 ++i;
91 }
92 }
93 else {
94 ++i;
95 }
96 }
97
98 if (!removed.empty()) {
99 KeyMap_t newMap (KeyMap_t::Updater_t(), m_keyMap.capacity());
100 {
101 auto lock = newMap.lock();
102 auto ctx = KeyMap_t::Updater_t::defaultContext();
103 for (auto p : m_keyMap) {
104 if (removed.count (p.second) == 0) {
105 newMap.emplace (lock, p.first, p.second, ctx);
106 }
107 }
108 }
109 m_keyMap.swap (newMap);
110 }
111
112 // clear T2PMap
113 m_t2p.clear();
114}
ConcurrentSGKeyMap< DataProxy * > KeyMap_t
Map of hashed sgkey -> DataProxy.
StatusCode removeProxyImpl(DataProxy *proxy, int index)
Helper for removing a proxy.
virtual void lock() override
Lock the container.
#define unlikely(x)

◆ doAudit()

bool SG::DataStore::doAudit ( )
inlineprivate

Definition at line 199 of file Control/SGTools/SGTools/DataStore.h.

199 {
200 if (!m_noAudSvc) setSGAudSvc();
201 return (m_pSGAudSvc);
202 }

◆ keys()

void DataStore::keys ( const CLID & id,
std::vector< std::string > & vkeys,
bool includeAlias,
bool onlyValid )

Definition at line 119 of file Control/SGTools/src/DataStore.cxx.

121{
122 vkeys.clear();
123 for (const ProxyMap::value_type& p : m_storeMap[id]) {
124 bool includeProxy(true);
125 if (onlyValid) includeProxy=p.second->isValid();
126 if (includeAlias) {
127 if (includeProxy) vkeys.push_back(p.first);
128 }
129 else {
130 if (p.first == p.second->name() && includeProxy)
131 vkeys.push_back(p.first);
132 }
133 }
134}

◆ locatePersistent()

DataProxy * SG::DataStore::locatePersistent ( const void *const pTransient) const

locate the persistent (proxy) for a given T* (void*):

◆ pacReport()

std::vector< const DataProxy * > SG::DataStore::pacReport ( ) const
inline

request an access control report, i.e. a list of proxies that have not been accessed since monitored

Definition at line 156 of file Control/SGTools/SGTools/DataStore.h.

156{ return m_t2p.pacReport();}

◆ pRange()

StatusCode SG::DataStore::pRange ( const CLID & id,
SG::ConstProxyIterator & f,
SG::ConstProxyIterator & e ) const

Return an iterator over proxy for a given CLID:

◆ proxies()

const std::vector< DataProxy * > & SG::DataStore::proxies ( ) const

All proxies managed by this store.

Every proxy appears exactly once in this list.

◆ proxy() [1/2]

DataProxy * DataStore::proxy ( const CLID & id,
const std::string & key = SG::DEFAULTKEY ) const
overridevirtual

get proxy with given id. Returns 0 to flag failure

Implements IProxyRegistry.

Definition at line 420 of file Control/SGTools/src/DataStore.cxx.

421{
422
423 // The logic here: if a key is specified, we locate it.
424 // If we don't find it and the default key (DEFAULTKEY) is specified,
425 // then we return any existing proxy for this type as long as there
426 // is exactly one, not counting aliases. More than one would be ambiguous
427
428 ConstStoreIterator siter = m_storeMap.find(id);
429 DataProxy *p(0);
430 if (siter != m_storeMap.end())
431 {
432 const ProxyMap& pmap = siter->second;
433 ConstProxyIterator p_iter = pmap.find(key);
434 if (p_iter != pmap.end()) {
435 p=p_iter->second;
436
437 } else if (key == SG::DEFAULTKEY && !pmap.empty()) {
438 // we did not find the object using key.
439 // Now check for default object.
440 // If there are multiple entries, they must all be
441 // referring to the same proxy (aliases).
442 for (const auto& ent : pmap) {
443 if (!p) {
444 p = ent.second;
445 }
446 else if (p != ent.second) {
447 p = nullptr;
448 break;
449 }
450 }
451
452 // If that didn't work, try it again, considering only objects that
453 // are exactly the type being requested.
454 if (!p) {
455 for (const auto& ent : pmap) {
456 if (ent.second->clID() == id) {
457 if (!p) {
458 p = ent.second;
459 }
460 else if (p != ent.second) {
461 p = nullptr;
462 break;
463 }
464 }
465 }
466 }
467 }
468 else {
469 // Ok since access to DataStore is serialized by StoreGate.
470 DataStore* nc_store ATLAS_THREAD_SAFE = const_cast<DataStore*> (this);
471 p = nc_store->findDummy (id, key);
472 }
473 }
474 else {
475 // Ok since access to DataStore is serialized by StoreGate.
476 DataStore* nc_store ATLAS_THREAD_SAFE = const_cast<DataStore*> (this);
477 p = nc_store->findDummy (id, key);
478 }
479
480 if (p && m_pSGAudSvc)
481 m_pSGAudSvc->SGAudit(p->name(), id, 0, m_storeID);
482
483 return p;
484}
#define ATLAS_THREAD_SAFE
DataStore(IProxyDict &pool)
Constructor.
StoreMap::const_iterator ConstStoreIterator
const std::string DEFAULTKEY
Definition DefaultKey.h:12

◆ proxy() [2/2]

DataProxy * DataStore::proxy ( const TransientAddress * tAddr) const
overridevirtual

return proxy for a given type/key pair if key is empty returns the default proxy (currently last registered)

Implements IProxyRegistry.

Definition at line 414 of file Control/SGTools/src/DataStore.cxx.

415{
416 return proxy(tAddr->clID(), tAddr->name());
417}
virtual DataProxy * proxy(const TransientAddress *tAddr) const override
return proxy for a given type/key pair if key is empty returns the default proxy (currently last regi...
CLID clID() const
Retrieve string key:
const std::string & name() const
Get the primary (hashed) SG key.

◆ proxy_exact() [1/2]

virtual SG::DataProxy * SG::DataStore::proxy_exact ( const CLID & id,
const std::string & key ) const
overridevirtual

get proxy with given id.

Returns 0 to flag failure the key must match exactly (no wild carding for the default key)

Implements IProxyRegistry.

◆ proxy_exact() [2/2]

virtual SG::DataProxy * SG::DataStore::proxy_exact ( sgkey_t sgkey) const
overridevirtual

get proxy with given key.

Returns 0 to flag failure the key must match exactly (no wild carding for the default key)

Implements IProxyRegistry.

◆ proxy_exact_unlocked()

SG::DataProxy * SG::DataStore::proxy_exact_unlocked ( sgkey_t sgkey,
std::recursive_mutex & mutex ) const

Like proxy_exact, but intended to be called without holding the store lock.

However, the store lock still must be passed as an argument; it will be acquired should be need to call the auditor service.

◆ removeFromKeyMap()

StatusCode DataStore::removeFromKeyMap ( DataProxy * proxy)
private

Look for (and convert) a matching dummy proxy.

Remove a proxy from m_keyMap.

Parameters
idThe CLID for which to search.
keyThe key for which to search.

In some cases, we may enter into the store a `dummy' proxy, which is identified only by the hashed CLID/key pair. (This can happen when we have a link to an object that's not listed in the DataHeader; in this case, we know the only hashed key and not the CLID or key.)

This function is called after we fail to find a proxy by CLID/key. It additionally checks to see if there exists a dummy proxy with a hash matching this CLID/key. If so, the CLID/key are filled in in the proxy, and the proxy is entered in m_storeMap.

Returns either the matching proxy or 0. */ DataProxy* findDummy (CLID id, const std::string& key);

/**

Remove a proxy from m_keyMap.

Parameters
proxyThe proxy being removed.
proxyThe proxy being removed.

Definition at line 235 of file Control/SGTools/src/DataStore.cxx.

236{
237 SG::DataProxy::AliasCont_t alias_set = proxy->alias();
238 std::string name = proxy->name();
239
240 for (CLID symclid : proxy->transientID())
241 {
242 sgkey_t sgkey = m_pool.stringToKey (name, symclid);
243 m_keyMap.erase (sgkey);
244
245 for (const std::string& alias : alias_set) {
246 m_keyMap.erase (m_pool.stringToKey (alias, symclid));
247 }
248 }
249
250 return StatusCode::SUCCESS;
251}
std::vector< std::string > AliasCont_t
Definition DataProxy.h:55

◆ removeProxy()

StatusCode DataStore::removeProxy ( DataProxy * proxy,
bool forceRemove,
bool hard )

remove proxy from store, unless proxy is reset only.

Parameters
forceRemoveremove the proxy no matter what If HARD is true, then the bound objects should also clear any data that depends on the identity of the current event store. (See IResetable.h.)

Definition at line 197 of file Control/SGTools/src/DataStore.cxx.

198{
199 if (!proxy) {
200 return StatusCode::FAILURE;
201 }
202
203 if (!forceRemove && proxy->isResetOnly()) {
204 // A reset-only proxy. Don't remove it.
205 proxy->reset (hard);
206 return StatusCode::SUCCESS;
207 }
208
209 // First remove from m_keyMap.
210 // We may fail to find the entry if this is a key that has been versioned.
211 // E.g., we add aVersObj. Call this DP1.
212 // Then we add a new version of it. Call this DP2.
213 // The version logic will add the alias ';00;aVersObj' to DP1.
214 // It will also then add the alias `aVersObj' to DP2.
215 // This will overwrite the entries for DP1 in pmap and m_keyMap.
216 // If we then clear and DP2 is removed first, then the m_keyMap entry
217 // for DP1's primary key will be gone.
218 // FIXME: Should just remove the versioned key code ... it's anyway
219 // not compatible with MT.
220 removeFromKeyMap (proxy).ignore();
221
222 // Then remove from the m_storeMap and release the proxy.
223 auto it = std::find (m_proxies.begin(), m_proxies.end(), proxy);
224 if (it == m_proxies.end()) {
225 return StatusCode::FAILURE;
226 }
227 return removeProxyImpl (proxy, it - m_proxies.begin());
228}
StatusCode removeFromKeyMap(DataProxy *proxy)
Look for (and convert) a matching dummy proxy.

◆ removeProxyImpl()

StatusCode DataStore::removeProxyImpl ( DataProxy * proxy,
int index )
private

Helper for removing a proxy.

Parameters
proxyThe proxy being removed.
indexThe index of this proxy in m_proxies.

This removes the proxy from m_storeMap and releases it, but does NOT remove it from m_keyMap.

Definition at line 263 of file Control/SGTools/src/DataStore.cxx.

264{
265 proxy->setStore (nullptr);
266
267 std::string name = proxy->name();
268 CLID clid = proxy->clID();
269 SG::DataProxy::AliasCont_t alias_set = proxy->alias();
270
271 // nb. This has to be here, not just before the loop below,
272 // as the proxy may be deleted in the meantime.
273 SG::DataProxy::CLIDCont_t clids = proxy->transientID();
274
275 StoreIterator storeIter = m_storeMap.find(clid);
276 if (storeIter != m_storeMap.end()) {
277 ProxyMap& pmap = storeIter->second;
278
279 // first remove the alias key:
280 for (const std::string& alias : alias_set) {
281 if (1 == pmap.erase(alias)) proxy->release();
282 }
283
284 // Remove primary entry.
285 if (1 == pmap.erase(name)) {
286 proxy->release();
287 }
288 }
289 else {
290 // A dummy proxy.
291 proxy->release();
292 }
293
294 // Remove all symlinks too.
295 for (CLID symclid : clids)
296 {
297 if (clid == symclid) continue;
298 storeIter = m_storeMap.find(symclid);
299 if (storeIter != m_storeMap.end()) {
300 ProxyMap& pmap = storeIter->second;
301 SG::ProxyIterator it = pmap.find (name);
302 if (it != pmap.end() && it->second == proxy) {
303 storeIter->second.erase (it);
304 proxy->release();
305 }
306
307 for (const std::string& alias : alias_set) {
308 if (1 == pmap.erase (alias)) proxy->release();
309 }
310 }
311 } //symlinks loop
312
313 if (index != -1 && !m_proxies.empty()) {
314 // Remove the proxy from m_proxies. If it's not at the end, then
315 // move the proxy at the end to this proxy's index (and update the
316 // index for the other proxy stored in m_keyMap).
317 if (index != (int)m_proxies.size() - 1) {
318 m_proxies[index] = m_proxies.back();
319 }
320 m_proxies.pop_back();
321 }
322
323 return StatusCode::SUCCESS;
324}
TransientAddress::TransientClidSet CLIDCont_t
Definition DataProxy.h:54
size_t index() const
Return the index of this element within its container.
ProxyMap::iterator ProxyIterator
Definition ProxyMap.h:23

◆ setPac()

void SG::DataStore::setPac ( IPageAccessControlSvc * pac)
inline

set IPageAccessControlSvc ptr in T2PMap

Definition at line 154 of file Control/SGTools/SGTools/DataStore.h.

154{ m_t2p.setPac(pac); }

◆ setSGAudSvc()

void DataStore::setSGAudSvc ( )
private

Definition at line 52 of file Control/SGTools/src/DataStore.cxx.

52 {
53 if (!m_pSGAudSvc) {
54 //try once to get the service
55 if (!m_noAudSvc) {
56 const bool DONOTCREATE(false);
57 m_pSGAudSvc = m_pSvcLoc->service("SGAudSvc", DONOTCREATE);
58 m_noAudSvc = not m_pSGAudSvc.isValid();
59 }
60 }
61 return;
62}

◆ setStoreID()

void SG::DataStore::setStoreID ( StoreID::type id)
inline

Definition at line 92 of file Control/SGTools/SGTools/DataStore.h.

92{ m_storeID = id;}

◆ setSvcLoc()

StatusCode DataStore::setSvcLoc ( )
private

Definition at line 45 of file Control/SGTools/src/DataStore.cxx.

45 {
46 StatusCode sc(StatusCode::FAILURE);
47 m_pSvcLoc = Gaudi::svcLocator( );
48 if (!m_pSvcLoc) std::cout<<"DataStore::setSvcLoc: WARNING svcLocator not found! "<<std::endl;
49 return sc;
50}
static Double_t sc
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ storeID()

virtual StoreID::type SG::DataStore::storeID ( ) const
inlineoverridevirtual

Implements IProxyRegistry.

Definition at line 93 of file Control/SGTools/SGTools/DataStore.h.

93{ return m_storeID; }

◆ t2pRegister()

StatusCode SG::DataStore::t2pRegister ( const void *const pTrans,
DataProxy *const pPers )

methods to query the T2PMap:

◆ t2pRemove()

void SG::DataStore::t2pRemove ( const void *const pTrans)
inline

Definition at line 249 of file Control/SGTools/SGTools/DataStore.h.

250 {
251 m_t2p.t2pRemove(pTrans);
252 }

◆ tRange()

StatusCode SG::DataStore::tRange ( ConstStoreIterator & f,
ConstStoreIterator & e ) const

Return an iterator over the StoreMap:

◆ typeCount()

int DataStore::typeCount ( const CLID & id) const

Count number of object of a given type in store.

Definition at line 405 of file Control/SGTools/src/DataStore.cxx.

406{
407 ConstStoreIterator storeIter = m_storeMap.find(id);
408 if (storeIter == m_storeMap.end()) return 0;
409 return (storeIter->second).size();
410}

Member Data Documentation

◆ m_keyMap

KeyMap_t SG::DataStore::m_keyMap
private

Definition at line 187 of file Control/SGTools/SGTools/DataStore.h.

◆ m_noAudSvc

bool SG::DataStore::m_noAudSvc
private

Definition at line 198 of file Control/SGTools/SGTools/DataStore.h.

◆ m_pool

IProxyDict& SG::DataStore::m_pool
private

The string pool associated with this store.

Definition at line 176 of file Control/SGTools/SGTools/DataStore.h.

◆ m_proxies

std::vector<DataProxy*> SG::DataStore::m_proxies
private

All proxies managed by this store.

Every proxy appears exactly once in this list.

Definition at line 180 of file Control/SGTools/SGTools/DataStore.h.

◆ m_pSGAudSvc

SmartIF<ISGAudSvc> SG::DataStore::m_pSGAudSvc
private

Definition at line 197 of file Control/SGTools/SGTools/DataStore.h.

◆ m_pSvcLoc

ISvcLocator* SG::DataStore::m_pSvcLoc
private

Definition at line 204 of file Control/SGTools/SGTools/DataStore.h.

◆ m_storeID

StoreID::type SG::DataStore::m_storeID
private

Definition at line 189 of file Control/SGTools/SGTools/DataStore.h.

◆ m_storeMap

StoreMap SG::DataStore::m_storeMap
private

Maps locating proxies by clid/key.

Definition at line 183 of file Control/SGTools/SGTools/DataStore.h.

◆ m_t2p

T2pMap SG::DataStore::m_t2p
private

Definition at line 194 of file Control/SGTools/SGTools/DataStore.h.


The documentation for this class was generated from the following files: