![]() |
ATLAS Offline Software
|
Base specialization for DataVector<T>
.
More...
#include <DataVector.h>
Classes | |
class | Deleter |
Interface to allow customizing how elements are to be deleted. More... | |
Public Types | |
typedef DataModel_detail::NoBase | DataVector_BASE |
typedef DataModel_detail::NoBase | DVL_BASE |
typedef std::true_type | isSequence |
Mark as a sequence, for DataLink / ElementLink. More... | |
typedef std::vector< T * > | PtrVector |
This is the type of the underlying std::vector (what stdcont returns). More... | |
typedef std::vector< T * > | BaseContainer |
typedef T *& | reference |
typedef T *const & | const_reference |
typedef PtrVector::size_type | size_type |
typedef PtrVector::difference_type | difference_type |
typedef T * | value_type |
typedef PtrVector::allocator_type | allocator_type |
typedef T ** | pointer |
typedef T *const * | const_pointer |
typedef const T * | const_value_type |
typedef T | base_value_type |
The T value used as the template parameter. More... | |
typedef std::unique_ptr< base_value_type > | unique_type |
Type of a unique_ptr that can be used to insert elements into this container. More... | |
typedef DataModel_detail::ElementProxy< DataVector > | ElementProxy |
This type is used to proxy lvalue accesses to DataVector elements, in order to handle ownership. More... | |
typedef DataModel_detail::const_iterator< DataVector > | const_iterator |
Standard const_iterator . More... | |
typedef DataModel_detail::iterator< DataVector > | iterator |
Standard iterator . More... | |
typedef std::reverse_iterator< const_iterator > | const_reverse_iterator |
Standard const_reverse_iterator . More... | |
typedef std::reverse_iterator< iterator > | reverse_iterator |
Standard reverse_iterator . More... | |
typedef DataVector | base_data_vector |
template<class T > | |
using | span = typename AuxDataTraits< T >::span |
Spans over auxiliary variables. More... | |
template<class T > | |
using | const_span = typename AuxDataTraits< T >::const_span |
Public Member Functions | |
bool | trackIndices () const |
Return true if index tracking is enabled for this container. More... | |
void | setStore (SG::IAuxStore *store) |
Set the store associated with this object. More... | |
void | setStore (const SG::IConstAuxStore *store) |
Set the store associated with this object. More... | |
void | setStore (const DataLink< SG::IConstAuxStore > &store) |
Set the store associated with this object. More... | |
void | setConstStore (const SG::IConstAuxStore *store) |
Synonym for setStore with IConstAuxStore . More... | |
void | setNonConstStore (SG::IAuxStore *store) |
Synonym for setStore with IAuxStore . More... | |
template<class T > | |
bool | isAvailable (const std::string &name, const std::string &clsname="") const |
Test to see if a variable exists in the store. More... | |
bool | isAvailable (auxid_t id) const |
Test to see if a variable exists in the store. More... | |
template<class T > | |
bool | isAvailableWritable (const std::string &name, const std::string &clsname="") |
Test to see if a variable is available for writing. More... | |
bool | isAvailableWritable (auxid_t id) |
Test to see if a variable is available for writing. More... | |
template<class T > | |
bool | isAvailableWritableAsDecoration (const std::string &name, const std::string &clsname="") const |
Test to see if a variable is available for writing as a decoration. More... | |
bool | isAvailableWritableAsDecoration (auxid_t id) const |
Test to see if a variable is available for writing as a decoration. More... | |
template<class T > | |
span< T > | getDataSpan (const std::string &name) |
Return a span over an aux data item. More... | |
template<class T > | |
const_span< T > | getDataSpan (const std::string &name) const |
Return a span over an aux data item. More... | |
template<class T > | |
const_span< T > | getConstDataSpan (const std::string &name) const |
Return a span over an aux data item. More... | |
template<class T > | |
span< T > | getDecorationSpan (const std::string &name) const |
Return a span over an aux data item for a decoration. More... | |
Aux store management. | |
const SG::IConstAuxStore * | getConstStore () const |
Return the current store, as a const interface. More... | |
const DataLink< SG::IConstAuxStore > | getConstStoreLink () const |
Return the data link to the current store, as a const interface. More... | |
SG::IAuxStore * | getStore () |
Return the current store, as a non-const interface. More... | |
const SG::IAuxStore * | getStore () const |
Return the current store, as a non-const interface. More... | |
bool | hasStore () const |
Return true if this object has an associated store. More... | |
bool | hasNonConstStore () const |
Return true if this object has an associated non-const store. More... | |
bool | setOption (auxid_t id, const AuxDataOption &option) |
Set an option for an auxiliary data variable. More... | |
bool | setOption (const std::string &name, const AuxDataOption &option) |
Set an option for an auxiliary data variable. More... | |
bool | setOption (const std::string &name, const std::string &clsname, const AuxDataOption &option) |
Set an option for an auxiliary data variable. More... | |
template<class T > | |
bool | setOption (auxid_t id, const std::string &optname, T arg) |
Set an option for an auxiliary data variable. More... | |
bool | setOption (const std::string &name, const std::string &optname, int arg) |
Set an option for an auxiliary data variable. More... | |
bool | setOption (const std::string &name, const std::string &optname, float arg) |
bool | setOption (const std::string &name, const std::string &optname, double arg) |
template<class T > | |
bool | setOption (const std::string &name, const std::string &clsname, const std::string &optname, T arg) |
Set an option for an auxiliary data variable. More... | |
Constructors, destructors, assignment. | |
DataVector (SG::OwnershipPolicy ownPolicy=SG::OWN_ELEMENTS, SG::IndexTrackingPolicy trackIndices=SG::DEFAULT_TRACK_INDICES) | |
Default constructor. More... | |
DataVector (size_type n, SG::OwnershipPolicy ownPolicy=SG::OWN_ELEMENTS, SG::IndexTrackingPolicy trackIndices=SG::DEFAULT_TRACK_INDICES) | |
Sized constructor. More... | |
DataVector (const DataVector &rhs) | |
Copy constructor. More... | |
DataVector (DataVector &&rhs) noexcept | |
Move constructor. More... | |
template<class InputIterator > | |
DataVector (InputIterator first, InputIterator last, SG::OwnershipPolicy ownPolicy=SG::VIEW_ELEMENTS, SG::IndexTrackingPolicy trackIndices=SG::DEFAULT_TRACK_INDICES, SG::IAuxStore *store=0) | |
Constructor from iterators. More... | |
DataVector (std::initializer_list< value_type > l, SG::OwnershipPolicy ownPolicy=SG::VIEW_ELEMENTS, SG::IndexTrackingPolicy trackIndices=SG::DEFAULT_TRACK_INDICES, SG::IAuxStore *store=0) | |
Constructor from iterators. More... | |
DataVector & | operator= (const DataVector &rhs) |
Assignment operator. More... | |
DataVector & | operator= (DataVector &&rhs) noexcept |
Move assignment. More... | |
DataVector & | operator= (std::initializer_list< value_type > l) |
Assignment operator, from an initializer list. More... | |
template<class InputIterator > | |
void | assign (InputIterator first, InputIterator last) |
Assign from iterators. More... | |
void | assign (std::initializer_list< value_type > l) |
Assign from an initializer list. More... | |
virtual | ~DataVector () |
Destructor. More... | |
Size and capacity. | |
size_type | size () const noexcept |
Returns the number of elements in the collection. More... | |
virtual size_type | size_v () const |
Returns the number of elements in the collection. More... | |
size_type | max_size () const noexcept |
Returns the size() of the largest possible collection. More... | |
void | resize (size_type sz) |
Resizes the collection to the specified number of elements. More... | |
size_type | capacity () const noexcept |
Returns the total number of elements that the collection can hold before needing to allocate more memory. More... | |
virtual size_type | capacity_v () const |
Returns the total number of elements that the collection can hold before needing to allocate more memory. More... | |
bool | empty () const noexcept |
Returns true if the collection is empty. More... | |
void | reserve (size_type n) |
Attempt to preallocate enough memory for a specified number of elements. More... | |
void | shrink_to_fit () |
Change the vector capacity to match the current size. More... | |
Element access. | |
const T * | operator[] (size_type n) const |
Access an element, as an rvalue. More... | |
const T * | get (size_type n) const |
Access an element, as an rvalue. More... | |
ElementProxy | operator[] (size_type n) |
Access an element, as an lvalue. More... | |
const T * | at (size_type n) const |
Access an element, as an rvalue. More... | |
ElementProxy | at (size_type n) |
Access an element, as an lvalue. More... | |
const T * | front () const |
Access the first element in the collection as an rvalue. More... | |
const T * | back () const |
Access the last element in the collection as an rvalue. More... | |
ElementProxy | front () |
Access the first element in the collection as an lvalue. More... | |
ElementProxy | back () |
Access the last element in the collection as an lvalue. More... | |
Iterator creation. | |
const_iterator | begin () const noexcept |
Return a const_iterator pointing at the beginning of the collection. More... | |
const_iterator | end () const noexcept |
Return a const_iterator pointing past the end of the collection. More... | |
iterator | begin () noexcept |
Return an iterator pointing at the beginning of the collection. More... | |
iterator | end () noexcept |
Return an iterator pointing past the end of the collection. More... | |
const_reverse_iterator | rbegin () const noexcept |
Return a const_reverse_iterator pointing past the end of the collection. More... | |
const_reverse_iterator | rend () const noexcept |
Return a const_reverse_iterator pointing at the beginning of the collection. More... | |
reverse_iterator | rbegin () noexcept |
Return a reverse_iterator pointing past the end of the collection. More... | |
reverse_iterator | rend () noexcept |
Return a reverse_iterator pointing at the beginning of the collection. More... | |
const_iterator | cbegin () const noexcept |
Return a const_iterator pointing at the beginning of the collection. More... | |
const_iterator | cend () const noexcept |
Return a const_iterator pointing past the end of the collection. More... | |
const_reverse_iterator | crbegin () const noexcept |
Return a const_reverse_iterator pointing past the end of the collection. More... | |
const_reverse_iterator | crend () const noexcept |
Return a const_reverse_iterator pointing at the beginning of the collection. More... | |
Insertion operations. | |
value_type | push_back (value_type pElem) |
Add an element to the end of the collection. More... | |
value_type | push_back (std::unique_ptr< base_value_type > pElem) |
Add an element to the end of the collection. More... | |
value_type | emplace_back (value_type pElem) |
Add an element to the end of the collection. More... | |
iterator | insert (iterator position, value_type pElem) |
Add a new element to the collection. More... | |
iterator | insert (iterator position, std::unique_ptr< base_value_type > pElem) |
Add a new element to the collection. More... | |
iterator | emplace (iterator position, value_type pElem) |
Add a new element to the collection. More... | |
template<class InputIterator , DataVector_detail::enable_if_ptr_itr< InputIterator, T > = true> | |
void | insert (iterator position, InputIterator first, InputIterator last) |
Add a group of new elements to the collection. More... | |
template<class InputIterator , DataVector_detail::enable_if_up_itr< InputIterator, T > = true> | |
void | insert (iterator position, InputIterator first, InputIterator last) |
Add a group of new elements to the collection. More... | |
void | insert (iterator position, std::initializer_list< value_type > l) |
Add a group of new elements to the collection. More... | |
void | insertMove (iterator position, DataVector &other) |
Insert the contents of another DataVector , with auxiliary data copied via move semantics. More... | |
Erasure operations. | |
iterator | erase (iterator position) |
Remove element at a given position. More... | |
iterator | erase (iterator first, iterator last) |
Remove a range of elements. More... | |
void | pop_back () |
Remove the last element from the collection. More... | |
void | clear () |
Erase all the elements in the collection. More... | |
Aux store management. | |
const SG::IConstAuxStore * | getConstStore () const |
Return the current store, as a const interface. More... | |
const DataLink< SG::IConstAuxStore > | getConstStoreLink () const |
Return the data link to the current store, as a const interface. More... | |
SG::IAuxStore * | getStore () |
Return the current store, as a non-const interface. More... | |
const SG::IAuxStore * | getStore () const |
Return the current store, as a non-const interface. More... | |
bool | hasStore () const |
Return true if this object has an associated store. More... | |
bool | hasNonConstStore () const |
Return true if this object has an associated non-const store. More... | |
bool | setOption (auxid_t id, const AuxDataOption &option) |
Set an option for an auxiliary data variable. More... | |
bool | setOption (const std::string &name, const AuxDataOption &option) |
Set an option for an auxiliary data variable. More... | |
bool | setOption (const std::string &name, const std::string &clsname, const AuxDataOption &option) |
Set an option for an auxiliary data variable. More... | |
template<class T > | |
bool | setOption (auxid_t id, const std::string &optname, T arg) |
Set an option for an auxiliary data variable. More... | |
bool | setOption (const std::string &name, const std::string &optname, int arg) |
Set an option for an auxiliary data variable. More... | |
bool | setOption (const std::string &name, const std::string &optname, float arg) |
bool | setOption (const std::string &name, const std::string &optname, double arg) |
template<class T > | |
bool | setOption (const std::string &name, const std::string &clsname, const std::string &optname, T arg) |
Set an option for an auxiliary data variable. More... | |
Static Public Attributes | |
static const bool | has_virtual = false |
This is true for any DataVector class if we need to use virtual derivation to get to the base DataVector class. More... | |
static constexpr bool | must_own = false |
If true, then this type must own its contents. More... | |
static constexpr bool | supportsThinning = true |
Mark that this type supports thinning operations. More... | |
Protected Member Functions | |
template<class DVL > | |
void | initAuxVectorBase (SG::OwnershipPolicy ownPolicy, SG::IndexTrackingPolicy indexTrackingPolicy) |
Initialize index tracking mode. More... | |
void | swap (AuxVectorBase &other) |
Swap with another container. More... | |
template<class ForwardIterator > | |
void | setIndices (ForwardIterator beg, ForwardIterator end, size_t first=0) |
Set container/index for all elements within a range. More... | |
template<class ForwardIterator > | |
void | clearIndex (ForwardIterator elt) |
Clear the container / index for element elt . More... | |
template<class ForwardIterator > | |
void | clearIndices (ForwardIterator beg, ForwardIterator end) |
Clear the container / index for a range of elements. More... | |
template<class DVL > | |
void | resize (size_t size) |
Resize the aux data associated with this container. More... | |
template<class DVL > | |
void | reserve (size_t size) |
Change the capacity of the aux data associated with this container. More... | |
template<class DVL > | |
void | shift (DVL &cont, size_t pos, ptrdiff_t offs) |
Shift the elements of the container. More... | |
void | moveAux (size_t index, SG::AuxElement *p, bool clear=false, bool skipDestClear=false) |
Set index on an element and copy auxiliary data. More... | |
void | moveAux (size_t index, const void *p, bool clear=false, bool skipDestClear=false) |
Set index on an element and copy auxiliary data. More... | |
template<class ForwardIterator > | |
void | moveAux (size_t index, ForwardIterator beg, ForwardIterator end, bool clear=false, bool skipDestClear=false) |
Set index on a range of elements and copy auxiliary data. More... | |
void | swapElementsAux (size_t aindex, size_t bindex, SG::AuxElement *a, SG::AuxElement *b, AuxVectorBase *bcont) |
Swap indices and auxiliary data between two elements. More... | |
void | swapElementsAux (size_t aindex, size_t bindex, const void *a, const void *b, AuxVectorBase *bcont) |
Swap indices and auxiliary data between two elements. More... | |
template<class ForwardIterator > | |
void | resortAux (size_t index, ForwardIterator beg, ForwardIterator end) |
Reset indices / reorder aux data after elements have been permuted. More... | |
Private Member Functions | |
void | initAuxVectorBase1 (const std::false_type &, SG::OwnershipPolicy, SG::IndexTrackingPolicy) |
Initialize index tracking mode — no-auxdata specialization. More... | |
void | initAuxVectorBase1 (const std::true_type &, SG::OwnershipPolicy ownPolicy, SG::IndexTrackingPolicy indexTrackingPolicy) |
Initialize index tracking mode — auxdata specialization. More... | |
template<class ForwardIterator > | |
void | setIndices1 (const std::false_type &, ForwardIterator beg, ForwardIterator end, size_t first) |
Set container/index for all elements within a range. More... | |
template<class ForwardIterator > | |
void | setIndices1 (const std::true_type &, ForwardIterator beg, ForwardIterator end, size_t first) |
Set container/index for all elements within a range. More... | |
template<class ForwardIterator > | |
void | clearIndex1 (const std::false_type &, ForwardIterator elt) |
Clear the container / index for element elt . More... | |
template<class ForwardIterator > | |
void | clearIndex1 (const std::true_type &, ForwardIterator elt) |
Clear the container / index for element elt . More... | |
template<class ForwardIterator > | |
void | clearIndices1 (const std::false_type &, ForwardIterator, ForwardIterator) |
Clear the container / index for a range of elements. More... | |
template<class ForwardIterator > | |
void | clearIndices1 (const std::true_type &, ForwardIterator beg, ForwardIterator end) |
Clear the container / index for a range of elements. More... | |
void | resize1 (const std::false_type &, size_t size) |
Resize the aux data associated with this container. More... | |
void | resize1 (const std::true_type &, size_t size) |
Resize the aux data associated with this container. More... | |
void | reserve1 (const std::false_type &, size_t size) |
Change the capacity of the aux data associated with this container. More... | |
void | reserve1 (const std::true_type &, size_t size) |
Change the capacity of the aux data associated with this container. More... | |
template<class DVL > | |
void | shift1 (const std::false_type &, DVL &cont, size_t pos, ptrdiff_t offs) |
Shift the elements of the container. More... | |
template<class DVL > | |
void | shift1 (const std::true_type &, DVL &cont, size_t pos, ptrdiff_t offs) |
Shift the elements of the container. More... | |
template<class ForwardIterator > | |
void | moveAux1 (const std::false_type &, size_t index, ForwardIterator beg, ForwardIterator end, bool clear=false, bool skipDestClear=false) |
Set index on a range of elements and copy auxiliary data. More... | |
template<class ForwardIterator > | |
void | moveAux1 (const std::true_type &, size_t index, ForwardIterator beg, ForwardIterator end, bool clear=false, bool skipDestClear=false) |
Set index on a range of elements and copy auxiliary data. More... | |
template<class ForwardIterator > | |
void | resortAux1 (const std::false_type &, size_t index, ForwardIterator beg, ForwardIterator end) |
Reset indices / reorder aux data after elements have been permuted. More... | |
template<class ForwardIterator > | |
void | resortAux1 (const std::true_type &, size_t index, ForwardIterator a, ForwardIterator b) |
Reset indices / reorder aux data after elements have been permuted. More... | |
void * | getDataArrayForResort (SG::auxid_t auxid) |
void | setIndexForResort (SG::AuxElement *elt, size_t idx) |
Private Attributes | |
bool | m_trackIndices |
Flag if index tracking is enabled. More... | |
Data access. | |
bool | isAvailable (auxid_t id) const |
Test to see if a variable exists in the store. More... | |
bool | isAvailableWritable (auxid_t id) |
Test to see if a variable is available for writing. More... | |
bool | isAvailableWritableAsDecoration (auxid_t id) const |
Test to see if a variable is available for writing as a decoration. More... | |
const AuxDataSpanBase * | getDataSpan (SG::auxid_t auxid) const |
Return a reference to a description of this vector's start+size. More... | |
const SG::auxid_set_t & | getAuxIDs () const |
Return a set of identifiers for existing data items in store associated with this object. More... | |
const SG::auxid_set_t & | getDecorIDs () const |
Return a set of identifiers for decorations for this object. More... | |
const SG::auxid_set_t & | getWritableAuxIDs () const |
Return a set of identifiers for writable data items in this store. More... | |
template<class T > | |
AuxDataTraits< T >::reference_type | getData (SG::auxid_t auxid, size_t ndx) |
Return reference to an aux data item. More... | |
template<class T > | |
AuxDataTraits< T >::const_reference_type | getData (SG::auxid_t auxid, size_t ndx) const |
Return const reference to an aux data item. More... | |
template<class T > | |
AuxDataTraits< T >::reference_type | getDecoration (SG::auxid_t auxid, size_t ndx) const |
Return reference to an aux decoration item. More... | |
const void * | getDataArray (SG::auxid_t auxid) const |
Return a const pointer to the start of an aux data vector. More... | |
void * | getDataArray (SG::auxid_t auxid) |
Return a pointer to the start of an aux data vector. More... | |
const void * | getDataArrayAllowMissing (SG::auxid_t auxid) const |
Return a const pointer to the start of an aux data vector. More... | |
void * | getDecorationArray (SG::auxid_t auxid) const |
Return a pointer to the start of an aux data vector for a decoration. More... | |
static size_t s_minCacheLen | ATLAS_THREAD_SAFE |
Minimum length to use for the cache vector. More... | |
Other operations. | |
typedef AthContainers_detail::mutex | mutex_t |
Mutex used to synchronize modifications to the cache vector. More... | |
typedef AthContainers_detail::lock_guard< mutex_t > | guard_t |
Cache m_cache | ATLAS_THREAD_SAFE |
Cached pointers to the start of aux data vectors, non-const. More... | |
Cache m_constCache | ATLAS_THREAD_SAFE |
Cached pointers to the start of aux data vectors, const. More... | |
Cache m_decorCache | ATLAS_THREAD_SAFE |
Cached pointers to the start of aux data vectors, decorations. More... | |
Cache m_spanCache | ATLAS_THREAD_SAFE |
Cached pointers to span descriptors. More... | |
SG::IAuxStore * | m_store |
Associated store, non-const. More... | |
const SG::IConstAuxStore * | m_constStore |
Associated store, const. More... | |
DataLink< SG::IConstAuxStore > | m_constStoreLink |
Associated store link, const. More... | |
mutex_t | m_mutex |
void | swap (AuxVectorData &other) |
Swap this instance with another. More... | |
void | clearCache () |
Clear the cached aux data pointers. More... | |
void | clearCache (SG::auxid_t auxid) |
Clear the cached aux data pointers for a single variable. More... | |
void | clearDecorCache (SG::auxid_t auxid) |
Clear the cached decoration pointer for a single variable. More... | |
virtual void | lock () override |
Lock the container. More... | |
bool | clearDecorations () const |
Clear all decorations. More... | |
void | lockDecoration (SG::auxid_t auxid) |
Explicitly lock a decoration. More... | |
const SG::IConstAuxStore * | getConstStoreOol () const |
Same as getConstStore. More... | |
bool | isAvailableOol (auxid_t id) const |
Out-of-line portion of isAvailable. More... | |
bool | isAvailableWritableOol (auxid_t id) |
Out-of-line portion of isAvailableWritable. More... | |
bool | isAvailableWritableAsDecorationOol (auxid_t id) const |
Out-of-line portion of isAvailableWritableAsDecoration. More... | |
void * | getDataOol (SG::auxid_t auxid, bool allowMissing) |
Out-of-line portion of data access. More... | |
const void * | getDataOol (SG::auxid_t auxid, bool allowMissing) const |
Out-of-line portion of data access (const version). More... | |
void * | getDecorationOol (SG::auxid_t auxid) const |
Out-of-line portion of data access (decorator version). More... | |
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. More... | |
void | setCache (SG::auxid_t auxid, void *ptr) |
Explicitly set a cache pointer. More... | |
void | setCache (SG::auxid_t auxid, const void *ptr) |
Explicitly set a cache pointer. More... | |
static const SG::auxid_set_t | s_emptySet |
Empty auxid set, used for a return value when we have no associated store. More... | |
Swap and sort. | |
void | swap (DataVector &rhs) |
Swap this collection with another. More... | |
void | sort () |
Sort the container. More... | |
template<class COMPARE > | |
void | sort (COMPARE comp) |
Sort the container with a user-specified comparison operator. More... | |
static void | iter_swap (iterator a, iterator b) |
Swap the referents of two DataVector iterators. More... | |
Non-standard operations. | |
void | swapElement (size_type index, value_type newElem, reference oldElem) |
Swap one element out of the container. More... | |
void | swapElement (iterator pos, value_type newElem, reference oldElem) |
Swap one element out of the container. More... | |
void | swapElement (size_type index, std::unique_ptr< base_value_type > newElem, std::unique_ptr< base_value_type > &oldElem) |
Swap one element out of the container. More... | |
void | swapElement (iterator pos, std::unique_ptr< base_value_type > newElem, std::unique_ptr< base_value_type > &oldElem) |
Swap one element out of the container. More... | |
const PtrVector & | stdcont () const |
Return the underlying std::vector of the container. More... | |
SG::OwnershipPolicy | ownPolicy () const |
Return the ownership policy setting for this container. More... | |
void | clear (SG::OwnershipPolicy ownPolicy) |
Erase all the elements in the collection, and reset the ownership mode. More... | |
void | clear (SG::OwnershipPolicy ownPolicy, SG::IndexTrackingPolicy trackIndices) |
Erase all the elements in the collection, and reset the ownership mode. More... | |
void | clear (std::unique_ptr< Deleter > deleter) |
Erase all the elements in the collection, and change how elements are to be deleted. More... | |
virtual const DataModel_detail::DVLInfoBase & | dvlinfo_v () const |
Return the DV/DL info struct for this class. More... | |
const SG::AuxVectorBase & | auxbase () const |
Convert to AuxVectorBase . More... | |
static const DataModel_detail::DVLInfoBase & | dvlinfo () |
Return the DV/DL info struct for this class. More... | |
static int | baseOffset (const std::type_info &ti) |
Return the offset of a base DataVector class. More... | |
Internal operations. | |
typedef ROOT::Meta::Selection::DataVector< T, DataVector_BASE >::self | self |
class | DataModel_detail::ElementProxy< DataVector > |
template<class DV > | |
class | ConstDataVector |
template<class DV , class ALLOC > | |
class | DataVectorWithAlloc |
void | test2_assignelement1a () |
void | test2_assignelement1 () |
void | test2_assignelement2 () |
SG::OwnershipPolicy | m_ownPolicy |
The ownership policy of this container — either SG::OWNS_ELEMENTS or SG::VIEW_ELEMENTS. More... | |
PtrVector | m_pCont |
This actually holds the elements. More... | |
Deleter * | m_deleter = nullptr |
Interface telling us how to delete objects. More... | |
SG::IsMostDerivedFlag | m_isMostDerived |
This flag is true if this DV instance is the most-derived one. More... | |
void | resortAux (iterator beg, iterator end) |
Reset indices / reorder aux data after elements have been permuted. More... | |
void | testInsert (const char *op) |
Test if we can insert; raise an exception if not. More... | |
void | testInsertOol (const char *op) |
Test if we can insert; raise an exception if not. More... | |
static int | baseOffset1 (const char *p, const DataVector &dv, const std::type_info &ti) |
Helper for baseOffset . More... | |
static const T * | do_cast (const typename PtrVector::value_type p) |
Helper to shorten calls to DataModel_detail::DVLCast . More... | |
static T * | do_cast_nc (typename PtrVector::value_type p) |
Helper to shorten calls to DataModel_detail::DVLCast . More... | |
void | assignElement (typename BaseContainer::iterator pos, value_type newElem) |
Handle element assignment. More... | |
void | assignElement (typename BaseContainer::iterator pos, std::unique_ptr< base_value_type > newElem) |
Handle element assignment. More... | |
void | assignBaseElement (typename BaseContainer::iterator pos, typename BaseContainer::value_type newElem) |
Handle element assignment from a base pointer. More... | |
void | shift (size_t pos, ptrdiff_t offs) |
Shift the auxiliary elements of the container. More... | |
virtual const std::type_info & | dv_typeid () const |
Find the most-derived DataVector class in the hierarchy. More... | |
PtrVector::iterator | erase_base (typename PtrVector::iterator position) |
Helper for erase() . More... | |
PtrVector::iterator | erase_base (typename PtrVector::iterator first, typename PtrVector::iterator last) |
Helper for erase() . More... | |
void | doDelete (value_type p) |
Delete an element. More... | |
void | doDelete (typename PtrVector::iterator first, typename PtrVector::iterator last) |
Delete a range of elements. More... | |
void | clearMostDerived () |
Clear m_isMostDerived for this instance and for all bases. More... | |
virtual void | setMostDerived () |
Set m_isMostDerived for this instance and clear it for all bases. More... | |
Base specialization for DataVector<T>
.
This is used for the case where T
does not derive from other classes. This is the class which actually holds the vector of pointers.
See the file comments for full details.
Definition at line 2059 of file DataVector.h.
typedef PtrVector::allocator_type DataVector< T, DataModel_detail::NoBase >::allocator_type |
Definition at line 2086 of file DataVector.h.
typedef DataVector DataVector< T, DataModel_detail::NoBase >::base_data_vector |
Definition at line 2125 of file DataVector.h.
typedef T DataVector< T, DataModel_detail::NoBase >::base_value_type |
The T
value used as the template parameter.
Note that this is different from value_type
(that's T*
).
Definition at line 2094 of file DataVector.h.
typedef std::vector<T*> DataVector< T, DataModel_detail::NoBase >::BaseContainer |
Definition at line 2072 of file DataVector.h.
typedef DataModel_detail::const_iterator<DataVector> DataVector< T, DataModel_detail::NoBase >::const_iterator |
Standard const_iterator
.
Definition at line 2107 of file DataVector.h.
typedef T* const* DataVector< T, DataModel_detail::NoBase >::const_pointer |
Definition at line 2088 of file DataVector.h.
typedef T* const& DataVector< T, DataModel_detail::NoBase >::const_reference |
Definition at line 2082 of file DataVector.h.
typedef std::reverse_iterator<const_iterator> DataVector< T, DataModel_detail::NoBase >::const_reverse_iterator |
Standard const_reverse_iterator
.
Definition at line 2118 of file DataVector.h.
|
inherited |
Definition at line 102 of file AuxVectorBase.h.
typedef const T* DataVector< T, DataModel_detail::NoBase >::const_value_type |
Definition at line 2090 of file DataVector.h.
typedef DataModel_detail::NoBase DataVector< T, DataModel_detail::NoBase >::DataVector_BASE |
Definition at line 2063 of file DataVector.h.
typedef PtrVector::difference_type DataVector< T, DataModel_detail::NoBase >::difference_type |
Definition at line 2084 of file DataVector.h.
typedef DataModel_detail::NoBase DataVector< T, DataModel_detail::NoBase >::DVL_BASE |
Definition at line 2064 of file DataVector.h.
typedef DataModel_detail::ElementProxy<DataVector> DataVector< T, DataModel_detail::NoBase >::ElementProxy |
This type is used to proxy lvalue accesses to DataVector
elements, in order to handle ownership.
Definition at line 2102 of file DataVector.h.
|
privateinherited |
Definition at line 989 of file AuxVectorData.h.
typedef std::true_type DataVector< T, DataModel_detail::NoBase >::isSequence |
Mark as a sequence, for DataLink / ElementLink.
Definition at line 2067 of file DataVector.h.
typedef DataModel_detail::iterator<DataVector> DataVector< T, DataModel_detail::NoBase >::iterator |
Standard iterator
.
Note that lvalue references here will yield an ElementProxy
, not a reference
.
Definition at line 2111 of file DataVector.h.
|
privateinherited |
Mutex used to synchronize modifications to the cache vector.
Definition at line 988 of file AuxVectorData.h.
typedef T** DataVector< T, DataModel_detail::NoBase >::pointer |
Definition at line 2087 of file DataVector.h.
typedef std::vector<T*> DataVector< T, DataModel_detail::NoBase >::PtrVector |
This is the type of the underlying std::vector
(what stdcont
returns).
Definition at line 2071 of file DataVector.h.
typedef T*& DataVector< T, DataModel_detail::NoBase >::reference |
Definition at line 2081 of file DataVector.h.
typedef std::reverse_iterator<iterator> DataVector< T, DataModel_detail::NoBase >::reverse_iterator |
Standard reverse_iterator
.
Note that lvalue references here will yield an ElementProxy
, not a reference
.
Definition at line 2123 of file DataVector.h.
|
private |
Definition at line 3359 of file DataVector.h.
typedef PtrVector::size_type DataVector< T, DataModel_detail::NoBase >::size_type |
Definition at line 2083 of file DataVector.h.
|
inherited |
Spans over auxiliary variables.
Definition at line 101 of file AuxVectorBase.h.
typedef std::unique_ptr<base_value_type> DataVector< T, DataModel_detail::NoBase >::unique_type |
Type of a unique_ptr that can be used to insert elements into this container.
Definition at line 2098 of file DataVector.h.
typedef T* DataVector< T, DataModel_detail::NoBase >::value_type |
Definition at line 2085 of file DataVector.h.
|
explicit |
Default constructor.
ownPolicy | The ownership mode for the container. |
trackIndices | The index tracking policy. |
By default, a DataVector
will own its elements. To avoid this, pass SG::VIEW_ELEMENTS
for ownPolicy.
|
explicit |
Sized constructor.
n | The size of the container. |
ownPolicy | The ownership mode for the container. |
trackIndices | The index tracking policy. |
Note that unlike the standard vector constructor, you can't specify an initial value here. The container will be initialized with 0's.
By default, a DataVector
will own its elements. To avoid this, pass SG::VIEW_ELEMENTS
for ownPolicy.
DataVector< T, DataModel_detail::NoBase >::DataVector | ( | const DataVector< T, DataModel_detail::NoBase > & | rhs | ) |
Copy constructor.
rhs | The container from which to copy. |
This is a ‘shallow’ copy; the new container will not own its elements.
|
noexcept |
Move constructor.
rhs | The container from which to move. |
Any auxiliary data will be moved along with the container contents.
DataVector< T, DataModel_detail::NoBase >::DataVector | ( | InputIterator | first, |
InputIterator | last, | ||
SG::OwnershipPolicy | ownPolicy = SG::VIEW_ELEMENTS , |
||
SG::IndexTrackingPolicy | trackIndices = SG::DEFAULT_TRACK_INDICES , |
||
SG::IAuxStore * | store = 0 |
||
) |
Constructor from iterators.
first | The start of the range to put in the new container. |
last | The end of the range to put in the new container. |
ownPolicy | The ownership mode for the container. |
trackIndices | The index tracking policy. |
store | An associated auxiliary data store. |
By default, a view container is made, which does not own its elements. To have the container take ownership of the pointers passed to this constructor, pass SG::OWN_ELEMENTS
for ownPolicy.
DataVector< T, DataModel_detail::NoBase >::DataVector | ( | std::initializer_list< value_type > | l, |
SG::OwnershipPolicy | ownPolicy = SG::VIEW_ELEMENTS , |
||
SG::IndexTrackingPolicy | trackIndices = SG::DEFAULT_TRACK_INDICES , |
||
SG::IAuxStore * | store = 0 |
||
) |
Constructor from iterators.
l | An initializer list. |
ownPolicy | The ownership mode for the container. |
trackIndices | The index tracking policy. |
store | An associated auxiliary data store. |
A DataVector
constructed this way will not own its elements by default. To change this, pass SG::OWN_ELEMENTS
for ownPolicy.
|
virtual |
Destructor.
If this container owns its elements, the contained elements will be deleted as well. Before doing this, the destructor will scan for duplicate pointers (takes \(n \log n\) time); duplicates are only destroyed once. Duplicates should, however, be considered an error; don't rely on this behavior.
void DataVector< T, DataModel_detail::NoBase >::assign | ( | InputIterator | first, |
InputIterator | last | ||
) |
Assign from iterators.
first | The start of the range to put in the container. |
last | The end of the range to put in the container. |
Any existing owned elements will be released. The DataVector's
ownership policy determines whether it will take ownership of the new elements.
void DataVector< T, DataModel_detail::NoBase >::assign | ( | std::initializer_list< value_type > | l | ) |
Assign from an initializer list.
l | An initializer list. |
Any existing owned elements will be released. The DataVector's
ownership policy determines whether it will take ownership of the new elements.
|
private |
Handle element assignment from a base pointer.
pos | Position in the container to assign. |
newElem | The new element to assign. |
The old element is freed if this container owns elements. Auxiliary data are copied if appropriate.
|
private |
Handle element assignment.
pos | Position in the container to assign. |
newElem | The new element to assign. |
The container must own its elements. Auxiliary data are copied if appropriate.
|
private |
Handle element assignment.
pos | Position in the container to assign. |
newElem | The new element to assign. |
The old element is freed if this container owns elements. Auxiliary data are copied if appropriate.
ElementProxy DataVector< T, DataModel_detail::NoBase >::at | ( | size_type | n | ) |
Access an element, as an lvalue.
n | Array index to access. |
Will raise std::out_of_range
if the index is out-of-bounds. Note that we return a proxy object rather than a reference; the proxy will handle deleting an owned element if it's assigned to.
const T* DataVector< T, DataModel_detail::NoBase >::at | ( | size_type | n | ) | const |
Access an element, as an rvalue.
n | Array index to access. |
Will raise std::out_of_range
if the index is out-of-bounds. Note that we return a const
T*
rather than a reference.
const SG::AuxVectorBase& DataVector< T, DataModel_detail::NoBase >::auxbase | ( | ) | const |
Convert to AuxVectorBase
.
Needed to get @x AuxVectorBase from a ConstDataVector
. Present in DataVector
as well for consistency.
ElementProxy DataVector< T, DataModel_detail::NoBase >::back | ( | ) |
Access the last element in the collection as an lvalue.
No checking is done to ensure that the container is not empty. Note that we return a proxy object rather than a reference; the proxy will handle deleting an owned element if it's assigned to.
const T* DataVector< T, DataModel_detail::NoBase >::back | ( | ) | const |
Access the last element in the collection as an rvalue.
No checking is done to ensure that the container is not empty. Note that we return a const
T*
rather than a reference.
|
static |
Return the offset of a base DataVector
class.
ti | std::type_info of the desired class. |
If ti
represents a DataVector
base class of this one, then return the offset of that base class. Otherwise, return -1.
This function is here due to limitations of root 6, which can't calculate these offsets correctly from the dictionary if virtual derivation is used.
|
static |
Helper for baseOffset
.
p | Pointer to the start of the top-level object. |
dv | Reference to the DataVector object. |
ti | std::type_info of the desired class. |
If ti
represents a DataVector
base class of this one, then return the offset of that base class. Otherwise, return -1.
|
noexcept |
Return a const_iterator
pointing at the beginning of the collection.
const_iterator
.Note that dereferencing the iterator will yield a const
T*
rather than a reference.
|
noexcept |
Return an iterator
pointing at the beginning of the collection.
iterator
.Note that dereferencing the iterator will yield a proxy rather than a reference; the proxy will handle deleting an owned element if it's assigned to.
|
noexcept |
Returns the total number of elements that the collection can hold before needing to allocate more memory.
|
virtual |
Returns the total number of elements that the collection can hold before needing to allocate more memory.
This version is virtual, to be callable from the AuxData base class.
Implements SG::AuxVectorData.
|
noexcept |
Return a const_iterator
pointing at the beginning of the collection.
const_iterator
.Note that dereferencing the iterator will yield a const
T*
rather than a reference.
|
noexcept |
Return a const_iterator
pointing past the end of the collection.
const_iterator
.Note that dereferencing the iterator will yield a const
T*
rather than a reference.
void DataVector< T, DataModel_detail::NoBase >::clear | ( | ) |
Erase all the elements in the collection.
If the container owns its elements, then the removed elements will be deleted. Any duplicates will be removed in this process, but don't rely on this.
void DataVector< T, DataModel_detail::NoBase >::clear | ( | SG::OwnershipPolicy | ownPolicy | ) |
Erase all the elements in the collection, and reset the ownership mode.
ownPolicy | The new ownership policy of the container. |
If the container owns its elements, then the removed elements will be deleted. Any duplicates will be removed in this process, but don't rely on this.
void DataVector< T, DataModel_detail::NoBase >::clear | ( | SG::OwnershipPolicy | ownPolicy, |
SG::IndexTrackingPolicy | trackIndices | ||
) |
Erase all the elements in the collection, and reset the ownership mode.
ownPolicy | The new ownership policy of the container. |
trackIndices | The index tracking policy. |
If the container owns its elements, then the removed elements will be deleted. Any duplicates will be removed in this process, but don't rely on this.
void DataVector< T, DataModel_detail::NoBase >::clear | ( | std::unique_ptr< Deleter > | deleter | ) |
Erase all the elements in the collection, and change how elements are to be deleted.
deleter | Object to be used to delete object. Passing nullptr will change back to the default. |
If the container owns its elements, then the removed elements will be deleted. Any duplicates will be removed in this process, but don't rely on this. After the current elements are deleted, the Deleter object is changed.
|
inherited |
Clear the cached aux data pointers.
You should call this any time something changes in the aux store that could invalidate the vector pointers.
|
inherited |
Clear the cached aux data pointers for a single variable.
auxid | ID of the variable to clear. |
Not really safe to use if another thread may be accessing the same decoration.
|
inherited |
Clear all decorations.
Erase all decorations from the store, restoring the state to when lock
was called.
Returns true if there were any decorations that were cleared, false if the store did not contain any decorations.
Definition at line 653 of file AuxVectorData.cxx.
|
inherited |
Clear the cached decoration pointer for a single variable.
auxid | ID of the variable to clear. |
Not really safe to use if another thread may be accessing the same decoration.
|
protectedinherited |
Clear the container / index for element elt
.
elt | Iterator to the element to clear. |
ForwardIterator
should be an iterator over the DataVector
(not a base iterator).
|
privateinherited |
Clear the container / index for element elt
.
elt | Iterator to the element to clear. |
This is the no-auxdata case; doesn't do anything other than checking m_trackIndices
.
|
privateinherited |
Clear the container / index for element elt
.
elt | Iterator to the element to clear. |
This is the auxdata case.
|
protectedinherited |
Clear the container / index for a range of elements.
beg | Beginning of the range. |
end | End of the range. |
ForwardIterator
should be an iterator over the DataVector
(not a base iterator).
|
privateinherited |
Clear the container / index for a range of elements.
beg | Beginning of the range. |
end | End of the range. |
No-auxdata case; a no-op except for checking m_trackIndices
.
|
privateinherited |
Clear the container / index for a range of elements.
beg | Beginning of the range. |
end | End of the range. |
Auxdata case.
|
protected |
Clear m_isMostDerived
for this instance and for all bases.
Called from the constructor after setting m_isMostDerived
.
|
noexcept |
Return a const_reverse_iterator
pointing past the end of the collection.
const_reverse_iterator
.Note that dereferencing the iterator will yield a const
T*
rather than a reference.
|
noexcept |
Return a const_reverse_iterator
pointing at the beginning of the collection.
const_reverse_iterator
.Note that dereferencing the iterator will yield a const
T*
rather than a reference.
|
static |
Helper to shorten calls to DataModel_detail::DVLCast
.
p | The value to convert. |
const
T*
.This is a no-op for the base class.
|
static |
Helper to shorten calls to DataModel_detail::DVLCast
.
p | The value to convert. |
T*
.This is a no-op for the base class.
|
protected |
Delete a range of elements.
first | Start of range to delete. |
last | End of range to delete. |
|
protected |
Delete an element.
p | The element to delete. |
|
privatevirtual |
Find the most-derived DataVector
class in the hierarchy.
type_info
for the class for which this method gets run.This is used to generate a nice error message when the most-derived check for insertions fails. Every DataVector
defines this virtual method, so when it's called, the one corresponding to the most-derived DataVector
gets run.
|
static |
Return the DV/DL info struct for this class.
This can be used to make sure that it's instantiated.
|
virtual |
Return the DV/DL info struct for this class.
This can be used to make sure that it's instantiated.
iterator DataVector< T, DataModel_detail::NoBase >::emplace | ( | iterator | position, |
value_type | pElem | ||
) |
Add a new element to the collection.
position | Iterator before which the element will be added. |
pElem | The element to add to the collection. |
The container's ownership policy will determine if it takes ownership of the new element.
Note: this method may only be called using the most derived DataVector
in the hierarchy.
For DataVector
, this is just the same as insert
. It's included just for interface compatibility with std::vector
.
value_type DataVector< T, DataModel_detail::NoBase >::emplace_back | ( | value_type | pElem | ) |
Add an element to the end of the collection.
pElem | The element to add to the collection. |
The container's ownership policy will determine if it takes ownership of the new element.
Note: this method may only be called using the most derived DataVector
in the hierarchy.
For DataVector
, this is like the same as push_back
, and it returns the pushed element. It's included just for interface compatibility with std::vector
.
|
noexcept |
Returns true
if the collection is empty.
|
noexcept |
Return a const_iterator
pointing past the end of the collection.
const_iterator
.Note that dereferencing the iterator will yield a const
T*
rather than a reference.
|
noexcept |
Return an iterator
pointing past the end of the collection.
iterator
.Note that dereferencing the iterator will yield a proxy rather than a reference; the proxy will handle deleting an owned element if it's assigned to.
iterator DataVector< T, DataModel_detail::NoBase >::erase | ( | iterator | first, |
iterator | last | ||
) |
Remove a range of elements.
first | Iterator pointing to the first element to be removed. |
last | Iterator pointing one past the last element to be removed. |
end()
).If the container owns its elements, then the removed elements will be deleted. Any duplicates will be removed in this process, but don't rely on this.
iterator DataVector< T, DataModel_detail::NoBase >::erase | ( | iterator | position | ) |
Remove element at a given position.
position | Iterator pointing to the element to be removed. |
end()
).If the container owns its elements, then the pointed-to element will be deleted.
|
protected |
Helper for erase()
.
Remove a range of elements.
first | Iterator pointing to the first element to be removed. |
last | Iterator pointing one past the last element to be removed. |
end()
).This function factors out common code between erase()
in the base and derived DataVector
classes. It deals with the std::vector
iterators directly.
|
protected |
Helper for erase()
.
Remove element at a given position.
position | Iterator pointing to the element to be removed. |
end()
).This function factors out common code between erase()
in the base and derived DataVector
classes. It deals with the std::vector
iterators directly.
ElementProxy DataVector< T, DataModel_detail::NoBase >::front | ( | ) |
Access the first element in the collection as an lvalue.
No checking is done to ensure that the container is not empty. Note that we return a proxy object rather than a reference; the proxy will handle deleting an owned element if it's assigned to.
const T* DataVector< T, DataModel_detail::NoBase >::front | ( | ) | const |
Access the first element in the collection as an rvalue.
No checking is done to ensure that the container is not empty. Note that we return a const
T*
rather than a reference.
const T* DataVector< T, DataModel_detail::NoBase >::get | ( | size_type | n | ) | const |
Access an element, as an rvalue.
n | Array index to access. |
This is a synonym for operator[] const, to be used when calling from root (where we can't readily call just the const version of a method).
|
inherited |
Return a set of identifiers for existing data items in store associated with this object.
This will include identifiers for all items, const and non-const. If no store is associated with this object, this will return an empty set.
Definition at line 203 of file AuxVectorData.cxx.
|
inherited |
Return a span over an aux data item.
auxid | The desired aux data item. |
This will return a span containing the value of the requested auxiliary variable for all elements in the container. If the item doesn't exist, it will be created. Errors are signaled by raising an exception. Note that the value_type
of the span is not necessarily T
; an example is bool
for which we return a span of char
.
|
inherited |
Return the current store, as a const interface.
This will be non-zero if either a const or non-const store is associated with this object.
|
inherited |
Return the data link to the current store, as a const interface.
This is set by persistency when reading an object, but it may be overridden by setting the store pointer directly.
|
inherited |
Same as getConstStore.
But out-of-line, as sometimes the debugger has problems calling inline functions.
Definition at line 704 of file AuxVectorData.cxx.
|
inherited |
Return reference to an aux data item.
auxid | The desired aux data item. |
ndx | Index of the element to return. |
This will return a reference to element ndx
of aux data item auxid
. If the aux data item does not exist, it will be created. Errors are signaled by raising an exception.
Warning: no type checking is done. You should usually access the data via Accessor
or ConstAccessor
.
|
inherited |
Return const reference to an aux data item.
auxid | The desired aux data item. |
ndx | Index of the element to return. |
This will return a reference to element ndx
of aux data item auxid
. Errors are signaled by raising an exception.
Warning: no type checking is done. You should usually access the data via Accessor
or ConstAccessor
.
|
inherited |
Return a pointer to the start of an aux data vector.
auxid | The desired aux data item. |
This will return a pointer to the start of the data for aux data item auxid
. If the item doesn't exist, it will be created. Errors are signaled by raising an exception.
|
inherited |
Return a const pointer to the start of an aux data vector.
auxid | The desired aux data item. |
This will return a pointer to the start of the data for aux data item auxid
. Errors are signaled by raising an exception.
|
inherited |
Return a const pointer to the start of an aux data vector.
auxid | The desired aux data item. |
This will return a pointer to the start of the data for aux data item auxid
. If the item does not exist, this will return nullptr rather than raising an exception.
|
privateinherited |
|
privateinherited |
Out-of-line portion of data access.
auxid | aux data item being accessed. |
allowMissing | If true, then return nullptr if the variable is missing rather than throwing an exception. |
When this function returns, the cache entry m_cache
[auxid] will be valid. That entry is also returned. If there's an error, the function will throw an exception rather than returning.
Definition at line 308 of file AuxVectorData.cxx.
|
privateinherited |
Out-of-line portion of data access (const version).
auxid | aux data item being accessed. |
allowMissing | If true, then return nullptr if the variable is missing rather than throwing an exception. |
When this function returns, the cache entry m_constCache
[auxid] will be valid. That entry is also returned. If there's an error, the function will throw an exception rather than returning.
Definition at line 353 of file AuxVectorData.cxx.
Return a span over an aux data item.
auxid | The desired aux data item. |
This will return a span containing the value of the requested auxiliary variable for all elements in the container. If the item doesn't exist, it will be created. Errors are signaled by raising an exception. Note that the value_type
of the span is not necessarily T
; an example is bool
for which we return a span of char
.
|
inherited |
Return a span over an aux data item.
auxid | The desired aux data item. |
This will return a span containing the value of the requested auxiliary variable for all elements in the container. If the item doesn't exist, it will be created. Errors are signaled by raising an exception. Note that the value_type
of the span is not necessarily T
; an example is bool
for which we return a span of char
.
|
inherited |
Return a reference to a description of this vector's start+size.
auxid | The desired aux data item. |
This low-overhead method of getting the start+size of an auxiliary variable. The returned object will be updated if the variable's vector changes. Raises an exception if the variable does not exist.
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.
|
privateinherited |
Return a reference to a description of this vector's start+size, out-of-line portion.
auxid | The desired aux data item. |
allowMissing | If true, then return nullptr if the variable is missing rather than throwing an exception. |
When this function returns, the cache entry m_spanCache
[auxid] will be valid. That entry is also returned. If there's an error, the function will throw an exception rather than returning.
Definition at line 456 of file AuxVectorData.cxx.
|
inherited |
Return reference to an aux decoration item.
auxid | The desired aux decoration item. |
ndx | Index of the element to return. |
This will return a reference to element ndx
of aux decoration item auxid
. If the aux data item does not exist, it will be created. Errors are signaled by raising an exception.
Warning: no type checking is done. You should usually access the data via Decorator
.
The difference between getDecoration
and getData
is that getDecoration
takes a const container as input, but returns a non-const reference. This will only succeed if either the container is not locked or the item was first accessed as a decoration.
|
inherited |
Return a pointer to the start of an aux data vector for a decoration.
auxid | The desired aux data item. |
This will return a pointer to the start of the data for aux data item auxid
. If the item doesn't exist, it will be created. Errors are signaled by raising an exception.
The difference between getDecorationArray
and getDataArray
is that getDecorationArray
takes a const container as input, but returns a non-const pointer. This will only succeed if either the container is not locked or the item was first accessed as a decoration.
|
privateinherited |
Out-of-line portion of data access (decorator version).
auxid | aux data item being accessed. |
When this function returns, the cache entry m_cache
[auxid] will be valid. That entry is also returned. If there's an error, the function will throw an exception rather than returning.
The difference between getDecorationOol
and getDataOol
is that getDecorationOol
takes a const container as input, but returns a non-const pointer. This will only succeed if either the container is not locked or the item was first accessed as a decoration.
Definition at line 397 of file AuxVectorData.cxx.
|
inherited |
Return a span over an aux data item for a decoration.
auxid | The desired aux data item. |
This will return a span containing the value of the requested auxiliary variable for all elements in the container. If the item doesn't exist, it will be created. Errors are signaled by raising an exception. Note that the value_type
of the span is not necessarily T
; an example is bool
for which we return a span of char
.
The difference between getDecorationSpan
and getDataSpan
is that getDecorationSpan
takes a const container as input, but returns a span over non-const objects. This will only succeed if either the container is not locked or the item was first accessed as a decoration.
|
inherited |
Return a set of identifiers for decorations for this object.
Definition at line 215 of file AuxVectorData.cxx.
|
inherited |
Return the current store, as a non-const interface.
This will be non-zero if a non-const store is associated with this object.
|
inherited |
Return the current store, as a non-const interface.
This will be non-zero if a non-const store is associated with this object.
|
inherited |
Return a set of identifiers for writable data items in this store.
This will include only non-const identifiers. If no store is associated with this object, this will return an empty set.
Definition at line 231 of file AuxVectorData.cxx.
|
inherited |
Return true if this object has an associated non-const store.
|
inherited |
Return true if this object has an associated store.
|
protectedinherited |
Initialize index tracking mode.
ownPolicy | The container ownership policy. |
indexTrackingPolicy | The requested index tracking policy. |
DVL should be the most-derived class for this container.
This handles the logic for setting the state of index tracking. If this container does not handle aux data, then index tracking is always off. Otherwise, it depends on the requested policies. In any case, it is an error to turn off index tracking for a container that has an associated aux store.
|
privateinherited |
Initialize index tracking mode — no-auxdata specialization.
ownPolicy | The container ownership policy. |
indexTrackingPolicy | The requested index tracking policy. |
Since this is the no-auxdata case, it always sets index tracking to false. An exception is raised if the container has an associated store (but that should never actually happen).
Definition at line 132 of file AuxVectorBase.cxx.
|
privateinherited |
Initialize index tracking mode — auxdata specialization.
ownPolicy | The container ownership policy. |
indexTrackingPolicy | The requested index tracking policy. |
Sets index tracking based on the requested policies. An exception is raised if index tracking is disabled and the container has an associated store.
Definition at line 152 of file AuxVectorBase.cxx.
void DataVector< T, DataModel_detail::NoBase >::insert | ( | iterator | position, |
InputIterator | first, | ||
InputIterator | last | ||
) |
Add a group of new elements to the collection.
position | Iterator before which the element will be added. |
first | The start of the range to put in the container. |
last | The end of the range to put in the container. |
The container's ownership policy will determine if it takes ownership of the new element.
Note: this method may only be called using the most derived DataVector
in the hierarchy.
This overload is for the case where the iterator value type is convertible to T*.
void DataVector< T, DataModel_detail::NoBase >::insert | ( | iterator | position, |
InputIterator | first, | ||
InputIterator | last | ||
) |
Add a group of new elements to the collection.
position | Iterator before which the element will be added. |
first | The start of the range to put in the container. |
last | The end of the range to put in the container. |
The container's ownership policy will determine if it takes ownership of the new element.
Note: this method may only be called using the most derived DataVector
in the hierarchy.
This overload is for the case where the iterator value type is convertible to unique_ptr<T>.
void DataVector< T, DataModel_detail::NoBase >::insert | ( | iterator | position, |
std::initializer_list< value_type > | l | ||
) |
Add a group of new elements to the collection.
position | Iterator before which the element will be added. |
l | An initializer list. |
The container's ownership policy will determine if it takes ownership of the new element.
Note: this method may only be called using the most derived DataVector
in the hierarchy.
iterator DataVector< T, DataModel_detail::NoBase >::insert | ( | iterator | position, |
std::unique_ptr< base_value_type > | pElem | ||
) |
Add a new element to the collection.
position | Iterator before which the element will be added. |
pElem | The element to add to the collection. |
The container must be an owning container.
Note: this method may only be called using the most derived DataVector
in the hierarchy.
iterator DataVector< T, DataModel_detail::NoBase >::insert | ( | iterator | position, |
value_type | pElem | ||
) |
Add a new element to the collection.
position | Iterator before which the element will be added. |
pElem | The element to add to the collection. |
The container's ownership policy will determine if it takes ownership of the new element.
Note: this method may only be called using the most derived DataVector
in the hierarchy.
void DataVector< T, DataModel_detail::NoBase >::insertMove | ( | iterator | position, |
DataVector< T, DataModel_detail::NoBase > & | other | ||
) |
Insert the contents of another DataVector
, with auxiliary data copied via move semantics.
position | Iterator before which the new elements will be added. |
other | The vector to add. |
The ownership mode of this vector must be the same as other
; otherwise, an exception will be thrown.
If both vectors are view vectors, then this is the same as insert (position, other.begin(), other.end())
.
Otherwise, the elements from other
will be inserted into this vector. This vector will take ownership of the elements, and the ownership mode of other
will be changed to VIEW_ELEMENTS
. Auxiliary data for these elements will be transferred, using move semantics if possible. (Thus, the auxiliary store for other
may be modified and must not be locked.) Finally, the auxiliary store pointer for other
will be cleared (but the store itself will not be deleted since it's not owned by the vector).
Note: this method may only be called using the most derived DataVector
in the hierarchy.
|
inherited |
Test to see if a variable exists in the store.
id | The variable to test. |
|
inherited |
Test to see if a variable exists in the store.
id | The variable to test. |
|
inherited |
Test to see if a variable exists in the store.
name | Name of the aux variable. |
clsname | The name of the associated class. May be blank. |
|
privateinherited |
Out-of-line portion of isAvailable.
id | The variable to test. |
Definition at line 243 of file AuxVectorData.cxx.
|
inherited |
Test to see if a variable is available for writing.
id | The variable to test. |
|
inherited |
Test to see if a variable is available for writing.
id | The variable to test. |
|
inherited |
Test to see if a variable is available for writing.
name | Name of the aux variable. |
clsname | The name of the associated class. May be blank. |
|
inherited |
Test to see if a variable is available for writing as a decoration.
id | The variable to test. |
|
inherited |
Test to see if a variable is available for writing as a decoration.
id | The variable to test. |
|
inherited |
Test to see if a variable is available for writing as a decoration.
name | Name of the aux variable. |
clsname | The name of the associated class. May be blank. |
|
privateinherited |
Out-of-line portion of isAvailableWritableAsDecoration.
id | The variable to test. |
Definition at line 282 of file AuxVectorData.cxx.
|
privateinherited |
Out-of-line portion of isAvailableWritable.
id | The variable to test. |
Definition at line 270 of file AuxVectorData.cxx.
|
static |
Swap the referents of two DataVector
iterators.
a | The first iterator for the swap. |
b | The second iterator for the swap. |
|
overridevirtualinherited |
Lock the container.
After this, only decorations can be changed/modified. If the container is already locked, this is a no-op.
Implements ILockable.
Definition at line 633 of file AuxVectorData.cxx.
|
inherited |
Explicitly lock a decoration.
auxid | ID of the decoration to lock. |
This is only safe if no other thread can be accessing this decoration. It is strongly preferred to do this via a WriteDecorHandle
, where the dependencies can help ensure this.
Definition at line 687 of file AuxVectorData.cxx.
|
noexcept |
Returns the size()
of the largest possible collection.
|
protectedinherited |
Set index on an element and copy auxiliary data.
index | Container index at which the new element is being added. |
p | The new element being added. |
clear | If true, then any auxiliary data initially associated with p are cleared after being copied. |
skipDestClear | Normally, if p does not have auxiliary data, then the variables of the destination are cleared. If this flag is true, then this clear is skipped. This can be appropriate as part of a push_back, where the destination is already known to be clear. |
Overload for the no-auxdata case.
|
protectedinherited |
Set index on a range of elements and copy auxiliary data.
index | Container index at which the first new element is being added. |
beg | The start of the range of new elements. |
end | The end of the range of new elements. |
clear | If true, then any auxiliary data initially associated with the elements are cleared after being copied. |
skipDestClear | Normally, if the elements do not have auxiliary data, then the variables of the destination are cleared. If this flag is true, then this clear is skipped. This can be appropriate as part of a push_back, where the destination is already known to be clear. |
The elements in the range are being a added to the container at index
. If the new elements have associated auxiliary data, copy it to the container starting at index
. Then set the container / index on the elements in the range.
ForwardIterator
should be an iterator over the DataVector
(not a base iterator).
|
protectedinherited |
Set index on an element and copy auxiliary data.
index | Container index at which the new element is being added. |
p | The new element being added. |
clear | If true, then any auxiliary data initially associated with p are cleared after being copied. |
skipDestClear | Normally, if p does not have auxiliary data, then the variables of the destination are cleared. If this flag is true, then this clear is skipped. This can be appropriate as part of a push_back, where the destination is already known to be clear. |
Element p
is being added to the container at index
. If p
has associated auxiliary data, copy it to the container at index
. Then set the container / index on p
.
Definition at line 223 of file AuxVectorBase.cxx.
|
privateinherited |
Set index on a range of elements and copy auxiliary data.
index | Container index at which the first new element is being added. |
beg | The start of the range of new elements. |
end | The end of the range of new elements. |
clear | If true, then any auxiliary data initially associated with the elements are cleared after being copied. |
skipDestClear | Normally, if the elements do not have auxiliary data, then the variables of the destination are cleared. If this flag is true, then this clear is skipped. This can be appropriate as part of a push_back, where the destination is already known to be clear. |
No-auxdata version; a no-op except for checking m_trackIndices
.
|
privateinherited |
Set index on a range of elements and copy auxiliary data.
index | Container index at which the first new element is being added. |
beg | The start of the range of new elements. |
end | The end of the range of new elements. |
clear | If true, then any auxiliary data initially associated with the elements are cleared after being copied. |
skipDestClear | Normally, if the elements do not have auxiliary data, then the variables of the destination are cleared. If this flag is true, then this clear is skipped. This can be appropriate as part of a push_back, where the destination is already known to be clear. |
The elements in the range are being a added to the container at index
. If the new elements have associated auxiliary data, copy it to the container starting at index
. Then set the container / index on the elements in the range.
The auxdata case.
DataVector& DataVector< T, DataModel_detail::NoBase >::operator= | ( | const DataVector< T, DataModel_detail::NoBase > & | rhs | ) |
Assignment operator.
rhs | The DataVector from which to assign. |
This is a ‘shallow’ copy; after the completion of this, the DataVector
will not own its elements. Any elements it owned prior to this call will be released.
Note: this method may only be called using the most derived DataVector
in the hierarchy.
|
noexcept |
Move assignment.
rhs | The container from which to move. |
Any auxiliary data will be moved along with the container contents.
DataVector& DataVector< T, DataModel_detail::NoBase >::operator= | ( | std::initializer_list< value_type > | l | ) |
Assignment operator, from an initializer list.
l | An initializer list. |
This is equivalent to assign
. Any existing owned elements will be released. The DataVector's
ownership policy determines whether it will take ownership of the new elements.
ElementProxy DataVector< T, DataModel_detail::NoBase >::operator[] | ( | size_type | n | ) |
Access an element, as an lvalue.
n | Array index to access. |
No bounds checking is done. Note that we return a proxy object rather than a reference; the proxy will handle deleting an owned element if it's assigned to.
const T* DataVector< T, DataModel_detail::NoBase >::operator[] | ( | size_type | n | ) | const |
Access an element, as an rvalue.
n | Array index to access. |
No bounds checking is done. Note that we return a const
T*
rather than a reference.
SG::OwnershipPolicy DataVector< T, DataModel_detail::NoBase >::ownPolicy | ( | ) | const |
Return the ownership policy setting for this container.
void DataVector< T, DataModel_detail::NoBase >::pop_back | ( | ) |
Remove the last element from the collection.
If the container owns its elements, then the removed element will be deleted.
value_type DataVector< T, DataModel_detail::NoBase >::push_back | ( | std::unique_ptr< base_value_type > | pElem | ) |
Add an element to the end of the collection.
pElem | The element to add to the collection. |
The container must be an owning container.
Note: this method may only be called using the most derived DataVector
in the hierarchy.
Returns the pushed pointer.
value_type DataVector< T, DataModel_detail::NoBase >::push_back | ( | value_type | pElem | ) |
Add an element to the end of the collection.
pElem | The element to add to the collection. |
The container's ownership policy will determine if it takes ownership of the new element.
Note: this method may only be called using the most derived DataVector
in the hierarchy.
Returns the pushed pointer.
|
noexcept |
Return a const_reverse_iterator
pointing past the end of the collection.
const_reverse_iterator
.Note that dereferencing the iterator will yield a const
T*
rather than a reference.
|
noexcept |
Return a reverse_iterator
pointing past the end of the collection.
reverse_iterator
.Note that dereferencing the iterator will yield a proxy rather than a reference; the proxy will handle deleting an owned element if it's assigned to.
|
noexcept |
Return a const_reverse_iterator
pointing at the beginning of the collection.
const_reverse_iterator
.Note that dereferencing the iterator will yield a const
T*
rather than a reference.
|
noexcept |
Return a reverse_iterator
pointing at the beginning of the collection.
reverse_iterator
.Note that dereferencing the iterator will yield a proxy rather than a reference; the proxy will handle deleting an owned element if it's assigned to.
|
protectedinherited |
Change the capacity of the aux data associated with this container.
size | The new container size. |
DVL should be the most-derived class for this container.
void DataVector< T, DataModel_detail::NoBase >::reserve | ( | size_type | n | ) |
Attempt to preallocate enough memory for a specified number of elements.
n | Number of elements required. |
|
privateinherited |
Change the capacity of the aux data associated with this container.
size | The new container size. |
The no-auxdata case; a no-op except for checking m_trackIndices
.
|
privateinherited |
Change the capacity of the aux data associated with this container.
size | The new container size. |
The auxdata case.
Definition at line 195 of file AuxVectorBase.cxx.
|
protectedinherited |
Resize the aux data associated with this container.
size | The new container size. |
DVL should be the most-derived class for this container.
void DataVector< T, DataModel_detail::NoBase >::resize | ( | size_type | sz | ) |
Resizes the collection to the specified number of elements.
sz | The new size of the collection. |
Note that this function differs from the standard in that it does not allow specifying the value of any inserted elements. They will always be 0.
If the container is shrunk, elements will be deleted as with erase()
.
|
privateinherited |
Resize the aux data associated with this container.
size | The new container size. |
The no-auxdata case; a no-op except for checking m_trackIndices
.
|
privateinherited |
Resize the aux data associated with this container.
size | The new container size. |
The auxdata case.
Definition at line 176 of file AuxVectorBase.cxx.
void DataVector< T, DataModel_detail::NoBase >::resortAux | ( | iterator | beg, |
iterator | end | ||
) |
Reset indices / reorder aux data after elements have been permuted.
beg | Start of the range of elements to process. |
end | End of the range of elements to process. |
Call this after some operation that has permuted the elements in the container (such as sort). The index information in the elements will be used to permute all auxiliary data in the same way. Finally, all the indices will be reset in the correct order.
|
protectedinherited |
Reset indices / reorder aux data after elements have been permuted.
index | Index in the container of the start of the range. |
beg | Start of the range of elements to process. |
end | End of the range of elements to process. |
Call this after some operation that has permuted the elements in the container (such as sort). The index information in the elements will be used to permute all auxiliary data in the same way. Finally, all the indices will be reset in the correct order.
ForwardIterator
should be an iterator over the DataVector
(not a base iterator).
|
privateinherited |
Reset indices / reorder aux data after elements have been permuted.
index | Index in the container of the start of the range. |
beg | Start of the range of elements to process. |
end | End of the range of elements to process. |
No-auxdata version; a no-op except for checking m_trackIndices
.
|
privateinherited |
Reset indices / reorder aux data after elements have been permuted.
index | Index in the container of the start of the range. |
beg | Start of the range of elements to process. |
end | End of the range of elements to process. |
Call this after some operation that has permuted the elements in the container (such as sort). The index information in the elements will be used to permute all auxiliary data in the same way. Finally, all the indices will be reset in the correct order.
The auxdata case.
|
protectedinherited |
Explicitly set a cache pointer.
auxid | Variable ID to set. |
ptr | Pointer to which the cache entry should be set. |
For internal use; do not use from user code. This does not acquire the lock — it's mostly meant to be used from a constructor.
|
protectedinherited |
Explicitly set a cache pointer.
auxid | Variable ID to set. |
ptr | Pointer to which the cache entry should be set. |
For internal use; do not use from user code. This does not acquire the lock — it's mostly meant to be used from a constructor.
|
inherited |
Synonym for setStore
with IConstAuxStore
.
store | The new store. |
|
privateinherited |
|
protectedinherited |
Set container/index for all elements within a range.
beg | Beginning of the range. |
end | End of the range. |
first | Index to set for the first element in the range. |
For all elements in the range, the container will be set to this container, and indices will be set sequentially, starting with first
.
ForwardIterator
should be an iterator over the DataVector
(not a base iterator).
|
privateinherited |
Set container/index for all elements within a range.
beg | Beginning of the range. |
end | End of the range. |
first | Index to set for the first element in the range. |
This is the no-auxdata case; doesn't do anything other than checking m_trackIndices
.
|
privateinherited |
Set container/index for all elements within a range.
beg | Beginning of the range. |
end | End of the range. |
first | Index to set for the first element in the range. |
This is the auxdata case. For all elements in the range, the container will be set to this container, and indices will be set sequentially, starting with first
.
|
protectedvirtual |
Set m_isMostDerived
for this instance and clear it for all bases.
Called from testInsert
if the test fails. The flag may not have been set if this container was made via copy construction, so set it appropriately now so we can test again.
|
inherited |
Synonym for setStore
with IAuxStore
.
store | The new store. |
|
inherited |
Set an option for an auxiliary data variable.
id | The variable for which we want to set the option. |
option | The option setting to make. |
The interpretation of option
depends on the associated auxiliary store. See PackedParameters.h for option settings for writing packed data. Returns true
on success, false
otherwise.
Definition at line 150 of file AuxVectorData.cxx.
|
inherited |
Set an option for an auxiliary data variable.
id | The variable for which we want to set the option. |
optname | The name of the option to set. |
arg | The option value to set. |
The interpretation of option
depends on the associated auxiliary store. See PackedParameters.h for option settings for writing packed data. Returns true
on success, false
otherwise.
|
inherited |
Set an option for an auxiliary data variable.
name | The name of the variable. |
option | The option setting to make. |
The interpretation of option
depends on the associated auxiliary store. See PackedParameters.h for option settings for writing packed data. Returns true
on success, false
otherwise.
Definition at line 168 of file AuxVectorData.cxx.
|
inherited |
Set an option for an auxiliary data variable.
name | The name of the variable. |
clsname | The name of the associated class. May be blank. |
option | The option setting to make. |
The interpretation of option
depends on the associated auxiliary store. See PackedParameters.h for option settings for writing packed data. Returns true
on success, false
otherwise.
Definition at line 186 of file AuxVectorData.cxx.
|
inherited |
Set an option for an auxiliary data variable.
name | The name of the variable. |
clsname | The name of the associated class. May be blank. |
optname | The name of the option to set. |
arg | The option value to set. |
The interpretation of option
depends on the associated auxiliary store. See PackedParameters.h for option settings for writing packed data. Returns true
on success, false
otherwise.
|
inherited |
|
inherited |
|
inherited |
Set an option for an auxiliary data variable.
name | The name of the variable. |
optname | The name of the option to set. |
arg | The option value to set. |
The interpretation of option
depends on the associated auxiliary store. See PackedParameters.h for option settings for writing packed data. Returns true
on success, false
otherwise.
|
inherited |
Set the store associated with this object.
store | The new store. |
This will clear the non-const store pointer, and also clear the cache.
It is an error to set a store for a container for which index tracking is disabled. That will raise an ExcUntrackedSetStore
exception.
Definition at line 114 of file AuxVectorBase.cxx.
|
inherited |
Set the store associated with this object.
store | The new store. |
This will clear the non-const store pointer, and also clear the cache.
It is an error to set a store for a container for which index tracking is disabled. That will raise an ExcUntrackedSetStore
exception.
Definition at line 78 of file AuxVectorBase.cxx.
|
inherited |
Set the store associated with this object.
store | The new store. |
This will set both the const and non-const store pointers, and also clear the cache.
It is an error to set a store for a container for which index tracking is disabled. That will raise an ExcUntrackedSetStore
exception.
nb. List the non-const overload before the const one; otherwise, we can't call the const one from python.
store | The new store. |
This will set both the const and non-const store pointers, and also clear the cache.
It is an error to set a store for a container for which index tracking is disabled. That will raise an ExcUntrackedSetStore
exception.
Definition at line 96 of file AuxVectorBase.cxx.
|
protectedinherited |
Shift the elements of the container.
cont | The container that's being shifted. |
pos | The starting index for the shift. |
offs | The (signed) amount of the shift. |
The container should be the derived container. The elements in the container should have already been shifted; this operation will then adjust the element indices and also shift the elements in the vectors for all aux data items. 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).
|
private |
Shift the auxiliary elements of the container.
pos | The starting index for the shift. |
offs | The (signed) amount of the shift. |
The elements in the container should have already been shifted; this operation will then adjust the element indices and also shift the elements in the vectors for all aux data items. 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).
|
privateinherited |
Shift the elements of the container.
cont | The container that's being shifted. |
pos | The starting index for the shift. |
offs | The (signed) amount of the shift. |
No-auxdata version; a no-op except for checking m_trackIndices
.
|
privateinherited |
Shift the elements of the container.
cont | The container that's being shifted. |
pos | The starting index for the shift. |
offs | The (signed) amount of the shift. |
Auxdata version.
The container should be the derived container. The elements in the container should have already been shifted; this operation will then adjust the element indices and also shift the elements in the vectors for all aux data items. 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).
void DataVector< T, DataModel_detail::NoBase >::shrink_to_fit | ( | ) |
Change the vector capacity to match the current size.
Note: this does not affect auxiliary data.
|
noexcept |
Returns the number of elements in the collection.
|
virtual |
Returns the number of elements in the collection.
This version is virtual, to be callable from the AuxData base class.
Implements SG::AuxVectorData.
void DataVector< T, DataModel_detail::NoBase >::sort | ( | ) |
Sort the container.
This just sorts by pointer value, so it's probably not very useful.
void DataVector< T, DataModel_detail::NoBase >::sort | ( | COMPARE | comp | ) |
Sort the container with a user-specified comparison operator.
comp | Functional to compare two values. |
const PtrVector& DataVector< T, DataModel_detail::NoBase >::stdcont | ( | ) | const |
Return the underlying std::vector
of the container.
std::vector
actually holding the collection.Note that DataVector<T>::stdcont
does not necessarily return a std::vector<T*>
if DataVector
inheritance is being used.
|
protectedinherited |
Swap with another container.
other | The container with which to swap. |
|
inherited |
Swap this instance with another.
other | The other instance with which to swap. |
void DataVector< T, DataModel_detail::NoBase >::swap | ( | DataVector< T, DataModel_detail::NoBase > & | rhs | ) |
Swap this collection with another.
rhs | The collection with which to swap. |
Ownership is swapped along with the collection content.
Note: this method may only be called using the most-derived DataVector
in the hierarchy. The rhs must also be referenced using the most-derived DataVector
.
void DataVector< T, DataModel_detail::NoBase >::swapElement | ( | iterator | pos, |
std::unique_ptr< base_value_type > | newElem, | ||
std::unique_ptr< base_value_type > & | oldElem | ||
) |
Swap one element out of the container.
pos | The element in the container to swap. |
newElem | New element to put in the container. May be 0. |
oldElem | Reference to receive the element removed from the container. |
Reference oldElem is initialized with element pos of the collection (no bounds checking). Then element index is set to newElem
. The collection must own its elements to use its interface. The collection will take ownership of newElem
and will return ownership of oldElem
.
Note: this method may only be called using the most derived DataVector
in the hierarchy.
void DataVector< T, DataModel_detail::NoBase >::swapElement | ( | iterator | pos, |
value_type | newElem, | ||
reference | oldElem | ||
) |
Swap one element out of the container.
pos | The element in the container to swap. |
newElem | New element to put in the container. May be 0. |
oldElem | Reference to receive the element removed from the container. |
Reference oldElem is initialized with element pos of the collection (no bounds checking). Then element index is set to newElem
. If the collection owns its elements, then it will take ownership of newElem and release (without deleting) the element returned through oldElem.
Note: this method may only be called using the most derived DataVector
in the hierarchy.
void DataVector< T, DataModel_detail::NoBase >::swapElement | ( | size_type | index, |
std::unique_ptr< base_value_type > | newElem, | ||
std::unique_ptr< base_value_type > & | oldElem | ||
) |
Swap one element out of the container.
index | Index of the element in the container to swap. |
newElem | New element to put in the container. May be 0. |
oldElem | Reference to receive the element removed from the container. |
Reference oldElem is initialized with element index of the collection (no bounds checking). Then element index is set to newElem
.
The collection must own its elements to use its interface. The collection will take ownership of newElem
and will return ownership of oldElem
.
Note: this method may only be called using the most derived DataVector
in the hierarchy.
void DataVector< T, DataModel_detail::NoBase >::swapElement | ( | size_type | index, |
value_type | newElem, | ||
reference | oldElem | ||
) |
Swap one element out of the container.
index | Index of the element in the container to swap. |
newElem | New element to put in the container. May be 0. |
oldElem | Reference to receive the element removed from the container. |
Reference oldElem is initialized with element index of the collection (no bounds checking). Then element index is set to newElem
. If the collection owns its elements, then it will take ownership of newElem and release (without deleting) the element returned through oldElem.
Note: this method may only be called using the most derived DataVector
in the hierarchy.
|
protectedinherited |
Swap indices and auxiliary data between two elements.
aindex | Index of the first element, in this container. |
bindex | Index of the second element, in bcont . |
a | Pointer to the first element. |
b | Pointer to the second element. |
bcont | Container holding the second element. (May be the same as this, but doesn't have to be.) |
This is the no-auxdata case; it is a no-op except for checking m_trackIndices
.
|
protectedinherited |
Swap indices and auxiliary data between two elements.
aindex | Index of the first element, in this container. |
bindex | Index of the second element, in bcont . |
a | Pointer to the first element. |
b | Pointer to the second element. |
bcont | Container holding the second element. (May be the same as this, but doesn't have to be.) |
Elements a
at aindex
in this
and b
at bindex
in bcont
are being swapped. Swap the index / container references between the elements and also swap the auxiliary data if it exists.
Definition at line 257 of file AuxVectorBase.cxx.
void DataVector< T, DataModel_detail::NoBase >::testInsert | ( | const char * | op | ) |
Test if we can insert; raise an exception if not.
op | Description of the attempted operation. |
In order to maintain type-safety, we can only allow insertions using the most-derived instance of DataVector
. This checks this by testing the m_isMostDerived
, which is set by the constructors to true only for the most-derived instance. If the test fails, we call to potentially out-of-line code to continue.
void DataVector< T, DataModel_detail::NoBase >::testInsertOol | ( | const char * | op | ) |
Test if we can insert; raise an exception if not.
op | Description of the attempted operation. |
This continues the test of testInsert
. There is one case where m_isMostDerived
may not be set correctly. If this container was made via copy construction, then all the m_isMostDerived
flags will be false. So we call setMostDerived
to set the flags correctly and test again. If the test fails again, then we raise an exception.
|
inherited |
Return true if index tracking is enabled for this container.
Definition at line 3162 of file DataVector.h.
|
friend |
Definition at line 3156 of file DataVector.h.
Definition at line 3164 of file DataVector.h.
|
friend |
|
friend |
|
friend |
|
staticprotectedinherited |
Minimum length to use for the cache vector.
Only changed by unit tests.
Definition at line 593 of file AuxVectorData.h.
|
mutableprivateinherited |
Cached pointers to the start of aux data vectors, non-const.
Definition at line 963 of file AuxVectorData.h.
|
mutableprivateinherited |
Cached pointers to the start of aux data vectors, const.
Definition at line 966 of file AuxVectorData.h.
|
mutableprivateinherited |
Cached pointers to the start of aux data vectors, decorations.
Definition at line 969 of file AuxVectorData.h.
|
mutableprivateinherited |
Cached pointers to span descriptors.
Definition at line 972 of file AuxVectorData.h.
|
static |
This is true for any DataVector
class if we need to use virtual derivation to get to the base DataVector
class.
Since this is the base DataVector
class, set this unconditionally to false
.
Definition at line 2078 of file DataVector.h.
|
privateinherited |
Associated store, const.
Definition at line 980 of file AuxVectorData.h.
|
privateinherited |
Associated store link, const.
Definition at line 984 of file AuxVectorData.h.
|
protected |
Interface telling us how to delete objects.
If null, just use the C++ default.
Definition at line 3327 of file DataVector.h.
|
private |
This flag is true if this DV instance is the most-derived one.
We set this to true in the top-level constructor; the constructor then calls clearMostDerived on the base classes.
Definition at line 3355 of file DataVector.h.
|
mutableprivateinherited |
Definition at line 990 of file AuxVectorData.h.
|
protected |
The ownership policy of this container — either SG::OWNS_ELEMENTS or SG::VIEW_ELEMENTS.
Definition at line 3318 of file DataVector.h.
|
protected |
This actually holds the elements.
Definition at line 3321 of file DataVector.h.
|
privateinherited |
Associated store, non-const.
Definition at line 976 of file AuxVectorData.h.
|
privateinherited |
Flag if index tracking is enabled.
Definition at line 866 of file AuxVectorBase.h.
|
staticconstexpr |
If true, then this type must own its contents.
Definition at line 2144 of file DataVector.h.
|
staticprivateinherited |
Empty auxid set, used for a return value when we have no associated store.
Definition at line 993 of file AuxVectorData.h.
|
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 315 of file AuxVectorBase.h.