![]() |
ATLAS Offline Software
|
#include <ColumnarDef.h>
Public Types | |
| using | LinkIndexType = std::size_t |
| the type used for columns that represent element links More... | |
| using | LinkKeyType = std::uint8_t |
| the type used for the key column More... | |
Static Public Member Functions | |
| static LinkKeyType | getLinkKey (LinkIndexType link) |
| get the key value from a link value More... | |
| static LinkIndexType | getLinkIndex (LinkIndexType link) |
| get the index value from a link value More... | |
| static LinkIndexType | mergeLinkKeyIndex (LinkIndexType key, LinkIndexType index) |
| merge a key and index value into a link value More... | |
Static Public Attributes | |
| static constexpr bool | isXAOD = false |
| Whether this is the xAOD mode. More... | |
| static constexpr bool | inPlaceReplace = false |
| Whether for this columnar mode decorators that replace the original column will also refer to the input column. More... | |
| static constexpr LinkIndexType | invalidLinkValue = static_cast<LinkIndexType>(-1) |
| the value used for an invalid link (a.k.a. empty/null link) More... | |
| static constexpr unsigned | linkKeyBits = 8 |
| the number of bits used for the key inside the link More... | |
| static constexpr unsigned | linkIndexBits = 8 * sizeof(LinkIndexType) - linkKeyBits |
| various helper definitions More... | |
| static constexpr LinkIndexType | linkIndexMask = (static_cast<LinkIndexType>(1) << linkIndexBits) - 1 |
Definition at line 32 of file ColumnarDef.h.
| using columnar::ColumnarModeArray::LinkIndexType = std::size_t |
the type used for columns that represent element links
In general links are just represented by an integer index into the target container. However, for variant links (i.e. links pointing into one of multiple containers) we need to be able to identify the target container. This happens by using the top couple of bits of the index to identify the target container.
For variant links there is also an additional column that contains the keys for the target containers for each link, in the order the tool defined. If there are multiple accessors for the same variant link column, they will share the same key column and as such need to define the variant in the same way.
There are a couple of configurable aspects to this, like the exact types involved, as well as the number of bits used for the key, all of which can be configured through the columnar mode. Beyond that there are also a couple of helper functions and convenience definitions to avoid bit packing/unpacking code being repeated in multiple places.
Definition at line 68 of file ColumnarDef.h.
| using columnar::ColumnarModeArray::LinkKeyType = std::uint8_t |
the type used for the key column
Definition at line 77 of file ColumnarDef.h.
|
inlinestatic |
get the index value from a link value
Definition at line 91 of file ColumnarDef.h.
|
inlinestatic |
get the key value from a link value
Definition at line 86 of file ColumnarDef.h.
|
inlinestatic |
|
staticconstexpr |
Whether for this columnar mode decorators that replace the original column will also refer to the input column.
This is very obscure, but can be queried if it avoids copying over the input column in the tool first.
Definition at line 42 of file ColumnarDef.h.
|
staticconstexpr |
the value used for an invalid link (a.k.a. empty/null link)
Definition at line 71 of file ColumnarDef.h.
|
staticconstexpr |
Whether this is the xAOD mode.
Definition at line 35 of file ColumnarDef.h.
|
staticconstexpr |
various helper definitions
Definition at line 82 of file ColumnarDef.h.
|
staticconstexpr |
Definition at line 83 of file ColumnarDef.h.
|
staticconstexpr |
the number of bits used for the key inside the link
Definition at line 74 of file ColumnarDef.h.
1.8.18