8#ifndef COLUMNAR_VARIANT_VARIANT_OBJECT_ID_H
9#define COLUMNAR_VARIANT_VARIANT_OBJECT_ID_H
33 template<ContainerIdConcept CI2>
34 requires (CI::template isValidContainer<CI2>())
56 template<ContainerIdConcept CI2>
57 requires (CI::template isValidContainer<CI2>())
63 template<
typename Acc,
typename...
Args>
65 [[nodiscard]]
decltype(
auto)
operator() (Acc& acc,
Args&&... args)
const {
66 return acc (*
this, std::forward<Args> (args)...);}
89 return str << &obj.getXAODObjectNoexcept() <<
"/" << obj.getXAODObjectNoexcept().index();
92 template<ContainerIdConcept... CIList>
95 return &lhs.getXAODObjectNoexcept() == &rhs.getXAODObjectNoexcept();
98 template<ContainerIdConcept... CIList>
101 return &lhs.getXAODObjectNoexcept() != &rhs.getXAODObjectNoexcept();
107 template<ContainerIdConcept... CIList, ColumnarArrayMode CM>
123 throw std::logic_error (
"can't call xAOD function in columnar mode");
128 template<ContainerIdConcept CI2>
129 requires (CI2::regularObjectId && CI::template isValidContainer<CI2>())
140 throw std::logic_error (
"can't call xAOD function in columnar mode");}
142 template<ContainerIdConcept CI2>
143 requires (CI::template isValidContainer<CI2>())
152 template<
typename Acc,
typename...
Args>
154 [[nodiscard]]
decltype(
auto)
operator() (Acc& acc,
Args&&... args)
const {
155 return acc (*
this, std::forward<Args> (args)...);}
163 explicit ObjectId (
void **val_data, std::size_t val_variantIndex, std::size_t val_objectIndex) noexcept
191 return str << CI::idNameArray.at(obj.getVariantIndex()) <<
"/" << obj.getObjectIndex();
194 template<ContainerIdConcept... CIList, ColumnarArrayMode CM>
197 return lhs.getVariantIndex() == rhs.getVariantIndex() && lhs.getObjectIndex() == rhs.getObjectIndex();
200 template<ContainerIdConcept... CIList, ColumnarArrayMode CM>
203 return lhs.getVariantIndex() != rhs.getVariantIndex() || lhs.getObjectIndex() != rhs.getObjectIndex();
#define ATLAS_THREAD_SAFE
std::size_t m_variantIndex
VariantContainerId< CIList... > CI
typename CI::xAODObjectIdType xAODObject
std::size_t getObjectIndex() const noexcept
ObjectId(const ObjectId< VariantContainerId< CIList... >, CM > &that) noexcept=default
void ** getData() const noexcept
ObjectId(void **val_data, std::size_t val_variantIndex, std::size_t val_objectIndex) noexcept
OptObjectId< CI2, CM > tryGetVariant() const
std::size_t getVariantIndex() const noexcept
xAODObject & getXAODObject() const
std::size_t m_objectIndex
typename CI::xAODObjectIdType xAODObject
xAODObject & getXAODObject() const noexcept
OptObjectId< CI2, CM > tryGetVariant() const
VariantContainerId< CIList... > CI
xAODObject & getXAODObjectNoexcept() const noexcept
ObjectId(xAODObject &val_object) noexcept
ObjectId(const ObjectId< VariantContainerId< CIList... >, ColumnarModeXAOD > &that) noexcept=default
ObjectId< typename CI::baseId, CM > getBaseObject() const
a class representing a single object (electron, muons, etc.)
a class representing a single optional object (electron, muons, etc.)
concept for a container id
bool operator==(const ObjectId< CI, ColumnarModeXAOD > &lhs, const ObjectId< CI, ColumnarModeXAOD > &rhs)
bool operator!=(const ObjectId< CI, ColumnarModeXAOD > &lhs, const ObjectId< CI, ColumnarModeXAOD > &rhs)
std::ostream & operator<<(std::ostream &str, const ObjectId< CI, ColumnarModeXAOD > &obj)
typename CIBase::xAODObjectIdType xAODObjectIdType
std::map< std::string, HypoJetVector >::const_iterator CI