Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
OptObjectId.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 
8 #ifndef COLUMNAR_CORE_OPT_OBJECT_ID_H
9 #define COLUMNAR_CORE_OPT_OBJECT_ID_H
10 
12 #include <ColumnarCore/ObjectId.h>
13 
14 namespace columnar
15 {
24  template<ContainerId CI, typename CM = ColumnarModeDefault> class OptObjectId;
25 
26 
27 
28 
29 
30  template<ContainerId CI> class OptObjectId<CI,ColumnarModeXAOD> final
31  {
34  public:
35 
36  static_assert (ContainerIdTraits<CI>::isDefined, "ContainerId not defined, include the appropriate header");
37 
39 
40  OptObjectId () noexcept = default;
41 
42  OptObjectId (std::nullopt_t) noexcept {}
43 
45  : m_object (&val_object.getXAODObject())
46  {}
47 
48  OptObjectId (xAODObject *val_object) noexcept
49  : m_object (val_object)
50  {}
51 
52  OptObjectId (const OptObjectId<CI,ColumnarModeXAOD>& that) noexcept = default;
53 
54  OptObjectId& operator = (const OptObjectId<CI,ColumnarModeXAOD>& that) noexcept = default;
55 
56  explicit operator bool () const noexcept {
57  return m_object != nullptr;}
58 
59  [[nodiscard]] bool has_value () const noexcept {
60  return m_object != nullptr;}
61 
62  [[nodiscard]] ObjectId<CI,ColumnarModeXAOD> value () const {
63  if (m_object == nullptr)
64  throw std::bad_optional_access();
65  return ObjectId<CI,ColumnarModeXAOD> (*m_object);}
66 
67  [[nodiscard]] xAODObject *getXAODObject () const noexcept {
68  return m_object;}
69 
70  [[nodiscard]] bool operator == (const OptObjectId<CI,ColumnarModeXAOD>& that) const noexcept {
71  return m_object == that.m_object;}
72 
73 
74 
77  private:
78 
79  xAODObject *m_object = nullptr;
80  };
81 
82  template<ContainerId CI>
84  {
85  return lhs.getXAODObject() == rhs.getXAODObject();
86  }
87 
88  template<ContainerId CI>
90  {
91  return lhs.getXAODObject() != rhs.getXAODObject();
92  }
93 
94 
95 
96 
97  template<ContainerId CI> class OptObjectId<CI,ColumnarModeArray> final
98  {
101  public:
102 
103  static_assert (ContainerIdTraits<CI>::isDefined, "ContainerId not defined, include the appropriate header");
104 
106 
107  OptObjectId () noexcept = default;
108 
109  OptObjectId (std::nullopt_t) noexcept {}
110 
112  : m_data (val_object.getData()), m_index (val_object.getIndex())
113  {}
114 
115  OptObjectId (xAODObject * /*val_object*/)
116  {
117  throw std::logic_error ("can't call xAOD function in columnar mode");
118  }
119 
120  OptObjectId (const OptObjectId<CI,ColumnarModeArray>& that) noexcept = default;
121 
123 
124  [[nodiscard]] xAODObject *getXAODObject () const {
125  throw std::logic_error ("can't call xAOD function in columnar mode");}
126 
127  explicit operator bool () const noexcept {
128  return m_index != invalidObjectIndex;}
129 
130  [[nodiscard]] bool has_value () const noexcept {
131  return m_index != invalidObjectIndex;}
132 
133  [[nodiscard]] ObjectId<CI,ColumnarModeArray> value () const {
134  if (m_index == invalidObjectIndex)
135  throw std::bad_optional_access();
136  return ObjectId<CI,ColumnarModeArray> (m_data, m_index);}
137 
138  [[nodiscard]] bool operator == (const OptObjectId<CI,ColumnarModeArray>& that) const noexcept {
139  return m_index == that.m_index;}
140 
141 
142 
145  public:
146 
147  explicit OptObjectId (void **val_data, int val_index) noexcept
148  : m_data (val_data), m_index (val_index)
149  {}
150 
151  explicit OptObjectId (void **val_data, unsigned val_index) noexcept
152  : m_data (val_data), m_index (val_index)
153  {}
154 
155  explicit OptObjectId (void **val_data, std::size_t val_index) noexcept
156  : m_data (val_data), m_index (val_index)
157  {}
158 
159  [[nodiscard]] std::size_t getIndex () const noexcept {
160  return m_index;}
161 
162  [[nodiscard]] void **getData () const noexcept {
163  return m_data;}
164 
165 
166 
169  private:
170 
171  void **m_data = nullptr;
172  std::size_t m_index = invalidObjectIndex;
173  };
174 
175  template<ContainerId CI>
177  {
178  return lhs.getIndex() == rhs.getIndex();
179  }
180 
181  template<ContainerId CI>
183  {
184  return lhs.getIndex() != rhs.getIndex();
185  }
186 
187 
188 
189 
211 }
212 
213 #endif
columnar::ContainerIdTraits
Definition: ContainerId.h:97
columnar::OptObjectId< CI, ColumnarModeXAOD >::value
ObjectId< CI, ColumnarModeXAOD > value() const
Definition: OptObjectId.h:62
columnar::OptObjectId< CI, ColumnarModeArray >
Definition: OptObjectId.h:98
columnar::OptObjectId< CI, ColumnarModeArray >::OptObjectId
OptObjectId(xAODObject *)
Definition: OptObjectId.h:115
columnar::OptObjectId< CI, ColumnarModeArray >::getXAODObject
xAODObject * getXAODObject() const
Definition: OptObjectId.h:124
columnar::operator=
AccessorTemplate & operator=(AccessorTemplate &&that)
Definition: VectorColumn.h:88
m_data
std::vector< T > m_data
Definition: TrackTruthMatchingBaseAlg.cxx:660
columnar::OptObjectId< CI, ColumnarModeArray >::getData
void ** getData() const noexcept
Definition: OptObjectId.h:162
columnar::OptObjectId< CI, ColumnarModeArray >::xAODObject
typename ContainerIdTraits< CI >::xAODObjectIdType xAODObject
Definition: OptObjectId.h:105
columnar::OptObjectId
a class representing a single optional object (electron, muons, etc.)
Definition: OptObjectId.h:24
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:560
CI
std::map< std::string, HypoJetVector >::const_iterator CI
Definition: xAODJetCollector.h:18
columnar::OptObjectId< CI, ColumnarModeArray >::OptObjectId
OptObjectId(const OptObjectId< CI, ColumnarModeArray > &that) noexcept=default
columnar::operator==
bool operator==(const ObjectId< CI, ColumnarModeXAOD > &lhs, const ObjectId< CI, ColumnarModeXAOD > &rhs)
Definition: ObjectId.h:65
columnar::OptObjectId< CI, ColumnarModeXAOD >::OptObjectId
OptObjectId(ObjectId< CI, ColumnarModeXAOD > val_object) noexcept
Definition: OptObjectId.h:44
columnar::operator!=
bool operator!=(const ObjectId< CI, ColumnarModeXAOD > &lhs, const ObjectId< CI, ColumnarModeXAOD > &rhs)
Definition: ObjectId.h:71
IColumnarTool.h
columnar::OptObjectId< CI, ColumnarModeArray >::OptObjectId
OptObjectId(void **val_data, std::size_t val_index) noexcept
Definition: OptObjectId.h:155
columnar::OptObjectId< CI, ColumnarModeXAOD >::xAODObject
typename ContainerIdTraits< CI >::xAODObjectIdType xAODObject
Definition: OptObjectId.h:38
columnar::OptObjectId< CI, ColumnarModeXAOD >::getXAODObject
xAODObject * getXAODObject() const noexcept
Definition: OptObjectId.h:67
columnar::ObjectId
a class representing a single object (electron, muons, etc.)
Definition: ObjectId.h:18
columnar::final
CM final
Definition: ColumnAccessor.h:106
columnar::invalidObjectIndex
constexpr ColumnarOffsetType invalidObjectIndex
the value for an invalid element index
Definition: IColumnarTool.h:25
ObjectId.h
columnar::OptObjectId< CI, ColumnarModeXAOD >::has_value
bool has_value() const noexcept
Definition: OptObjectId.h:59
columnar::OptObjectId< CI, ColumnarModeArray >::value
ObjectId< CI, ColumnarModeArray > value() const
Definition: OptObjectId.h:133
columnar::ColumnarModeArray
Definition: ColumnarDef.h:30
columnar::OptObjectId< CI, ColumnarModeArray >::OptObjectId
OptObjectId(void **val_data, int val_index) noexcept
Definition: OptObjectId.h:147
columnar::OptObjectId< CI, ColumnarModeXAOD >::OptObjectId
OptObjectId() noexcept=default
python.CaloAddPedShiftConfig.default
default
Definition: CaloAddPedShiftConfig.py:43
columnar::OptObjectId< CI, ColumnarModeArray >::OptObjectId
OptObjectId(ObjectId< CI, ColumnarModeArray > val_object) noexcept
Definition: OptObjectId.h:111
columnar
Definition: ClusterDef.h:16
columnar::OptObjectId< CI, ColumnarModeXAOD >
Definition: OptObjectId.h:31
columnar::OptObjectId< CI, ColumnarModeArray >::has_value
bool has_value() const noexcept
Definition: OptObjectId.h:130
columnar::OptObjectId< CI, ColumnarModeArray >::OptObjectId
OptObjectId(void **val_data, unsigned val_index) noexcept
Definition: OptObjectId.h:151
columnar::ColumnarModeXAOD
Definition: ColumnarDef.h:15
columnar::OptObjectId< CI, ColumnarModeXAOD >::OptObjectId
OptObjectId(const OptObjectId< CI, ColumnarModeXAOD > &that) noexcept=default
columnar::OptObjectId< CI, ColumnarModeArray >::getIndex
std::size_t getIndex() const noexcept
Definition: OptObjectId.h:159
xAOD::bool
setBGCode setTAP setLVL2ErrorBits bool
Definition: TrigDecision_v1.cxx:60
columnar::OptObjectId< CI, ColumnarModeArray >::OptObjectId
OptObjectId() noexcept=default
columnar::OptObjectId< CI, ColumnarModeXAOD >::OptObjectId
OptObjectId(xAODObject *val_object) noexcept
Definition: OptObjectId.h:48