ATLAS Offline Software
|
Class managing concrete persistent variables. More...
#include <AuxPersInfo.h>
Public Types | |
typedef T & | info_type |
Convenience type definition. More... | |
Public Member Functions | |
AuxPersInfo (SG::auxid_t auxid, info_type info, SG::IAuxStore *) | |
Constructor. More... | |
virtual std::unique_ptr< SG::IAuxTypeVector > | clone () const override |
Make a copy of this vector. More... | |
virtual void * | toPtr () override |
Return a pointer to the start of the vector's data. More... | |
virtual const void * | toPtr () const override |
Return a pointer to the start of the vector's data. More... | |
virtual void * | toVector () override |
Return a pointer to the STL vector itself. More... | |
virtual size_t | size () const override |
Return the size of the vector. More... | |
virtual bool | resize (size_t sz) override |
Change the size of the vector. More... | |
virtual void | reserve (size_t sz) override |
Change the capacity of the vector. More... | |
virtual bool | shift (size_t, ptrdiff_t) override |
Shift the elements of the vector. More... | |
virtual bool | insertMove (size_t, void *, size_t, size_t, SG::IAuxStore &) override |
Insert elements into the vector via move semantics. More... | |
virtual const std::type_info * | objType () const override |
Return the type of the complete object to be saved. More... | |
virtual SG::AuxDataSpanBase | getDataSpanImpl () const override final |
Return a span object describing the current vector. More... | |
virtual bool | setOption (const AuxDataOption &) |
Set an option for this variable. More... | |
virtual std::unique_ptr< IAuxTypeVector > | toPacked () |
Make a packed version of the variable. More... | |
virtual std::unique_ptr< IAuxTypeVector > | linkedVector () |
Return IAuxTypeVector of a linked variable, if there is one. More... | |
bool | isLinked () const |
Return true if this variable is linked from another one. More... | |
auxid_t | auxid () const |
Return the auxid of the variable this vector represents. More... | |
const AuxDataSpanBase & | getDataSpan () const |
Return a reference to a description of this vector's start+size. More... | |
Protected Member Functions | |
void | storeDataSpan (void *beg, size_t size) |
Update the stored span. More... | |
void | resetDataSpan () |
Invalidate the stored span. More... | |
Private Attributes | |
info_type | m_info |
Reference to the info being handled. More... | |
auxid_t | m_auxid |
The auxid of the variable this vector represents. More... | |
bool | m_isLinked |
True if this variable is linked from another one. More... | |
CxxUtils::CachedValue< AuxDataSpanBase > | m_span |
Description of the vector start+size. More... | |
Class managing concrete persistent variables.
This class is used internally by the "special" auxiliary store objects to manage the auxiliary variables handled by them. User code probably doesn't want to touch it directly...
Definition at line 32 of file AuxPersInfo.h.
typedef T& xAOD::AuxPersInfo< T >::info_type |
Convenience type definition.
Definition at line 36 of file AuxPersInfo.h.
|
inline |
|
inlineinherited |
Return the auxid of the variable this vector represents.
Definition at line 232 of file IAuxTypeVector.h.
|
inlineoverridevirtual |
Make a copy of this vector.
Implements SG::IAuxTypeVector.
Definition at line 42 of file AuxPersInfo.h.
|
inlineinherited |
Return a reference to a description of this vector's start+size.
This returns a reference to an AuxDataSpanBase
, which gives the start and size of the vector. This object will be updated if the vector changes.
For low overhead, we want this to be a non-virtual function call. However, for variables being read, the usage pattern is that we first create the @IAuxTypeVector object, give the underlying std::vector
object to ROOT, and then ROOT fills the vector without the involvement of the IAuxTypeVector
. To be able to have this work correctly, we need to defer initializing the span object until the first time that getDataSpan
gets called. We do this with a CachedValue
. If the span has already been initialized, we just return it; otherwise, we make a virtual call to fetch the vector from the derived class.
Be aware: this is in principle a const-correctness violation, since AuxDataSpanBase
has a non-const pointer to the start of the vector. But doing it properly is kind of painful, and as this interface is only meant to be used internally, it's likely not a real problem.
Definition at line 261 of file IAuxTypeVector.h.
|
inlinefinaloverridevirtual |
Return a span object describing the current vector.
Used to initialize m_span
the first time that getDataSpan
is called.
Implements SG::IAuxTypeVector.
Definition at line 86 of file AuxPersInfo.h.
|
inlineoverridevirtual |
Insert elements into the vector via move semantics.
pos | The starting index of the insertion. |
src | Start of the vector containing the range of elements to insert. |
src_pos | Position of the first element to insert. |
src_n | Number of elements to insert. |
srcStore | The source store. |
beg
and end
define a range of container elements, with length len
defined by the difference of the pointers divided by the element size.
The size of the container will be increased by len
, with the elements starting at pos
copied to pos+len
.
The contents of the source range will then be moved to our vector starting at pos
. This will be done via move semantics if possible; otherwise, it will be done with a copy.
Returns true if it is known that the vector's memory did not move, false otherwise.
Implements SG::IAuxTypeVector.
Definition at line 75 of file AuxPersInfo.h.
|
inlineinherited |
Return true if this variable is linked from another one.
This is inlined here rather than being a virtual function because this is frequently called from loops over auxids.
Definition at line 226 of file IAuxTypeVector.h.
|
inlinevirtualinherited |
Return IAuxTypeVector
of a linked variable, if there is one.
If the variable represented by this vector has a linked variable, then return its IAuxTypeVector
. Otherwise, return nullptr. Beware of potential threading issues: the returned object is not locked, so it should not be modified in contexts where the parent container cannot be modified.
This returns a unique_ptr
, so it can generally be called only once on a given instance. After that, it will return nullptr.
Definition at line 217 of file IAuxTypeVector.h.
|
inlineoverridevirtual |
Return the type of the complete object to be saved.
For example, if the object is a std::vector
, then we return the type_info
of the vector. But if we're holding a PackedContainer
, then we return the type_info
of the PackedContainer
.
Can return null if the operation is not supported. In that case, I/O will use the type found from the variable registry.
Reimplemented from SG::IAuxTypeVector.
Definition at line 82 of file AuxPersInfo.h.
|
inlineoverridevirtual |
Change the capacity of the vector.
sz | The new vector capacity. |
Implements SG::IAuxTypeVector.
Definition at line 65 of file AuxPersInfo.h.
|
inlineprotectedinherited |
Invalidate the stored span.
Definition at line 297 of file IAuxTypeVector.h.
|
inlineoverridevirtual |
Change the size of the vector.
sz | The new vector size. Returns true if it is known that iterators have not been invalidated; false otherwise. (Will always return false when increasing the size of an empty container.) |
Implements SG::IAuxTypeVector.
Definition at line 58 of file AuxPersInfo.h.
|
inlinevirtualinherited |
Set an option for this variable.
option | The option to set. |
The interpretation of the option depends on the particular representation of the variable provided by the concrete class.
Returns true if the option setting was successful; false otherwise.
Reimplemented in SG::AuxTypeVectorHolder< T, CONT >, SG::AuxTypeVectorHolder< JaggedVecElt< T >, AuxDataTraits< JaggedVecElt< T >, VEC::allocator_type >::vector_type >, SG::AuxTypeVectorHolder< PackedLink< TARG >, AuxDataTraits< PackedLink< TARG >, VEC::allocator_type >::vector_type >, SG::AuxTypeVectorHolder< PackedLink< CONT >, AuxDataTraits< PackedLink< CONT >, AuxAllocator_t< PackedLink< CONT > > >::vector_type >, SG::AuxTypeVectorHolder< std::vector< SG::PackedLink< TARG >, VALLOC >, AuxDataTraits< std::vector< SG::PackedLink< TARG >, VALLOC >, VEC::allocator_type >::vector_type >, SG::AuxTypeVectorHolder< T, std::vector< T > >, SG::AuxTypeVectorHolder< typename AuxDataTraits< PackedLink< CONT >, AuxAllocator_t< PackedLink< CONT > > >::vector_type, AuxDataTraits< typename AuxDataTraits< PackedLink< CONT >, AuxAllocator_t< PackedLink< CONT > > >::vector_type, AuxAllocator_t< typename AuxDataTraits< PackedLink< CONT >, AuxAllocator_t< PackedLink< CONT > > >::vector_type > >::vector_type >, and SG::AuxTypeVectorHolder< JaggedVecElt< T >, AuxDataTraits< JaggedVecElt< T >, AuxAllocator_t< JaggedVecElt< T > > >::vector_type >.
Definition at line 172 of file IAuxTypeVector.h.
|
inlineoverridevirtual |
Shift the elements of the vector.
pos | The starting index for the shift. |
offs | The (signed) amount of the shift. |
This operation shifts the elements in the vectors for all aux data items, to implement an insertion or deletion. offs
may be either positive or negative.
If offs
is positive, then the container is growing. The container size should be increased by offs
, the element at pos
moved to pos
+ offs
, and similarly for following elements. The elements between pos
and pos
+ offs
should be default-initialized.
If offs
is negative, then the container is shrinking. The element at pos
should be moved to pos
+ offs
, and similarly for following elements. The container should then be shrunk by -offs
elements (running destructors as appropriate).
Returns true if it is known that iterators have not been invalidated; false otherwise. (Will always return false when increasing the size of an empty container.)
Implements SG::IAuxTypeVector.
Definition at line 71 of file AuxPersInfo.h.
|
inlineoverridevirtual |
Return the size of the vector.
Implements SG::IAuxTypeVector.
Definition at line 55 of file AuxPersInfo.h.
|
inlineprotectedinherited |
Update the stored span.
beg | The start of the vector. |
size | The length of the vector. |
Definition at line 284 of file IAuxTypeVector.h.
|
inlinevirtualinherited |
Make a packed version of the variable.
If possible, return a new vector object that stores the data in a PackedContainer
. The data itself should be moved to the new container (so that this vector becomes empty). This ensures that pointers to the data are preserved.
If successful, a newly-allocated object is returned. A null pointer is returned on failure (operation not supported, type can't be packed, type is already packed).
Reimplemented in SG::AuxTypeVectorHolder< T, CONT >, SG::AuxTypeVectorHolder< JaggedVecElt< T >, AuxDataTraits< JaggedVecElt< T >, VEC::allocator_type >::vector_type >, SG::AuxTypeVectorHolder< PackedLink< TARG >, AuxDataTraits< PackedLink< TARG >, VEC::allocator_type >::vector_type >, SG::AuxTypeVectorHolder< PackedLink< CONT >, AuxDataTraits< PackedLink< CONT >, AuxAllocator_t< PackedLink< CONT > > >::vector_type >, SG::AuxTypeVectorHolder< std::vector< SG::PackedLink< TARG >, VALLOC >, AuxDataTraits< std::vector< SG::PackedLink< TARG >, VALLOC >, VEC::allocator_type >::vector_type >, SG::AuxTypeVectorHolder< T, std::vector< T > >, SG::AuxTypeVectorHolder< typename AuxDataTraits< PackedLink< CONT >, AuxAllocator_t< PackedLink< CONT > > >::vector_type, AuxDataTraits< typename AuxDataTraits< PackedLink< CONT >, AuxAllocator_t< PackedLink< CONT > > >::vector_type, AuxAllocator_t< typename AuxDataTraits< PackedLink< CONT >, AuxAllocator_t< PackedLink< CONT > > >::vector_type > >::vector_type >, and SG::AuxTypeVectorHolder< JaggedVecElt< T >, AuxDataTraits< JaggedVecElt< T >, AuxAllocator_t< JaggedVecElt< T > > >::vector_type >.
Definition at line 188 of file IAuxTypeVector.h.
|
inlineoverridevirtual |
Return a pointer to the start of the vector's data.
Implements SG::IAuxTypeVector.
Definition at line 49 of file AuxPersInfo.h.
|
inlineoverridevirtual |
Return a pointer to the start of the vector's data.
Implements SG::IAuxTypeVector.
Definition at line 46 of file AuxPersInfo.h.
|
inlineoverridevirtual |
Return a pointer to the STL vector itself.
Implements SG::IAuxTypeVector.
Definition at line 52 of file AuxPersInfo.h.
|
privateinherited |
The auxid of the variable this vector represents.
Definition at line 305 of file IAuxTypeVector.h.
|
private |
Reference to the info being handled.
Definition at line 94 of file AuxPersInfo.h.
|
privateinherited |
True if this variable is linked from another one.
Definition at line 308 of file IAuxTypeVector.h.
|
privateinherited |
Description of the vector start+size.
Definition at line 311 of file IAuxTypeVector.h.