ATLAS Offline Software
ShallowAuxContainer.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // System include(s):
6 #include <iostream>
7 #include <sstream>
8 #include <stdexcept>
9 
10 // EDM include(s):
16 
17 // Local include(s):
19 
20 namespace {
21 
22 
23 } // anonymous namespace
24 
25 
26 namespace xAOD {
27 
32  : m_selection(),
33  m_store( new SG::AuxStoreInternal( standalone ) ),
34  m_storeIO( nullptr ), m_ownsStore( true ), m_locked( false ),
35  m_parentLink(), m_parentIO( nullptr ), m_shallowIO( true ),
36  m_auxids (),
37  m_auxidsValid (false),
38  m_name( "UNKNOWN" ) {
39 
40  m_storeIO = dynamic_cast< SG::IAuxStoreIO* >( m_store );
41  }
42 
44  : SG::IAuxStore(), SG::IAuxStoreIO(), SG::IAuxStoreHolder(),
45  m_store( parent.m_store ), m_storeIO( parent.m_storeIO ),
46  m_ownsStore( false ), m_locked( parent.m_locked ),
47  m_parentLink( parent.m_parentLink ),
48  m_parentIO( parent.m_parentIO ), m_shallowIO( parent.m_shallowIO ),
49  m_auxids (),
50  m_auxidsValid (false)
51  {
52  // Keep the source unmutable during copy
53  guard_t guard( parent.m_mutex );
54  m_selection = parent.m_selection;
55  m_name = parent.m_name;
56  }
57 
64  bool standalone )
65  : m_selection(),
66  m_store( new SG::AuxStoreInternal( standalone ) ),
67  m_storeIO( nullptr ), m_ownsStore( true ), m_locked( false ),
68  m_parentLink( parent ), m_parentIO( nullptr ), m_shallowIO( true ),
69  m_auxids (),
70  m_auxidsValid (false),
71  m_name( "UNKNOWN" ) {
72 
73  m_storeIO = dynamic_cast< SG::IAuxStoreIO* >( m_store );
74  m_parentIO = dynamic_cast< const SG::IAuxStoreIO* >( m_parentLink.cptr() );
75  }
76 
78 
79  if( m_ownsStore && m_store ) {
80  delete m_store;
81  }
82  }
83 
86 
87  // Check if anything needs to be done:
88  if( this == &rhs ) {
89  return *this;
90  }
91 
92  // Keep the source unmutable during copy
93  std::scoped_lock lck{m_mutex, rhs.m_mutex};
94 
95  // Clean up if necessary:
96  if( m_ownsStore && m_store ) {
97  delete m_store;
98  m_store = nullptr;
99  }
100 
101  m_selection = rhs.m_selection;
102  m_ownsStore = false;
103  m_store = rhs.m_store;
104  m_storeIO = rhs.m_storeIO;
105  m_locked = rhs.m_locked;
107  m_parentIO = rhs.m_parentIO;
108  m_shallowIO = rhs.m_shallowIO;
109  m_name = rhs.m_name;
110  m_auxids = rhs.m_auxids;
111  m_auxidsValid= rhs.m_auxidsValid;
112 
113  // Return this object:
114  return *this;
115  }
116 
118 
119  return m_parentLink;
120  }
121 
124 
125  guard_t guard (m_mutex);
126  m_parentLink = link;
127  m_parentIO = dynamic_cast< const SG::IAuxStoreIO* >( m_parentLink.cptr() );
128  m_auxidsValid = false;
129  return;
130  }
131 
133 
134  return m_shallowIO;
135  }
136 
138 
139  guard_t guard (m_mutex);
140  m_shallowIO = value;
141  return;
142  }
143 
145  //
146  // Implementation of the SG::IAuxStoreHolder interface
147  //
148 
150  {
151  return m_store;
152  }
153 
155  {
156  return m_store;
157  }
158 
160 
161  // Check if anything needs to be done:
162  guard_t guard (m_mutex);
163  if( store == m_store ) return;
164 
165  if( m_ownsStore && m_store ) {
166  delete m_store;
167  m_store = nullptr;
168  }
169 
170  // Do the assignment:
171  m_store = store;
172  m_storeIO = dynamic_cast< SG::IAuxStoreIO* >( m_store );
173  m_ownsStore = true;
174  m_auxidsValid = false;
175 
176  return;
177  }
178 
179  //
181 
183  //
184  // Implementation of the SG::IConstAuxStore interface
185  //
186 
187  const void* ShallowAuxContainer::getData( auxid_t auxid ) const {
188 
189  guard_t guard( m_mutex );
190 
191  // Check if we have this variable ourselves. I use getData(...)
192  // instead of getAuxIDs(), as a dynamic store may not have connected
193  // to all the variables yet that it has available...
194  size_t nids = m_store->getAuxIDs().size();
195  const void* result = m_store->getData( auxid );
196  if( result ) {
197  if( nids != m_store->getAuxIDs().size() ) {
198  remakeAuxIDs();
199  }
200  return result;
201  }
202 
203  // If not, then leave it up to the parent object do deal with this:
204  if( m_parentLink.isValid() ) {
205  nids = m_parentLink->getAuxIDs().size();
206  result = m_parentLink->getData( auxid );
207  if( result && ( nids != m_parentLink->getAuxIDs().size() ) ) {
208  remakeAuxIDs();
209  }
210  return result;
211  }
212 
213  // Apparently the variable wasn't found:
214  return nullptr;
215  }
216 
219 
220  guard_t guard( m_mutex );
221  if (!m_auxidsValid) {
222  remakeAuxIDs();
223  }
224  return m_auxids;
225  }
226 
228  {
229  guard_t guard( m_mutex );
230  if (m_parentLink.isValid()) {
231  if (m_parentLink->isDecoration (auxid)) {
232  return true;
233  }
234  }
235  return m_store->isDecoration (auxid);
236  }
237 
240  size_t size,
241  size_t capacity ) {
242 
243  guard_t guard( m_mutex );
244 
245  // Check if we already have this variable by any chance.
246  const void* cptr = m_store->getData( auxid );
247 
248  // If the parent has such a variable, then we need to check one more
249  // thing. If it's a decoration on the parent, then we should be allowed
250  // to override it in this (possibly locked) shallow copy. But let's leave
251  // the logic of this up to the parent.
252  if( m_locked && m_parentLink.isValid() &&
253  ( m_parentLink->getAuxIDs().count( auxid ) > 0 ) )
254  {
255  if (!m_parentLink->isDecoration (auxid)) {
256  throw SG::ExcStoreLocked (auxid);
257  }
258  }
259 
260  // If we got this far without any exception, then let the internal store
261  // try to provide the decoration for us:
262  const size_t nids = m_store->getAuxIDs().size();
263  void* result = m_store->getDecoration( auxid, size, capacity );
264  if( result && ( nids != m_store->getAuxIDs().size() ) ) {
265  remakeAuxIDs();
266  }
267 
268  // If we already had this variable before, then don't try to overwrite it
269  // with the parent's payload, and finish here already.
270  if( cptr != nullptr ) {
271  return result;
272  }
273 
274  // If the parent doesn't have this variable, then we're done.
275  if( ! m_parentLink.isValid() ) {
276  return result;
277  }
278  const void* pptr = m_parentLink->getData( auxid );
279  if( pptr == nullptr ) {
280  return result;
281  }
282 
283  // If the variable does exist in the parent, then copy it over to this
284  // store before returning.
285 
286  // Get the registry.
288 
289  // Get the type of this variable.
290  const std::type_info* type = reg.getType( auxid );
291  if( type == nullptr ) {
292  std::ostringstream message;
293  message << "Couldn't find the type of auxiliary ID " << auxid;
294  throw std::runtime_error( message.str() );
295  }
296 
297  // And the allocator type for this variable.
298  const std::type_info* allocType = reg.getAllocType( auxid );
299  if( allocType == nullptr ) {
300  std::ostringstream message;
301  message << "Couldn't find the allocator type of auxiliary ID " << auxid;
302  throw std::runtime_error( message.str() );
303  }
304 
305  // Get the vector factory of this variable.
306  const SG::IAuxTypeVectorFactory* factory =
308  if( factory == nullptr ) {
309  std::ostringstream message;
310  message << "Couldn't find a factory for type " << type->name();
311  throw std::runtime_error( message.str() );
312  }
313 
314  // Copy each element of the parent's decoration.
315  factory->copy( auxid,
316  SG::AuxVectorInterface( *this ), 0,
318 
319  // Now we're done.
320  return result;
321  }
322 
323 
326  {
327  guard_t guard (m_mutex);
328  m_locked = true;
329  m_store->lock();
330  }
331 
332 
335  {
336  guard_t guard (m_mutex);
337  m_store->lockDecoration (auxid);
338  }
339 
340  size_t ShallowAuxContainer::size() const {
341 
342  guard_t guard( m_mutex );
343  size_t sz = m_store->size();
344  if( sz > 0 ) {
345  return sz;
346  }
347  if( m_parentLink.isValid() ) {
348  return m_parentLink->size();
349  }
350  return 0;
351  }
352 
355  {
356  guard_t guard (m_mutex);
357  bool ret = m_store->clearDecorations();
358  if (ret) {
359  remakeAuxIDs();
360  }
361  return ret;
362  }
363 
364 
365  //
367 
369  //
370  // Implementation of the SG::IAuxStore interface
371  //
372 
374  size_t capacity ) {
375 
376  guard_t guard (m_mutex);
377 
378  // Check if we already have this variable by any chance.
379  const void* cptr = m_store->getData( auxid );
380 
381  // Create the variable in the dynamic store:
382  void* ptr = m_store->getData( auxid, size, capacity );
383 
384  remakeAuxIDs();
385 
386  // If in some weird way we already had this variable before, then don't
387  // try to overwrite it with the parent's payload, and finish here already.
388  if( cptr != nullptr ) {
389  return ptr;
390  }
391 
392  // If the parent doesn't have this variable, then we're done already:
393  if( ! m_parentLink.isValid() ) {
394  return ptr;
395  }
396  const void* pptr = m_parentLink->getData( auxid );
397  if( ! pptr ) {
398  return ptr;
399  }
400 
401  // If the variable does exist in the parent, then copy it over to this
402  // store before returning.
403 
404  // Get the registry:
406 
407  // Get the type of this variable:
408  const std::type_info* type = reg.getType( auxid );
409  if( type == nullptr ) {
410  std::ostringstream message;
411  message << "Couldn't find the type of auxiliary ID " << auxid;
412  throw std::runtime_error( message.str() );
413  }
414 
415  // And the allocator type for this variable.
416  const std::type_info* allocType = reg.getAllocType( auxid );
417  if( allocType == nullptr ) {
418  std::ostringstream message;
419  message << "Couldn't find the allocator type of auxiliary ID " << auxid;
420  throw std::runtime_error( message.str() );
421  }
422 
423  // First let's get the vector factory of this variable:
424  const SG::IAuxTypeVectorFactory* factory =
426  if( factory == nullptr ) {
427  std::ostringstream message;
428  message << "Couldn't find a factory for type " << type->name();
429  throw std::runtime_error( message.str() );
430  }
431 
432  // Copy each element of the parent's decoration:
433  factory->copy( auxid,
434  SG::AuxVectorInterface( *this ), 0,
436 
437  // Now we're done:
438  return ptr;
439  }
440 
443 
444  // Only the variables in the dynamic store are writable. Maybe not
445  // even all of those...
446  return m_store->getWritableAuxIDs();
447  }
448 
450  {
451  if (size == this->size()) {
452  return false;
453  }
454  // Nope, not allowed...
455  throw std::runtime_error( "Trying to call resize on a shallow copy "
456  "container" );
457  }
458 
459  void ShallowAuxContainer::reserve( size_t /*size*/ ) {
460 
461  // Nope, not allowed...
462  throw std::runtime_error( "Trying to call reserve on a shallow copy "
463  "container" );
464  }
465 
466  void ShallowAuxContainer::shift( size_t /*pos*/, ptrdiff_t /*offs*/ ) {
467 
468  // Nope, not allowed...
469  throw std::runtime_error( "Trying to call shift on a shallow copy "
470  "container" );
471  }
472 
473  bool ShallowAuxContainer::insertMove( size_t /*pos*/,
474  IAuxStore& /*other*/,
475  const SG::auxid_set_t& /*ignore*/) {
476 
477  // Nope, not allowed...
478  throw std::runtime_error( "Trying to call insertMove on a shallow copy "
479  "container" );
480  }
481 
482  //
484 
486  //
487  // Implementation of the SG::IAuxStoreIO interface
488  //
489 
490  const void* ShallowAuxContainer::getIOData( auxid_t auxid ) const {
491 
492  guard_t guard (m_mutex);
493  // Do we have it?
494  if( m_storeIO && m_store->getAuxIDs().test (auxid)) {
495  return m_storeIO->getIOData( auxid );
496  }
497 
498  // Do we have a parent that has it?
499  const SG::IAuxStoreIO* parentIO = m_parentIO;
500  if( ( parentIO == nullptr ) && m_parentLink.isValid() ) {
501  parentIO =
502  dynamic_cast< const SG::IAuxStoreIO* >( m_parentLink.cptr() );
503  }
504  if( parentIO ) {
505  return parentIO->getIOData( auxid );
506  }
507 
508  // If not, then where did this variable come from?!?
509  std::cerr << "ERROR xAOD::ShallowAuxContainer::getIOData Unknown "
510  << "variable ("
512  << ") requested" << std::endl;
513  return nullptr;
514  }
515 
516  const std::type_info* ShallowAuxContainer::getIOType( auxid_t auxid ) const {
517 
518  guard_t guard (m_mutex);
519  // Do we have it?
520  if( m_storeIO && m_store->getAuxIDs().test (auxid)) {
521  return m_storeIO->getIOType( auxid );
522  }
523 
524  // Do we have a parent that has it?
525  const SG::IAuxStoreIO* parentIO = m_parentIO;
526  if( ( parentIO == nullptr ) && m_parentLink.isValid() ) {
527  parentIO =
528  dynamic_cast< const SG::IAuxStoreIO* >( m_parentLink.cptr() );
529  }
530  if( parentIO ) {
531  return parentIO->getIOType( auxid );
532  }
533 
534  // If not, then where did this variable come from?!?
535  std::cerr << "ERROR xAOD::ShallowAuxContainer::getIOType Unknown "
536  << "variable ("
538  << ") requested" << std::endl;
539  return nullptr;
540  }
541 
544 
545  if( m_shallowIO ) {
546  if( m_storeIO ) {
547  return m_store->getAuxIDs();
548  } else {
549  static const auxid_set_t dummy (0);
550  return dummy;
551  }
552  } else {
553  return getAuxIDs();
554  }
555  }
556 
559 
560  if( m_shallowIO ) {
561  if( m_storeIO ) {
563  } else {
564  return auxid_set_t();
565  }
566  } else {
568  }
569  }
570 
571 
572  //
574 
575  const char* ShallowAuxContainer::name() const {
576 
577  return m_name.c_str();
578  }
579 
580  void ShallowAuxContainer::setName( const char* name ) {
581 
582  m_name = name;
583  return;
584  }
585 
588  if( m_parentLink.isValid() ) {
589  ids.insert (m_parentLink->getAuxIDs());
590  }
591  m_auxids = ids;
592  m_auxidsValid = true;
593  }
594 
595 } // namespace xAOD
SG::AuxTypeRegistry::getFactory
const IAuxTypeVectorFactory * getFactory(const std::type_info &ti, const std::type_info &ti_alloc)
Return the vector factory for a given vector element type.
Definition: AuxTypeRegistry.cxx:487
store
StoreGateSvc * store
Definition: fbtTestBasics.cxx:69
xAOD::name
name
Definition: TriggerMenuJson_v1.cxx:29
xAOD::ShallowAuxContainer::operator=
ShallowAuxContainer & operator=(const ShallowAuxContainer &rhs)
Assignment operator.
Definition: ShallowAuxContainer.cxx:85
SG::IConstAuxStore::getData
virtual const void * getData(SG::auxid_t auxid) const =0
Return the data vector for one aux data item.
SG::IConstAuxStore::lockDecoration
virtual void lockDecoration(SG::auxid_t auxid)=0
Lock a decoration.
fitman.sz
sz
Definition: fitman.py:527
get_generator_info.result
result
Definition: get_generator_info.py:21
CxxUtils::ConcurrentBitset::count
bit_t count() const
Count the number of 1 bits in the set.
xAOD::ShallowAuxContainer::lock
virtual void lock() override
Lock the container.
Definition: ShallowAuxContainer.cxx:325
SG
Forward declaration.
Definition: CaloCellPacker_400_500.h:32
xAOD::ShallowAuxContainer::getIOType
virtual const std::type_info * getIOType(auxid_t auxid) const override
Return the type of the data to be stored for one aux data item.
Definition: ShallowAuxContainer.cxx:516
SG::AuxTypeRegistry::instance
static AuxTypeRegistry & instance()
Return the singleton registry instance.
Definition: AuxTypeRegistry.cxx:49
AuxVectorInterface.h
Make an AuxVectorData object from either a raw vector or an aux store.
xAOD::ShallowAuxContainer::getDynamicAuxIDs
virtual const auxid_set_t & getDynamicAuxIDs() const override
Get the types(names) of variables created dynamically.
Definition: ShallowAuxContainer.cxx:543
xAOD::ShallowAuxContainer::insertMove
virtual bool insertMove(size_t pos, IAuxStore &other, const SG::auxid_set_t &ignore) override
Insert contents of another store via move.
Definition: ShallowAuxContainer.cxx:473
xAOD::ShallowAuxContainer::parent
const DataLink< SG::IConstAuxStore > & parent() const
Get the parent store.
Definition: ShallowAuxContainer.cxx:117
xAOD::ShallowAuxContainer::ShallowAuxContainer
ShallowAuxContainer(bool standalone=false)
Default constructor.
Definition: ShallowAuxContainer.cxx:31
SG::AuxTypeRegistry::getName
std::string getName(SG::auxid_t auxid) const
Return the name of an aux data item.
Definition: AuxTypeRegistry.cxx:277
SG::ExcStoreLocked
Exception — Attempted to modify auxiliary data in a locked store.
Definition: Control/AthContainers/AthContainers/exceptions.h:183
CSV_InDetExporter.new
new
Definition: CSV_InDetExporter.py:145
exceptions.h
Exceptions that can be thrown from AthContainers.
xAOD::ShallowAuxContainer::reserve
virtual void reserve(size_t size) override
Reserve a given size for the arrays.
Definition: ShallowAuxContainer.cxx:459
xAOD::ShallowAuxContainer
Class creating a shallow copy of an existing auxiliary container.
Definition: ShallowAuxContainer.h:54
xAOD::ShallowAuxContainer::guard_t
AthContainers_detail::lock_guard< mutex_t > guard_t
Definition: ShallowAuxContainer.h:196
athena.value
value
Definition: athena.py:122
xAOD::ShallowAuxContainer::name
const char * name() const
Get the name of the container instance.
Definition: ShallowAuxContainer.cxx:575
xAOD
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
Definition: ICaloAffectedTool.h:24
xAOD::ShallowAuxContainer::lockDecoration
virtual void lockDecoration(SG::auxid_t auxid) override
Lock a decoration.
Definition: ShallowAuxContainer.cxx:334
xAOD::ShallowAuxContainer::m_selection
AuxSelection m_selection
Dynamic attributes selection implementation.
Definition: ShallowAuxContainer.h:176
ShallowAuxContainer.h
xAOD::ShallowAuxContainer::m_shallowIO
bool m_shallowIO
Flag for whether to do "shallow IO" or not.
Definition: ShallowAuxContainer.h:192
SG::IAuxStoreIO::getIOType
virtual const std::type_info * getIOType(SG::auxid_t auxid) const =0
Return the type of the data to be stored for one aux data item.
xAOD::ShallowAuxContainer::setParent
void setParent(const DataLink< SG::IConstAuxStore > &link)
Set the parent store.
Definition: ShallowAuxContainer.cxx:123
python.DomainsRegistry.reg
reg
globals -----------------------------------------------------------------—
Definition: DomainsRegistry.py:343
xAOD::ShallowAuxContainer::size
virtual size_t size() const override
Get the size of the container.
Definition: ShallowAuxContainer.cxx:340
ReweightUtils.message
message
Definition: ReweightUtils.py:15
SG::IConstAuxStore::size
virtual size_t size() const =0
Return the number of elements in the store.
xAOD::ShallowAuxContainer::m_ownsStore
bool m_ownsStore
Flag deciding if the object owns the dynamic store or not.
Definition: ShallowAuxContainer.h:183
SG::IAuxStoreIO
Interface providing I/O for a generic auxiliary store.
Definition: IAuxStoreIO.h:44
SG::AuxTypeRegistry
Handle mappings between names and auxid_t.
Definition: AuxTypeRegistry.h:62
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
xAOD::ShallowAuxContainer::setShallowIO
void setShallowIO(bool value)
Set whether only the overriden parameters should be written out.
Definition: ShallowAuxContainer.cxx:137
xAOD::ShallowAuxContainer::getDecoration
virtual void * getDecoration(auxid_t auxid, size_t size, size_t capacity) override
Return the data vector for one aux data decoration item.
Definition: ShallowAuxContainer.cxx:239
xAOD::ShallowAuxContainer::m_name
std::string m_name
Name of the container in memory. Set externally.
Definition: ShallowAuxContainer.h:205
SG::auxid_t
size_t auxid_t
Identifier for a particular aux data item.
Definition: AuxTypes.h:27
xAOD::ShallowAuxContainer::m_parentLink
DataLink< SG::IConstAuxStore > m_parentLink
Link to the parent object.
Definition: ShallowAuxContainer.h:188
CxxUtils::ConcurrentBitset::size
bit_t size() const
Count the number of 1 bits in the set.
SG::IConstAuxStore::clearDecorations
virtual bool clearDecorations()=0
Clear all decorations.
xAOD::ShallowAuxContainer::m_mutex
mutex_t m_mutex
Definition: ShallowAuxContainer.h:197
ret
T ret(T t)
Definition: rootspy.cxx:260
SG::IAuxTypeVectorFactory
Interface for factory objects that create vectors.
Definition: IAuxTypeVectorFactory.h:50
xAOD::ShallowAuxContainer::m_storeIO
SG::IAuxStoreIO * m_storeIO
The IO interface to the internal auxiliary store.
Definition: ShallowAuxContainer.h:181
test_pyathena.parent
parent
Definition: test_pyathena.py:15
xAOD::ShallowAuxContainer::getStore
virtual SG::IAuxStore * getStore() override
Get the currently used internal store object.
Definition: ShallowAuxContainer.cxx:149
python.xAODType.dummy
dummy
Definition: xAODType.py:4
SG::IConstAuxStore::getDecoration
virtual void * getDecoration(auxid_t auxid, size_t size, size_t capacity)=0
Return the data vector for one aux data decoration item.
xAOD::ShallowAuxContainer::shallowIO
bool shallowIO() const
Check whether only the overriden parameters will be written out or not.
Definition: ShallowAuxContainer.cxx:132
SG::IAuxTypeVectorFactory::copy
virtual void copy(SG::auxid_t auxid, AuxVectorData &dst, size_t dst_index, const AuxVectorData &src, size_t src_index, size_t n) const =0
Copy elements between vectors.
xAOD::ShallowAuxContainer::getIOData
virtual const void * getIOData(auxid_t auxid) const override
Get a pointer to the data being stored for one aux data item.
Definition: ShallowAuxContainer.cxx:490
xAOD::ShallowAuxContainer::shift
virtual void shift(size_t pos, ptrdiff_t offs) override
Shift the contents of the stored arrays.
Definition: ShallowAuxContainer.cxx:466
xAOD::ShallowAuxContainer::getWritableAuxIDs
virtual const auxid_set_t & getWritableAuxIDs() const override
Return a set of writable data identifiers.
Definition: ShallowAuxContainer.cxx:442
xAOD::ShallowAuxContainer::getAuxIDs
virtual const auxid_set_t & getAuxIDs() const override
Get the types(names) of variables handled by this container.
Definition: ShallowAuxContainer.cxx:218
python.subdetectors.mmg.ids
ids
Definition: mmg.py:8
xAOD::ShallowAuxContainer::isDecoration
virtual bool isDecoration(auxid_t auxid) const override
Test if a variable is a decoration.
Definition: ShallowAuxContainer.cxx:227
xAOD::ShallowAuxContainer::m_parentIO
const SG::IAuxStoreIO * m_parentIO
Optional pointer to the IO interface of the parent object.
Definition: ShallowAuxContainer.h:190
xAOD::ShallowAuxContainer::m_locked
bool m_locked
Flag keeping track of whether this object is locked or not.
Definition: ShallowAuxContainer.h:185
SG::IAuxStoreIO::getIOData
virtual const void * getIOData(SG::auxid_t auxid) const =0
Return a pointer to the data to be stored for one aux data item.
xAOD::ShallowAuxContainer::setName
void setName(const char *name)
Set the name of the container instance.
Definition: ShallowAuxContainer.cxx:580
SG::IAuxStore::getWritableAuxIDs
virtual const SG::auxid_set_t & getWritableAuxIDs() const =0
Return a set of identifiers for writable data items in this store.
SG::IAuxStore
Interface for non-const operations on an auxiliary store.
Definition: IAuxStore.h:48
SG::AuxVectorInterface
Make an AuxVectorData object from either a raw array or an aux store.
Definition: AuxVectorInterface.h:33
SG::IAuxStore::getData
virtual void * getData(auxid_t auxid, size_t size, size_t capacity)=0
Return the data vector for one aux data item.
IAuxTypeVectorFactory.h
Interface for factory objects that create vectors.
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
AuxTypeRegistry.h
Handle mappings between names and auxid_t.
SG::IConstAuxStore::lock
virtual void lock()=0
Lock the container.
SG::auxid_set_t
A set of aux data identifiers.
Definition: AuxTypes.h:47
xAOD::ShallowAuxContainer::auxid_set_t
SG::auxid_set_t auxid_set_t
The aux ID set type definition.
Definition: ShallowAuxContainer.h:60
xAOD::ShallowAuxContainer::m_store
SG::IAuxStore * m_store
Internal dynamic auxiliary store object.
Definition: ShallowAuxContainer.h:179
SG::IConstAuxStore::isDecoration
virtual bool isDecoration(auxid_t auxid) const =0
Test if a particular variable is tagged as a decoration.
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::ShallowAuxContainer::setStore
virtual void setStore(SG::IAuxStore *store) override
Set a different internal store object.
Definition: ShallowAuxContainer.cxx:159
xAOD::ShallowAuxContainer::auxid_t
SG::auxid_t auxid_t
The aux ID type definition.
Definition: ShallowAuxContainer.h:58
AuxStoreInternal.h
An auxiliary data store that holds data internally.
xAOD::ShallowAuxContainer::getData
virtual const void * getData(auxid_t auxid) const override
Get a pointer to a given array.
Definition: ShallowAuxContainer.cxx:187
xAOD::ShallowAuxContainer::getSelectedAuxIDs
virtual auxid_set_t getSelectedAuxIDs() const override
Get the IDs of the selected dynamic Aux variables (for writing)
Definition: ShallowAuxContainer.cxx:558
xAOD::ShallowAuxContainer::~ShallowAuxContainer
~ShallowAuxContainer()
Destructor.
Definition: ShallowAuxContainer.cxx:77
xAOD::ShallowAuxContainer::resize
virtual bool resize(size_t size) override
Resize the arrays to a given size.
Definition: ShallowAuxContainer.cxx:449
xAOD::ShallowAuxContainer::remakeAuxIDs
void remakeAuxIDs() const
Definition: ShallowAuxContainer.cxx:586
SG::IConstAuxStore::getAuxIDs
virtual const SG::auxid_set_t & getAuxIDs() const =0
Return a set of identifiers for existing data items in this store.
CxxUtils::ConcurrentBitset::test
bool test(bit_t bit) const
Test to see if a bit is set.
xAOD::ShallowAuxContainer::clearDecorations
virtual bool clearDecorations() override
Clear all decorations.
Definition: ShallowAuxContainer.cxx:354