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

Helper functions for managing PackedLink variables. More...

#include <PackedLinkVectorHelper.h>

Inheritance diagram for SG::detail::PackedLinkVectorHelperBase:
Collaboration diagram for SG::detail::PackedLinkVectorHelperBase:

Classes

class  LinkedVector
 Helper to access the IAuxTypeVector for an aux variable. More...

Public Types

using DataLinkBase = ::DataLinkBase
typedef void InitLinkFunc_t(DataLinkBase &dl, sgkey_t sgkey, IProxyDict *sg)
 Function to initialize a DataLink to a given hashed key.
using DataLinkBase_span = detail::AuxDataSpan<DataLinkBase>
 Spans over the linked DataLinks.
using const_DataLinkBase_span = detail::AuxDataConstSpan<DataLinkBase>
using PackedLinkBase_span = CxxUtils::span<PackedLinkBase>
 Span over links.

Static Public Member Functions

static IProxyDictstoreFromSpan (DataLinkBase_span &links)
 Return the current store from the first valid link in the span.
static DataLinkBase_span getLinkBaseSpan (IAuxTypeVector &linkedVec)
 Return a span over all the linked DataLinkBase's, from the linked vector.
static const_DataLinkBase_span getLinkBaseSpan (const IAuxTypeVector &linkedVec)
 Return a span over all the linked DataLinks.
static std::pair< size_t, bool > findCollectionBase (LinkedVector &linkedVec, sgkey_t sgkey, DataLinkBase_span &links, IProxyDict *sg, InitLinkFunc_t *initLinkFunc)
 Find the collection index in the linked DataLinks for a sgkey.
static bool updateLinksBase (IAuxTypeVector &linkedVec, PackedLinkBase_span &links, const const_DataLinkBase_span &srcDLinks, IProxyDict *sg, InitLinkFunc_t *initLinkFunc)
 Update collection index of a collection of PackedLink.
static bool applyThinningBase (IAuxTypeVector &linkedVec, PackedLinkBase_span &links, DataLinkBase_span &dlinks, const SG::ThinningCache *tc, IProxyDict *sg, InitLinkFunc_t *initLinkFunc)
 Apply thinning to packed links, to prepare them for output.

Static Private Member Functions

static bool resizeLinks (LinkedVector &linkedVec, size_t sz)
 Resize a linked vector of DataLinks.

Detailed Description

Helper functions for managing PackedLink variables.

Functions that don't depend on the target type.

Definition at line 43 of file PackedLinkVectorHelper.h.

Member Typedef Documentation

◆ const_DataLinkBase_span

◆ DataLinkBase

◆ DataLinkBase_span

Spans over the linked DataLinks.

These hold the span data by reference, so they update if the underlying vector changes.

Definition at line 69 of file PackedLinkVectorHelper.h.

◆ InitLinkFunc_t

typedef void SG::detail::PackedLinkVectorHelperBase::InitLinkFunc_t(DataLinkBase &dl, sgkey_t sgkey, IProxyDict *sg)

Function to initialize a DataLink to a given hashed key.

Definition at line 61 of file PackedLinkVectorHelper.h.

◆ PackedLinkBase_span

Member Function Documentation

◆ applyThinningBase()

bool SG::detail::PackedLinkVectorHelperBase::applyThinningBase ( IAuxTypeVector & linkedVec,
PackedLinkBase_span & links,
DataLinkBase_span & dlinks,
const SG::ThinningCache * tc,
IProxyDict * sg,
InitLinkFunc_t * initLinkFunc )
static

Apply thinning to packed links, to prepare them for output.

Parameters
linkedVecInterface for the linked vector of DataLinks.
linksSpan over the links to update, as PackedLinkBase.
dlinksSpan over the source link vector, as DataLinkBase.
tcThe ThinningCache for this object, if it exists.
sgThe IProxyDict of the current store. If null, take it from the links in srcDlinks, or use the global, thread-local default.
initFuncFunction to initialize a DataLink to a given hashed key.

Returns true if it is known that the payload of the linked vector has not moved. (If this is false, any caches/iterators must be assumed to be invalid.)

Definition at line 130 of file PackedLinkVectorHelper.cxx.

136{
137 bool cacheValid = true;
138 for (PackedLinkBase& l : links) {
139 if (l.collection() != 0) {
140 sgkey_t sgkey = dlinks[l.collection()].key();
141 size_t index = l.index();
142 sgkey_t sgkey_out = sgkey;
143 size_t index_out = index;
144 if (sg) {
145 sg->tryELRemap (sgkey, index, sgkey_out, index_out);
146 }
147 (void)DataProxyHolder::thin (sgkey_out, index_out, tc);
148 l.setIndex (index_out);
149 if (sgkey_out != sgkey) {
150 LinkedVector lv (linkedVec);
151 auto [index, flag] = findCollectionBase (lv, sgkey_out, dlinks,
152 sg, initLinkFunc);
153 l.setCollection (index);
154 cacheValid &= flag;
155 }
156 }
157 }
158 return cacheValid;
159}
static Double_t tc
virtual bool tryELRemap(sgkey_t sgkey_in, size_t index_in, sgkey_t &sgkey_out, size_t &index_out)
Test to see if the target of an ElementLink has moved.
static bool thin(sgkey_t &sgkey, size_t &index, const SG::ThinningCache *thinningCache)
Adjust for thinning, with explicitly provided thinning cache.
Helper to access the IAuxTypeVector for an aux variable.
static std::pair< size_t, bool > findCollectionBase(LinkedVector &linkedVec, sgkey_t sgkey, DataLinkBase_span &links, IProxyDict *sg, InitLinkFunc_t *initLinkFunc)
Find the collection index in the linked DataLinks for a sgkey.
str index
Definition DeMoScan.py:362
l
Printing final latex table to .tex output file.
uint32_t sgkey_t
Type used for hashed StoreGate key+CLID pairs.
Definition sgkey_t.h:32
sgkey(tool)
Definition common.py:1027
bool flag
Definition master.py:29

◆ findCollectionBase()

std::pair< size_t, bool > SG::detail::PackedLinkVectorHelperBase::findCollectionBase ( LinkedVector & linkedVec,
sgkey_t sgkey,
DataLinkBase_span & links,
IProxyDict * sg,
InitLinkFunc_t * initLinkFunc )
static

Find the collection index in the linked DataLinks for a sgkey.

Parameters
linkedVecHow to find the linked vector.
sgkeyHashed key for which to search.
linksSpan over the vector of DataLinks, as DataLinkBase. May be modified if the vector grows.
sgThe IProxyDict of the current store. May be null to use the global, thread-local default.
initFuncFunction to initialize a DataLink to a given hashed key.

Searches for a DataLinkBase matching sgkey in the linked vector. If not found, then a new entry is added. Returns a pair (INDEX, CACHEVALID). INDEX is the index in the vector of the sgkey (and thus the collection index to store in the PackedLink). CACHEVALID is true if it is known that the payload of the vector has not moved. (If this is false, any caches/iterators must be assumed to be invalid.)

This does not actually initialize the DataLink if the vector grows. The caller should test if the size of the span changed and if so, initialize the last element using sgkey.

Definition at line 42 of file PackedLinkVectorHelper.cxx.

47{
48 if (sgkey == 0) {
49 if (!links.empty())
50 return std::make_pair (0u, true);
51 }
52 else {
53 for (size_t i = 1; i < links.size(); ++i) {
54 if (links[i].key() == sgkey) return std::make_pair (i, true);
55 }
56 }
57 size_t oldsz = links.size();
58 size_t newsz = oldsz+1;
59 if (oldsz == 0 && sgkey != 0) {
60 newsz = 2;
61 }
62 bool cacheValid = resizeLinks (linkedVec, newsz);
63 initLinkFunc (links.back(), sgkey, sg);
64 return std::make_pair (links.size() - 1, cacheValid);
65}
static bool resizeLinks(LinkedVector &linkedVec, size_t sz)
Resize a linked vector of DataLinks.

◆ getLinkBaseSpan() [1/2]

const_DataLinkBase_span SG::detail::PackedLinkVectorHelperBase::getLinkBaseSpan ( const IAuxTypeVector & linkedVec)
static

Return a span over all the linked DataLinks.

from the linked vector.

Parameters
linkedVecInterface for the linked vector of DataLinks.

◆ getLinkBaseSpan() [2/2]

DataLinkBase_span SG::detail::PackedLinkVectorHelperBase::getLinkBaseSpan ( IAuxTypeVector & linkedVec)
static

Return a span over all the linked DataLinkBase's, from the linked vector.

Parameters
linkedVecInterface for the linked vector of DataLinkBase's.

◆ resizeLinks()

bool SG::detail::PackedLinkVectorHelperBase::resizeLinks ( LinkedVector & linkedVec,
size_t sz )
staticprivate

Resize a linked vector of DataLinks.

Parameters
linkedVecHow to find the linked vector.
szThe new size of the container.

Returns true if it is known the the underlying vector did not move.

Definition at line 171 of file PackedLinkVectorHelper.cxx.

172{
173 return linkedVec->resize (sz);
174}
static Double_t sz

◆ storeFromSpan()

IProxyDict * SG::detail::PackedLinkVectorHelperBase::storeFromSpan ( DataLinkBase_span & links)
static

Return the current store from the first valid link in the span.

If there are no valid links, then return the global default.

Parameters
linksThe span of links.

◆ updateLinksBase()

bool SG::detail::PackedLinkVectorHelperBase::updateLinksBase ( IAuxTypeVector & linkedVec,
PackedLinkBase_span & links,
const const_DataLinkBase_span & srcDLinks,
IProxyDict * sg,
InitLinkFunc_t * initLinkFunc )
static

Update collection index of a collection of PackedLink.

Parameters
linkedVecInterface for the linked vector of DataLinks.
linksSpan over the links to update, as PackedLinkBase.
srcDLinksSpan over the source link vector, as DataLinkBase.
sgThe IProxyDict of the current store. If null, take it from the links in srcDlinks, or use the global, thread-local default.
initFuncFunction to initialize a DataLink to a given hashed key.

To be used after links have been copied/moved from one container to another. The collection indices are updated to be appropriate for the destination container. Returns true if it is known that the payload of the linked vector has not moved. (If this is false, any caches/iterators must be assumed to be invalid.)

Definition at line 87 of file PackedLinkVectorHelper.cxx.

92{
93 DataLinkBase_span DLinks = getLinkBaseSpan (linkedVec);
94 if (sg == nullptr) {
95 sg = storeFromSpan (DLinks);
96 }
97 bool cacheValid = true;
98 for (PackedLinkBase& l : links) {
99 size_t in_coll = l.collection();
100 if (in_coll > 0) {
101 LinkedVector lv (linkedVec);
102 auto [index, thisValid] = findCollectionBase
103 (lv, srcDLinks.at(in_coll).key(), DLinks, sg, initLinkFunc);
104 l.setCollection (index);
105 cacheValid &= thisValid;
106 }
107 }
108 return cacheValid;
109}
detail::AuxDataSpan< DataLinkBase > DataLinkBase_span
Spans over the linked DataLinks.
static DataLinkBase_span getLinkBaseSpan(IAuxTypeVector &linkedVec)
Return a span over all the linked DataLinkBase's, from the linked vector.
static IProxyDict * storeFromSpan(DataLinkBase_span &links)
Return the current store from the first valid link in the span.

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