8#ifndef COLUMNAR_CORE_LINK_COLUMN_H
9#define COLUMNAR_CORE_LINK_COLUMN_H
11#include <AthLinks/ElementLink.h>
24 template<ContainerIdConcept LT,
typename ELT>
33 template<ContainerIdConcept LT,ColumnarMode CM>
34 requires (CM::hasTypedLinks ==
true)
49 BaseAccessor::updateColumnInfo (info);
54 return BaseAccessor::makeViewer(dataArea);
61 template<RegularContainerIdConcept LT,
typename ELT,ColumnarMode CM>
62 requires (CM::hasTypedLinks ==
false && MemoryAccessor<OptObjectId<LT>,CM>::isDefined)
76 BaseAccessor::updateColumnInfo (info);
81 return BaseAccessor::makeViewer(dataArea);
87 template<ContainerIdConcept LT,
typename ELT>
102 auto *ptr = *link.cptr();
104 auto *ptr2 =
dynamic_cast<typename LT::xAODObjectIdType*
>(ptr);
105 if (!ptr2)
throw std::runtime_error (
"link not of expected type");
121 template<ContainerIdConcept LT>
134 info.linkTargetNames = {std::string{LT::idName}};
150 template<ContainerIdConcept LT,
typename ELT>
162 info.linkTargetNames = {std::string{LT::idName}};
ElementLink implementation for ROOT usage.
a class representing a single optional object (electron, muons, etc.)
static constexpr bool isDefined
static void updateColumnInfo(ColumnInfo &info)
static auto makeViewer(void **dataArea)
typename BaseAccessor::MemoryType MemoryType
static constexpr bool hasSetter
MemoryAccessor< OptObjectId< LT >, CM > BaseAccessor
static constexpr bool viewIsReference
static void updateColumnInfo(ColumnInfo &info)
static constexpr bool isDefined
static auto makeViewer(void **dataArea)
static constexpr bool hasSetter
static constexpr bool viewIsReference
ElementLink< ELT > MemoryType
ElementLink< ELT > MemoryType
static constexpr bool hasSetter
static auto makeViewer(void **)
static constexpr bool viewIsReference
static constexpr bool isDefined
typename BaseAccessor::MemoryType MemoryType
static constexpr bool viewIsReference
static void updateColumnInfo(ColumnInfo &info)
static constexpr bool isDefined
static auto makeViewer(void **dataArea)
MemoryAccessor< LinkCastColumn< LT, typename LT::xAODElementLinkType >, CM > BaseAccessor
static constexpr bool hasSetter
static auto makeViewer(void **dataArea)
static constexpr bool hasSetter
static constexpr bool viewIsReference
typename CM::LinkIndexType MemoryType
static constexpr bool isDefined
static void updateColumnInfo(ColumnInfo &info)
a help implementation of AccessorTemplate that handles type conversions
static constexpr bool isDefined
constexpr ColumnarOffsetType invalidObjectIndex
the value for an invalid element index
a struct that contains meta-information about each column that's needed to interface the column with ...
std::size_t LinkIndexType
the type used for columns that represent element links
a special column type that behaves like an OptObjectId, but applies an internal cast in xAOD mode