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 
68  if (m_object == nullptr)
69  throw std::bad_optional_access();
70  return ObjectId<CI,ColumnarModeXAOD> (*m_object);}
71 
72  [[nodiscard]] xAODObject *getXAODObject () const noexcept {
73  return m_object;}
74 
75  [[nodiscard]] bool operator == (const OptObjectId<CI,ColumnarModeXAOD>& that) const noexcept {
76  return m_object == that.m_object;}
77 
78 
79 
82  private:
83 
84  xAODObject *m_object = nullptr;
85  };
86 
87  template<ContainerId CI>
89  {
90  return lhs.getXAODObject() == rhs.getXAODObject();
91  }
92 
93  template<ContainerId CI>
95  {
96  return lhs.getXAODObject() != rhs.getXAODObject();
97  }
98 
99 
100 
101 
102  template<ContainerId CI> class OptObjectId<CI,ColumnarModeArray> final
103  {
106  public:
107 
108  static_assert (ContainerIdTraits<CI>::isDefined, "ContainerId not defined, include the appropriate header");
109 
111 
112  OptObjectId () noexcept = default;
113 
114  OptObjectId (std::nullopt_t) noexcept {}
115 
117  : m_data (val_object.getData()), m_index (val_object.getIndex())
118  {}
119 
120  OptObjectId (xAODObject * /*val_object*/)
121  {
122  throw std::logic_error ("can't call xAOD function in columnar mode");
123  }
124 
125  OptObjectId (const OptObjectId<CI,ColumnarModeArray>& that) noexcept = default;
126 
128 
129  [[nodiscard]] xAODObject *getXAODObject () const {
130  throw std::logic_error ("can't call xAOD function in columnar mode");}
131 
132  explicit operator bool () const noexcept {
133  return m_index != invalidObjectIndex;}
134 
135  [[nodiscard]] bool has_value () const noexcept {
136  return m_index != invalidObjectIndex;}
137 
138  [[nodiscard]] ObjectId<CI,ColumnarModeArray> value () const {
139  if (m_index == invalidObjectIndex)
140  throw std::bad_optional_access();
141  return ObjectId<CI,ColumnarModeArray> (m_data, m_index);}
142 
144  if (m_index == invalidObjectIndex)
145  throw std::bad_optional_access();
146  return ObjectId<CI,ColumnarModeArray> (m_data, m_index);}
147 
148  [[nodiscard]] bool operator == (const OptObjectId<CI,ColumnarModeArray>& that) const noexcept {
149  return m_index == that.m_index;}
150 
151 
152 
155  public:
156 
157  explicit OptObjectId (void **val_data, int val_index) noexcept
158  : m_data (val_data), m_index (val_index)
159  {}
160 
161  explicit OptObjectId (void **val_data, unsigned val_index) noexcept
162  : m_data (val_data), m_index (val_index)
163  {}
164 
165  explicit OptObjectId (void **val_data, std::size_t val_index) noexcept
166  : m_data (val_data), m_index (val_index)
167  {}
168 
169  [[nodiscard]] std::size_t getIndex () const noexcept {
170  return m_index;}
171 
172  [[nodiscard]] void **getData () const noexcept {
173  return m_data;}
174 
175 
176 
179  private:
180 
181  void **m_data = nullptr;
182  std::size_t m_index = invalidObjectIndex;
183  };
184 
185  template<ContainerId CI>
187  {
188  return lhs.getIndex() == rhs.getIndex();
189  }
190 
191  template<ContainerId CI>
193  {
194  return lhs.getIndex() != rhs.getIndex();
195  }
196 
197 
198 
199 
221 }
222 
223 #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:103
columnar::OptObjectId< CI, ColumnarModeArray >::OptObjectId
OptObjectId(xAODObject *)
Definition: OptObjectId.h:120
columnar::OptObjectId< CI, ColumnarModeArray >::getXAODObject
xAODObject * getXAODObject() const
Definition: OptObjectId.h:129
m_data
std::vector< T > m_data
Definition: TrackTruthMatchingBaseAlg.cxx:660
columnar::OptObjectId< CI, ColumnarModeArray >::getData
void ** getData() const noexcept
Definition: OptObjectId.h:172
columnar::OptObjectId< CI, ColumnarModeArray >::xAODObject
typename ContainerIdTraits< CI >::xAODObjectIdType xAODObject
Definition: OptObjectId.h:110
columnar::OptObjectId
a class representing a single optional object (electron, muons, etc.)
Definition: OptObjectId.h:24
columnar::operator=
AccessorTemplate & operator=(AccessorTemplate &&that)
Definition: VectorColumn.h:88
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:71
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:77
InDetDD::operator*
SiLocalPosition operator*(const SiLocalPosition &position, const double factor)
Definition: SiLocalPosition.cxx:98
IColumnarTool.h
columnar::OptObjectId< CI, ColumnarModeArray >::OptObjectId
OptObjectId(void **val_data, std::size_t val_index) noexcept
Definition: OptObjectId.h:165
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:72
columnar::final
CM final
Definition: ColumnAccessor.h:106
columnar::ObjectId
a class representing a single object (electron, muons, etc.)
Definition: ObjectId.h:18
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:138
columnar::ColumnarModeArray
Definition: ColumnarDef.h:30
columnar::OptObjectId< CI, ColumnarModeArray >::OptObjectId
OptObjectId(void **val_data, int val_index) noexcept
Definition: OptObjectId.h:157
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:116
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:135
columnar::OptObjectId< CI, ColumnarModeArray >::OptObjectId
OptObjectId(void **val_data, unsigned val_index) noexcept
Definition: OptObjectId.h:161
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:169
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