ACTS
Experiment-independent tracking
Loading...
Searching...
No Matches
Acts::MultiIndex< T, BitsPerLevel > Class Template Reference

A set of (hierarchical) indices bitpacked into a single value. More...

#include <Acts/Utilities/MultiIndex.hpp>

Inheritance diagram for Acts::MultiIndex< T, BitsPerLevel >:
[legend]

Public Types

using Value = T
 The type of their underlying storage value.

Public Member Functions

 MultiIndex ()=default
 Construct a default MultiIndex with undefined values for each level.
 MultiIndex (const MultiIndex &)=default
 Copy constructor.
 MultiIndex (MultiIndex &)=default
 Non-const copy constructor.
constexpr MultiIndex (Value encoded)
 Construct a MultiIndex from an already encoded value.
constexpr Value level (std::size_t lvl) const
 Get the value for the index level.
constexpr MultiIndex makeLastDescendant (std::size_t lvl) const
 Create index with every level below the selected level maximized.
constexpr MultiIndex makeNextSibling (std::size_t lvl) const
 Create index with the selected level increased and levels below zeroed.
constexpr std::size_t maxValue (std::size_t lvl) const
 Return the maximum allowed value for a specific index level.
MultiIndexoperator= (const MultiIndex &)=default
 Copy assignment operator.
MultiIndexoperator= (MultiIndex &&) noexcept=default
 Move assignment operator.
constexpr MultiIndexoperator= (Value encoded)
 Allow setting the MultiIndex from an already encoded value.
constexpr MultiIndexset (std::size_t lvl, Value val)
 Set the value of the index level.
constexpr Value value () const
 Get the encoded value of all index levels.

Static Public Member Functions

static constexpr std::size_t bits (std::size_t lvl)
 Get the number of bits for the associated level.
template<typename... Us>
static constexpr MultiIndex Encode (Us &&... us)
 Construct a MultiIndex from values for multiple level.
static constexpr MultiIndex Zeros ()
 Construct a MultiIndex with all levels set to zero.

Static Public Attributes

static constexpr std::size_t kNumLevels = sizeof...(BitsPerLevel)
 Number of levels in the multi-index hierarchy.

Detailed Description

template<typename T, std::size_t... BitsPerLevel>
class Acts::MultiIndex< T, BitsPerLevel >

A set of (hierarchical) indices bitpacked into a single value.

The underlying value is split into blocks of bits with variable size. Each block is a level within the index hierarchy and can be set and retrieved separately. The encoded MultiIndex can be ordered and compared for equality. The ordering follows the hierarchy, i.e. indices are first ordered by the highest level, then within the highest level by the second level and so on.

Member Typedef Documentation

◆ Value

template<typename T, std::size_t... BitsPerLevel>
using Acts::MultiIndex< T, BitsPerLevel >::Value = T

The type of their underlying storage value.

Constructor & Destructor Documentation

◆ MultiIndex() [1/4]

template<typename T, std::size_t... BitsPerLevel>
Acts::MultiIndex< T, BitsPerLevel >::MultiIndex ( Value encoded)
explicitconstexpr

Construct a MultiIndex from an already encoded value.

Parameters
encodedPre-encoded multi-index value

◆ MultiIndex() [2/4]

template<typename T, std::size_t... BitsPerLevel>
Acts::MultiIndex< T, BitsPerLevel >::MultiIndex ( )
default

Construct a default MultiIndex with undefined values for each level.

◆ MultiIndex() [3/4]

template<typename T, std::size_t... BitsPerLevel>
Acts::MultiIndex< T, BitsPerLevel >::MultiIndex ( const MultiIndex< T, BitsPerLevel > & )
default

Copy constructor.

◆ MultiIndex() [4/4]

template<typename T, std::size_t... BitsPerLevel>
Acts::MultiIndex< T, BitsPerLevel >::MultiIndex ( MultiIndex< T, BitsPerLevel > & )
default

Non-const copy constructor.

Member Function Documentation

◆ bits()

template<typename T, std::size_t... BitsPerLevel>
constexpr std::size_t Acts::MultiIndex< T, BitsPerLevel >::bits ( std::size_t lvl)
staticconstexpr

Get the number of bits for the associated level.

Parameters
lvlLevel index to query
Returns
Number of bits allocated for the specified level

◆ Encode()

template<typename T, std::size_t... BitsPerLevel>
template<typename... Us>
constexpr MultiIndex Acts::MultiIndex< T, BitsPerLevel >::Encode ( Us &&... us)
staticconstexpr

Construct a MultiIndex from values for multiple level.

This functionality must be implemented as a static, named constructor to avoid confusion with other constructors. If it would be implemented as a regular constructor, constructing a MultiIndex from a single encoded value and encoding only the first level would have the same signature and could not be distinguished.

Parameters
usValues for each index level to encode
Returns
MultiIndex encoded with the provided level values

◆ level()

template<typename T, std::size_t... BitsPerLevel>
Value Acts::MultiIndex< T, BitsPerLevel >::level ( std::size_t lvl) const
constexpr

Get the value for the index level.

Parameters
lvlLevel index to retrieve
Returns
Value stored at the specified level

◆ makeLastDescendant()

template<typename T, std::size_t... BitsPerLevel>
MultiIndex Acts::MultiIndex< T, BitsPerLevel >::makeLastDescendant ( std::size_t lvl) const
constexpr

Create index with every level below the selected level maximized.

Parameters
lvlLevel below which all levels are maximized
Returns
New MultiIndex representing the last descendant

◆ makeNextSibling()

template<typename T, std::size_t... BitsPerLevel>
MultiIndex Acts::MultiIndex< T, BitsPerLevel >::makeNextSibling ( std::size_t lvl) const
constexpr

Create index with the selected level increased and levels below zeroed.

Parameters
lvlLevel to increment for creating the sibling
Returns
New MultiIndex with the next sibling at the specified level

◆ maxValue()

template<typename T, std::size_t... BitsPerLevel>
std::size_t Acts::MultiIndex< T, BitsPerLevel >::maxValue ( std::size_t lvl) const
constexpr

Return the maximum allowed value for a specific index level.

Parameters
lvlLevel index to query maximum value for
Returns
Maximum value that can be stored at the specified level

◆ operator=() [1/3]

template<typename T, std::size_t... BitsPerLevel>
MultiIndex & Acts::MultiIndex< T, BitsPerLevel >::operator= ( const MultiIndex< T, BitsPerLevel > & )
default

Copy assignment operator.

Returns
Reference to this MultiIndex

◆ operator=() [2/3]

template<typename T, std::size_t... BitsPerLevel>
MultiIndex & Acts::MultiIndex< T, BitsPerLevel >::operator= ( MultiIndex< T, BitsPerLevel > && )
defaultnoexcept

Move assignment operator.

Returns
Reference to this MultiIndex

◆ operator=() [3/3]

template<typename T, std::size_t... BitsPerLevel>
MultiIndex & Acts::MultiIndex< T, BitsPerLevel >::operator= ( Value encoded)
constexpr

Allow setting the MultiIndex from an already encoded value.

Parameters
encodedPre-encoded multi-index value to assign
Returns
Reference to this MultiIndex for chaining

◆ set()

template<typename T, std::size_t... BitsPerLevel>
MultiIndex & Acts::MultiIndex< T, BitsPerLevel >::set ( std::size_t lvl,
Value val )
constexpr

Set the value of the index level.

Parameters
lvlLevel index to set
valValue to set for the specified level
Returns
Reference to this MultiIndex for chaining

◆ value()

template<typename T, std::size_t... BitsPerLevel>
Value Acts::MultiIndex< T, BitsPerLevel >::value ( ) const
constexpr

Get the encoded value of all index levels.

Returns
The complete encoded multi-index value

◆ Zeros()

template<typename T, std::size_t... BitsPerLevel>
constexpr MultiIndex Acts::MultiIndex< T, BitsPerLevel >::Zeros ( )
staticconstexpr

Construct a MultiIndex with all levels set to zero.

Returns
MultiIndex with all levels initialized to zero

Member Data Documentation

◆ kNumLevels

template<typename T, std::size_t... BitsPerLevel>
std::size_t Acts::MultiIndex< T, BitsPerLevel >::kNumLevels = sizeof...(BitsPerLevel)
staticconstexpr

Number of levels in the multi-index hierarchy.