ATLAS Offline Software
AuxVectorData.h
Go to the documentation of this file.
1 // This file's extension implies that it's C, but it's really -*- C++ -*-.
2 /*
3  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
4 */
13 #ifndef ATHCONTAINERS_AUXVECTORDATA_H
14 #define ATHCONTAINERS_AUXVECTORDATA_H
15 
16 
22 #include "AthLinks/DataLink.h"
23 #include "SGCore/ILockable.h"
24 
25 #include <vector>
26 #include <utility>
27 #include <cstdlib>
28 
33 
34 
35 namespace SG {
36 
37 
38 class AuxElement;
39 class IAuxStore;
40 class AuxDataOption;
41 
42 
163 class AuxVectorData : public ILockable
164 {
165 public:
167  AuxVectorData();
168 
169 
175 
176 
182 
183 
185  virtual ~AuxVectorData();
186 
187 
193  virtual size_t size_v() const = 0;
194 
195 
201  virtual size_t capacity_v() const = 0;
202 
203 
204  //========================================================================
207 
208 
216 
217 
225 
226 
233 
234 
240  const SG::IAuxStore* getStore() const;
241 
242 
246  bool hasStore() const;
247 
248 
252  bool hasNonConstStore() const;
253 
254 
264  bool setOption (auxid_t id, const AuxDataOption& option);
265 
266 
276  bool setOption (const std::string& name,
277  const AuxDataOption& option);
278 
279 
290  bool setOption (const std::string& name,
291  const std::string& clsname,
292  const AuxDataOption& option);
293 
294 
305  template <class T>
306  bool setOption (auxid_t id, const std::string& optname, T arg);
307 
308 
319  bool setOption (const std::string& name,
320  const std::string& optname,
321  int arg);
322  bool setOption (const std::string& name,
323  const std::string& optname,
324  float arg);
325  bool setOption (const std::string& name,
326  const std::string& optname,
327  double arg);
328 
329 
341  template <class T>
342  bool setOption (const std::string& name,
343  const std::string& clsname,
344  const std::string& optname,
345  T arg);
346 
347 
348 
349 protected:
350  // These are protected. They shouldn't be called directly but
351  // instead from @c setStore methods in derived classes, which do
352  // extra consistency checking.
353 
354 
365  void setStore (SG::IAuxStore* store);
366 
367 
375  void setStore (const SG::IConstAuxStore* store);
376 
377 
386 
387 
400 
401 
403  //========================================================================
406 public:
407 
408 
417  const SG::auxid_set_t& getAuxIDs() const;
418 
419 
423  const SG::auxid_set_t& getDecorIDs() const;
424 
425 
434  const SG::auxid_set_t& getWritableAuxIDs() const;
435 
436 
441  bool isAvailable (auxid_t id) const;
442 
443 
449 
450 
456 
457 
458  // Versions of isAvailable* that take a name rather than an ID are
459  // in the derived class AuxVectorBase.
460 
461 
474  template <class T>
476  getData (SG::auxid_t auxid, size_t ndx);
477 
478 
490  template <class T>
492  getData (SG::auxid_t auxid, size_t ndx) const;
493 
494 
514  template <class T>
516  getDecoration (SG::auxid_t auxid, size_t ndx) const;
517 
518 
527  const void* getDataArray (SG::auxid_t auxid) const;
528 
529 
538  const void* getDataArrayAllowMissing (SG::auxid_t auxid) const;
539 
540 
555  void* getDecorationArray (SG::auxid_t auxid) const;
556 
557 
566  void* getDataArray (SG::auxid_t auxid);
567 
568 
584 
585 
586 protected:
589  static size_t s_minCacheLen ATLAS_THREAD_SAFE;
590 
591 
593  //========================================================================
596 public:
597 
598 
604 
605 
612  void clearCache();
613 
614 
622  void clearCache (SG::auxid_t auxid);
623 
624 
633 
634 
641 #ifndef XAOD_STANDALONE
642  virtual
643 #endif // not XAOD_STANDALONE
644  void lock()
645 #ifndef XAOD_STANDALONE
646  override
647 #endif // not XAOD_STANDALONE
648  ;
649 
650 
660  bool clearDecorations() const;
661 
662 
671  void lockDecoration (SG::auxid_t auxid);
672 
673 
679  const SG::IConstAuxStore* getConstStoreOol() const;
680 
681 
682 protected:
692  void setCache (SG::auxid_t auxid, void* ptr);
693 
694 
704  void setCache (SG::auxid_t auxid, const void* ptr);
705 
706 
708 
709 
710 
711 public:
718  class Cache
719  {
720  public:
724  Cache();
725 
726 
731  Cache (Cache&& rhs);
732 
733 
738  Cache& operator= (Cache&& rhs);
739 
740 
744  ~Cache();
745 
746 
751  void* cachePtr (SG::auxid_t auxid);
752 
753 
764 
765 
775  const void* getDataArray (SG::auxid_t auxid, const AuxVectorData& parent);
776 
777 
788  const AuxVectorData& parent);
789 
790 
807 
808 
814  const AuxVectorData& parent);
815 
816 
821  void swap (Cache& other);
822 
823 
827  void clear();
828 
829 
837  void clear (SG::auxid_t auxid);
838 
839 
845  void store (SG::auxid_t auxid, void* ptr);
846 
847 
851  void** m_cache[2];
852 
854  size_t m_cache_len;
855 
857  // See the thread-safety discussion in the file header above.
858  // Could be a vector of unique_ptr, but we want to avoid
859  // relying on c++11 for now.
860  std::vector<void**> m_allcache;
861 
862 
863  private:
864  Cache (const Cache&);
866  };
867 
868  friend class Cache;
869 
870 
871 private:
875 
876  // Needed for access to getDataArray
877  friend class SG::AuxElement;
878 
879 
884  bool isAvailableOol (auxid_t id) const;
885 
886 
892 
893 
899 
900 
911  void* getDataOol (SG::auxid_t auxid, bool allowMissing);
912 
913 
924  const void* getDataOol (SG::auxid_t auxid, bool allowMissing) const;
925 
926 
941  void* getDecorationOol (SG::auxid_t auxid) const;
942 
943 
956  auxid, bool allowMissing) const /*__attribute__((const))*/;
957 
958 
960  mutable Cache m_cache ATLAS_THREAD_SAFE;
961 
963  mutable Cache m_constCache ATLAS_THREAD_SAFE;
964 
966  mutable Cache m_decorCache ATLAS_THREAD_SAFE;
967 
969  mutable Cache m_spanCache ATLAS_THREAD_SAFE;
970 
971 
974 
975 
978 
979 
982 
983 
986  typedef AthContainers_detail::lock_guard<mutex_t> guard_t;
987  mutable mutex_t m_mutex;
988 
991 };
992 
993 
994 } // namespace SG
995 
996 
998 
999 
1000 #endif // not ATHCONTAINERS_AUXVECTORDATA_H
SG::AuxVectorData::getStore
const SG::IAuxStore * getStore() const
Return the current store, as a non-const interface.
SG::AuxVectorData::setOption
bool setOption(const std::string &name, const std::string &optname, float arg)
SG::AuxVectorData::getConstStore
const SG::IConstAuxStore * getConstStore() const
Return the current store, as a const interface.
SG::AuxVectorData::isAvailableOol
bool isAvailableOol(auxid_t id) const
Out-of-line portion of isAvailable.
Definition: AuxVectorData.cxx:243
SGTest::store
TestStore store
Definition: TestStore.cxx:23
SG::AuxDataTraits::reference_type
element_type & reference_type
Reference types returned by aux data accessors.
Definition: AuxDataTraits.h:46
SG::AuxVectorData::setOption
bool setOption(auxid_t id, const std::string &optname, T arg)
Set an option for an auxiliary data variable.
SG::AuxVectorData::getDataArray
const void * getDataArray(SG::auxid_t auxid) const
Return a const pointer to the start of an aux data vector.
SG::AuxVectorData::lock
virtual void lock() override
Lock the container.
Definition: AuxVectorData.cxx:633
SG::AuxVectorData::Cache::getDataArray
const void * getDataArray(SG::auxid_t auxid, const AuxVectorData &parent)
Return a const pointer to the start of an aux data vector.
SG::AuxVectorData::getDataSpan
const AuxDataSpanBase * getDataSpan(SG::auxid_t auxid) const
Return a reference to a description of this vector's start+size.
SG::AuxVectorData::getDataOol
void * getDataOol(SG::auxid_t auxid, bool allowMissing)
Out-of-line portion of data access.
Definition: AuxVectorData.cxx:308
SG::AuxVectorData::m_constStoreLink
DataLink< SG::IConstAuxStore > m_constStoreLink
Associated store link, const.
Definition: AuxVectorData.h:981
SG
Forward declaration.
Definition: CaloCellPacker_400_500.h:32
SG::AuxVectorData::ATLAS_THREAD_SAFE
static size_t s_minCacheLen ATLAS_THREAD_SAFE
Minimum length to use for the cache vector.
Definition: AuxVectorData.h:589
SG::AuxVectorData::clearDecorCache
void clearDecorCache(SG::auxid_t auxid)
Clear the cached decoration pointer for a single variable.
SG::AuxVectorData::getDecorIDs
const SG::auxid_set_t & getDecorIDs() const
Return a set of identifiers for decorations for this object.
Definition: AuxVectorData.cxx:215
SG::AuxVectorData::getWritableAuxIDs
const SG::auxid_set_t & getWritableAuxIDs() const
Return a set of identifiers for writable data items in this store.
Definition: AuxVectorData.cxx:231
SG::AuxVectorData::guard_t
AthContainers_detail::lock_guard< mutex_t > guard_t
Definition: AuxVectorData.h:986
BeamSpot::mutex
std::mutex mutex
Definition: InDetBeamSpotVertex.cxx:18
SG::AuxElement
Base class for elements of a container that can have aux data.
Definition: AuxElement.h:483
SG::AuxDataTraits::const_reference_type
const element_type & const_reference_type
Definition: AuxDataTraits.h:47
SG::AuxVectorData::getDecorationOol
void * getDecorationOol(SG::auxid_t auxid) const
Out-of-line portion of data access (decorator version).
Definition: AuxVectorData.cxx:397
SG::AuxVectorData::getDataSpanOol
const AuxDataSpanBase * getDataSpanOol(SG::auxid_t auxid, bool allowMissing) const
Return a reference to a description of this vector's start+size, out-of-line portion.
Definition: AuxVectorData.cxx:456
ILockable.h
SG::AuxVectorData::Cache::m_cache
void ** m_cache[2]
Pointer to the cache vector.
Definition: AuxVectorData.h:851
SG::AuxVectorData::hasNonConstStore
bool hasNonConstStore() const
Return true if this object has an associated non-const store.
AuxDataSpan.h
Describe a range over an auxiliary variable, for low-overhead access.
SG::AuxVectorData::operator=
AuxVectorData & operator=(AuxVectorData &&rhs)
Move assignment.
Definition: AuxVectorData.cxx:66
SG::AuxVectorData::Cache::cachePtr
void * cachePtr(SG::auxid_t auxid)
Test to see if auxid is valid in the cache.
SG::AuxVectorData::Cache::m_allcache
std::vector< void ** > m_allcache
All cache vectors that have been allocated.
Definition: AuxVectorData.h:860
SG::AuxVectorData::Cache::getDataArray
void * getDataArray(SG::auxid_t auxid, AuxVectorData &parent)
Return a pointer to the start of an aux data vector.
SG::AuxVectorData::Cache::getDataSpan
const AuxDataSpanBase * getDataSpan(SG::auxid_t auxid, const AuxVectorData &parent)
Return a reference to a description of this vector's start+size.
SG::AuxVectorData::Cache
Manage cache of pointers to aux element vectors.
Definition: AuxVectorData.h:719
SG::AuxVectorData::getConstStoreOol
const SG::IConstAuxStore * getConstStoreOol() const
Same as getConstStore.
Definition: AuxVectorData.cxx:704
SG::AuxVectorData::Cache::Cache
Cache()
Cache manager constructor.
Definition: AuxVectorData.cxx:490
SG::AuxVectorData::lockDecoration
void lockDecoration(SG::auxid_t auxid)
Explicitly lock a decoration.
Definition: AuxVectorData.cxx:687
likely.h
Define likely/unlikely macros for branch prediction.
SG::AuxVectorData::swap
void swap(AuxVectorData &other)
Swap this instance with another.
SG::AuxVectorData::isAvailableWritableAsDecorationOol
bool isAvailableWritableAsDecorationOol(auxid_t id) const
Out-of-line portion of isAvailableWritableAsDecoration.
Definition: AuxVectorData.cxx:282
dbg::ptr
void * ptr(T *p)
Definition: SGImplSvc.cxx:74
SG::AuxVectorData::isAvailableWritable
bool isAvailableWritable(auxid_t id)
Test to see if a variable is available for writing.
SG::AuxVectorData::ATLAS_THREAD_SAFE
Cache m_cache ATLAS_THREAD_SAFE
Cached pointers to the start of aux data vectors, non-const.
Definition: AuxVectorData.h:960
SG::AuxVectorData::getDecorationArray
void * getDecorationArray(SG::auxid_t auxid) const
Return a pointer to the start of an aux data vector for a decoration.
SG::AuxVectorData::getAuxIDs
const SG::auxid_set_t & getAuxIDs() const
Return a set of identifiers for existing data items in store associated with this object.
Definition: AuxVectorData.cxx:203
AuxDataOption.h
Hold information about an option setting request.
SG::AuxVectorData::isAvailable
bool isAvailable(auxid_t id) const
Test to see if a variable exists in the store.
SG::AuxVectorData::m_constStore
const SG::IConstAuxStore * m_constStore
Associated store, const.
Definition: AuxVectorData.h:977
SG::AuxVectorData::setStore
void setStore(SG::IAuxStore *store)
Set the store associated with this object.
Definition: AuxVectorData.cxx:116
SG::AuxVectorData::clearCache
void clearCache(SG::auxid_t auxid)
Clear the cached aux data pointers for a single variable.
SG::auxid_t
size_t auxid_t
Identifier for a particular aux data item.
Definition: AuxTypes.h:27
SG::AuxVectorData::setNonConstStore
void setNonConstStore(SG::IAuxStore *store)
Set the store associated with this object.
SG::AuxVectorData::~AuxVectorData
virtual ~AuxVectorData()
Destructor.
Definition: AuxVectorData.cxx:88
SG::AuxVectorData::s_emptySet
static const SG::auxid_set_t s_emptySet
Empty auxid set, used for a return value when we have no associated store.
Definition: AuxVectorData.h:990
SG::AuxVectorData::Cache::m_cache_len
size_t m_cache_len
Length of the cache vector.
Definition: AuxVectorData.h:854
SG::AuxVectorData::mutex_t
AthContainers_detail::mutex mutex_t
Mutex used to synchronize modifications to the cache vector.
Definition: AuxVectorData.h:985
SG::AuxVectorData::getData
AuxDataTraits< T >::reference_type getData(SG::auxid_t auxid, size_t ndx)
Return reference to an aux data item.
SG::AuxVectorData::Cache::Cache
Cache(const Cache &)
SG::AuxVectorData::setCache
void setCache(SG::auxid_t auxid, void *ptr)
Explicitly set a cache pointer.
SG::AuxVectorData::m_mutex
mutex_t m_mutex
Definition: AuxVectorData.h:987
SG::AuxVectorData::Cache::operator=
Cache & operator=(Cache &&rhs)
Cache manager move assignment.
Definition: AuxVectorData.cxx:517
AuxVectorData.icc
SG::AuxVectorData::getStore
SG::IAuxStore * getStore()
Return the current store, as a non-const interface.
SG::AuxVectorData::getDecoration
AuxDataTraits< T >::reference_type getDecoration(SG::auxid_t auxid, size_t ndx) const
Return reference to an aux decoration item.
test_pyathena.parent
parent
Definition: test_pyathena.py:15
AuxDataTraits.h
Allow customizing how aux data types are treated.
SG::AuxVectorData::getDataArrayAllowMissing
const void * getDataArrayAllowMissing(SG::auxid_t auxid) const
Return a const pointer to the start of an aux data vector.
SG::AuxVectorData::hasStore
bool hasStore() const
Return true if this object has an associated store.
SG::AuxVectorData::AuxVectorData
AuxVectorData()
Constructor.
Definition: AuxVectorData.cxx:36
create_dcsc_inputs_sqlite.arg
list arg
Definition: create_dcsc_inputs_sqlite.py:48
SG::AuxVectorData::ATLAS_THREAD_SAFE
Cache m_constCache ATLAS_THREAD_SAFE
Cached pointers to the start of aux data vectors, const.
Definition: AuxVectorData.h:963
SG::AuxDataOption
Hold information about an option setting request.
Definition: AuxDataOption.h:37
assume.h
Macro to provide hints for optimization.
SG::AuxDataSpanBase
Minimal span-like object describing the range of an auxiliary variable.
Definition: AuxDataSpan.h:39
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
SG::AuxVectorData::Cache::getDecorationArray
void * getDecorationArray(SG::auxid_t auxid, const AuxVectorData &parent)
Return a pointer to the start of an aux decoration vector.
SG::AuxVectorData::clearCache
void clearCache()
Clear the cached aux data pointers.
SG::AuxVectorData::Cache::getDataArrayAllowMissing
const void * getDataArrayAllowMissing(SG::auxid_t auxid, const AuxVectorData &parent)
Return a const pointer to the start of an aux data vector.
SG::AuxVectorData::Cache::clear
void clear()
Clear the cache (and free any old cache vectors).
Definition: AuxVectorData.cxx:558
threading.h
Threading definitions.
SG::AuxVectorData::m_store
SG::IAuxStore * m_store
Associated store, non-const.
Definition: AuxVectorData.h:973
SG::AuxVectorData::ATLAS_THREAD_SAFE
Cache m_decorCache ATLAS_THREAD_SAFE
Cached pointers to the start of aux data vectors, decorations.
Definition: AuxVectorData.h:966
AuxTypes.h
Basic definitions for auxiliary types.
SG::IAuxStore
Interface for non-const operations on an auxiliary store.
Definition: IAuxStore.h:48
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
SG::AuxVectorData::clearDecorations
bool clearDecorations() const
Clear all decorations.
Definition: AuxVectorData.cxx:653
SG::AuxVectorData::ATLAS_THREAD_SAFE
Cache m_spanCache ATLAS_THREAD_SAFE
Cached pointers to span descriptors.
Definition: AuxVectorData.h:969
SG::AuxVectorData::Cache::swap
void swap(Cache &other)
Swap this cache object with another.
Definition: AuxVectorData.cxx:547
SG::AuxVectorData::getData
AuxDataTraits< T >::const_reference_type getData(SG::auxid_t auxid, size_t ndx) const
Return const reference to an aux data item.
SG::AuxVectorData::setOption
bool setOption(const std::string &name, const std::string &optname, int arg)
Set an option for an auxiliary data variable.
SG::AuxVectorData::Cache::~Cache
~Cache()
Cache manager destructor.
Definition: AuxVectorData.cxx:537
SG::AuxVectorData::Cache::store
void store(SG::auxid_t auxid, void *ptr)
Store a pointer for auxid in the cache.
Definition: AuxVectorData.cxx:592
SG::AuxVectorData::getDataArray
void * getDataArray(SG::auxid_t auxid)
Return a pointer to the start of an aux data vector.
SG::AuxVectorData::getConstStoreLink
const DataLink< SG::IConstAuxStore > getConstStoreLink() const
Return the data link to the current store, as a const interface.
ILockable
Interface to allow an object to lock itself when made const in SG.
Definition: ILockable.h:32
SG::AuxVectorData::isAvailableWritableOol
bool isAvailableWritableOol(auxid_t id)
Out-of-line portion of isAvailableWritable.
Definition: AuxVectorData.cxx:270
SG::auxid_set_t
A set of aux data identifiers.
Definition: AuxTypes.h:47
SG::AuxVectorData::isAvailableWritableAsDecoration
bool isAvailableWritableAsDecoration(auxid_t id) const
Test to see if a variable is available for writing as a decoration.
SG::AuxVectorData
Manage lookup of vectors of auxiliary data.
Definition: AuxVectorData.h:164
SG::AuxVectorData::setOption
bool setOption(const std::string &name, const std::string &clsname, const std::string &optname, T arg)
Set an option for an auxiliary data variable.
SG::AuxVectorData::AuxVectorData
AuxVectorData(const AuxVectorData &)
Copy not allowed.
IConstAuxStore.h
Interface for const operations on an auxiliary store.
SG::IConstAuxStore
Interface for const operations on an auxiliary store.
Definition: IConstAuxStore.h:64
checker_macros.h
Define macros for attributes used to control the static checker.
SG::AuxVectorData::setCache
void setCache(SG::auxid_t auxid, const void *ptr)
Explicitly set a cache pointer.
SG::AuxVectorData::capacity_v
virtual size_t capacity_v() const =0
Return the capacity of the container.
SG::AuxVectorData::size_v
virtual size_t size_v() const =0
Return the size of the container.
SG::AuxVectorData::setOption
bool setOption(auxid_t id, const AuxDataOption &option)
Set an option for an auxiliary data variable.
Definition: AuxVectorData.cxx:150
SG::AuxVectorData::setOption
bool setOption(const std::string &name, const std::string &optname, double arg)