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

For testing jagged vectors. More...

#include <JVecAuxInfo_v1.h>

Inheritance diagram for DMTest::JVecAuxInfo_v1:
Collaboration diagram for DMTest::JVecAuxInfo_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 = T
 Declare how to wrap variables for this sort of base. More...
 
template<class T , class ALLOC = std::allocator<T>>
using LinkedVariable_t = std::vector< T, ALLOC >
 
enum  AuxStoreType { AST_ObjectStore = 0, AST_ContainerStore = 1 }
 Type of the auxiliary store. More...
 

Public Member Functions

 JVecAuxInfo_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 >
auxid_t getAuxID (const std::string &name, 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 >
void regAuxVar (auxid_t auxid, const std::string &name, T &info)
 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_JAGGEDVEC_DECL (float, fvec)
 
 AUXVAR_JAGGEDVEC_DECL (int, ivec)
 
 AUXVAR_JAGGEDVEC_DECL (std::string, svec)
 
 AUXVAR_JAGGEDVEC_DECL (ElementLink< CVec >, lvec)
 

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...
 

Detailed Description

For testing jagged vectors.

Definition at line 30 of file JVecAuxInfo_v1.h.

Member Typedef Documentation

◆ auxid_set_t

The aux ID set type definition.

Definition at line 55 of file AuxInfoBase.h.

◆ auxid_t

The aux ID type definition.

Definition at line 53 of file AuxInfoBase.h.

◆ AuxVariable_t

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

Declare how to wrap variables for this sort of base.

Definition at line 179 of file AuxInfoBase.h.

◆ guard_t

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

Definition at line 212 of file AuxInfoBase.h.

◆ LinkedVariable_t

template<class T , class ALLOC = std::allocator<T>>
using xAOD::AuxInfoBase::LinkedVariable_t = std::vector<T, ALLOC>
inherited

Definition at line 181 of file AuxInfoBase.h.

◆ mutex_t

typedef AthContainers_detail::mutex xAOD::AuxInfoBase::mutex_t
privateinherited

Mutex for multithread synchronization.

Definition at line 211 of file AuxInfoBase.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

◆ JVecAuxInfo_v1()

DMTest::JVecAuxInfo_v1::JVecAuxInfo_v1 ( )

Definition at line 18 of file JVecAuxInfo_v1.cxx.

20 {
21 }

Member Function Documentation

◆ AUXVAR_JAGGEDVEC_DECL() [1/4]

DMTest::JVecAuxInfo_v1::AUXVAR_JAGGEDVEC_DECL ( ElementLink< CVec ,
lvec   
)
private

◆ AUXVAR_JAGGEDVEC_DECL() [2/4]

DMTest::JVecAuxInfo_v1::AUXVAR_JAGGEDVEC_DECL ( float  ,
fvec   
)
private

◆ AUXVAR_JAGGEDVEC_DECL() [3/4]

DMTest::JVecAuxInfo_v1::AUXVAR_JAGGEDVEC_DECL ( int  ,
ivec   
)
private

◆ AUXVAR_JAGGEDVEC_DECL() [4/4]

DMTest::JVecAuxInfo_v1::AUXVAR_JAGGEDVEC_DECL ( std::string  ,
svec   
)
private

◆ clearDecorations()

bool xAOD::AuxInfoBase::clearDecorations ( )
overridevirtualinherited

Clear all decorations.

Implements SG::IConstAuxStore.

Definition at line 322 of file AuxInfoBase.cxx.

322  {
323 
324  // Guard against multi-threaded execution:
325  guard_t guard( m_mutex );
326 
327  // Clear the decorations that are in the dynamic store:
328  bool anycleared = false;
329  if( m_store ) {
330  anycleared = m_store->clearDecorations();
331  }
332  // Early exit if there were no decorations.
333  if (!anycleared) return false;
334 
335  // Reconstruct the list of managed auxiliary IDs from scratch:
337  for( auxid_t auxid = 0; auxid < m_vecs.size(); ++auxid ) {
338  if( m_vecs[ auxid ] ) {
339  ids.insert( auxid );
340  }
341  }
342  if( m_store ) {
343  ids.insert (m_store->getAuxIDs());
344  }
345  m_auxids = ids;
346 
347  return true;
348  }

◆ getAuxID()

template<typename T >
auxid_t xAOD::AuxInfoBase::getAuxID ( const std::string &  name,
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.

◆ getAuxIDs()

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

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

Implements SG::IConstAuxStore.

Definition at line 249 of file AuxInfoBase.cxx.

249  {
250 
251  // Return the full list of IDs:
252  return getWritableAuxIDs();
253  }

◆ getData() [1/3]

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

Get a pointer to a given array.

Implements SG::IConstAuxStore.

Definition at line 195 of file AuxInfoBase.cxx.

195  {
196 
197  const SG::IAuxTypeVector* v = getVector( auxid );
198  if( v ) {
199  return v->toPtr();
200  }
201  return nullptr;
202  }

◆ getData() [2/3]

void * xAOD::AuxInfoBase::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 424 of file AuxInfoBase.cxx.

425  {
426 
427  // Guard against multi-threaded execution:
428  guard_t guard( m_mutex );
429 
430  if( ( auxid >= m_vecs.size() ) || ( ! m_vecs[ auxid ] ) ) {
431 
432  if( m_store ) {
433  void* result = m_store->getData( auxid, size, capacity );
434  if( result ) {
435  m_auxids.insert( auxid );
437  auxid_t linked_id = r.linkedVariable( auxid );
438  if (linked_id != SG::null_auxid) {
439  m_auxids.insert( linked_id );
440  }
441  }
442  return result;
443  } else {
444  std::cout << "ERROR xAOD::AuxInfoBase::getData "
445  << "Unknown variable ("
447  << ") requested" << std::endl;
448  return nullptr;
449  }
450  }
451  m_vecs[ auxid ]->reserve( capacity );
452  if (m_vecs[ auxid ]->size() < size) {
453  m_vecs[ auxid ]->resize( size );
454  }
455 
456  return m_vecs[ auxid ]->toPtr();
457  }

◆ getData() [3/3]

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

Pick up the const version from the base class.

◆ getDecoration()

void * xAOD::AuxInfoBase::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::EventAuxInfo_v1, xAOD::EventAuxInfo_v2, and xAOD::EventAuxInfo_v3.

Definition at line 265 of file AuxInfoBase.cxx.

266  {
267  {
268  // Guard against multi-threaded execution:
269  guard_t guard( m_mutex );
270 
271  // Check if we have it as a static variable:
272  if( ( auxid >= m_vecs.size() ) || ( ! m_vecs[ auxid ] ) ) {
273  // If not, but we have a dynamic store, push it in there:
274  if( m_store ) {
275  void* result = m_store->getDecoration( auxid, size, capacity );
276  if( result ) {
277  m_auxids.insert( auxid );
279  auxid_t linked_id = r.linkedVariable( auxid );
280  if (linked_id != SG::null_auxid) {
281  m_auxids.insert( linked_id );
282  }
283  }
284  return result;
285  }
286  // If we don't have a dynamic store, complain:
287  else {
288  std::cout << "ERROR xAOD::AuxInfoBase::getDecoration "
289  << "Can't provide variable "
291  << std::endl;
292  return nullptr;
293  }
294  }
295 
296  // If the container is locked, static variables can't be accessed this
297  // way:
298  if( m_locked ) {
299  throw SG::ExcStoreLocked( auxid );
300  }
301  }
302 
303  // If the container is not locked, then fall back on the normal accessor
304  // function:
305  return getData( auxid, size, capacity );
306  }

◆ getDecorIDs()

const AuxInfoBase::auxid_set_t & xAOD::AuxInfoBase::getDecorIDs ( ) const
overridevirtualinherited

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

Implements SG::IConstAuxStore.

Definition at line 256 of file AuxInfoBase.cxx.

256  {
257 
258  if( m_store ) {
259  return m_store->getDecorIDs();
260  }
261  static const auxid_set_t empty;
262  return empty;
263  }

◆ getDynamicAuxIDs()

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

Get the types(names) of variables created dynamically.

Implements SG::IAuxStoreIO.

Definition at line 636 of file AuxInfoBase.cxx.

636  {
637 
638  // Guard against multi-threaded execution:
639  guard_t guard( m_mutex );
640 
641  // All the variables handled by the internal store are dynamic
642  // if such a store exists:
643  if( m_storeIO ) {
644  // I mean, all the variables. Not just the ones reported as dynamic
645  // by the internal object. Because the internal object may be something
646  // that was put into this one in order to achieve data slimming.
647  return m_store->getAuxIDs();
648  }
649 
650  // In case we don't use an internal store, there are no dynamic
651  // variables:
652  static const auxid_set_t dummy (0);
653  return dummy;
654  }

◆ getIOData()

const void * xAOD::AuxInfoBase::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 585 of file AuxInfoBase.cxx.

585  {
586 
587  // Guard against multi-threaded execution:
588  guard_t guard( m_mutex );
589 
590  if( ( auxid >= m_vecs.size() ) || ( ! m_vecs[ auxid ] ) ) {
591  if( m_storeIO ) {
592  return m_storeIO->getIOData( auxid );
593  } else {
594  std::cout << "ERROR xAOD::AuxInfoBase::getIOData "
595  << "Unknown variable ("
597  << ") requested" << std::endl;
598  return nullptr;
599  }
600  }
601 
602  // Update the statistics for this variable. The dynamic store registers
603  // its own variable accesses.
605 
606  if( m_vecs[ auxid ]->isLinked() )
607  return m_vecs[ auxid ]->toVector();
608  else
609  return m_vecs[ auxid ]->toPtr();
610  }

◆ getIOType()

const std::type_info * xAOD::AuxInfoBase::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 612 of file AuxInfoBase.cxx.

612  {
613 
614  // Guard against multi-threaded execution:
615  guard_t guard( m_mutex );
616 
617  if( ( auxid >= m_vecs.size() ) || ( ! m_vecs[ auxid ] ) ) {
618  if( m_storeIO ) {
619  return m_storeIO->getIOType( auxid );
620  } else {
621  std::cout << "ERROR xAOD::AuxInfoBase::getIOType "
622  << "Unknown variable ("
624  << ") requested" << std::endl;
625  return nullptr;
626  }
627  }
628 
629  if( m_vecs[ auxid ]->isLinked() )
630  return SG::AuxTypeRegistry::instance().getType( auxid );
631  else
632  return SG::AuxTypeRegistry::instance().getVecType( auxid );
633  }

◆ getSelectedAuxIDs()

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

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

Reimplemented from SG::IAuxStoreIO.

Definition at line 657 of file AuxInfoBase.cxx.

657  {
658 
659  // Guard against multi-threaded execution:
660  guard_t guard( m_mutex );
661 
662  // All the variables handled by the internal store are dynamic
663  // if such a store exists:
664  if( m_storeIO ) {
665  // I mean, all the variables. Not just the ones reported as dynamic
666  // by the internal object. Because the internal object may be something
667  // that was put into this one in order to achieve data slimming.
668  return m_store->getAuxIDs();
669  }
670 
671  // In case we don't use an internal store, there are no dynamic
672  // variables:
673  return auxid_set_t();
674  }

◆ getStore() [1/2]

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

Get the currently used internal store object.

Implements SG::IAuxStoreHolder.

Definition at line 146 of file AuxInfoBase.cxx.

147  {
148  return m_store;
149  }

◆ getStore() [2/2]

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

Get the currently used internal store object.

Implements SG::IAuxStoreHolder.

Definition at line 140 of file AuxInfoBase.cxx.

141  {
142  return m_store;
143  }

◆ getStoreType()

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

Return the type of the store object.

Implements SG::IAuxStoreHolder.

Definition at line 79 of file AuxInfoBase.h.

79 { return AST_ObjectStore; }

◆ getVector()

const SG::IAuxTypeVector * xAOD::AuxInfoBase::getVector ( SG::auxid_t  auxid) const
finaloverridevirtualinherited

Return vector interface for one aux data item.

Implements SG::IConstAuxStore.

Definition at line 204 of file AuxInfoBase.cxx.

204  {
205 
206  // Guard against multi-threaded execution:
207  guard_t guard( m_mutex );
208 
209  if( ( auxid >= m_vecs.size() ) || ( ! m_vecs[ auxid ] ) ) {
210  if( m_store ) {
211  const SG::IAuxTypeVector* result = m_store->getVector( auxid );
212  if( result ) {
213  auxid_set_t& auxids_nc ATLAS_THREAD_SAFE =
214  const_cast<auxid_set_t&> (m_auxids);
215  auxids_nc.insert( auxid );
217  auxid_t linked_id = r.linkedVariable( auxid );
218  if (linked_id != SG::null_auxid) {
219  auxids_nc.insert( linked_id );
220  }
221  }
222  return result;
223  } else {
224  std::cout << "ERROR xAOD::AuxInfoBase::getData "
225  << "Unknown variable ("
227  << ") requested" << std::endl;
228  return nullptr;
229  }
230  }
231 
232  // Update the statistics for this variable. The dynamic store registers
233  // its own variable accesses.
235 
236  return m_vecs[ auxid ];
237  }

◆ getWritableAuxIDs()

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

Return a set of writable data identifiers.

Implements SG::IAuxStore.

Definition at line 460 of file AuxInfoBase.cxx.

460  {
461 
462  // Return the full list of known IDs. The constness of this object's
463  // members comes from the object being const or not.
464  return m_auxids;
465  }

◆ insertMove() [1/2]

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

Insert contents of another store via move.

Definition at line 549 of file AuxInfoBase.cxx.

550  {
551 
552  // Guard against multi-threaded execution:
553  guard_t guard( m_mutex );
554 
555  // Check if the container is locked:
556  if( m_locked ) {
557  throw SG::ExcStoreLocked( "insertMove" );
558  }
559 
560  // We are just not allowed to do this...
561  throw std::runtime_error( "Calling insertMove on a non-vector" );
562 
563  return false;
564  }

◆ 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::AuxInfoBase::isDecoration ( auxid_t  auxid) const
overridevirtualinherited

Test if a variable is a decoration.

Implements SG::IConstAuxStore.

Reimplemented in xAOD::EventAuxInfo_v1, xAOD::EventAuxInfo_v2, and xAOD::EventAuxInfo_v3.

Definition at line 239 of file AuxInfoBase.cxx.

240  {
241  guard_t guard( m_mutex );
242  if (m_store) {
243  return m_store->isDecoration (auxid);
244  }
245  return false;
246  }

◆ linkedVector() [1/3]

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

Return interface for a linked variable.

Reimplemented from SG::IConstAuxStore.

Definition at line 359 of file AuxInfoBase.cxx.

360  {
362  auxid_t linked_id = r.linkedVariable( auxid );
363  if (linked_id != SG::null_auxid) {
364  guard_t guard( m_mutex );
365  if (linked_id < m_vecs.size() && m_vecs[ linked_id ]) {
366  return m_vecs[ linked_id ];
367  }
368  if (m_store) {
369  return CxxUtils::as_const_ptr(m_store)->linkedVector( auxid );
370  }
371  }
372  return nullptr;
373  }

◆ linkedVector() [2/3]

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

Return interface for a linked variable.

Reimplemented from SG::IAuxStore.

Definition at line 376 of file AuxInfoBase.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 m_store->linkedVector( auxid );
387  }
388  }
389  return nullptr;
390  }

◆ 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::AuxInfoBase::lock ( )
overridevirtualinherited

Lock the container.

Implements ILockable.

Definition at line 308 of file AuxInfoBase.cxx.

308  {
309 
310  // Guard against multi-threaded execution:
311  guard_t guard( m_mutex );
312 
313  // Lock the container and the dynamic store:
314  m_locked = true;
315  if( m_store ) {
316  m_store->lock();
317  }
318 
319  return;
320  }

◆ lockDecoration()

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

Lock a decoration.

Implements SG::IConstAuxStore.

Reimplemented in xAOD::EventAuxInfo_v1, xAOD::EventAuxInfo_v2, and xAOD::EventAuxInfo_v3.

Definition at line 351 of file AuxInfoBase.cxx.

352  {
353  guard_t guard (m_mutex);
354  if (m_store) {
355  m_store->lockDecoration (auxid);
356  }
357  }

◆ name()

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

Get the name of the container instance.

Definition at line 679 of file AuxInfoBase.cxx.

679  {
680 
681  return m_name.c_str();
682  }

◆ regAuxVar()

template<typename T >
void xAOD::AuxInfoBase::regAuxVar ( auxid_t  auxid,
const std::string &  name,
T &  info 
)
inherited

Register one of the persistent variables internally.

◆ reserve()

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

Reserve a given size for the arrays.

Implements SG::IAuxStore.

Definition at line 501 of file AuxInfoBase.cxx.

501  {
502 
503  // Guard against multi-threaded execution:
504  guard_t guard( m_mutex );
505 
506  // Check if the container is locked:
507  if( m_locked ) {
508  throw SG::ExcStoreLocked( "reserve" );
509  }
510 
511  // Do a test already here:
512  if( size != 1 ) {
513  throw std::runtime_error( "Calling reserve with != 1 on a "
514  "non-vector" );
515  }
516 
517  // Do the operation on the static variables:
518  for (SG::IAuxTypeVector* v : m_vecs) {
519  if(v && !v->isLinked()) {
520  v->reserve( size );
521  }
522  }
523 
524  // Do the operation on the dynamic variables:
525  if( m_store ) {
526  m_store->reserve( size );
527  }
528 
529  return;
530  }

◆ resize()

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

Resize the arrays to a given size.

Implements SG::IAuxStore.

Definition at line 467 of file AuxInfoBase.cxx.

467  {
468 
469  // Guard against multi-threaded execution:
470  guard_t guard( m_mutex );
471 
472  // Check if the container is locked:
473  if( m_locked ) {
474  throw SG::ExcStoreLocked( "resize" );
475  }
476 
477  // Do a test already here:
478  if( size != 1 ) {
479  throw std::runtime_error( "Calling resize with != 1 on a "
480  "non-vector" );
481  }
482 
483  // Do the operation on the static variables:
484  bool nomoves = true;
485  for (SG::IAuxTypeVector* v : m_vecs) {
486  if(v && !v->isLinked()) {
487  if (!v->resize( size ))
488  nomoves = false;
489  }
490  }
491 
492  // Do the operation on the dynamic variables:
493  if( m_store ) {
494  if (!m_store->resize( size ))
495  nomoves = false;
496  }
497 
498  return nomoves;
499  }

◆ setName()

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

Set the name of the container instance.

Definition at line 684 of file AuxInfoBase.cxx.

684  {
685 
686  m_name = name;
687  return;
688  }

◆ setOption()

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

Make an option setting on an aux variable.

Reimplemented from SG::IAuxStore.

Definition at line 567 of file AuxInfoBase.cxx.

567  {
568 
569  if (id < m_vecs.size() && m_vecs[id] != nullptr)
570  return m_vecs[id]->setOption( option );
571  if (m_store)
572  return m_store->setOption( id, option );
573  return false;
574  }

◆ setStore()

void xAOD::AuxInfoBase::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 160 of file AuxInfoBase.cxx.

160  {
161 
162  // Guard against multi-threaded execution:
163  guard_t guard( m_mutex );
164 
165  // Check that no funny business is going on:
166  if( m_store == store ) return;
167 
168  // Clean up the current store object:
169  if( m_store && m_ownsStore ) {
170  m_auxids -= m_store->getAuxIDs();
171  delete m_store;
172  }
173  m_store = nullptr;
174  m_storeIO = nullptr;
175 
176  // Take posession of the new object:
177  m_store = store;
178  m_storeIO = dynamic_cast< SG::IAuxStoreIO* >( m_store );
179  m_ownsStore = true;
180  if( m_store ) {
182  }
183 
184  return;
185  }

◆ shift()

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

Shift the contents of the stored arrays.

Implements SG::IAuxStore.

Definition at line 532 of file AuxInfoBase.cxx.

532  {
533 
534  // Guard against multi-threaded execution:
535  guard_t guard( m_mutex );
536 
537  // Check if the container is locked:
538  if( m_locked ) {
539  throw SG::ExcStoreLocked( "shift" );
540  }
541 
542  // We are just not allowed to do this...
543  throw std::runtime_error( "Calling shift on a non-vector" );
544 
545  return;
546  }

◆ size()

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

Get the size of the container.

Implements SG::IConstAuxStore.

Definition at line 393 of file AuxInfoBase.cxx.

393  {
394 
395  // Should really always be 1, but do the general thing anyway...
396 
397  // Guard against multi-threaded execution:
398  guard_t guard( m_mutex );
399 
400  // Try to find a variable:
401  for (SG::auxid_t i : m_auxids) {
402  if( ( i < m_vecs.size() ) && m_vecs[ i ] && !m_vecs[ i ]->isLinked()) {
403  size_t sz = m_vecs[ i ]->size();
404  if( sz > 0 ) {
405  return sz;
406  }
407  }
408  }
409 
410  // If we didn't find any statically defined variables, then we just
411  // need to claim 1. Because pool::AuxStoreAPR at the moment always
412  // returns 0 for the size.
413  return 1;
414  }

Member Data Documentation

◆ m_auxids

auxid_set_t xAOD::AuxInfoBase::m_auxids
privateinherited

Internal list of all available variables.

Definition at line 197 of file AuxInfoBase.h.

◆ m_locked

bool xAOD::AuxInfoBase::m_locked
privateinherited

Has the container been locked?

Definition at line 208 of file AuxInfoBase.h.

◆ m_mutex

mutex_t xAOD::AuxInfoBase::m_mutex
mutableprivateinherited

Definition at line 213 of file AuxInfoBase.h.

◆ m_name

std::string xAOD::AuxInfoBase::m_name
privateinherited

Name of the container in memory. Set externally.

Definition at line 216 of file AuxInfoBase.h.

◆ m_ownsStore

bool xAOD::AuxInfoBase::m_ownsStore
privateinherited

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

Definition at line 206 of file AuxInfoBase.h.

◆ m_store

SG::IAuxStore* xAOD::AuxInfoBase::m_store
privateinherited

Internal dynamic auxiliary store object.

Definition at line 202 of file AuxInfoBase.h.

◆ m_storeIO

SG::IAuxStoreIO* xAOD::AuxInfoBase::m_storeIO
privateinherited

The IO interface to the internal auxiliary store.

Definition at line 204 of file AuxInfoBase.h.

◆ m_vecs

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

Internal list of all managed variables.

Definition at line 199 of file AuxInfoBase.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::AuxInfoBase
Common base class for auxiliary info objects.
Definition: AuxInfoBase.h:49
beamspotman.r
def r
Definition: beamspotman.py:676
store
StoreGateSvc * store
Definition: fbtTestBasics.cxx:71
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
SG::IConstAuxStore::getVector
virtual const IAuxTypeVector * getVector(SG::auxid_t auxid) const =0
Return vector interface for one aux data item.
xAOD::AuxInfoBase::auxid_t
SG::auxid_t auxid_t
The aux ID type definition.
Definition: AuxInfoBase.h:53
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:640
SG::AuxTypeRegistry::getName
std::string getName(SG::auxid_t auxid) const
Return the name of an aux data item.
Definition: AuxTypeRegistry.cxx:882
xAOD::AuxInfoBase::m_vecs
std::vector< SG::IAuxTypeVector * > m_vecs
Internal list of all managed variables.
Definition: AuxInfoBase.h:199
SG::ExcStoreLocked
Exception — Attempted to modify auxiliary data in a locked store.
Definition: Control/AthContainers/AthContainers/exceptions.h:183
xAOD::AuxInfoBase::size
virtual size_t size() const override
Get the size of the container.
Definition: AuxInfoBase.cxx:393
xAOD::AuxInfoBase::getWritableAuxIDs
virtual const auxid_set_t & getWritableAuxIDs() const override
Return a set of writable data identifiers.
Definition: AuxInfoBase.cxx:460
xAOD::AuxInfoBase::m_ownsStore
bool m_ownsStore
Flag deciding if the object owns the dynamic store or not.
Definition: AuxInfoBase.h:206
xAOD::AuxInfoBase::name
const char * name() const
Get the name of the container instance.
Definition: AuxInfoBase.cxx:679
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.
empty
bool empty(TH1 *h)
Definition: computils.cxx:294
xAOD::AuxInfoBase::getVector
virtual const SG::IAuxTypeVector * getVector(SG::auxid_t auxid) const override final
Return vector interface for one aux data item.
Definition: AuxInfoBase.cxx:204
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
xAOD::AuxInfoBase::getData
virtual const void * getData(auxid_t auxid) const override
Get a pointer to a given array.
Definition: AuxInfoBase.cxx:195
SG::AuxTypeRegistry
Handle mappings between names and auxid_t.
Definition: AuxTypeRegistry.h:61
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::AuxTypeRegistry::getType
const std::type_info * getType(SG::auxid_t auxid) const
Return the type of an aux data item.
Definition: AuxTypeRegistry.cxx:909
SG::IConstAuxStore::clearDecorations
virtual bool clearDecorations()=0
Clear all decorations.
xAOD::AuxInfoBase::m_store
SG::IAuxStore * m_store
Internal dynamic auxiliary store object.
Definition: AuxInfoBase.h:202
lumiFormat.i
int i
Definition: lumiFormat.py:85
CxxUtils::ConcurrentBitset::insert
ConcurrentBitset & insert(bit_t bit, bit_t new_nbits=0)
Set a bit to 1.
xAOD::AuxInfoBase::m_name
std::string m_name
Name of the container in memory. Set externally.
Definition: AuxInfoBase.h:216
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:937
xAOD::IOStats::instance
static IOStats & instance()
Singleton object accessor.
Definition: IOStats.cxx:11
xAOD::AuxInfoBase::auxid_set_t
SG::auxid_set_t auxid_set_t
The aux ID set type definition.
Definition: AuxInfoBase.h:55
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:220
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::AuxInfoBase::guard_t
AthContainers_detail::lock_guard< mutex_t > guard_t
Definition: AuxInfoBase.h:212
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::ReadStats::readBranch
void readBranch(const std::string &prefix, SG::auxid_t auxid)
Function incrementing the read counter on a specific branch.
python.PyAthena.v
v
Definition: PyAthena.py:154
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::AuxInfoBase::m_storeIO
SG::IAuxStoreIO * m_storeIO
The IO interface to the internal auxiliary store.
Definition: AuxInfoBase.h:204
SG::IAuxTypeVector
Abstract interface for manipulating vectors of arbitrary types.
Definition: IAuxTypeVector.h:42
SG::IConstAuxStore::getDecorIDs
virtual const SG::auxid_set_t & getDecorIDs() const =0
Return a set of identifiers for decorations in this store.
SG::IConstAuxStore::lock
virtual void lock()=0
Lock the container.
SG::IAuxStore::resize
virtual bool resize(size_t sz)=0
Change the size of all aux data vectors.
ATLAS_THREAD_SAFE
#define ATLAS_THREAD_SAFE
Definition: checker_macros.h:211
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
xAOD::AuxInfoBase::m_auxids
auxid_set_t m_auxids
Internal list of all available variables.
Definition: AuxInfoBase.h:197
SG::IConstAuxStore::getAuxIDs
virtual const SG::auxid_set_t & getAuxIDs() const =0
Return a set of identifiers for existing data items in this store.
xAOD::AuxInfoBase::m_locked
bool m_locked
Has the container been locked?
Definition: AuxInfoBase.h:208
xAOD::AuxInfoBase::m_mutex
mutex_t m_mutex
Definition: AuxInfoBase.h:213
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