Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework  master (f31105fd)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
DataObjectHandle.h
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2025 CERN for the benefit of the LHCb and ATLAS collaborations *
3 * *
4 * This software is distributed under the terms of the Apache version 2 licence, *
5 * copied verbatim in the file "LICENSE". *
6 * *
7 * In applying this licence, CERN does not waive the privileges and immunities *
8 * granted to it by virtue of its status as an Intergovernmental Organization *
9 * or submit itself to any jurisdiction. *
10 \***********************************************************************************/
11 #pragma once
12 
17 #include <GaudiKernel/IProperty.h>
18 #include <GaudiKernel/IRegistry.h>
19 #include <GaudiKernel/NamedRange.h>
20 #include <boost/algorithm/string/replace.hpp>
21 #include <type_traits>
22 
23 //---------------------------------------------------------------------------
24 //
25 namespace details {
26  template <typename T>
27  using Converter_t = T ( * )( const DataObject* );
28 
29  template <typename Range, typename StorageType>
30  Range make_range( const DataObject* obj ) {
31  auto c = static_cast<const StorageType*>( obj );
32  if ( !c ) return Range();
33  using std::begin;
34  using std::end;
35  auto first = begin( *c );
36  auto last = end( *c );
37  auto _first = reinterpret_cast<typename Range::const_iterator*>( &first );
38  auto _last = reinterpret_cast<typename Range::const_iterator*>( &last );
39  return Range( *_first, *_last );
40  }
41 
42  template <typename ValueType, typename Range = Gaudi::Range_<typename ValueType::ConstVector>>
44  using Selection = typename ValueType::Selection;
45  auto sel = dynamic_cast<const Selection*>( obj );
46  if ( sel ) return &make_range<Range, typename ValueType::Selection>;
47  auto con = dynamic_cast<std::add_const_t<typename ValueType::Container>*>( obj );
48  if ( con ) return &make_range<Range, typename ValueType::Container>;
49  return nullptr;
50  }
51 
52  template <typename T>
53  bool verifyType( const DataObject* dataObj ) {
54  using Type = std::add_const_t<T>;
55  assert( dataObj != nullptr );
56  auto obj = dynamic_cast<Type*>( dataObj );
57  bool ok = ( obj != nullptr );
58  if ( !ok ) {
59  const auto* registry = dataObj->registry();
60  throw GaudiException( "The type expected for " + registry->identifier() + " is " +
61  System::typeinfoName( typeid( Type ) ) +
62  " and is different from the one of the object in the store which is " +
63  System::typeinfoName( typeid( *dataObj ) ) + ".",
64  "Wrong DataObjectType", StatusCode::FAILURE );
65  }
66  assert( obj == static_cast<Type*>( dataObj ) );
67  return ok;
68  }
69 
70  template <Gaudi::DataHandle::Mode, typename T, typename U>
71  struct Payload_helper {
72  using type =
73  std::conditional_t<std::is_base_of_v<DataObject, T> && std::is_same_v<T, U>, T,
74  std::conditional_t<std::is_same_v<T, U>, AnyDataWrapper<std::remove_const_t<T>>,
75  AnyDataWithViewWrapper<std::remove_const_t<T>, std::remove_const_t<U>>>>;
76  };
77  template <typename T, typename U>
80  };
81  template <typename T, typename U>
84  };
85  template <typename T, typename U>
86  struct Payload_helper<Gaudi::DataHandle::Reader, std::optional<Gaudi::NamedRange_<T>>, U> {
87  using type = std::optional<Gaudi::NamedRange_<T>>;
88  };
89 
90  template <Gaudi::DataHandle::Mode mode, typename T, typename U = T>
92 
93 } // namespace details
94 
95 //---------------------------------------------------------------------------
96 
107 //---------------------------------------------------------------------------
108 
109 template <typename T>
110 class DataObjectHandle : public DataObjectHandleBase {
111 public:
113 
117  T* get() const { return get( true ); }
118 
123  T* getIfExists() const { return get( false ); }
124 
128  bool exist() const { return get( false ) != nullptr; }
129 
133  T* getOrCreate() const;
134 
138  T* put( std::unique_ptr<T> object ) const;
139 
140  std::string pythonRepr() const override {
141  auto repr = DataObjectHandleBase::pythonRepr();
142  boost::replace_all( repr, default_type, System::typeinfoName( typeid( T ) ) );
143  return repr;
144  }
145 
146 private:
147  T* get( bool mustExist ) const;
148  mutable bool m_goodType = false;
149 };
150 
151 //---------------------------------------------------------------------------
152 //
160 template <typename T>
161 T* DataObjectHandle<T>::get( bool mustExist ) const {
162  auto dataObj = fetch();
163  if ( !dataObj ) {
164  if ( mustExist ) { // Problems in getting from the store
165  throw GaudiException( "Cannot retrieve \'" + objKey() + "\' from transient store.",
166  m_owner ? owner()->name() : "no owner", StatusCode::FAILURE );
167  }
168  return nullptr;
169  }
170  if ( !m_goodType ) m_goodType = ::details::verifyType<T>( dataObj );
171  return static_cast<T*>( dataObj );
172 }
173 
174 //---------------------------------------------------------------------------
175 template <typename T>
177  assert( m_init );
178  StatusCode sc = m_EDS->registerObject( objKey(), objectp.get() );
179  if ( !sc.isSuccess() ) { throw GaudiException( "Error in put of " + objKey(), "DataObjectHandle<T>::put", sc ); }
180  return objectp.release();
181 }
182 
183 //---------------------------------------------------------------------------
184 template <typename T>
186  T* obj = get( false );
187  return obj ? obj : put( std::make_unique<T>() );
188 }
189 
190 //---------------------------------------------------------------------------
192 
193 template <typename T>
194 class DataObjectHandle<Gaudi::Range_<T>> : public DataObjectHandleBase {
195 public:
196  using ValueType = std::remove_cv_t<std::remove_pointer_t<typename T::value_type>>;
198 
200 
204  Range get() const;
205 
206  std::string pythonRepr() const override {
207  auto repr = DataObjectHandleBase::pythonRepr();
208  boost::replace_all( repr, default_type, System::typeinfoName( typeid( Gaudi::Range_<T> ) ) );
209  return repr;
210  }
211 
212 private:
213  mutable ::details::Converter_t<Range> m_converter = nullptr;
214 };
215 
216 template <typename ValueType>
217 auto DataObjectHandle<Gaudi::Range_<ValueType>>::get() const -> Range {
218  auto dataObj = fetch();
219  if ( !dataObj ) {
220  throw GaudiException( "Cannot retrieve \'" + objKey() + "\' from transient store.",
221  m_owner ? owner()->name() : "no owner", StatusCode::FAILURE );
222  }
223  if ( !m_converter ) {
224  m_converter = ::details::select_range_converter<ValueType>( dataObj );
225  if ( !m_converter ) {
226  throw GaudiException( "The type requested for " + objKey() + " (" + System::typeinfoName( typeid( ValueType ) ) +
227  ")" + " cannot be obtained from object in event store" + " (" +
228  System::typeinfoName( typeid( *dataObj ) ) + ").",
229  "Wrong DataObjectType", StatusCode::FAILURE );
230  }
231  }
232  return ( *m_converter )( dataObj );
233 }
234 
235 //---------------------------------------------------------------------------
237 
238 template <typename T>
239 class DataObjectHandle<Gaudi::NamedRange_<T>> : public DataObjectHandleBase {
240 public:
241  using ValueType = std::remove_cv_t<std::remove_pointer_t<typename T::value_type>>;
243 
245 
249  Range get() const;
250 
251  std::string pythonRepr() const override {
252  auto repr = DataObjectHandleBase::pythonRepr();
253  boost::replace_all( repr, default_type, System::typeinfoName( typeid( Gaudi::NamedRange_<T> ) ) );
254  return repr;
255  }
256 
257 private:
258  mutable ::details::Converter_t<Range> m_converter = nullptr;
259 };
260 
261 template <typename ValueType>
263  auto dataObj = fetch();
264  if ( !dataObj ) {
265  throw GaudiException( "Cannot retrieve \'" + objKey() + "\' from transient store.",
266  m_owner ? owner()->name() : "no owner", StatusCode::FAILURE );
267  }
268  if ( !m_converter ) {
269  m_converter = ::details::select_range_converter<ValueType, Range>( dataObj );
270  if ( !m_converter ) {
271  throw GaudiException( "The type requested for " + objKey() + " (" + System::typeinfoName( typeid( ValueType ) ) +
272  ")" + " cannot be obtained from object in event store" + " (" +
273  System::typeinfoName( typeid( *dataObj ) ) + ").",
274  "Wrong DataObjectType", StatusCode::FAILURE );
275  }
276  }
277  return ( *m_converter )( dataObj );
278 }
279 
280 //
281 //---------------------------------------------------------------------------
283 
284 template <typename T>
285 class DataObjectHandle<std::optional<Gaudi::NamedRange_<T>>> : public DataObjectHandleBase {
286 public:
287  using ValueType = std::remove_cv_t<std::remove_pointer_t<typename T::value_type>>;
289 
291 
295  std::optional<Range> get() const;
296 
297  std::string pythonRepr() const override {
298  auto repr = DataObjectHandleBase::pythonRepr();
299  boost::replace_all( repr, default_type, System::typeinfoName( typeid( std::optional<Gaudi::NamedRange_<T>> ) ) );
300  return repr;
301  }
302 
303 private:
304  mutable ::details::Converter_t<Range> m_converter = nullptr;
305 };
306 
307 template <typename ValueType>
309  auto dataObj = fetch();
310  if ( !dataObj ) return std::nullopt;
311  if ( !m_converter ) {
312  m_converter = ::details::select_range_converter<ValueType, Range>( dataObj );
313  if ( !m_converter ) {
314  throw GaudiException( "The type requested for " + objKey() + " (" + System::typeinfoName( typeid( ValueType ) ) +
315  ")" + " cannot be obtained from object in event store" + " (" +
316  System::typeinfoName( typeid( *dataObj ) ) + ").",
317  "Wrong DataObjectType", StatusCode::FAILURE );
318  }
319  }
320  return ( *m_converter )( dataObj );
321 }
322 
323 //---------------------------------------------------------------------------
325 template <typename T>
327 public:
329 
333  T* get() const { return &_get( true )->getData(); }
334  T* getIfExists() const {
335  auto data = _get( false );
336  return data ? &data->getData() : nullptr;
337  }
338 
342  const T* put( T&& obj ) const {
343  assert( m_init );
344  auto objectp = std::make_unique<AnyDataWrapper<T>>( std::move( obj ) );
345  if ( auto sc = m_EDS->registerObject( objKey(), objectp.get() ); sc.isFailure() ) {
346  throw GaudiException( "Error in put of " + objKey(), "DataObjectHandle<AnyDataWrapper<T>>::put", sc );
347  }
348  return &objectp.release()->getData();
349  }
350 
354  std::optional<std::size_t> size() const { return _get()->size(); }
355 
356  std::string pythonRepr() const override {
357  auto repr = DataObjectHandleBase::pythonRepr();
358  boost::replace_all( repr, default_type, System::typeinfoName( typeid( T ) ) );
359  return repr;
360  }
361 
362 private:
363  AnyDataWrapper<T>* _get( bool mustExist ) const {
364  auto obj = fetch();
365  if ( !obj ) {
366  if ( mustExist ) {
367  throw GaudiException( "Cannot retrieve \'" + objKey() + "\' from transient store.",
368  m_owner ? owner()->name() : "no owner", StatusCode::FAILURE );
369 
370  } else {
371  return nullptr;
372  }
373  }
374  if ( !m_goodType ) m_goodType = ::details::verifyType<AnyDataWrapper<T>>( obj );
375  return static_cast<AnyDataWrapper<T>*>( obj );
376  }
377  mutable bool m_goodType = false;
378 };
379 
380 //---------------------------------------------------------------------------
382 template <typename View, typename Owned>
384 public:
386 
390  View* get() const { return &_get( true )->getData(); }
391  View* getIfExists() const {
392  auto data = _get( false );
393  return data ? &data->getData() : nullptr;
394  }
395 
400  assert( m_init );
401  if ( auto sc = m_EDS->registerObject( objKey(), objectp.get() ); sc.isFailure() ) {
402  throw GaudiException( "Error in put of " + objKey(), "DataObjectHandle<AnyDataWithViewWrapper<T>::put", sc );
403  }
404  return &objectp.release()->getData();
405  }
406  const View* put( Owned&& obj ) const {
407  return put( std::make_unique<AnyDataWithViewWrapper<View, Owned>>( std::move( obj ) ) );
408  }
409 
413  std::optional<std::size_t> size() const { return _get()->size(); }
414 
415  std::string pythonRepr() const override {
416  auto repr = DataObjectHandleBase::pythonRepr();
417  boost::replace_all( repr, default_type, System::typeinfoName( typeid( View ) ) );
418  return repr;
419  }
420 
421 private:
422  AnyDataWithViewWrapper<View, Owned>* _get( bool mustExist ) const {
423  auto obj = fetch();
424  if ( !obj ) {
425  if ( mustExist ) {
426  throw GaudiException( "Cannot retrieve \'" + objKey() + "\' from transient store.",
427  m_owner ? owner()->name() : "no owner", StatusCode::FAILURE );
428 
429  } else {
430  return nullptr;
431  }
432  }
433  if ( !m_goodType ) m_goodType = ::details::verifyType<AnyDataWithViewWrapper<View, Owned>>( obj );
434  return static_cast<AnyDataWithViewWrapper<View, Owned>*>( obj );
435  }
436  mutable bool m_goodType = false;
437 };
438 
439 //---------------------------- user-facing interface ----------
440 namespace details {
441  template <typename T, typename U = T>
443  template <typename T, typename U = T>
445 } // namespace details
446 
447 template <typename T>
449  template <typename... Args, std::size_t... Is>
450  DataObjectReadHandle( std::tuple<Args...>&& args, std::index_sequence<Is...> )
451  : DataObjectReadHandle( std::get<Is>( std::move( args ) )... ) {}
452 
453 public:
455  : ::details::ReadHandle<T>{ k, Gaudi::DataHandle::Reader, owner } {}
456 
459  template <std::derived_from<IProperty> OWNER, typename K>
460  DataObjectReadHandle( OWNER* owner, std::string propertyName, K key = {}, std::string doc = "" )
462  std::move( doc ) ) {}
463 
464  template <typename... Args>
466  : DataObjectReadHandle( std::move( args ), std::index_sequence_for<Args...>{} ) {}
467 };
468 
469 template <typename T, typename U = T>
471  template <typename... Args, std::size_t... Is>
472  DataObjectWriteHandle( std::tuple<Args...>&& args, std::index_sequence<Is...> )
473  : DataObjectWriteHandle( std::get<Is>( std::move( args ) )... ) {}
474 
475 public:
477  : ::details::WriteHandle<T, U>{ k, Gaudi::DataHandle::Writer, owner } {}
478 
481  template <std::derived_from<IProperty> OWNER, typename K>
482  DataObjectWriteHandle( OWNER* owner, std::string propertyName, K key = {}, std::string doc = "" )
484  std::move( doc ) ) {}
485 
486  template <typename... Args>
488  : DataObjectWriteHandle( std::move( args ), std::index_sequence_for<Args...>{} ) {}
489 };
IDataHandleHolder
Definition: IDataHandleHolder.h:24
details::WriteHandle
DataObjectHandle< Payload_t< Gaudi::DataHandle::Writer, T, U > > WriteHandle
Definition: DataObjectHandle.h:442
DataObjectHandle< Gaudi::NamedRange_< T > >::get
Range get() const
Retrieve object from transient data store.
DataObjectHandle< AnyDataWithViewWrapper< View, Owned > >::pythonRepr
std::string pythonRepr() const override
Definition: DataObjectHandle.h:415
DataObjectWriteHandle
Definition: DataObjectHandle.h:470
DataObjectHandle< std::optional< Gaudi::NamedRange_< T > > >::get
std::optional< Range > get() const
Retrieve object from transient data store.
DataObjectHandle< Gaudi::Range_< T > >::ValueType
std::remove_cv_t< std::remove_pointer_t< typename T::value_type > > ValueType
Definition: DataObjectHandle.h:196
std::string
STL class.
AnyDataWrapper.h
DataObjectHandle::m_goodType
bool m_goodType
Definition: DataObjectHandle.h:148
DataObjectWriteHandle::DataObjectWriteHandle
DataObjectWriteHandle(std::tuple< Args... > &&args, std::index_sequence< Is... >)
Definition: DataObjectHandle.h:472
cpluginsvc.registry
def registry()
Definition: cpluginsvc.py:83
Gaudi::NamedRange_
Definition: NamedRange.h:52
std::move
T move(T... args)
StatusCode::isSuccess
bool isSuccess() const
Definition: StatusCode.h:315
DataObjectHandle::getOrCreate
T * getOrCreate() const
Get object from store or create a new one if it doesn't exist.
Definition: DataObjectHandle.h:185
GaudiException.h
DataObjectHandle< Gaudi::NamedRange_< T > >::ValueType
std::remove_cv_t< std::remove_pointer_t< typename T::value_type > > ValueType
Definition: DataObjectHandle.h:241
GaudiException
Definition: GaudiException.h:32
GaudiPartProp.decorators.get
get
decorate the vector of properties
Definition: decorators.py:283
NamedRange.h
DataObjectHandle< AnyDataWrapper< T > >::put
const T * put(T &&obj) const
Register object in transient store.
Definition: DataObjectHandle.h:342
details::Payload_helper< Gaudi::DataHandle::Reader, std::optional< Gaudi::NamedRange_< T > >, U >::type
std::optional< Gaudi::NamedRange_< T > > type
Definition: DataObjectHandle.h:87
NewInputWrite.fetch
fetch
Definition: NewInputWrite.py:45
std::unique_ptr::get
T get(T... args)
std::unique_ptr::release
T release(T... args)
std::tuple
details::verifyType
bool verifyType(const DataObject *dataObj)
Definition: DataObjectHandle.h:53
gaudirun.c
c
Definition: gaudirun.py:525
System::typeinfoName
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:315
DataObjectHandle< std::optional< Gaudi::NamedRange_< T > > >::pythonRepr
std::string pythonRepr() const override
Definition: DataObjectHandle.h:297
details::Payload_helper
Definition: DataObjectHandle.h:71
DataObjectHandle
DataObjectHandle.h GaudiKernel/DataObjectHandle.h.
Definition: AlgTool.h:36
Gaudi::DataHandle::Writer
@ Writer
Definition: DataHandle.h:40
DataObjectHandle::exist
bool exist() const
Check the existence of the object in the transient store.
Definition: DataObjectHandle.h:128
DataObjectHandle< AnyDataWithViewWrapper< View, Owned > >::getIfExists
View * getIfExists() const
Definition: DataObjectHandle.h:391
DataObjectHandle< AnyDataWrapper< T > >::get
T * get() const
Retrieve object from transient data store.
Definition: DataObjectHandle.h:333
details::Payload_helper::type
std::conditional_t< std::is_base_of_v< DataObject, T > &&std::is_same_v< T, U >, T, std::conditional_t< std::is_same_v< T, U >, AnyDataWrapper< std::remove_const_t< T > >, AnyDataWithViewWrapper< std::remove_const_t< T >, std::remove_const_t< U > >> > type
Definition: DataObjectHandle.h:75
DataObjectWriteHandle::DataObjectWriteHandle
DataObjectWriteHandle(OWNER *owner, std::string propertyName, K key={}, std::string doc="")
Autodeclaring constructor with property name, mode, key and documentation.
Definition: DataObjectHandle.h:482
DataObjectHandle::get
T * get() const
Retrieve object from transient data store.
Definition: DataObjectHandle.h:117
StatusCode
Definition: StatusCode.h:65
details
Definition: AnyDataWrapper.h:19
DataObjectHandle< AnyDataWithViewWrapper< View, Owned > >::_get
AnyDataWithViewWrapper< View, Owned > * _get(bool mustExist) const
Definition: DataObjectHandle.h:422
DataObjectHandleBase
DataObjectHandleBase GaudiKernel/DataObjectHandleBase.h.
Definition: DataObjectHandleBase.h:35
DataObjectReadHandle
Definition: DataObjectHandle.h:448
details::make_range
Range make_range(const DataObject *obj)
Definition: DataObjectHandle.h:30
DataObjectHandle::get
T * get(bool mustExist) const
Try to retrieve from the transient store.
Definition: DataObjectHandle.h:161
GaudiPython.Bindings.nullptr
nullptr
Definition: Bindings.py:87
DataObjectReadHandle::DataObjectReadHandle
DataObjectReadHandle(const DataObjID &k, IDataHandleHolder *owner)
Definition: DataObjectHandle.h:454
AnyDataWrapper
Definition: AnyDataWrapper.h:55
DataObjectReadHandle::DataObjectReadHandle
DataObjectReadHandle(OWNER *owner, std::string propertyName, K key={}, std::string doc="")
Autodeclaring constructor with property name, mode, key and documentation.
Definition: DataObjectHandle.h:460
details::begin
auto begin(reverse_wrapper< T > &w)
Definition: reverse.h:47
IRegistry.h
DataObjectHandle< std::optional< Gaudi::NamedRange_< T > > >::ValueType
std::remove_cv_t< std::remove_pointer_t< typename T::value_type > > ValueType
Definition: DataObjectHandle.h:287
Gaudi
This file provides a Grammar for the type Gaudi::Accumulators::Axis It allows to use that type from p...
Definition: __init__.py:1
IOTest.sel
sel
Definition: IOTest.py:106
AnyDataWithViewWrapper
Definition: AnyDataWrapper.h:78
DataObjID
Definition: DataObjID.h:48
DataObjectWriteHandle::DataObjectWriteHandle
DataObjectWriteHandle(const DataObjID &k, IDataHandleHolder *owner)
Definition: DataObjectHandle.h:476
DataObjectHandle< AnyDataWrapper< T > >::size
std::optional< std::size_t > size() const
Size of boxed item, if boxed item has a 'size' method.
Definition: DataObjectHandle.h:354
details::select_range_converter
Converter_t< Range > select_range_converter(const DataObject *obj)
Definition: DataObjectHandle.h:43
DataObjectHandle< AnyDataWrapper< T > >::pythonRepr
std::string pythonRepr() const override
Definition: DataObjectHandle.h:356
Gaudi::Range_
Definition: Range.h:94
DataObjectWriteHandle::DataObjectWriteHandle
DataObjectWriteHandle(std::tuple< Args... > &&args)
Definition: DataObjectHandle.h:487
DataObjectHandle::put
T * put(std::unique_ptr< T > object) const
Register object in transient store.
Definition: DataObjectHandle.h:176
ConditionsStallTest.name
name
Definition: ConditionsStallTest.py:77
gaudirun.args
args
Definition: gaudirun.py:336
IDataHandleHolder.h
std::begin
T begin(T... args)
std
STL namespace.
details::Payload_t
typename Payload_helper< mode, T, U >::type Payload_t
Definition: DataObjectHandle.h:91
Gaudi::DataHandle::pythonRepr
virtual std::string pythonRepr() const
Definition: DataHandle.cpp:19
DataObjectHandleBase.h
DataObject
Definition: DataObject.h:36
Gaudi::DataHandle::Reader
@ Reader
Definition: DataHandle.h:40
details::Converter_t
T(*)(const DataObject *) Converter_t
Definition: DataObjectHandle.h:27
DataObjectHandleBase::DataObjectHandleBase
DataObjectHandleBase(DataObjID k, Gaudi::DataHandle::Mode a, IDataHandleHolder *owner)
Definition: DataObjectHandleBase.cpp:47
std::size_t
IProperty.h
DataObjectHandle< AnyDataWithViewWrapper< View, Owned > >::get
View * get() const
Retrieve object from transient data store.
Definition: DataObjectHandle.h:390
std::end
T end(T... args)
DataObjectHandle::pythonRepr
std::string pythonRepr() const override
Definition: DataObjectHandle.h:140
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:101
DataObjectHandle::getIfExists
T * getIfExists() const
Bypass check of existence of object in transient store Only uses main location of the.
Definition: DataObjectHandle.h:123
Gaudi::Functional::details::put
auto put(const DataObjectHandle< Out1 > &out_handle, Out2 &&out)
Definition: details.h:162
DataObjectHandle< AnyDataWrapper< T > >::getIfExists
T * getIfExists() const
Definition: DataObjectHandle.h:334
DataObjectHandle< AnyDataWrapper< T > >::_get
AnyDataWrapper< T > * _get(bool mustExist) const
Definition: DataObjectHandle.h:363
details::ReadHandle
DataObjectHandle< Payload_t< Gaudi::DataHandle::Reader, T, U > > ReadHandle
Definition: DataObjectHandle.h:444
DataObjectHandle< AnyDataWithViewWrapper< View, Owned > >::put
const View * put(std::unique_ptr< AnyDataWithViewWrapper< View, Owned >> objectp) const
Register object in transient store.
Definition: DataObjectHandle.h:399
DataObjectHandle< Gaudi::Range_< T > >::get
Range get() const
Retrieve object from transient data store.
DataObjectHandle< AnyDataWithViewWrapper< View, Owned > >::put
const View * put(Owned &&obj) const
Definition: DataObjectHandle.h:406
std::unique_ptr
STL class.
ProduceConsume.key
key
Definition: ProduceConsume.py:84
DataObject::registry
IRegistry * registry() const
Get pointer to Registry.
Definition: DataObject.h:78
DataObjectReadHandle::DataObjectReadHandle
DataObjectReadHandle(std::tuple< Args... > &&args, std::index_sequence< Is... >)
Definition: DataObjectHandle.h:450
DataObjectReadHandle::DataObjectReadHandle
DataObjectReadHandle(std::tuple< Args... > &&args)
Definition: DataObjectHandle.h:465
compareOutputFiles.Reader
Reader
Definition: compareOutputFiles.py:489
DataObjectHandle< Gaudi::NamedRange_< T > >::pythonRepr
std::string pythonRepr() const override
Definition: DataObjectHandle.h:251
DataObjectHandle< AnyDataWithViewWrapper< View, Owned > >::size
std::optional< std::size_t > size() const
Size of boxed item, if boxed item has a 'size' method.
Definition: DataObjectHandle.h:413
details::end
auto end(reverse_wrapper< T > &w)
Definition: reverse.h:52
DataObjectHandle< Gaudi::Range_< T > >::pythonRepr
std::string pythonRepr() const override
Definition: DataObjectHandle.h:206