ATLAS Offline Software
Public Types | Public Member Functions | Static Public Attributes | Private Types | Private Member Functions | Private Attributes | List of all members
DMTest::HAuxContainer_v1 Class Referenceabstract

#include <HAuxContainer_v1.h>

Inheritance diagram for DMTest::HAuxContainer_v1:
Collaboration diagram for DMTest::HAuxContainer_v1:

Public Types

typedef SG::auxid_t auxid_t
 The aux ID type definition. More...
 
typedef SG::auxid_set_t auxid_set_t
 The aux ID set type definition. More...
 
template<class T , class ALLOC = std::allocator<T>>
using AuxVariable_t = std::vector< T, ALLOC >
 Declare how to wrap variables for this sort of base. More...
 
template<class T , class ALLOC = std::allocator<T>>
using LinkedVariable_t = AuxVariable_t< T, ALLOC >
 
enum  AuxStoreType { AST_ObjectStore = 0, AST_ContainerStore = 1 }
 Type of the auxiliary store. More...
 

Public Member Functions

 HAuxContainer_v1 ()
 
 HAuxContainer_v1 ()
 
virtual const void * getData (SG::auxid_t auxid) const=0
 Pick up the const version from the base class. More...
 
virtual const IAuxTypeVector * linkedVector (SG::auxid_t) const
 Return interface for a linked variable. 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...
 
template<typename T , typename ALLOC >
auxid_t getAuxID (const std::string &name, std::vector< T, ALLOC > &, SG::AuxVarFlags flags=SG::AuxVarFlags::None, const SG::auxid_t linkedVariable=SG::null_auxid)
 Get the auxiliary ID for one of the persistent variables. More...
 
template<typename T >
auxid_t getAuxID (const std::string &name, SG::PackedContainer< T > &, SG::AuxVarFlags flags=SG::AuxVarFlags::None, const SG::auxid_t linkedVariable=SG::null_auxid)
 Get the auxiliary ID for one of the persistent variables. More...
 
template<typename T , typename ALLOC >
void regAuxVar (auxid_t auxid, const std::string &name, std::vector< T, ALLOC > &vec)
 Register one of the persistent variables internally. More...
 
template<typename T >
void regAuxVar (auxid_t auxid, const std::string &name, SG::PackedContainer< T > &vec)
 Register one of the persistent variables internally. More...
 

Static Public Attributes

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

Private Types

typedef AthContainers_detail::mutex mutex_t
 Mutex for multithread synchronization. More...
 
typedef AthContainers_detail::lock_guard< mutex_tguard_t
 

Private Member Functions

 AUXVAR_DECL (int, anInt)
 
 AUXVAR_DECL (int, anInt)
 
template<typename ELT , typename CONT >
void regAuxVar1 (auxid_t auxid, const std::string &name, CONT &vec)
 Common code between regAuxVar cases. More...
 

Private Attributes

auxid_set_t m_auxids
 Internal list of all available variables. More...
 
std::vector< SG::IAuxTypeVector * > m_vecs
 Internal list of all managed variables. More...
 
SG::IAuxStorem_store
 Internal dynamic auxiliary store object. More...
 
SG::IAuxStoreIOm_storeIO
 The IO interface to the internal auxiliary store. More...
 
bool m_ownsStore
 Flag deciding if the object owns the dynamic store or not. More...
 
bool m_locked
 Has the container been locked? More...
 
mutex_t m_mutex
 
std::string m_name
 Name of the container in memory. Set externally. More...
 
CxxUtils::CachedPointer< std::pmr::memory_resource > m_memResource ATLAS_THREAD_SAFE
 Memory resource to use for this container. More...
 

Detailed Description

Definition at line 25 of file DataModelTestDataRead/DataModelTestDataRead/versions/HAuxContainer_v1.h.

Member Typedef Documentation

◆ auxid_set_t

The aux ID set type definition.

Definition at line 65 of file AuxContainerBase.h.

◆ auxid_t

The aux ID type definition.

Definition at line 63 of file AuxContainerBase.h.

◆ AuxVariable_t

template<class T , class ALLOC = std::allocator<T>>
using xAOD::AuxContainerBase::AuxVariable_t = std::vector<T, ALLOC>
inherited

Declare how to wrap variables for this sort of base.

Definition at line 189 of file AuxContainerBase.h.

◆ guard_t

typedef AthContainers_detail::lock_guard< mutex_t > xAOD::AuxContainerBase::guard_t
privateinherited

Definition at line 241 of file AuxContainerBase.h.

◆ LinkedVariable_t

template<class T , class ALLOC = std::allocator<T>>
using xAOD::AuxContainerBase::LinkedVariable_t = AuxVariable_t<T, ALLOC>
inherited

Definition at line 191 of file AuxContainerBase.h.

◆ mutex_t

typedef AthContainers_detail::mutex xAOD::AuxContainerBase::mutex_t
privateinherited

Mutex for multithread synchronization.

Definition at line 240 of file AuxContainerBase.h.

Member Enumeration Documentation

◆ AuxStoreType

Type of the auxiliary store.

In the xAOD EDM we use auxiliary store objects in some cases to describe a single object, and in most cases to describe a container of objects. This enumeration declares which type the object implementing this interface is.

Enumerator
AST_ObjectStore 

The store describes a single object.

AST_ContainerStore 

The store describes a container.

Definition at line 66 of file IAuxStoreHolder.h.

66  {
67  AST_ObjectStore = 0,
69  };

Constructor & Destructor Documentation

◆ HAuxContainer_v1() [1/2]

DMTest::HAuxContainer_v1::HAuxContainer_v1 ( )

Definition at line 18 of file DataModelTestDataRead/src/HAuxContainer_v1.cxx.

20 {
21 }

◆ HAuxContainer_v1() [2/2]

DMTest::HAuxContainer_v1::HAuxContainer_v1 ( )

Member Function Documentation

◆ AUXVAR_DECL() [1/2]

DMTest::HAuxContainer_v1::AUXVAR_DECL ( int  ,
anInt   
)
private

◆ AUXVAR_DECL() [2/2]

DMTest::HAuxContainer_v1::AUXVAR_DECL ( int  ,
anInt   
)
private

◆ clearDecorations()

bool xAOD::AuxContainerBase::clearDecorations ( )
overridevirtualinherited

Clear all decorations.

Implements SG::IConstAuxStore.

Definition at line 337 of file AuxContainerBase.cxx.

337  {
338 
339  // Guard against multi-threaded execution:
340  guard_t guard( m_mutex );
341 
342  // Clear the decorations from the dynamic store:
343  bool anycleared = false;
344  if( m_store ) {
345  anycleared = m_store->clearDecorations();
346  }
347  // Early exit if there were no decorations.
348  if (!anycleared) return false;
349 
350  // Construct the list of managed auxiliary variables from scratch after
351  // the cleanup:
353  for( auxid_t auxid = 0; auxid < m_vecs.size(); ++auxid ) {
354  if( m_vecs[ auxid ] ) {
355  ids.insert( auxid );
356  }
357  }
358  if( m_store ) {
359  ids.insert (m_store->getAuxIDs());
360  }
361  m_auxids = ids;
362 
363  return true;
364  }

◆ getAuxID() [1/2]

template<typename T >
auxid_t xAOD::AuxContainerBase::getAuxID ( const std::string &  name,
SG::PackedContainer< T > &  ,
SG::AuxVarFlags  flags = SG::AuxVarFlags::None,
const SG::auxid_t  linkedVariable = SG::null_auxid 
)
inherited

Get the auxiliary ID for one of the persistent variables.

◆ getAuxID() [2/2]

template<typename T , typename ALLOC >
auxid_t xAOD::AuxContainerBase::getAuxID ( const std::string &  name,
std::vector< T, ALLOC > &  ,
SG::AuxVarFlags  flags = SG::AuxVarFlags::None,
const SG::auxid_t  linkedVariable = SG::null_auxid 
)
inherited

Get the auxiliary ID for one of the persistent variables.

◆ getAuxIDs()

const AuxContainerBase::auxid_set_t & xAOD::AuxContainerBase::getAuxIDs ( ) const
overridevirtualinherited

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

Implements SG::IConstAuxStore.

Definition at line 265 of file AuxContainerBase.cxx.

265  {
266 
267  // Return the full list of IDs:
268  return getWritableAuxIDs();
269  }

◆ getData() [1/3]

const void * xAOD::AuxContainerBase::getData ( auxid_t  auxid) const
overridevirtualinherited

Get a pointer to a given array.

Implements SG::IConstAuxStore.

Definition at line 229 of file AuxContainerBase.cxx.

229  {
230 
231  // Guard against multi-threaded execution:
232  guard_t guard( m_mutex );
233 
234  if( ( auxid >= m_vecs.size() ) || ( ! m_vecs[ auxid ] ) ) {
235  if( m_store ) {
236  const void* result = m_store->getData( auxid );
237  if( result ) {
238  auxid_set_t& auxids_nc ATLAS_THREAD_SAFE =
239  const_cast<auxid_set_t&> (m_auxids);
240  auxids_nc.insert( auxid );
242  auxid_t linked_id = r.linkedVariable( auxid );
243  if (linked_id != SG::null_auxid) {
244  auxids_nc.insert( linked_id );
245  }
246  }
247  return result;
248  } else {
249  std::cout << "ERROR xAOD::AuxContainerBase::getData "
250  << "Unknown variable ("
252  << ") requested" << std::endl;
253  return nullptr;
254  }
255  }
256 
257  // Update the statistics for this variable. The dynamic store registers
258  // its own variable accesses.
260 
261  return m_vecs[ auxid ]->toPtr();
262  }

◆ getData() [2/3]

void * xAOD::AuxContainerBase::getData ( auxid_t  auxid,
size_t  size,
size_t  capacity 
)
overridevirtualinherited

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

Implements SG::IAuxStore.

Definition at line 442 of file AuxContainerBase.cxx.

443  {
444 
445  // Guard against multi-threaded execution:
446  guard_t guard( m_mutex );
447 
448  if( ( auxid >= m_vecs.size() ) || ( ! m_vecs[ auxid ] ) ) {
449 
450  if( m_store ) {
451  void* result = m_store->getData( auxid, size, capacity );
452  if( result ) {
453  m_auxids.insert( auxid );
455  auxid_t linked_id = r.linkedVariable( auxid );
456  if (linked_id != SG::null_auxid) {
457  m_auxids.insert( linked_id );
458  }
459  }
460  return result;
461  } else {
462  std::cout << "ERROR xAOD::AuxContainerBase::getData "
463  << "Unknown variable ("
465  << ") requested" << std::endl;
466  return nullptr;
467  }
468  }
469  m_vecs[ auxid ]->reserve( capacity );
470  if (m_vecs[ auxid ]->size() < size) {
471  m_vecs[ auxid ]->resize( size );
472  }
473 
474  return m_vecs[ auxid ]->toPtr();
475  }

◆ getData() [3/3]

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

Pick up the const version from the base class.

◆ getDecoration()

void * xAOD::AuxContainerBase::getDecoration ( auxid_t  auxid,
size_t  size,
size_t  capacity 
)
overridevirtualinherited

Get a pointer to a given array, as a decoration.

Implements SG::IConstAuxStore.

Reimplemented in xAOD::EventInfoAuxContainer_v1.

Definition at line 280 of file AuxContainerBase.cxx.

281  {
282  {
283  // Guard against multi-threaded execution:
284  guard_t guard( m_mutex );
285 
286  // Check if we have it as a static variable:
287  if( ( auxid >= m_vecs.size() ) || ( ! m_vecs[ auxid ] ) ) {
288  // If not, but we have a dynamic store, push it in there:
289  if( m_store ) {
290  void* result = m_store->getDecoration( auxid, size, capacity );
291  if( result ) {
292  m_auxids.insert( auxid );
294  auxid_t linked_id = r.linkedVariable( auxid );
295  if (linked_id != SG::null_auxid) {
296  m_auxids.insert( linked_id );
297  }
298  }
299  return result;
300  }
301  // If we don't have a dynamic store, complain:
302  else {
303  std::cout << "ERROR xAOD::AuxContainerBase::getDecoration "
304  << "Can't provide variable "
306  << std::endl;
307  return nullptr;
308  }
309  }
310 
311  // If the container is locked, static variables can't be accessed this
312  // way:
313  if( m_locked ) {
314  throw SG::ExcStoreLocked( auxid );
315  }
316  }
317 
318  // If the container is not locked, then fall back on the normal accessor
319  // function:
320  return getData( auxid, size, capacity );
321  }

◆ getDynamicAuxIDs()

const AuxContainerBase::auxid_set_t & xAOD::AuxContainerBase::getDynamicAuxIDs ( ) const
overridevirtualinherited

Get the types(names) of variables created dynamically.

Implements SG::IAuxStoreIO.

Definition at line 683 of file AuxContainerBase.cxx.

683  {
684 
685  // Guard against multi-threaded execution:
686  guard_t guard( m_mutex );
687 
688  // All the variables handled by the internal store are dynamic
689  // if such a store exists:
690  if( m_storeIO ) {
691  // I mean, all the variables. Not just the ones reported as dynamic
692  // by the internal object. Because the internal object may be something
693  // that was put into this one in order to achieve data slimming.
694  return m_store->getAuxIDs();
695  }
696  // In case we don't use an internal store, there are no dynamic
697  // variables:
698  static const auxid_set_t dummy (0);
699  return dummy;
700  }

◆ getIOData()

const void * xAOD::AuxContainerBase::getIOData ( auxid_t  auxid) const
overridevirtualinherited

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

Implements SG::IAuxStoreIO.

Definition at line 641 of file AuxContainerBase.cxx.

641  {
642 
643  // Guard against multi-threaded execution:
644  guard_t guard( m_mutex );
645 
646  // If the variable is not static, look for it in the dynamic store:
647  if( ( auxid >= m_vecs.size() ) || ( ! m_vecs[ auxid ] ) ) {
648  if( m_storeIO ) {
649  return m_storeIO->getIOData( auxid );
650  } else {
651  std::cout << "ERROR xAOD::AuxContainerBase::getIOData "
652  << "Unknown variable ("
654  << ") requested" << std::endl;
655  return nullptr;
656  }
657  }
658 
659  // Update the statistics for this variable. The dynamic store registers
660  // its own variable accesses.
662 
663  return m_vecs[ auxid ]->toVector();
664  }

◆ getIOType()

const std::type_info * xAOD::AuxContainerBase::getIOType ( auxid_t  auxid) const
overridevirtualinherited

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

Implements SG::IAuxStoreIO.

Definition at line 666 of file AuxContainerBase.cxx.

666  {
667 
668  // Guard against multi-threaded execution:
669  guard_t guard( m_mutex );
670 
671  // If the variable is not static, ask the dynamic store:
672  if( ( auxid >= m_vecs.size() ) || ( ! m_vecs[ auxid ] ) ) {
673  if( m_storeIO ) {
674  return m_storeIO->getIOType( auxid );
675  }
676  }
677 
678  // Fall back on getting the information from the registry:
679  return SG::AuxTypeRegistry::instance().getVecType( auxid );
680  }

◆ getSelectedAuxIDs()

AuxContainerBase::auxid_set_t xAOD::AuxContainerBase::getSelectedAuxIDs ( ) const
overridevirtualinherited

Get the IDs of the selected dynamic Aux variables (for writing)

Reimplemented from SG::IAuxStoreIO.

Definition at line 703 of file AuxContainerBase.cxx.

703  {
704 
705  // Guard against multi-threaded execution:
706  guard_t guard( m_mutex );
707 
708  // All the variables handled by the internal store are dynamic
709  // if such a store exists:
710  if( m_storeIO ) {
711  // I mean, all the variables. Not just the ones reported as dynamic
712  // by the internal object. Because the internal object may be something
713  // that was put into this one in order to achieve data slimming.
714  return m_store->getAuxIDs();
715  }
716 
717  // In case we don't use an internal store, there are no dynamic
718  // variables:
719  return auxid_set_t();
720  }

◆ getStore() [1/2]

const SG::IAuxStore * xAOD::AuxContainerBase::getStore ( ) const
overridevirtualinherited

Implements SG::IAuxStoreHolder.

Definition at line 180 of file AuxContainerBase.cxx.

181  {
182  return m_store;
183  }

◆ getStore() [2/2]

SG::IAuxStore * xAOD::AuxContainerBase::getStore ( )
overridevirtualinherited

Get the currently used internal store object.

Implements SG::IAuxStoreHolder.

Definition at line 153 of file AuxContainerBase.cxx.

154  {
155  return m_store;
156  }

◆ getStoreType()

virtual AuxStoreType xAOD::AuxContainerBase::getStoreType ( ) const
inlineoverridevirtualinherited

Return the type of the store object.

Implements SG::IAuxStoreHolder.

Definition at line 92 of file AuxContainerBase.h.

92 { return AST_ContainerStore; }

◆ getWritableAuxIDs()

const AuxContainerBase::auxid_set_t & xAOD::AuxContainerBase::getWritableAuxIDs ( ) const
overridevirtualinherited

Return a set of writable data identifiers.

Implements SG::IAuxStore.

Definition at line 478 of file AuxContainerBase.cxx.

478  {
479 
480  // Return the full list of known IDs. The constness of this object's
481  // members comes from the object being const or not.
482  return m_auxids;
483  }

◆ insertMove() [1/2]

bool xAOD::AuxContainerBase::insertMove ( size_t  pos,
IAuxStore &  other,
const SG::auxid_set_t ignore 
)
overridevirtualinherited

Insert contents of another store via move.

Definition at line 564 of file AuxContainerBase.cxx.

566  {
567  // Guard against multi-threaded execution:
568  guard_t guard( m_mutex );
569 
570  // This operation is not allowed on a locked container:
571  if( m_locked ) {
572  throw SG::ExcStoreLocked( "insertMove" );
573  }
574 
576  bool nomove = true;
577  size_t other_size = other.size();
578 
579  SG::auxid_set_t ignore = ignore_in;
580 
581  // Do the operation on the static variables:
582  for (SG::auxid_t id : m_auxids) {
583  SG::IAuxTypeVector* v_dst = nullptr;
584  if (id < m_vecs.size())
585  v_dst = m_vecs[id];
586  // Skip linked vars --- they should be taken care of by the parent var.
587  if (v_dst && !v_dst->isLinked()) {
588  ignore.insert (id);
589  if (other.getData (id)) {
590  void* src_ptr = other.getData (id, other_size, other_size);
591  if (src_ptr) {
592  if (!v_dst->insertMove (pos, src_ptr,
593  reinterpret_cast<char*>(src_ptr) + other_size*r.getEltSize(id),
594  other))
595  nomove = false;
596  }
597  }
598  else {
599  const void* orig = v_dst->toPtr();
600  v_dst->shift (pos, other_size);
601  if (orig != v_dst->toPtr())
602  nomove = false;
603  }
604  }
605  }
606 
607  // Do the operation on the dynamic variables:
608  if( m_store ) {
609  if (!m_store->insertMove( pos, other, ignore ))
610  nomove = false;
611 
612  // Notice any new variables added as a result of this.
614  }
615 
616  return nomove;
617  }

◆ insertMove() [2/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.

◆ isDecoration()

bool xAOD::AuxContainerBase::isDecoration ( auxid_t  auxid) const
overridevirtualinherited

Test if a variable is a decoration.

Implements SG::IConstAuxStore.

Reimplemented in xAOD::EventInfoAuxContainer_v1.

Definition at line 271 of file AuxContainerBase.cxx.

272  {
273  guard_t guard( m_mutex );
274  if (m_store) {
275  return m_store->isDecoration (auxid);
276  }
277  return false;
278  }

◆ linkedVector() [1/3]

const SG::IAuxTypeVector * xAOD::AuxContainerBase::linkedVector ( SG::auxid_t  auxid) const
overridevirtualinherited

Return interface for a linked variable.

Reimplemented from SG::IConstAuxStore.

Definition at line 376 of file AuxContainerBase.cxx.

377  {
379  auxid_t linked_id = r.linkedVariable( auxid );
380  if (linked_id != SG::null_auxid) {
381  guard_t guard( m_mutex );
382  if (linked_id < m_vecs.size() && m_vecs[ linked_id ]) {
383  return m_vecs[ linked_id ];
384  }
385  if (m_store) {
386  return CxxUtils::as_const_ptr(m_store)->linkedVector( auxid );
387  }
388  }
389  return nullptr;
390  }

◆ linkedVector() [2/3]

SG::IAuxTypeVector * xAOD::AuxContainerBase::linkedVector ( SG::auxid_t  auxid)
overridevirtualinherited

Return interface for a linked variable.

Reimplemented from SG::IAuxStore.

Definition at line 393 of file AuxContainerBase.cxx.

394  {
396  auxid_t linked_id = r.linkedVariable( auxid );
397  if (linked_id != SG::null_auxid) {
398  guard_t guard( m_mutex );
399  if (linked_id < m_vecs.size() && m_vecs[ linked_id ]) {
400  return m_vecs[ linked_id ];
401  }
402  if (m_store) {
403  return m_store->linkedVector( auxid );
404  }
405  }
406  return nullptr;
407  }

◆ 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 174 of file IConstAuxStore.h.

175  { return nullptr; }

◆ lock()

void xAOD::AuxContainerBase::lock ( )
overridevirtualinherited

Lock the container.

Implements ILockable.

Definition at line 323 of file AuxContainerBase.cxx.

323  {
324 
325  // Guard against multi-threaded execution:
326  guard_t guard( m_mutex );
327 
328  // Lock the object and its dynamic store:
329  m_locked = true;
330  if( m_store ) {
331  m_store->lock();
332  }
333 
334  return;
335  }

◆ lockDecoration()

void xAOD::AuxContainerBase::lockDecoration ( SG::auxid_t  auxid)
overridevirtualinherited

Lock a decoration.

Implements SG::IConstAuxStore.

Reimplemented in xAOD::EventInfoAuxContainer_v1.

Definition at line 367 of file AuxContainerBase.cxx.

368  {
369  guard_t guard (m_mutex);
370  if (m_store) {
371  m_store->lockDecoration (auxid);
372  }
373  }

◆ memResource()

std::pmr::memory_resource * xAOD::AuxContainerBase::memResource ( )
inherited

Return the memory resource to use.

Definition at line 158 of file AuxContainerBase.cxx.

159  {
160  const std::pmr::memory_resource* cptr = m_memResource.get();
161  std::pmr::memory_resource* ptr ATLAS_THREAD_SAFE = const_cast<std::pmr::memory_resource*>( cptr );
162  if( !ptr ) {
163 #ifndef XAOD_STANDALONE
164  const EventContext& ctx = Gaudi::Hive::currentContext();
165  if( Atlas::hasExtendedEventContext( ctx ) ) {
166  ptr = Atlas::getExtendedEventContext( ctx ).memResource();
167  }
168  if( !ptr )
169 #endif
170  {
171  ptr = std::pmr::get_default_resource();
172  }
173  if( ptr ) {
174  m_memResource.set( ptr );
175  }
176  }
177  return ptr;
178  }

◆ name()

const char * xAOD::AuxContainerBase::name ( ) const
inherited

Get the name of the container instance.

Definition at line 725 of file AuxContainerBase.cxx.

725  {
726 
727  return m_name.c_str();
728  }

◆ regAuxVar() [1/2]

template<typename T >
void xAOD::AuxContainerBase::regAuxVar ( auxid_t  auxid,
const std::string &  name,
SG::PackedContainer< T > &  vec 
)
inherited

Register one of the persistent variables internally.

◆ regAuxVar() [2/2]

template<typename T , typename ALLOC >
void xAOD::AuxContainerBase::regAuxVar ( auxid_t  auxid,
const std::string &  name,
std::vector< T, ALLOC > &  vec 
)
inherited

Register one of the persistent variables internally.

◆ regAuxVar1()

template<typename ELT , typename CONT >
void xAOD::AuxContainerBase::regAuxVar1 ( auxid_t  auxid,
const std::string &  name,
CONT &  vec 
)
privateinherited

Common code between regAuxVar cases.

◆ reserve()

void xAOD::AuxContainerBase::reserve ( size_t  size)
overridevirtualinherited

Reserve a given size for the arrays.

Implements SG::IAuxStore.

Definition at line 513 of file AuxContainerBase.cxx.

513  {
514 
515  // Guard against multi-threaded execution:
516  guard_t guard( m_mutex );
517 
518  // This operation is not allowed on a locked container:
519  if( m_locked ) {
520  throw SG::ExcStoreLocked( "reserve" );
521  }
522 
523  // Do the operation on the static variables:
524  for (SG::IAuxTypeVector* v : m_vecs) {
525  if(v && !v->isLinked()) {
526  v->reserve( size );
527  }
528  }
529 
530  // Do the operation on the dynamic variables:
531  if( m_store ) {
532  m_store->reserve( size );
533  }
534 
535  return;
536  }

◆ resize()

bool xAOD::AuxContainerBase::resize ( size_t  size)
overridevirtualinherited

Resize the arrays to a given size.

Implements SG::IAuxStore.

Definition at line 485 of file AuxContainerBase.cxx.

485  {
486 
487  // Guard against multi-threaded execution:
488  guard_t guard( m_mutex );
489 
490  // This operation is not allowed on a locked container:
491  if( m_locked ) {
492  throw SG::ExcStoreLocked( "resize" );
493  }
494 
495  // Do the operation on the static variables:
496  bool nomoves = true;
497  for (SG::IAuxTypeVector* v : m_vecs) {
498  if(v && !v->isLinked()) {
499  if (!v->resize( size ))
500  nomoves = false;
501  }
502  }
503 
504  // Do the operation on the dynamic variables:
505  if( m_store ) {
506  if (!m_store->resize( size ))
507  nomoves = false;
508  }
509 
510  return nomoves;
511  }

◆ setName()

void xAOD::AuxContainerBase::setName ( const char name)
inherited

Set the name of the container instance.

Definition at line 730 of file AuxContainerBase.cxx.

730  {
731 
732  m_name = name;
733  return;
734  }

◆ setOption()

bool xAOD::AuxContainerBase::setOption ( auxid_t  id,
const SG::AuxDataOption option 
)
overridevirtualinherited

Make an option setting on an aux variable.

Reimplemented from SG::IAuxStore.

Definition at line 620 of file AuxContainerBase.cxx.

621  {
622 
623  guard_t guard (m_mutex);
624  if (id < m_vecs.size() && m_vecs[id] != nullptr)
625  return m_vecs[id]->setOption (option);
626 
627  if (m_store)
628  return m_store->setOption (id, option);
629  return false;
630  }

◆ setStore()

void xAOD::AuxContainerBase::setStore ( SG::IAuxStore store)
overridevirtualinherited

Set a different internal store object.

This function is used by the I/O infrastructure to possibly put a store object into this one, which can interact with dynamic variables directly.

Note that the object takes ownership of the received store.

Parameters
storeThe store that should be used for dynamic variable handling inside the object from now on

Implements SG::IAuxStoreHolder.

Definition at line 194 of file AuxContainerBase.cxx.

194  {
195 
196  // Guard against multi-threaded execution:
197  guard_t guard( m_mutex );
198 
199  // Check that no funny business is going on:
200  if( m_store == store ) return;
201 
202  // Clean up the current store object:
203  if( m_store && m_ownsStore ) {
204  m_auxids -= m_store->getAuxIDs();
205  delete m_store;
206  }
207  m_store = nullptr;
208  m_storeIO = nullptr;
209 
210  // Take posession of the new object:
211  m_store = store;
212  m_storeIO = dynamic_cast< SG::IAuxStoreIO* >( m_store );
213  m_ownsStore = true;
214  if( m_store ) {
216  }
217 
218  return;
219  }

◆ shift()

void xAOD::AuxContainerBase::shift ( size_t  pos,
ptrdiff_t  offs 
)
overridevirtualinherited

Shift the contents of the stored arrays.

Implements SG::IAuxStore.

Definition at line 538 of file AuxContainerBase.cxx.

538  {
539 
540  // Guard against multi-threaded execution:
541  guard_t guard( m_mutex );
542 
543  // This operation is not allowed on a locked container:
544  if( m_locked ) {
545  throw SG::ExcStoreLocked( "shift" );
546  }
547 
548  // Do the operation on the static variables:
549  for (SG::IAuxTypeVector* v : m_vecs) {
550  if(v && !v->isLinked()) {
551  v->shift( pos, offs );
552  }
553  }
554 
555  // Do the operation on the dynamic variables:
556  if( m_store ) {
557  m_store->shift( pos, offs );
558  }
559 
560  return;
561  }

◆ size()

size_t xAOD::AuxContainerBase::size ( ) const
overridevirtualinherited

Get the size of the container.

Implements SG::IConstAuxStore.

Definition at line 410 of file AuxContainerBase.cxx.

410  {
411 
412  // Guard against multi-threaded execution:
413  guard_t guard (m_mutex);
414 
415  // Try to find a variable:
416  for (SG::auxid_t i : m_auxids) {
417  if( ( i < m_vecs.size() ) && m_vecs[ i ] && !m_vecs[ i ]->isLinked()) {
418  size_t sz = m_vecs[ i ]->size();
419  if( sz > 0 ) {
420  return sz;
421  }
422  }
423  }
424 
425  // If we didn't find any, let's ask the dynamic store:
426  if( m_store ) {
427  return m_store->size();
428  }
429 
430  // If we don't have any variables, then the size must be null:
431  return 0;
432  }

Member Data Documentation

◆ ATLAS_THREAD_SAFE

CxxUtils::CachedPointer<std::pmr::memory_resource> m_memResource xAOD::AuxContainerBase::ATLAS_THREAD_SAFE
mutableprivateinherited

Memory resource to use for this container.

Definition at line 248 of file AuxContainerBase.h.

◆ m_auxids

auxid_set_t xAOD::AuxContainerBase::m_auxids
privateinherited

Internal list of all available variables.

Definition at line 226 of file AuxContainerBase.h.

◆ m_locked

bool xAOD::AuxContainerBase::m_locked
privateinherited

Has the container been locked?

Definition at line 237 of file AuxContainerBase.h.

◆ m_mutex

mutex_t xAOD::AuxContainerBase::m_mutex
mutableprivateinherited

Definition at line 242 of file AuxContainerBase.h.

◆ m_name

std::string xAOD::AuxContainerBase::m_name
privateinherited

Name of the container in memory. Set externally.

Definition at line 245 of file AuxContainerBase.h.

◆ m_ownsStore

bool xAOD::AuxContainerBase::m_ownsStore
privateinherited

Flag deciding if the object owns the dynamic store or not.

Definition at line 235 of file AuxContainerBase.h.

◆ m_store

SG::IAuxStore* xAOD::AuxContainerBase::m_store
privateinherited

Internal dynamic auxiliary store object.

Definition at line 231 of file AuxContainerBase.h.

◆ m_storeIO

SG::IAuxStoreIO* xAOD::AuxContainerBase::m_storeIO
privateinherited

The IO interface to the internal auxiliary store.

Definition at line 233 of file AuxContainerBase.h.

◆ m_vecs

std::vector< SG::IAuxTypeVector* > xAOD::AuxContainerBase::m_vecs
privateinherited

Internal list of all managed variables.

Definition at line 228 of file AuxContainerBase.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:
xAOD::AuxContainerBase::m_name
std::string m_name
Name of the container in memory. Set externally.
Definition: AuxContainerBase.h:245
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:221
beamspotman.r
def r
Definition: beamspotman.py:676
store
StoreGateSvc * store
Definition: fbtTestBasics.cxx:69
xAOD::AuxContainerBase::name
const char * name() const
Get the name of the container instance.
Definition: AuxContainerBase.cxx:725
SG::IAuxStore::insertMove
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.
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
xAOD::IOStats::stats
ReadStats & stats()
Access the object belonging to the current thread.
Definition: IOStats.cxx:17
SG::AuxTypeRegistry::instance
static AuxTypeRegistry & instance()
Return the singleton registry instance.
Definition: AuxTypeRegistry.cxx:49
xAOD::AuxContainerBase::m_store
SG::IAuxStore * m_store
Internal dynamic auxiliary store object.
Definition: AuxContainerBase.h:231
SG::AuxTypeRegistry::getName
std::string getName(SG::auxid_t auxid) const
Return the name of an aux data item.
Definition: AuxTypeRegistry.cxx:277
xAOD::AuxContainerBase::guard_t
AthContainers_detail::lock_guard< mutex_t > guard_t
Definition: AuxContainerBase.h:241
SG::ExcStoreLocked
Exception — Attempted to modify auxiliary data in a locked store.
Definition: Control/AthContainers/AthContainers/exceptions.h:183
Atlas::hasExtendedEventContext
bool hasExtendedEventContext(const EventContext &ctx)
Test whether a context object has an extended context installed.
Definition: ExtendedEventContext.cxx:23
xAOD::AuxContainerBase
Common base class for the auxiliary containers.
Definition: AuxContainerBase.h:59
xAOD::other
@ other
Definition: TrackingPrimitives.h:509
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::AuxContainerBase::m_mutex
mutex_t m_mutex
Definition: AuxContainerBase.h:242
SG::IConstAuxStore::size
virtual size_t size() const =0
Return the number of elements in the store.
SG::IAuxStore::shift
virtual void shift(size_t pos, ptrdiff_t offs)=0
Shift the elements of the container.
SG::IAuxStore::linkedVector
virtual IAuxTypeVector * linkedVector(SG::auxid_t)
Definition: IAuxStore.h:187
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
Atlas::getExtendedEventContext
const ExtendedEventContext & getExtendedEventContext(const EventContext &ctx)
Retrieve an extended context from a context object.
Definition: ExtendedEventContext.cxx:32
xAOD::AuxContainerBase::size
virtual size_t size() const override
Get the size of the container.
Definition: AuxContainerBase.cxx:410
DiTauMassTools::ignore
void ignore(T &&)
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:54
SG::IAuxStore::setOption
virtual bool setOption(auxid_t, const AuxDataOption &)
Set an option for a given auxiliary variable.
Definition: IAuxStore.h:173
SG::auxid_t
size_t auxid_t
Identifier for a particular aux data item.
Definition: AuxTypes.h:27
SG::IConstAuxStore::clearDecorations
virtual bool clearDecorations()=0
Clear all decorations.
xAOD::AuxContainerBase::auxid_set_t
SG::auxid_set_t auxid_set_t
The aux ID set type definition.
Definition: AuxContainerBase.h:65
xAOD::AuxContainerBase::m_auxids
auxid_set_t m_auxids
Internal list of all available variables.
Definition: AuxContainerBase.h:226
xAOD::AuxContainerBase::m_vecs
std::vector< SG::IAuxTypeVector * > m_vecs
Internal list of all managed variables.
Definition: AuxContainerBase.h:228
lumiFormat.i
int i
Definition: lumiFormat.py:92
CxxUtils::ConcurrentBitset::insert
ConcurrentBitset & insert(bit_t bit, bit_t new_nbits=0)
Set a bit to 1.
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.
SG::AuxTypeRegistry::getVecType
const std::type_info * getVecType(SG::auxid_t auxid) const
Return the type of the STL vector used to hold an aux data item.
Definition: AuxTypeRegistry.cxx:328
xAOD::IOStats::instance
static IOStats & instance()
Singleton object accessor.
Definition: IOStats.cxx:11
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:194
python.subdetectors.mmg.ids
ids
Definition: mmg.py:8
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
xAOD::AuxContainerBase::getWritableAuxIDs
virtual const auxid_set_t & getWritableAuxIDs() const override
Return a set of writable data identifiers.
Definition: AuxContainerBase.cxx:478
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::AuxContainerBase::getData
virtual const void * getData(auxid_t auxid) const override
Get a pointer to a given array.
Definition: AuxContainerBase.cxx:229
xAOD::ReadStats::readBranch
void readBranch(const std::string &prefix, SG::auxid_t auxid)
Function incrementing the read counter on a specific branch.
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
xAOD::AuxContainerBase::auxid_t
SG::auxid_t auxid_t
The aux ID type definition.
Definition: AuxContainerBase.h:63
python.PyAthena.v
v
Definition: PyAthena.py:157
xAOD::AuxContainerBase::ATLAS_THREAD_SAFE
CxxUtils::CachedPointer< std::pmr::memory_resource > m_memResource ATLAS_THREAD_SAFE
Memory resource to use for this container.
Definition: AuxContainerBase.h:248
SG::IAuxTypeVector::insertMove
virtual bool insertMove(size_t pos, void *beg, void *end, IAuxStore &srcStore)=0
Insert elements into the vector via move semantics.
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.
xAOD::AuxContainerBase::m_locked
bool m_locked
Has the container been locked?
Definition: AuxContainerBase.h:237
SG::IAuxTypeVector
Abstract interface for manipulating vectors of arbitrary types.
Definition: IAuxTypeVector.h:40
xAOD::AuxContainerBase::m_ownsStore
bool m_ownsStore
Flag deciding if the object owns the dynamic store or not.
Definition: AuxContainerBase.h:235
SG::IConstAuxStore::lock
virtual void lock()=0
Lock the container.
xAOD::AuxContainerBase::m_storeIO
SG::IAuxStoreIO * m_storeIO
The IO interface to the internal auxiliary store.
Definition: AuxContainerBase.h:233
SG::IAuxStore::resize
virtual bool resize(size_t sz)=0
Change the size of all aux data vectors.
SG::auxid_set_t
A set of aux data identifiers.
Definition: AuxTypes.h:47
SG::IConstAuxStore::isDecoration
virtual bool isDecoration(auxid_t auxid) const =0
Test if a particular variable is tagged as a decoration.
SG::IAuxStoreHolder::AST_ObjectStore
@ AST_ObjectStore
The store describes a single object.
Definition: IAuxStoreHolder.h:67
SG::IConstAuxStore::getAuxIDs
virtual const SG::auxid_set_t & getAuxIDs() const =0
Return a set of identifiers for existing data items in this store.
SG::IAuxTypeVector::toPtr
virtual void * toPtr()=0
Return a pointer to the start of the vector's data.
SG::IAuxStore::reserve
virtual void reserve(size_t sz)=0
Change the capacity of all aux data vectors.
SG::IAuxStoreHolder::AST_ContainerStore
@ AST_ContainerStore
The store describes a container.
Definition: IAuxStoreHolder.h:68