ATLAS Offline Software
DataObjectSharedPtr.h
Go to the documentation of this file.
1 // This file's extension implies that it's C, but it's really -*- C++ -*-.
2 
3 /*
4  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
5 */
14 #ifndef ATHENAKERNEL_DATAOBJECTSHAREDPTR_H
15 #define ATHENAKERNEL_DATAOBJECTSHAREDPTR_H
16 
17 
19 #include "GaudiKernel/DataObject.h"
20 #include "boost/intrusive_ptr.hpp"
21 #include <memory>
22 
23 
24 inline void intrusive_ptr_add_ref (DataObject* o)
25 {
26  o->addRef();
27 }
28 
29 
30 inline void intrusive_ptr_release (DataObject* o)
31 {
32  o->release();
33 }
34 
35 
36 namespace SG {
37 
38 
42 template <class T>
44  : public boost::intrusive_ptr<T>
45 {
46 public:
47  typedef boost::intrusive_ptr<T> Base;
49  explicit DataObjectSharedPtr (T* p, bool add_ref = true)
50  : Base (p, add_ref) {}
51  explicit DataObjectSharedPtr (std::unique_ptr<T> p, bool add_ref = true)
52  : Base (p.release(), add_ref) {}
54  : Base (rhs) {}
55  template <class U>
57  : Base (rhs) {}
58 
59  // Avoid coverity warning.
61 };
62 
63 
64 template <typename T>
65 DataObject* asStorable(SG::DataObjectSharedPtr<T> pObject) {
66  typedef typename DataBucketTrait<T>::type bucket_t;
67  return new bucket_t (pObject.get());
68 }
69 
70 
71 } // namespace SG
72 
73 
74 #endif // not ATHENAKERNEL_DATAOBJECTSHAREDPTR_H
SG
Forward declaration.
Definition: CaloCellPacker_400_500.h:32
intrusive_ptr_add_ref
void intrusive_ptr_add_ref(DataObject *o)
Definition: DataObjectSharedPtr.h:24
SG::DataObjectSharedPtr::DataObjectSharedPtr
DataObjectSharedPtr(const DataObjectSharedPtr &rhs)
Definition: DataObjectSharedPtr.h:53
StorableConversions.h
convert to and from a SG storable
SG::DataObjectSharedPtr::Base
boost::intrusive_ptr< T > Base
Definition: DataObjectSharedPtr.h:47
intrusive_ptr_release
void intrusive_ptr_release(DataObject *o)
Definition: DataObjectSharedPtr.h:30
SG::DataObjectSharedPtr::DataObjectSharedPtr
DataObjectSharedPtr(std::unique_ptr< T > p, bool add_ref=true)
Definition: DataObjectSharedPtr.h:51
SG::DataObjectSharedPtr::DataObjectSharedPtr
DataObjectSharedPtr(T *p, bool add_ref=true)
Definition: DataObjectSharedPtr.h:49
SG::asStorable
DataObject * asStorable(SG::DataObjectSharedPtr< T > pObject)
Definition: DataObjectSharedPtr.h:65
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
Base
python.EventInfoMgtInit.release
release
Definition: EventInfoMgtInit.py:24
SG::DataObjectSharedPtr::DataObjectSharedPtr
DataObjectSharedPtr()
Definition: DataObjectSharedPtr.h:48
SG::DataObjectSharedPtr::DataObjectSharedPtr
DataObjectSharedPtr(const DataObjectSharedPtr< U > &rhs)
Definition: DataObjectSharedPtr.h:56
SG::DataObjectSharedPtr
Smart pointer to manage DataObject reference counts.
Definition: DataObjectSharedPtr.h:45
SG::DataBucketTrait::type
typename std::conditional_t< has_base, deflt, recurse >::type type
Definition: StorableConversions.h:144
SG::DataObjectSharedPtr::operator=
DataObjectSharedPtr & operator=(const DataObjectSharedPtr &rhs)=default