ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Classes | Public Types | Public Member Functions | Static Public Attributes | Protected Types | Protected Member Functions | Protected Attributes | Private Attributes | List of all members
xAOD::details::AuxStoreBase Class Referenceabstract

Common base class for the auxiliary store implementations. More...

#include <AuxStoreBase.h>

Inheritance diagram for xAOD::details::AuxStoreBase:
Collaboration diagram for xAOD::details::AuxStoreBase:

Classes

struct  Members
 Struct collecting all member variables of this base class. More...
 

Public Types

enum  EStructMode { EStructMode::kUndefinedStore = 0, EStructMode::kContainerStore = 1, EStructMode::kObjectStore = 2 }
 "Structural" modes of the object More...
 

Public Member Functions

 AuxStoreBase (bool topStore=true, EStructMode mode=EStructMode::kUndefinedStore)
 Constructor. More...
 
virtual ~AuxStoreBase ()
 Destructor. More...
 
EStructMode structMode () const
 Get what structure mode the object was constructed with. More...
 
void setStructMode (EStructMode mode)
 Set the structure mode of the object to a new value. More...
 
const std::string & prefix () const
 Get the currently configured object name prefix. More...
 
virtual void setPrefix (std::string_view prefix)=0
 Set the object name prefix. More...
 
bool isTopStore () const
 Check if the object is a "top store", or not. More...
 
void setTopStore (bool value=true)
 Set whether the object should behave as a "top store" or not. More...
 
virtual void * getData (auxid_t auxid, size_t size, size_t capacity)=0
 Return the data vector for one aux data item. More...
 
virtual const void * getData (SG::auxid_t auxid) const=0
 Pick up the const version from the base class. More...
 
virtual bool resize (size_t sz)=0
 Change the size of all aux data vectors. More...
 
virtual void reserve (size_t sz)=0
 Change the capacity of all aux data vectors. More...
 
virtual void shift (size_t pos, ptrdiff_t offs)=0
 Shift the elements of the container. More...
 
virtual bool insertMove (size_t pos, IAuxStore &other, const SG::auxid_set_t &ignore=SG::auxid_set_t())=0
 Move all elements from other to this store. More...
 
virtual bool setOption (auxid_t, const AuxDataOption &)
 Set an option for a given auxiliary variable. More...
 
virtual const IAuxTypeVector * linkedVector (SG::auxid_t) const
 Return interface for a linked variable. More...
 
virtual void * getDecoration (auxid_t auxid, size_t size, size_t capacity)=0
 Return the data vector for one aux data decoration item. More...
 

Static Public Attributes

static constexpr bool supportsThinning = true
 Mark that this type supports thinning operations. More...
 

Protected Types

using mutex_t = AthContainers_detail::mutex
 Mutex type for multithread synchronization. More...
 
using guard_t = AthContainers_detail::lock_guard< mutex_t >
 Guard type for multithreaded synchronisation. More...
 

Protected Member Functions

bool isAuxIDSelected (SG::auxid_t auxid) const
 Check if an auxiliary variable is selected for ouput writing. More...
 
Functions needed from the derived classes
virtual void reset ()=0
 Reset all (transient) information in the object. More...
 
virtual bool hasEntryFor (SG::auxid_t auxid) const =0
 Check if a given variable is available from the input. More...
 
virtual StatusCode getEntryFor (SG::auxid_t auxid)=0
 Load a single variable from the input. More...
 
virtual bool hasOutput () const =0
 Check if an output is being written by the object. More...
 
virtual StatusCode setupInputData (SG::auxid_t auxid)=0
 Connect a variable to the input. More...
 
virtual StatusCode setupOutputData (SG::auxid_t auxid)=0
 Connect a variable to the output. More...
 
virtual const void * getInputObject (SG::auxid_t auxid) const =0
 Get a pointer to an input object, as it is in memory, for getIOData() More...
 
virtual const std::type_info * getInputType (SG::auxid_t auxid) const =0
 Get the type of an input object, for getIOType() More...
 

Protected Attributes

Members m_data
 Member variables of the base class. More...
 

Private Attributes

AuxSelection m_selection
 Object helping to select which auxiliary variables to write. More...
 
bool m_locked = false
 Is this container locked? More...
 
mutex_t m_mutex1
 Mutex objects used for multithreaded synchronisation. More...
 
mutex_t m_mutex2
 

Detailed Description

Common base class for the auxiliary store implementations.

This class provides the common functionality for the auxiliary store implementations in xAODRootAccess. Reducing the amount of code duplication in the different classes.

Definition at line 26 of file AuxStoreBase.h.

Member Typedef Documentation

◆ guard_t

using xAOD::details::AuxStoreBase::guard_t = AthContainers_detail::lock_guard<mutex_t>
protected

Guard type for multithreaded synchronisation.

Definition at line 206 of file AuxStoreBase.h.

◆ mutex_t

using xAOD::details::AuxStoreBase::mutex_t = AthContainers_detail::mutex
protected

Mutex type for multithread synchronization.

Definition at line 204 of file AuxStoreBase.h.

Member Enumeration Documentation

◆ EStructMode

"Structural" modes of the object

Enumerator
kUndefinedStore 

The structure mode is not defined.

kContainerStore 

The object describes an entire container.

kObjectStore 

The object describes a single object.

Definition at line 30 of file AuxStoreBase.h.

30  {
31  kUndefinedStore = 0,
32  kContainerStore = 1,
33  kObjectStore = 2
34  };

Constructor & Destructor Documentation

◆ AuxStoreBase()

xAOD::details::AuxStoreBase::AuxStoreBase ( bool  topStore = true,
EStructMode  mode = EStructMode::kUndefinedStore 
)

Constructor.

Definition at line 22 of file AuxStoreBase.cxx.

23  : m_data{mode, topStore} {}

◆ ~AuxStoreBase()

xAOD::details::AuxStoreBase::~AuxStoreBase ( )
virtualdefault

Destructor.

Member Function Documentation

◆ clearDecorations()

bool xAOD::details::AuxStoreBase::clearDecorations ( )
overridevirtual

Remove the decorations added so far.

Only works for transient decorations.

Implements SG::IConstAuxStore.

Definition at line 207 of file AuxStoreBase.cxx.

207  {
208 
209  // Guard against multi-threaded execution:
210  guard_t guard(m_mutex1);
211 
212  // Clear the transient decorations:
213  bool anycleared = false;
214  if (m_data.m_transientStore) {
215  SG::auxid_set_t old_id_set = m_data.m_transientStore->getAuxIDs();
216 
217  // Clear the decorations from the transient store:
218  anycleared = m_data.m_transientStore->clearDecorations();
219 
220  // Now remove ids that were cleared.
221  if (anycleared) {
222  old_id_set -= m_data.m_transientStore->getAuxIDs();
223  // old_id_set is now the set of ids that were cleared.
224  m_data.m_auxIDs -= old_id_set;
226  }
227  }
228 
229  // The decorations which are going into the output file, are here to stay.
230  // Removing their IDs from the internal set would just cause more problems
231  // in my mind than just leaving them be.
232 
233  return anycleared;
234 }

◆ getAuxIDs()

const SG::auxid_set_t & xAOD::details::AuxStoreBase::getAuxIDs ( ) const
overridevirtual

Get the types(names) of variables handled by this container.

Implements SG::IConstAuxStore.

Definition at line 99 of file AuxStoreBase.cxx.

99  {
100 
101  return m_data.m_auxIDs;
102 }

◆ getData() [1/4]

virtual void* SG::IAuxStore::getData ( auxid_t  auxid,
size_t  size,
size_t  capacity 
)
pure virtualinherited

Return the data vector for one aux data item.

Parameters
auxidThe identifier of the desired aux data item.
sizeThe current size of the container (in case the data item does not already exist).
capacityThe current capacity of the container (in case the data item does not already exist).

Each aux data item is stored as a vector, with one entry per entry in the owning container. This returns a pointer to the start of the vector.

If the data item does not exist, it should be created and initialized to default values. size and capacity give the size for the new aux data item vector.

If the container is locked, throw an exception.

Implemented in SG::AuxStoreInternal, APRTest::AuxStore, RootAuxDynStore, xAOD::AuxContainerBase, xAOD::ShallowAuxContainer, xAOD::AuxInfoBase, and xAOD::ByteStreamAuxContainer_v1.

◆ getData() [2/4]

const void * xAOD::details::AuxStoreBase::getData ( SG::auxid_t  auxid) const
overridevirtual

Get a pointer to a given array.

Implements SG::IConstAuxStore.

Definition at line 54 of file AuxStoreBase.cxx.

54  {
55 
56  const SG::IAuxTypeVector* v = getVector(auxid);
57  if (v) {
58  return v->toPtr();
59  }
60  return nullptr;
61 }

◆ getData() [3/4]

virtual const void* SG::IConstAuxStore::getData
inherited

Pick up the const version from the base class.

◆ getData() [4/4]

void * xAOD::details::AuxStoreBase::getData ( SG::auxid_t  auxid,
std::size_t  size,
std::size_t  capacity 
)
overridevirtual

Get a pointer to a given array, creating the array if necessary.

Definition at line 299 of file AuxStoreBase.cxx.

300  {
301 
302  // Guard against multi-threaded execution:
303  guard_t guard(m_mutex2);
304 
305  // Remember the size:
306  m_data.m_size = size;
307 
308  // Check if we want to write this variable to the output:
309  if (!(isAuxIDSelected(auxid) && hasOutput())) {
310  // Create the store only when necessary:
311  if (!m_data.m_transientStore) {
312  m_data.m_transientStore = std::make_unique<SG::AuxStoreInternal>(
314  if (m_locked) {
315  m_data.m_transientStore->lock();
316  }
317  }
318  // Let the transient store create the variable:
319  std::size_t nids = m_data.m_transientStore->getAuxIDs().size();
320  void* result = m_data.m_transientStore->getData(auxid, size, capacity);
321  if (result && (nids != m_data.m_transientStore->getAuxIDs().size())) {
322  m_data.m_auxIDs.insert(auxid);
323  }
324  // Return the address in the transient memory:
325  return result;
326  }
327 
328  // If the variable exists already, and this is a locked store, then
329  // we are in trouble.
330  if (m_locked && (auxid < m_data.m_vecs.size()) && m_data.m_vecs[auxid]) {
331  if (!((auxid < m_data.m_isDecoration.size()) &&
332  m_data.m_isDecoration[auxid])) {
333  throw SG::ExcStoreLocked(auxid);
334  }
335  }
336 
337  // Connect this auxiliary variable just to the output:
338  if (setupOutputData(auxid).isFailure()) {
339  ::Error("xAOD::AuxStoreBase::getData",
340  XAOD_MESSAGE("Failed to set up variable %s"),
341  SG::AuxTypeRegistry::instance().getName(auxid).c_str());
342  return nullptr;
343  }
344 
345  // Check whether things make sense:
346  if ((m_data.m_structMode == EStructMode::kObjectStore) && (size != 1)) {
347  ::Error("xAOD::AuxStoreBase::getData",
348  XAOD_MESSAGE("Branch creation requested with:"));
349  ::Error("xAOD::AuxStoreBase::getData", XAOD_MESSAGE(" name = %s"),
350  SG::AuxTypeRegistry::instance().getName(auxid).c_str());
351  ::Error("xAOD::AuxStoreBase::getData", XAOD_MESSAGE(" size = %i"),
352  static_cast<int>(size));
353  ::Error("xAOD::AuxStoreBase::getData",
354  XAOD_MESSAGE(" m_structMode = EStructMode::kObjectStore"));
355  return nullptr;
356  }
357 
358  // Make sure the variable is of the right size:
359  m_data.m_vecs[auxid]->reserve(capacity);
360  m_data.m_vecs[auxid]->resize(size);
361 
362  // Return the object:
363  return m_data.m_vecs[auxid]->toPtr();
364 }

◆ getDecoration() [1/2]

virtual void* SG::IConstAuxStore::getDecoration ( auxid_t  auxid,
size_t  size,
size_t  capacity 
)
pure virtualinherited

Return the data vector for one aux data decoration item.

Parameters
auxidThe identifier of the desired aux data item.
sizeThe current size of the container (in case the data item does not already exist).
capacityThe current capacity of the container (in case the data item does not already exist).

Each aux data item is stored as a vector, with one entry per entry in the owning container. This returns a pointer to the start of the vector.

If the data item does not exist, it then it will be created and initialized with default values. If the container is locked, then the new item will be marked as a decoration. size and capacity give the size for the new aux data item vector.

If the data item already exists, then we return it if either the container is not locked or the item is marked as a decoration. Otherwise we throw an exception.

Implemented in xAOD::EventAuxInfo_v1, xAOD::EventInfoAuxContainer_v1, xAOD::EventAuxInfo_v2, xAOD::EventAuxInfo_v3, RootAuxDynStore, SG::AuxStoreInternal, xAOD::AuxContainerBase, xAOD::ShallowAuxContainer, xAOD::AuxInfoBase, SG::AuxStoreConstMem, and xAOD::ByteStreamAuxContainer_v1.

◆ getDecoration() [2/2]

void * xAOD::details::AuxStoreBase::getDecoration ( SG::auxid_t  auxid,
std::size_t  size,
std::size_t  capacity 
)
overridevirtual

Get a pointer to a given array, creating the array if necessary.

Definition at line 109 of file AuxStoreBase.cxx.

110  {
111 
112  // Guard against multi-threaded execution:
113  guard_t guard(m_mutex1);
114 
115  // Remember the requested size:
116  m_data.m_size = size;
117 
118  // If this is a locked object, deal with it correctly:
119  if (m_locked) {
120  // If the variable exists already and it's a decoration, then let's
121  // give it back.
122  if ((auxid < m_data.m_vecs.size()) && m_data.m_vecs[auxid] &&
123  (auxid < m_data.m_isDecoration.size() &&
124  m_data.m_isDecoration[auxid])) {
125  // Things look okay...
126  m_data.m_vecs[auxid]->reserve(capacity);
127  m_data.m_vecs[auxid]->resize(size);
128  return m_data.m_vecs[auxid]->toPtr();
129  }
130  // If it's in the transient store already, return it from there.
131  // Since in a locked store *everything* is a decoration in the
132  // transient store.
133  if (m_data.m_transientStore &&
134  m_data.m_transientStore->getAuxIDs().test(auxid)) {
135  return m_data.m_transientStore->getDecoration(auxid, size, capacity);
136  }
137  // If we know this auxiliary ID, but it was not found as a decoration
138  // by the previous checks, then we're in trouble.
139  if (m_data.m_auxIDs.test(auxid)) {
140  throw SG::ExcStoreLocked(auxid);
141  }
142  }
143 
144  // Check if we want to write this variable to the output:
145  if (!(isAuxIDSelected(auxid) && hasOutput())) {
146 
147  // Create the store only when necessary:
148  if (!m_data.m_transientStore) {
149  m_data.m_transientStore = std::make_unique<SG::AuxStoreInternal>(
151  if (m_locked) {
152  m_data.m_transientStore->lock();
153  }
154  }
155  // Let the transient store create the decoration:
156  const std::size_t nids = m_data.m_transientStore->getAuxIDs().size();
157  void* result =
158  m_data.m_transientStore->getDecoration(auxid, size, capacity);
159  if (result && (nids != m_data.m_transientStore->getAuxIDs().size())) {
160  m_data.m_auxIDs.insert(auxid);
161  if (m_data.m_transientStore->isDecoration(auxid)) {
162  m_data.m_decorIDs.insert(auxid);
163  }
164  }
165  // Return the memory address from the transient store:
166  return result;
167  }
168 
169  // Doesn't exist yet. So let's make it:
170  void* result = getData(auxid, size, capacity);
171  if (m_locked) {
172  // If the container is locked, remember that this is a decoration:
173  if (m_data.m_isDecoration.size() <= auxid) {
174  m_data.m_isDecoration.resize(auxid + 1);
175  }
176  m_data.m_isDecoration[auxid] = true;
177  m_data.m_decorIDs.insert(auxid);
178  }
179 
180  // Return the pointer made by getData(...):
181  return result;
182 }

◆ getDecorIDs()

const SG::auxid_set_t & xAOD::details::AuxStoreBase::getDecorIDs ( ) const
overridevirtual

Get the types(names) of decorations handled by this container.

Implements SG::IConstAuxStore.

Definition at line 104 of file AuxStoreBase.cxx.

104  {
105 
106  return m_data.m_decorIDs;
107 }

◆ getDynamicAuxIDs()

const SG::auxid_set_t & xAOD::details::AuxStoreBase::getDynamicAuxIDs ( ) const
overridevirtual

Get the types(names) of variables created dynamically.

Implements SG::IAuxStoreIO.

Definition at line 608 of file AuxStoreBase.cxx.

608  {
609 
610  // All the auxiliary decorations handled by this object are considered
611  // dynamic:
612  return getAuxIDs();
613 }

◆ getEntryFor()

virtual StatusCode xAOD::details::AuxStoreBase::getEntryFor ( SG::auxid_t  auxid)
protectedpure virtual

Load a single variable from the input.

Implemented in xAOD::TAuxStore, and xAOD::RAuxStore.

◆ getInputObject()

virtual const void* xAOD::details::AuxStoreBase::getInputObject ( SG::auxid_t  auxid) const
protectedpure virtual

Get a pointer to an input object, as it is in memory, for getIOData()

Implemented in xAOD::TAuxStore, and xAOD::RAuxStore.

◆ getInputType()

virtual const std::type_info* xAOD::details::AuxStoreBase::getInputType ( SG::auxid_t  auxid) const
protectedpure virtual

Get the type of an input object, for getIOType()

Implemented in xAOD::TAuxStore, and xAOD::RAuxStore.

◆ getIOData()

const void * xAOD::details::AuxStoreBase::getIOData ( SG::auxid_t  auxid) const
overridevirtual

Get a pointer to the data being stored for one aux data item.

Implements SG::IAuxStoreIO.

Definition at line 510 of file AuxStoreBase.cxx.

510  {
511 
512  // Guard against multi-threaded execution:
513  guard_t guard(m_mutex1);
514 
515  auto this_nc ATLAS_THREAD_SAFE =
516  const_cast<AuxStoreBase*>(this); // locked above
517 
518  // If the variable is coming from the input, and is connected to already.
519  if (hasEntryFor(auxid)) {
520  if (!this_nc->getEntryFor(auxid).isSuccess()) {
521  ::Error("xAOD::AuxStoreBase::getIOData",
522  XAOD_MESSAGE("Couldn't read in variable %s"),
523  SG::AuxTypeRegistry::instance().getName(auxid).c_str());
524  return nullptr;
525  }
526  return getInputObject(auxid);
527  }
528 
529  // Check if it's in the transient store:
530  if (m_data.m_transientStore &&
531  m_data.m_transientStore->getAuxIDs().test(auxid)) {
532  return m_data.m_transientStore->getIOData(auxid);
533  }
534 
535  // If not, try connecting to it now:
536  if (!this_nc->setupInputData(auxid).isSuccess()) {
537  // This is not actually an error condition anymore. We can end up here
538  // when we decorate constant objects coming from the input file, but
539  // on one event we can't set any decorations. For instance when the
540  // input container is empty. In that case the object will still list
541  // the auxiliary ID belonging to that decoration as being available,
542  // but it really isn't.
543  //
544  // Later on it might be needed to tweak the logic of all of this, but
545  // for now just silently returning 0 seems to do the right thing.
546  return nullptr;
547  }
548 
549  // Now we should know this variable:
550  if (!hasEntryFor(auxid)) {
551  ::Fatal("xAOD::AuxStoreBase::getIOData",
552  XAOD_MESSAGE("Internal logic error detected"));
553  return nullptr;
554  }
555 
556  // Make sure that the right payload is in memory:
557  if (!this_nc->getEntryFor(auxid).isSuccess()) {
558  ::Error("xAOD::AuxStoreBase::getIOData",
559  XAOD_MESSAGE("Couldn't read in variable %s"),
560  SG::AuxTypeRegistry::instance().getName(auxid).c_str());
561  return nullptr;
562  }
563 
564  // Return the pointer.
565  return getInputObject(auxid);
566 }

◆ getIOType()

const std::type_info * xAOD::details::AuxStoreBase::getIOType ( SG::auxid_t  auxid) const
overridevirtual

Return the type of the data to be stored for one aux data item.

Implements SG::IAuxStoreIO.

Definition at line 569 of file AuxStoreBase.cxx.

569  {
570 
571  // Guard against multi-threaded execution:
572  guard_t guard(m_mutex1);
573 
574  // If the variable is connected to already:
575  if (hasEntryFor(auxid)) {
576  return getInputType(auxid);
577  }
578 
579  // Check if it's in the transient store:
580  if (m_data.m_transientStore &&
581  m_data.m_transientStore->getAuxIDs().test(auxid)) {
582  return m_data.m_transientStore->getIOType(auxid);
583  }
584 
585  // If not, try connecting to it now:
586  auto this_nc ATLAS_THREAD_SAFE =
587  const_cast<AuxStoreBase*>(this); // locked above
588  if (!this_nc->setupInputData(auxid).isSuccess()) {
589  ::Error("xAOD::AuxStoreBase::getIOType",
590  XAOD_MESSAGE("Couldn't connect to auxiliary variable "
591  "%i %s"),
592  static_cast<int>(auxid),
593  SG::AuxTypeRegistry::instance().getName(auxid).c_str());
594  return nullptr;
595  }
596 
597  // Now we should know this variable:
598  if (!hasEntryFor(auxid)) {
599  ::Fatal("xAOD::AuxStoreBase::getIOType",
600  XAOD_MESSAGE("Internal logic error detected"));
601  return nullptr;
602  }
603 
604  // Return the type info:
605  return getInputType(auxid);
606 }

◆ getSelectedAuxIDs()

SG::auxid_set_t xAOD::details::AuxStoreBase::getSelectedAuxIDs ( ) const
overridevirtual

Get the IDs of the selected aux variables.

Reimplemented from SG::IAuxStoreIO.

Definition at line 623 of file AuxStoreBase.cxx.

623  {
624 
625  // Guard against multi-threaded execution:
626  guard_t guard(m_mutex1);
627  // Leave the calculation up to the internal object:
629 }

◆ getVector()

const SG::IAuxTypeVector * xAOD::details::AuxStoreBase::getVector ( SG::auxid_t  auxid) const
overridevirtual

Return vector interface for one aux data item.

Implements SG::IConstAuxStore.

Definition at line 63 of file AuxStoreBase.cxx.

63  {
64 
65  // Guard against multi-threaded execution:
66  guard_t guard(m_mutex1);
67 
68  // Check if the transient store already handles this variable:
70  (m_data.m_transientStore->getAuxIDs().test(auxid))) {
71  return m_data.m_transientStore->getVector(auxid);
72  }
73 
74  // Access the object through a non-const pointer. This is "safe" because
75  // of the mutex lock above.
76  auto this_nc ATLAS_THREAD_SAFE = const_cast<AuxStoreBase*>(this);
77 
78  // Connect this auxiliary variable both to the input and output
79  // if needed:
80  if ((auxid >= m_data.m_vecs.size()) || (!m_data.m_vecs[auxid])) {
81  if ((!this_nc->setupInputData(auxid).isSuccess()) ||
82  (!this_nc->setupOutputData(auxid).isSuccess())) {
83  return nullptr;
84  }
85  }
86 
87  // Make sure the variable is up to date:
88  if (this_nc->getEntryFor(auxid).isSuccess() == false) {
89  ::Error("xAOD::AuxStoreBase::getVector",
90  XAOD_MESSAGE("Couldn't read in variable %s"),
91  SG::AuxTypeRegistry::instance().getName(auxid).c_str());
92  return nullptr;
93  }
94 
95  // Return the pointer to the object:
96  return m_data.m_vecs[auxid].get();
97 }

◆ getWritableAuxIDs()

const SG::auxid_set_t & xAOD::details::AuxStoreBase::getWritableAuxIDs ( ) const
overridevirtual

Return a set of writable data identifiers.

Implements SG::IAuxStore.

Definition at line 366 of file AuxStoreBase.cxx.

366  {
367 
368  return getAuxIDs();
369 }

◆ hasEntryFor()

virtual bool xAOD::details::AuxStoreBase::hasEntryFor ( SG::auxid_t  auxid) const
protectedpure virtual

Check if a given variable is available from the input.

Implemented in xAOD::TAuxStore, and xAOD::RAuxStore.

◆ hasOutput()

virtual bool xAOD::details::AuxStoreBase::hasOutput ( ) const
protectedpure virtual

Check if an output is being written by the object.

Implemented in xAOD::TAuxStore, and xAOD::RAuxStore.

◆ insertMove() [1/2]

virtual bool SG::IAuxStore::insertMove ( size_t  pos,
IAuxStore other,
const SG::auxid_set_t ignore = SG::auxid_set_t() 
)
pure virtualinherited

Move all elements from other to this store.

Parameters
posThe starting index of the insertion.
otherStore from which to do the move.
ignoreSet of variables that should not be added to the store.

Let len be the size of other. The store will be increased in size by len elements, with the elements at pos being copied to pos+len. Then, for each auxiliary variable, the entire contents of that variable for other will be moved to this store at index pos. This will be done via move semantics if possible; otherwise, it will be done with a copy. Variables present in this store but not in other will have the corresponding elements default-initialized. Variables in other but not in this store will be added unless they are in ignore.

Returns true if it is known that none of the vectors' memory moved, false otherwise.

Implemented in SG::AuxStoreInternal.

◆ insertMove() [2/2]

bool xAOD::details::AuxStoreBase::insertMove ( std::size_t  pos,
SG::IAuxStore other,
const SG::auxid_set_t ignore 
)
overridevirtual

Insert contents of another store via move.

Definition at line 460 of file AuxStoreBase.cxx.

461  {
462  // Guard against multi-threaded execution:
463  guard_t guard(m_mutex1);
464 
465  // A sanity check:
467  ::Error("xAOD::AuxStoreBase::insertMove",
468  XAOD_MESSAGE("Should not have been called for single-object "
469  "store"));
470  return false;
471  }
472 
473  bool nomove = true;
474  std::size_t other_size = other.size();
475 
476  SG::auxid_set_t ignore = ignore_in;
477 
478  for (SG::auxid_t id : m_data.m_auxIDs) {
479  SG::IAuxTypeVector* v_dst = nullptr;
480  if (id < m_data.m_vecs.size()) {
481  v_dst = m_data.m_vecs[id].get();
482  }
483  if (v_dst && !v_dst->isLinked()) {
484  ignore.insert(id);
485  if (other.getData(id)) {
486  void* src_ptr = other.getData(id, other_size, other_size);
487  if (src_ptr) {
488  if (!v_dst->insertMove(pos, src_ptr, 0, other_size, other)) {
489  nomove = false;
490  }
491  }
492  } else {
493  const void* orig = v_dst->toPtr();
494  v_dst->shift(pos, other_size);
495  if (orig != v_dst->toPtr()) {
496  nomove = false;
497  }
498  }
499  }
500  }
501 
502  if (m_data.m_transientStore) {
503  if (!m_data.m_transientStore->insertMove(pos, other, ignore))
504  nomove = false;
505  }
506 
507  return nomove;
508 }

◆ isAuxIDSelected()

bool xAOD::details::AuxStoreBase::isAuxIDSelected ( SG::auxid_t  auxid) const
protected

Check if an auxiliary variable is selected for ouput writing.

This is a tricky one.

The function can't just rely on getSelectedAuxIDs, as the aux ID received here may be a new ID that the object doesn't yet know about. So we have no other choice but to check this ID explicitly.

@apram auxid The auxiliary ID that should be checked

Returns
true if the variable needs to be written out, false if not

Definition at line 639 of file AuxStoreBase.cxx.

639  {
640 
641  // A temporary object:
642  SG::auxid_set_t auxids;
643  auxids.insert(auxid);
644 
645  // Check if the auxid is returned as a selected ID:
646  return m_selection.getSelectedAuxIDs(auxids).size();
647 }

◆ isDecoration()

bool xAOD::details::AuxStoreBase::isDecoration ( SG::auxid_t  auxid) const
overridevirtual

Test if a variable is a decoration.

Implements SG::IConstAuxStore.

Definition at line 184 of file AuxStoreBase.cxx.

184  {
185  if (m_locked) {
186  if (auxid < m_data.m_isDecoration.size() && m_data.m_isDecoration[auxid]) {
187  return true;
188  }
189  if (m_data.m_transientStore) {
190  return m_data.m_transientStore->isDecoration(auxid);
191  }
192  }
193  return false;
194 }

◆ isTopStore()

bool xAOD::details::AuxStoreBase::isTopStore ( ) const

Check if the object is a "top store", or not.

Definition at line 43 of file AuxStoreBase.cxx.

43  {
44 
45  return m_data.m_topStore;
46 }

◆ linkedVector() [1/3]

const SG::IAuxTypeVector * xAOD::details::AuxStoreBase::linkedVector ( SG::auxid_t  auxid) const
overridevirtual

Return (const) interface for a linked variable.

Reimplemented from SG::IConstAuxStore.

Definition at line 272 of file AuxStoreBase.cxx.

272  {
274  SG::auxid_t linked_id = r.linkedVariable(auxid);
275  guard_t guard(m_mutex1);
276  if (linked_id < m_data.m_vecs.size()) {
277  return m_data.m_vecs[linked_id].get();
278  }
279  if (m_data.m_transientStore) {
281  ->linkedVector(auxid);
282  }
283  return nullptr;
284 }

◆ linkedVector() [2/3]

SG::IAuxTypeVector * xAOD::details::AuxStoreBase::linkedVector ( SG::auxid_t  auxid)
overridevirtual

Return (non-const) interface for a linked variable.

Reimplemented from SG::IAuxStore.

Definition at line 286 of file AuxStoreBase.cxx.

286  {
288  SG::auxid_t linked_id = r.linkedVariable(auxid);
289  guard_t guard(m_mutex1);
290  if (linked_id < m_data.m_vecs.size()) {
291  return m_data.m_vecs[linked_id].get();
292  }
293  if (m_data.m_transientStore) {
294  return m_data.m_transientStore->linkedVector(auxid);
295  }
296  return nullptr;
297 }

◆ linkedVector() [3/3]

virtual const IAuxTypeVector* SG::IConstAuxStore::linkedVector
inlineinherited

Return interface for a linked variable.

Parameters
auxidThe ID of the parent variable.

If auxid has a linked variable, then return the IAuxTypeVector describing it. Otherwise, return nullptr. May return nullptr unconditionally if this store does not support linked variables.

Definition at line 189 of file IConstAuxStore.h.

190  { return nullptr; }

◆ lock()

void xAOD::details::AuxStoreBase::lock ( )
overridevirtual

Lock the object, and don't let decorations be added.

Implements SG::IConstAuxStore.

Definition at line 196 of file AuxStoreBase.cxx.

196  {
197 
198  // Guard against multi-threaded execution:
199  guard_t guard(m_mutex1);
200 
201  m_locked = true;
202  if (m_data.m_transientStore) {
203  m_data.m_transientStore->lock();
204  }
205 }

◆ lockDecoration()

void xAOD::details::AuxStoreBase::lockDecoration ( SG::auxid_t  auxid)
overridevirtual

Lock a decoration.

Implements SG::IConstAuxStore.

Definition at line 237 of file AuxStoreBase.cxx.

237  {
238  if (m_data.m_transientStore) {
239  m_data.m_transientStore->lockDecoration(auxid);
240  }
241  m_data.m_decorIDs.erase(auxid);
242 }

◆ prefix()

const std::string & xAOD::details::AuxStoreBase::prefix ( ) const

Get the currently configured object name prefix.

Definition at line 38 of file AuxStoreBase.cxx.

38  {
39 
40  return m_data.m_prefix;
41 }

◆ reserve() [1/2]

virtual void SG::IAuxStore::reserve ( size_t  sz)
pure virtualinherited

Change the capacity of all aux data vectors.

Parameters
szThe new capacity.

This should be called when the capacity of the container changes (by reserve). This should change the capacity for the vectors for all aux data items.

Implemented in SG::AuxStoreInternal, xAOD::AuxContainerBase, xAOD::ShallowAuxContainer, xAOD::AuxInfoBase, and xAOD::ByteStreamAuxContainer_v1.

◆ reserve() [2/2]

void xAOD::details::AuxStoreBase::reserve ( std::size_t  size)
overridevirtual

Reserve a given size for the arrays.

Definition at line 404 of file AuxStoreBase.cxx.

404  {
405 
406  // Guard against multi-threaded execution:
407  guard_t guard(m_mutex1);
408 
409  // A sanity check:
410  if ((m_data.m_structMode == EStructMode::kObjectStore) && (size != 1)) {
411  ::Error("xAOD::AuxStoreBase::reserve",
412  XAOD_MESSAGE("size = %i for single-object store"),
413  static_cast<int>(size));
414  return;
415  }
416 
417  for (auto& v : m_data.m_vecs) {
418  if (v && !v->isLinked()) {
419  v->reserve(size);
420  }
421  }
422 
423  if (m_data.m_transientStore) {
424  m_data.m_transientStore->reserve(size);
425  }
426 }

◆ reset()

virtual void xAOD::details::AuxStoreBase::reset ( )
protectedpure virtual

Reset all (transient) information in the object.

Implemented in xAOD::TAuxStore, and xAOD::RAuxStore.

◆ resize() [1/2]

virtual bool SG::IAuxStore::resize ( size_t  sz)
pure virtualinherited

Change the size of all aux data vectors.

Parameters
szThe new size.

This should be called when the size of the container changes. This should resize the vectors for all aux data items.

If the size of the container grows, the new elements should be default-initialized; if it shrinks, destructors should be run as appropriate.

Should return true if it is known that none of the data pointers changed (and thus the cache does not need to be cleared), false otherwise.

Implemented in SG::AuxStoreInternal, xAOD::AuxContainerBase, xAOD::ShallowAuxContainer, xAOD::AuxInfoBase, and xAOD::ByteStreamAuxContainer_v1.

◆ resize() [2/2]

bool xAOD::details::AuxStoreBase::resize ( std::size_t  size)
overridevirtual

Resize the arrays to a given size.

Definition at line 371 of file AuxStoreBase.cxx.

371  {
372 
373  // Guard against multi-threaded execution:
374  guard_t guard(m_mutex1);
375 
376  // A sanity check:
377  if ((m_data.m_structMode == EStructMode::kObjectStore) && (size != 1)) {
378  ::Error("xAOD::AuxStoreBase::resize",
379  XAOD_MESSAGE("size = %i for single-object store"),
380  static_cast<int>(size));
381  return false;
382  }
383 
384  // Remember the new size:
385  m_data.m_size = size;
386 
387  bool nomoves = true;
388  for (auto& v : m_data.m_vecs) {
389  if (v && !v->isLinked()) {
390  if (!v->resize(size)) {
391  nomoves = false;
392  }
393  }
394  }
395  if (m_data.m_transientStore) {
396  if (!m_data.m_transientStore->resize(size)) {
397  nomoves = false;
398  }
399  }
400 
401  return nomoves;
402 }

◆ selectAux()

void xAOD::details::AuxStoreBase::selectAux ( const std::set< std::string > &  attributes)
virtual

Select dynamic auxiliary attributes for writing.

Definition at line 616 of file AuxStoreBase.cxx.

616  {
617 
618  guard_t guard(m_mutex1);
620 }

◆ setOption()

virtual bool SG::IAuxStore::setOption ( auxid_t  ,
const AuxDataOption  
)
inlinevirtualinherited

Set an option for a given auxiliary variable.

Parameters
auxidThe identifier of the desired aux data item.
optionThe option to set.

The interpretation of the option depends on the particular representation of the variable.

Returns true if the option setting was successful; false otherwise.

Reimplemented in xAOD::AuxContainerBase, xAOD::AuxInfoBase, and SG::AuxStoreInternal.

Definition at line 173 of file IAuxStore.h.

174  { return false; }

◆ setPrefix()

virtual void xAOD::details::AuxStoreBase::setPrefix ( std::string_view  prefix)
pure virtual

Set the object name prefix.

Implemented in xAOD::RAuxStore, and xAOD::TAuxStore.

◆ setStructMode()

void xAOD::details::AuxStoreBase::setStructMode ( EStructMode  mode)

Set the structure mode of the object to a new value.

Definition at line 32 of file AuxStoreBase.cxx.

32  {
33 
35  reset();
36 }

◆ setTopStore()

void xAOD::details::AuxStoreBase::setTopStore ( bool  value = true)

Set whether the object should behave as a "top store" or not.

Definition at line 48 of file AuxStoreBase.cxx.

48  {
49 
51  reset();
52 }

◆ setupInputData()

virtual StatusCode xAOD::details::AuxStoreBase::setupInputData ( SG::auxid_t  auxid)
protectedpure virtual

Connect a variable to the input.

Implemented in xAOD::TAuxStore, and xAOD::RAuxStore.

◆ setupOutputData()

virtual StatusCode xAOD::details::AuxStoreBase::setupOutputData ( SG::auxid_t  auxid)
protectedpure virtual

Connect a variable to the output.

Implemented in xAOD::TAuxStore, and xAOD::RAuxStore.

◆ shift() [1/2]

virtual void SG::IAuxStore::shift ( size_t  pos,
ptrdiff_t  offs 
)
pure virtualinherited

Shift the elements of the container.

Parameters
posThe starting index for the shift.
offsThe (signed) amount of the shift.

This operation shifts the elements in the vectors for all aux data items, to implement an insertion or deletion. offs may be either positive or negative.

If offs is positive, then the container is growing. The container size should be increased by offs, the element at pos moved to pos + offs, and similarly for following elements. The elements between pos and pos + offs should be default-initialized.

If offs is negative, then the container is shrinking. The element at pos should be moved to pos + offs, and similarly for following elements. The container should then be shrunk by -offs elements (running destructors as appropriate).

Implemented in SG::AuxStoreInternal, xAOD::AuxContainerBase, xAOD::ShallowAuxContainer, xAOD::AuxInfoBase, and xAOD::ByteStreamAuxContainer_v1.

◆ shift() [2/2]

void xAOD::details::AuxStoreBase::shift ( std::size_t  pos,
std::ptrdiff_t  offs 
)
overridevirtual

Shift the contents of the stored arrays.

Definition at line 428 of file AuxStoreBase.cxx.

428  {
429 
430  // Guard against multi-threaded execution:
431  guard_t guard(m_mutex1);
432 
433  // A sanity check:
435  ::Error("xAOD::AuxStoreBase::shift",
436  XAOD_MESSAGE("Should not have been called for single-object "
437  "store"));
438  return;
439  }
440 
441  // Adjust the size of the container:
442  if ((static_cast<std::size_t>(std::abs(offs)) > m_data.m_size) &&
443  (offs < 0)) {
444  m_data.m_size = 0;
445  } else {
446  m_data.m_size += offs;
447  }
448 
449  for (auto& v : m_data.m_vecs) {
450  if (v && !v->isLinked()) {
451  v->shift(pos, offs);
452  }
453  }
454 
455  if (m_data.m_transientStore) {
456  m_data.m_transientStore->shift(pos, offs);
457  }
458 }

◆ size()

std::size_t xAOD::details::AuxStoreBase::size ( ) const
overridevirtual

Return the number of elements in the store.

Implements SG::IConstAuxStore.

Definition at line 244 of file AuxStoreBase.cxx.

244  {
245 
246  // First, try to find a managed vector in the store:
247  for (SG::auxid_t id : m_data.m_auxIDs) {
248  // Make sure that we are still within the bounds of our vector:
249  if (id >= m_data.m_vecs.size())
250  break;
251  // Skip non-existent or linked objects:
252  if (!m_data.m_vecs[id] || m_data.m_vecs[id]->isLinked()) {
253  continue;
254  }
255  // Ask the vector for its size:
256  const std::size_t size = m_data.m_vecs[id]->size();
257  // Only accept a non-zero size. Not sure why...
258  if (size > 0) {
259  return size;
260  }
261  }
262 
263  // Check if we have a transient store, and get the size from that:
264  if (m_data.m_transientStore) {
265  return m_data.m_transientStore->size();
266  }
267 
268  // Apparently the store is empty:
269  return 0;
270 }

◆ structMode()

auto xAOD::details::AuxStoreBase::structMode ( ) const

Get what structure mode the object was constructed with.

Definition at line 27 of file AuxStoreBase.cxx.

27  {
28 
29  return m_data.m_structMode;
30 }

Member Data Documentation

◆ m_data

Members xAOD::details::AuxStoreBase::m_data
protected

Member variables of the base class.

Definition at line 201 of file AuxStoreBase.h.

◆ m_locked

bool xAOD::details::AuxStoreBase::m_locked = false
private

Is this container locked?

Definition at line 212 of file AuxStoreBase.h.

◆ m_mutex1

mutex_t xAOD::details::AuxStoreBase::m_mutex1
mutableprivate

Mutex objects used for multithreaded synchronisation.

Definition at line 214 of file AuxStoreBase.h.

◆ m_mutex2

mutex_t xAOD::details::AuxStoreBase::m_mutex2
private

Definition at line 214 of file AuxStoreBase.h.

◆ m_selection

AuxSelection xAOD::details::AuxStoreBase::m_selection
private

Object helping to select which auxiliary variables to write.

Definition at line 210 of file AuxStoreBase.h.

◆ supportsThinning

constexpr bool SG::IAuxStore::supportsThinning = true
staticconstexprinherited

Mark that this type supports thinning operations.

See AthContainers/supportsThinning.h and AthenaPoolCnvSvc/T_AthenaPoolCnv.h. Helps guide which pool converter template will be used. If false, the default pool converter will be used rather than the aux store-specific one. Ordinary xAOD type should not touch this, but may be overridden in a derived class to handle certain special cases.

Definition at line 199 of file IAuxStore.h.


The documentation for this class was generated from the following files:
SG::IAuxTypeVector::shift
virtual bool shift(size_t pos, ptrdiff_t offs)=0
Shift the elements of the vector.
SG::IAuxTypeVector::isLinked
bool isLinked() const
Return true if this variable is linked from another one.
Definition: IAuxTypeVector.h:226
beamspotman.r
def r
Definition: beamspotman.py:676
get_generator_info.result
result
Definition: get_generator_info.py:21
xAOD::details::AuxStoreBase::Members::m_vecs
std::vector< std::unique_ptr< SG::IAuxTypeVector > > m_vecs
Variables handled currently by the object (indexed by auxiliary ID)
Definition: AuxStoreBase.h:191
SG::AuxTypeRegistry::instance
static AuxTypeRegistry & instance()
Return the singleton registry instance.
Definition: AuxTypeRegistry.cxx:639
xAOD::details::AuxStoreBase::getAuxIDs
virtual const SG::auxid_set_t & getAuxIDs() const override
Get the types(names) of variables handled by this container.
Definition: AuxStoreBase.cxx:99
xAOD::details::AuxStoreBase::getInputType
virtual const std::type_info * getInputType(SG::auxid_t auxid) const =0
Get the type of an input object, for getIOType()
SG::ExcStoreLocked
Exception — Attempted to modify auxiliary data in a locked store.
Definition: Control/AthContainers/AthContainers/exceptions.h:183
xAOD::details::AuxStoreBase::Members::m_auxIDs
SG::auxid_set_t m_auxIDs
Internal list of auxiliary variable IDs handled currently by the object.
Definition: AuxStoreBase.h:186
xAOD::details::AuxStoreBase::guard_t
AthContainers_detail::lock_guard< mutex_t > guard_t
Guard type for multithreaded synchronisation.
Definition: AuxStoreBase.h:206
xAOD::details::AuxStoreBase::Members::m_transientStore
std::unique_ptr< SG::AuxStoreInternal > m_transientStore
Store for the in-memory-only variables.
Definition: AuxStoreBase.h:183
xAOD::other
@ other
Definition: TrackingPrimitives.h:510
athena.value
value
Definition: athena.py:124
xAOD::details::AuxStoreBase::Members::m_size
std::size_t m_size
The current size of the container being described.
Definition: AuxStoreBase.h:193
SG::IAuxTypeVector::insertMove
virtual bool insertMove(size_t pos, void *src, size_t src_pos, size_t src_n, IAuxStore &srcStore)=0
Insert elements into the vector via move semantics.
xAOD::details::AuxStoreBase::hasOutput
virtual bool hasOutput() const =0
Check if an output is being written by the object.
XAOD_MESSAGE
#define XAOD_MESSAGE(MESSAGE)
Simple macro for printing error/verbose messages.
Definition: Control/xAODRootAccess/xAODRootAccess/tools/Message.h:19
xAOD::details::AuxStoreBase::hasEntryFor
virtual bool hasEntryFor(SG::auxid_t auxid) const =0
Check if a given variable is available from the input.
xAOD::details::AuxStoreBase::EStructMode::kObjectStore
@ kObjectStore
The object describes a single object.
CxxUtils::ConcurrentBitset::clear
ConcurrentBitset & clear()
Clear all bits in the set.
xAOD::details::AuxStoreBase::size
virtual std::size_t size() const override
Return the number of elements in the store.
Definition: AuxStoreBase.cxx:244
dumpTruth.getName
getName
Definition: dumpTruth.py:34
xAOD::details::AuxStoreBase::Members::m_decorIDs
SG::auxid_set_t m_decorIDs
Internal list of auxiliary decoration IDs handled currently by the object.
Definition: AuxStoreBase.h:189
SG::AuxTypeRegistry
Handle mappings between names and auxid_t.
Definition: AuxTypeRegistry.h:61
DiTauMassTools::ignore
void ignore(T &&)
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:58
SG::auxid_t
size_t auxid_t
Identifier for a particular aux data item.
Definition: AuxTypes.h:27
CxxUtils::ConcurrentBitset::size
bit_t size() const
Count the number of 1 bits in the set.
xAOD::details::AuxStoreBase::reset
virtual void reset()=0
Reset all (transient) information in the object.
xAOD::details::AuxStoreBase::m_data
Members m_data
Member variables of the base class.
Definition: AuxStoreBase.h:201
CxxUtils::ConcurrentBitset::insert
ConcurrentBitset & insert(bit_t bit, bit_t new_nbits=0)
Set a bit to 1.
xAOD::details::AuxStoreBase::m_mutex2
mutex_t m_mutex2
Definition: AuxStoreBase.h:214
xAOD::details::AuxStoreBase::Members::m_prefix
std::string m_prefix
Static prefix for the branch names.
Definition: AuxStoreBase.h:178
xAOD::details::AuxStoreBase::getData
virtual const void * getData(SG::auxid_t auxid) const override
Get a pointer to a given array.
Definition: AuxStoreBase.cxx:54
Preparation.mode
mode
Definition: Preparation.py:107
xAOD::details::AuxStoreBase::setupOutputData
virtual StatusCode setupOutputData(SG::auxid_t auxid)=0
Connect a variable to the output.
xAOD::details::AuxStoreBase::getVector
virtual const SG::IAuxTypeVector * getVector(SG::auxid_t auxid) const override
Return vector interface for one aux data item.
Definition: AuxStoreBase.cxx:63
xAOD::details::AuxStoreBase::isAuxIDSelected
bool isAuxIDSelected(SG::auxid_t auxid) const
Check if an auxiliary variable is selected for ouput writing.
Definition: AuxStoreBase.cxx:639
xAOD::details::AuxStoreBase::AuxStoreBase
AuxStoreBase(bool topStore=true, EStructMode mode=EStructMode::kUndefinedStore)
Constructor.
Definition: AuxStoreBase.cxx:22
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:239
xAOD::details::AuxStoreBase::Members::m_structMode
EStructMode m_structMode
The "structural" mode of the object.
Definition: AuxStoreBase.h:174
CxxUtils::as_const_ptr
const T * as_const_ptr(const T *p)
Helper for getting a const version of a pointer.
Definition: as_const_ptr.h:32
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
xAOD::details::AuxStoreBase::getInputObject
virtual const void * getInputObject(SG::auxid_t auxid) const =0
Get a pointer to an input object, as it is in memory, for getIOData()
python.PyAthena.v
v
Definition: PyAthena.py:154
xAOD::details::AuxStoreBase::m_locked
bool m_locked
Is this container locked?
Definition: AuxStoreBase.h:212
SG::IAuxTypeVector
Abstract interface for manipulating vectors of arbitrary types.
Definition: IAuxTypeVector.h:42
xAOD::details::AuxStoreBase::m_mutex1
mutex_t m_mutex1
Mutex objects used for multithreaded synchronisation.
Definition: AuxStoreBase.h:214
collListGuids.attributes
attributes
Definition: collListGuids.py:46
SG::auxid_set_t
A set of aux data identifiers.
Definition: AuxTypes.h:47
L1Topo::Error
Error
The different types of error that can be flagged in the L1TopoRDO.
Definition: Error.h:16
ATLAS_THREAD_SAFE
#define ATLAS_THREAD_SAFE
Definition: checker_macros.h:211
xAOD::AuxSelection::selectAux
virtual void selectAux(const std::set< std::string > &attributes)
Select which variables should be written out.
Definition: AuxSelection.cxx:47
CxxUtils::ConcurrentBitset::erase
ConcurrentBitset & erase(bit_t bit)
Turn off one bit.
xAOD::details::AuxStoreBase::Members::m_isDecoration
std::vector< bool > m_isDecoration
Per variable lock status (indexed by auxiliary ID)
Definition: AuxStoreBase.h:196
xAOD::AuxSelection::getSelectedAuxIDs
virtual SG::auxid_set_t getSelectedAuxIDs(const SG::auxid_set_t &fullset) const
Return which variables were selected to be written out.
Definition: AuxSelection.cxx:62
xAOD::details::AuxStoreBase::Members::m_topStore
bool m_topStore
Flag stating whether this is a "top store".
Definition: AuxStoreBase.h:176
xAOD::details::AuxStoreBase::m_selection
AuxSelection m_selection
Object helping to select which auxiliary variables to write.
Definition: AuxStoreBase.h:210
SG::IAuxTypeVector::toPtr
virtual void * toPtr()=0
Return a pointer to the start of the vector's data.
CxxUtils::ConcurrentBitset::test
bool test(bit_t bit) const
Test to see if a bit is set.