8#ifndef COLUMNAR_CORE_LINK_COLUMN_H
9#define COLUMNAR_CORE_LINK_COLUMN_H
11#include <AthLinks/ElementLink.h>
25 template<ContainerIdConcept LT,
typename ELT>
34 template<ContainerIdConcept LT>
37 if constexpr (
requires { LT::containerClid(); })
38 return LT::containerClid();
45 template<ContainerIdConcept LT,ColumnarMode CM>
46 requires (CM::hasTypedLinks ==
true)
61 BaseAccessor::updateColumnInfo (info);
66 return BaseAccessor::makeViewer(dataArea);
73 template<RegularContainerIdConcept LT,
typename ELT,ColumnarMode CM>
74 requires (CM::hasTypedLinks ==
false && MemoryAccessor<OptObjectId<LT>,CM>::isDefined)
88 BaseAccessor::updateColumnInfo (info);
96 return BaseAccessor::makeViewer(dataArea);
102 template<ContainerIdConcept LT,
typename ELT>
117 auto *ptr = *link.cptr();
119 auto *ptr2 =
dynamic_cast<typename LT::xAODObjectIdType*
>(ptr);
120 if (!ptr2)
throw std::runtime_error (
"link not of expected type");
136 template<ContainerIdConcept LT>
149 info.soleLinkTargetName = LT::idName;
166 template<ContainerIdConcept LT,
typename ELT>
178 info.soleLinkTargetName = LT::idName;
uint32_t CLID
The Class ID type.
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
CLID clidForType()
the CLID of a container type, or 0 when it cannot be determined
CLID linkTargetClid()
the CLID of the xAOD container a link column targets, or 0 if the container id does not provide one
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