![]() |
ATLAS Offline Software
|
#include <ColumnarDef.h>
Public Types | |
| using | LinkIndexType = std::size_t |
| the type used for columns that represent element links | |
| using | LinkKeyType = std::uint8_t |
| the type used for the key column | |
Static Public Member Functions | |
| static LinkKeyType | getLinkKey (LinkIndexType link) |
| get the key value from a link value | |
| static LinkIndexType | getLinkIndex (LinkIndexType link) |
| get the index value from a link value | |
| static LinkIndexType | mergeLinkKeyIndex (LinkIndexType key, LinkIndexType index) |
| merge a key and index value into a link value | |
Static Public Attributes | |
| static constexpr bool | isColumnarMode = true |
| Whather this is a columnar mode. | |
| static constexpr bool | isXAOD = false |
| Whether this is the xAOD mode. | |
| static constexpr bool | isArrayMode = true |
| Whether this is an array mode. | |
| static constexpr bool | hasTypedLinks = false |
| Whether links have an intrinsic type. | |
| static constexpr bool | useNestedVectors = false |
| Whether we use nested vectors for std::vector<...> columns. | |
| static constexpr bool | inPlaceReplace = false |
| Whether for this columnar mode decorators that replace the original column will also refer to the input column. | |
| static constexpr LinkIndexType | invalidLinkValue = static_cast<LinkIndexType>(-1) |
| the value used for an invalid link (a.k.a. empty/null link) | |
| static constexpr unsigned | linkKeyBits = 8 |
| the number of bits used for the key inside the link | |
| static constexpr unsigned | linkIndexBits = 8 * sizeof(LinkIndexType) - linkKeyBits |
| various helper definitions | |
| static constexpr LinkIndexType | linkIndexMask = (static_cast<LinkIndexType>(1) << linkIndexBits) - 1 |
Definition at line 45 of file ColumnarCore/ColumnarCore/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 93 of file ColumnarCore/ColumnarCore/ColumnarDef.h.
| using columnar::ColumnarModeArray::LinkKeyType = std::uint8_t |
the type used for the key column
Definition at line 102 of file ColumnarCore/ColumnarCore/ColumnarDef.h.
|
inlinestatic |
get the index value from a link value
Definition at line 116 of file ColumnarCore/ColumnarCore/ColumnarDef.h.
|
inlinestatic |
get the key value from a link value
Definition at line 111 of file ColumnarCore/ColumnarCore/ColumnarDef.h.
|
inlinestatic |
merge a key and index value into a link value
Definition at line 121 of file ColumnarCore/ColumnarCore/ColumnarDef.h.
|
staticconstexpr |
Whether links have an intrinsic type.
Definition at line 57 of file ColumnarCore/ColumnarCore/ColumnarDef.h.
|
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 67 of file ColumnarCore/ColumnarCore/ColumnarDef.h.
|
staticconstexpr |
the value used for an invalid link (a.k.a. empty/null link)
Definition at line 96 of file ColumnarCore/ColumnarCore/ColumnarDef.h.
|
staticconstexpr |
Whether this is an array mode.
Definition at line 54 of file ColumnarCore/ColumnarCore/ColumnarDef.h.
|
staticconstexpr |
Whather this is a columnar mode.
Definition at line 48 of file ColumnarCore/ColumnarCore/ColumnarDef.h.
|
staticconstexpr |
Whether this is the xAOD mode.
Definition at line 51 of file ColumnarCore/ColumnarCore/ColumnarDef.h.
|
staticconstexpr |
various helper definitions
Definition at line 107 of file ColumnarCore/ColumnarCore/ColumnarDef.h.
|
staticconstexpr |
Definition at line 108 of file ColumnarCore/ColumnarCore/ColumnarDef.h.
|
staticconstexpr |
the number of bits used for the key inside the link
Definition at line 99 of file ColumnarCore/ColumnarCore/ColumnarDef.h.
|
staticconstexpr |
Whether we use nested vectors for std::vector<...> columns.
Definition at line 60 of file ColumnarCore/ColumnarCore/ColumnarDef.h.