ATLAS Offline Software
Public Types | Public Member Functions | Protected Attributes | List of all members
SG::Accessor< T, ALLOC > Class Template Reference

Helper class to provide type-safe access to aux data. More...

#include <Accessor.h>

Inheritance diagram for SG::Accessor< T, ALLOC >:
Collaboration diagram for SG::Accessor< T, ALLOC >:

Public Types

using reference_type = typename AuxDataTraits< T, ALLOC >::reference_type
 Type referencing an item. More...
 
using element_type = typename AuxDataTraits< T, ALLOC >::element_type
 Type the user sees. More...
 
using container_pointer_type = typename AuxDataTraits< T, ALLOC >::container_pointer_type
 Pointer into the container holding this item. More...
 
using span = typename AuxDataTraits< T, ALLOC >::span
 A span over elements in the container. More...
 
using const_reference_type = typename AuxDataTraits< T, AuxAllocator_t< T > >::const_reference_type
 Type referencing an item. More...
 
using const_container_pointer_type = typename AuxDataTraits< T, AuxAllocator_t< T > >::const_container_pointer_type
 Pointer into the container holding this item. More...
 
using const_span = typename AuxDataTraits< T, AuxAllocator_t< T > >::const_span
 A span over elements in the container. More...
 

Public Member Functions

 Accessor (const std::string &name)
 Constructor. More...
 
 Accessor (const std::string &name, const std::string &clsname)
 Constructor. More...
 
 Accessor (const SG::auxid_t auxid)
 Constructor taking an auxid directly. More...
 
template<class ELT >
reference_type operator() (ELT &e) const
 Fetch the variable for one element, as a non-const reference. More...
 
reference_type operator() (AuxVectorData &container, size_t index) const
 Fetch the variable for one element, as a non-const reference. More...
 
template<class ELT >
void set (ELT &e, const element_type &x) const
 Set the variable for one element. More...
 
container_pointer_type getDataArray (AuxVectorData &container) const
 Get a pointer to the start of the auxiliary data array. More...
 
span getDataSpan (AuxVectorData &container) const
 Get a span over the auxilary data array. More...
 
template<class ELT >
bool isAvailableWritable (ELT &e) const
 Test to see if this variable exists in the store and is writable. More...
 
bool isAvailableWritable (AuxVectorData &c) const
 Test to see if this variable exists in the store and is writable. More...
 
const_reference_type operator() (const ELT &e) const
 Fetch the variable for one element, as a const reference. More...
 
const_reference_type operator() (const AuxVectorData &container, size_t index) const
 Fetch the variable for one element, as a const reference. More...
 
const_reference_type withDefault (const ELT &e, const T &deflt) const
 Fetch the variable for one element, as a const reference, with a default. More...
 
const_reference_type withDefault (const AuxVectorData &container, size_t index, const T &deflt) const
 Fetch the variable for one element, as a const reference. More...
 
const_container_pointer_type getDataArray (const AuxVectorData &container) const
 Get a pointer to the start of the auxiliary data array. More...
 
const_span getDataSpan (const AuxVectorData &container) const
 Get a span over the auxilary data array. More...
 
bool isAvailable (const ELT &e) const
 Test to see if this variable exists in the store. More...
 
bool isAvailable (const AuxVectorData &c) const
 Test to see if this variable exists in the store. More...
 
SG::auxid_t auxid () const
 Return the aux id for this variable. More...
 

Protected Attributes

SG::auxid_t m_auxid
 The cached auxid. More...
 

Detailed Description

template<class T, class ALLOC = AuxAllocator_t<T>>
class SG::Accessor< T, ALLOC >

Helper class to provide type-safe access to aux data.

This is written as a separate class in order to be able to cache the name -> auxid lookup.

You might use this something like this:

// Only need to do this once.
static const SG::Accessor<int> vint1 ("myInt");
...
DataVector<MyClass>* v = ...;
Myclass* m = v->at(2);
int x = ...;
vint1 (*m) = x;

You can also use this to define getters/setters in your class:

class Myclass {
...
int get_x() const
{ const static SG::ConstAccessor<int> acc ("x");
return acc (*this); }
int& get_x()
{ const static SG::Accessor<int> acc ("x");
return acc (*this); }

Definition at line 66 of file Control/AthContainers/AthContainers/Accessor.h.

Member Typedef Documentation

◆ const_container_pointer_type

Pointer into the container holding this item.

Definition at line 65 of file ConstAccessor.h.

◆ const_reference_type

Type referencing an item.

Definition at line 61 of file ConstAccessor.h.

◆ const_span

using SG::ConstAccessor< T, AuxAllocator_t< T > >::const_span = typename AuxDataTraits<T, AuxAllocator_t< T > >::const_span
inherited

A span over elements in the container.

Definition at line 69 of file ConstAccessor.h.

◆ container_pointer_type

template<class T , class ALLOC = AuxAllocator_t<T>>
using SG::Accessor< T, ALLOC >::container_pointer_type = typename AuxDataTraits<T, ALLOC>::container_pointer_type

Pointer into the container holding this item.

Definition at line 77 of file Control/AthContainers/AthContainers/Accessor.h.

◆ element_type

template<class T , class ALLOC = AuxAllocator_t<T>>
using SG::Accessor< T, ALLOC >::element_type = typename AuxDataTraits<T, ALLOC>::element_type

Type the user sees.

Definition at line 74 of file Control/AthContainers/AthContainers/Accessor.h.

◆ reference_type

template<class T , class ALLOC = AuxAllocator_t<T>>
using SG::Accessor< T, ALLOC >::reference_type = typename AuxDataTraits<T, ALLOC>::reference_type

Type referencing an item.

Definition at line 71 of file Control/AthContainers/AthContainers/Accessor.h.

◆ span

template<class T , class ALLOC = AuxAllocator_t<T>>
using SG::Accessor< T, ALLOC >::span = typename AuxDataTraits<T, ALLOC>::span

A span over elements in the container.

Definition at line 81 of file Control/AthContainers/AthContainers/Accessor.h.

Constructor & Destructor Documentation

◆ Accessor() [1/3]

template<class T , class ALLOC = AuxAllocator_t<T>>
SG::Accessor< T, ALLOC >::Accessor ( const std::string &  name)

Constructor.

Parameters
nameName of this aux variable.

The name -> auxid lookup is done here.

◆ Accessor() [2/3]

template<class T , class ALLOC = AuxAllocator_t<T>>
SG::Accessor< T, ALLOC >::Accessor ( const std::string &  name,
const std::string &  clsname 
)

Constructor.

Parameters
nameName of this aux variable.
clsnameThe name of its associated class. May be blank.

The name -> auxid lookup is done here.

◆ Accessor() [3/3]

template<class T , class ALLOC = AuxAllocator_t<T>>
SG::Accessor< T, ALLOC >::Accessor ( const SG::auxid_t  auxid)

Constructor taking an auxid directly.

Parameters
auxidID for this auxiliary variable.

Will throw SG::ExcAuxTypeMismatch if the types don't match.

Member Function Documentation

◆ auxid()

SG::auxid_t SG::ConstAccessor< T, AuxAllocator_t< T > >::auxid
inherited

Return the aux id for this variable.

◆ getDataArray() [1/2]

template<class T , class ALLOC = AuxAllocator_t<T>>
container_pointer_type SG::Accessor< T, ALLOC >::getDataArray ( AuxVectorData container) const

Get a pointer to the start of the auxiliary data array.

Parameters
containerThe container from which to fetch the variable.

◆ getDataArray() [2/2]

const_container_pointer_type SG::ConstAccessor< T, AuxAllocator_t< T > >::getDataArray ( const AuxVectorData container) const
inherited

Get a pointer to the start of the auxiliary data array.

Parameters
containerThe container from which to fetch the variable.

◆ getDataSpan() [1/2]

template<class T , class ALLOC = AuxAllocator_t<T>>
span SG::Accessor< T, ALLOC >::getDataSpan ( AuxVectorData container) const

Get a span over the auxilary data array.

Parameters
containerThe container from which to fetch the variable.

◆ getDataSpan() [2/2]

const_span SG::ConstAccessor< T, AuxAllocator_t< T > >::getDataSpan ( const AuxVectorData container) const
inherited

Get a span over the auxilary data array.

Parameters
containerThe container from which to fetch the variable.

◆ isAvailable() [1/2]

bool SG::ConstAccessor< T, AuxAllocator_t< T > >::isAvailable ( const AuxVectorData c) const
inherited

Test to see if this variable exists in the store.

Parameters
cThe container in which to test the variable.

◆ isAvailable() [2/2]

bool SG::ConstAccessor< T, AuxAllocator_t< T > >::isAvailable ( const ELT &  e) const
inherited

Test to see if this variable exists in the store.

Parameters
eAn element of the container in which to test the variable.

◆ isAvailableWritable() [1/2]

template<class T , class ALLOC = AuxAllocator_t<T>>
bool SG::Accessor< T, ALLOC >::isAvailableWritable ( AuxVectorData c) const

Test to see if this variable exists in the store and is writable.

Parameters
cThe container in which to test the variable.

◆ isAvailableWritable() [2/2]

template<class T , class ALLOC = AuxAllocator_t<T>>
template<class ELT >
bool SG::Accessor< T, ALLOC >::isAvailableWritable ( ELT &  e) const

Test to see if this variable exists in the store and is writable.

Parameters
eAn element of the container in which to test the variable.

◆ operator()() [1/4]

template<class T , class ALLOC = AuxAllocator_t<T>>
reference_type SG::Accessor< T, ALLOC >::operator() ( AuxVectorData container,
size_t  index 
) const

Fetch the variable for one element, as a non-const reference.

Parameters
containerThe container from which to fetch the variable.
indexThe index of the desired element.

This allows retrieving aux data by container / index. Looping over the index via this method will be faster then looping over the elements of the container.

◆ operator()() [2/4]

const_reference_type SG::ConstAccessor< T, AuxAllocator_t< T > >::operator() ( const AuxVectorData container,
size_t  index 
) const
inherited

Fetch the variable for one element, as a const reference.

Parameters
containerThe container from which to fetch the variable.
indexThe index of the desired element.

This allows retrieving aux data by container / index. Looping over the index via this method will be faster then looping over the elements of the container.

◆ operator()() [3/4]

const_reference_type SG::ConstAccessor< T, AuxAllocator_t< T > >::operator() ( const ELT &  e) const
inherited

Fetch the variable for one element, as a const reference.

Parameters
eThe element for which to fetch the variable.

◆ operator()() [4/4]

template<class T , class ALLOC = AuxAllocator_t<T>>
template<class ELT >
reference_type SG::Accessor< T, ALLOC >::operator() ( ELT &  e) const

Fetch the variable for one element, as a non-const reference.

Parameters
eThe element for which to fetch the variable.

◆ set()

template<class T , class ALLOC = AuxAllocator_t<T>>
template<class ELT >
void SG::Accessor< T, ALLOC >::set ( ELT &  e,
const element_type x 
) const

Set the variable for one element.

Parameters
eThe element for which to fetch the variable.
xThe variable value to set.

◆ withDefault() [1/2]

const_reference_type SG::ConstAccessor< T, AuxAllocator_t< T > >::withDefault ( const AuxVectorData container,
size_t  index,
const T &  deflt 
) const
inherited

Fetch the variable for one element, as a const reference.

Parameters
containerThe container from which to fetch the variable.
indexThe index of the desired element.
defltDefault value.

This allows retrieving aux data by container / index. Looping over the index via this method will be faster then looping over the elements of the container. If this variable is not available, then return deflt instead.

◆ withDefault() [2/2]

const_reference_type SG::ConstAccessor< T, AuxAllocator_t< T > >::withDefault ( const ELT &  e,
const T &  deflt 
) const
inherited

Fetch the variable for one element, as a const reference, with a default.

Parameters
eThe element for which to fetch the variable.
defltDefault value.

If this variable is not available, then return deflt instead.

Member Data Documentation

◆ m_auxid

SG::auxid_t SG::ConstAccessor< T, AuxAllocator_t< T > >::m_auxid
protectedinherited

The cached auxid.

Definition at line 214 of file ConstAccessor.h.


The documentation for this class was generated from the following file:
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
SG::Accessor< int >
SG::ConstAccessor< int >
x
#define x
AthenaPoolTestRead.acc
acc
Definition: AthenaPoolTestRead.py:16
python.PyAthena.v
v
Definition: PyAthena.py:154