 |
ATLAS Offline Software
|
Go to the documentation of this file.
8 #ifndef COLUMNAR_VARIANT_VARIANT_ACCESSOR_H
9 #define COLUMNAR_VARIANT_VARIANT_ACCESSOR_H
13 #include <boost/mp11/tuple.hpp>
30 static_assert (!std::is_const_v<CT>,
"CT must not be const");
35 using AccessorTuple = std::tuple<AccessorTemplate<CIList,CT,CAM,CM>...>;
41 boost::mp11::tuple_for_each (m_accessors, [&columnarTool,&
name,&
info] (
auto&
accessor)
49 m_accessors = std::move (that.m_accessors);
55 m_accessors = std::move (that.m_accessors);
64 boost::mp11::tuple_for_each (m_accessors, [&columnarTool,&
name,&
info] (
auto&
accessor)
72 return internalGet<0> (
id);
77 return internalIsAvailable<0> (
id);
86 template<
unsigned Index>
90 if constexpr (
Index + 1 < CI::numVariants)
91 internalInit<Index + 1>(columnarTool,
name,
info);
94 template<
unsigned Index>
97 if (
id.getVariantIndex() ==
Index)
99 using CI2 = std::tuple_element_t<
Index,std::tuple<CIList...>>;
101 return std::get<Index>(m_accessors)(objId);
102 }
else if constexpr (
Index+1 < CI::numVariants)
103 return internalGet<Index + 1>(
id);
106 std::cerr <<
"Invalid variant index: " <<
id.getVariantIndex() << std::endl;
111 template<
unsigned Index>
114 if (
id.getVariantIndex() ==
Index)
116 using CI2 = std::tuple_element_t<
Index,std::tuple<CIList...>>;
118 return std::get<Index>(m_accessors).isAvailable(objId);
119 }
else if constexpr (
Index+1 < CI::numVariants)
120 return internalIsAvailable<Index + 1>(
id);
123 std::cerr <<
"Invalid variant index: " <<
id.getVariantIndex() << std::endl;
AccessorTuple m_accessors
AccessorTemplate & operator=(AccessorTemplate &&that)
bool const RAWDATA *ch2 const
void reset(ColumnarTool< CM > &columnarTool, const std::string &name, ColumnInfo &&info={})
a struct that contains meta-information about each column that's needed to interface the column with ...
IndexedConstituentUserInfo::Index Index
void internalInit(ColumnarTool< CM > &columnarTool, const std::string &name, const ColumnInfo &info)
AccessorTemplate(AccessorTemplate &&that)
ColumnAccessMode
an enum for the different access modes for a column
std::tuple< AccessorTemplate< CIList, CT, CAM, CM >... > AccessorTuple
a class representing a single object (electron, muons, etc.)
const AccessorWrapper< T > * accessor(xAOD::JetAttribute::AttributeID id)
Returns an attribute accessor corresponding to an AttributeID.
AccessorTemplate() noexcept=default
concept ContainerIdConcept
concept for a container id
typename ColumnAccessModeTraits< CAM >::template ColumnType< typename ColumnTypeTraits< CT, ColumnarModeArray >::ColumnType > ColumnType
bool internalIsAvailable(const ObjectId< CI, CM > &id) const noexcept
the raw column accessor template class
void resetAccessor(AccessorTemplate< CI, CT, CAM, CM > &accessor, ColumnarTool< CM > &columnBase, const std::string &name, ColumnInfo &&info={})
reset a column accessor to point to a new column
AccessorTemplate(const AccessorTemplate &)=delete
bool isAvailable(ObjectId< CI, CM > id) const noexcept