The Gaudi Framework  v33r1 (b1225454)
DataObject.cpp
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2019 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 // Experiment specific include files
12 #include "GaudiKernel/DataObject.h"
13 #include "GaudiKernel/IInspector.h"
14 #include "GaudiKernel/IRegistry.h"
17 #include <memory>
18 #include <vector>
19 
20 static std::string _sDataObjectCppNotRegistered( "NotRegistered" );
21 
24 
26 DataObject::DataObject( const DataObject& rhs ) : m_version{rhs.m_version}, m_pLinkMgr{LinkManager::newInstance()} {}
27 
30  m_version = rhs.m_version;
32  return *this;
33 }
34 
37  : m_version{std::move( rhs.m_version )}, m_pLinkMgr{std::move( rhs.m_pLinkMgr )} {}
38 
41  m_version = std::move( rhs.m_version );
42  m_pLinkMgr = std::move( rhs.m_pLinkMgr );
43  return *this;
44 }
45 
48  // Issue a warning if the object is being deleted and the reference
49  // count is non-zero.
50  if ( m_refCount > 0 ) {
51  // Insert warning here
52  }
53 }
54 
56 unsigned long DataObject::release() {
57  unsigned long cnt = --m_refCount;
58  if ( 0 == cnt ) delete this;
59  return cnt;
60 }
61 
63 unsigned long DataObject::addRef() { return ++m_refCount; }
64 
66 const CLID& DataObject::clID() const { return CLID_DataObject; }
67 
69 const CLID& DataObject::classID() { return CLID_DataObject; }
70 
72 const std::string& DataObject::name() const { return m_pRegistry ? m_pRegistry->name() : _sDataObjectCppNotRegistered; }
73 
76 
77 static DataObject* s_objPtr = nullptr;
78 static DataObject** s_currObj = &s_objPtr;
79 
80 static std::vector<DataObject**>& objectStack() {
82  return *s_current;
83 }
84 
85 DataObject* Gaudi::getCurrentDataObject() { return *s_currObj; }
86 
87 void Gaudi::pushCurrentDataObject( DataObject** pobjAddr ) {
88  static std::vector<DataObject**>& c = objectStack();
89  c.push_back( pobjAddr );
90  s_currObj = pobjAddr ? pobjAddr : &s_objPtr;
91 }
92 
94  static std::vector<DataObject**>& c = objectStack();
95  if ( !c.empty() ) {
96  s_currObj = c.back();
97  c.pop_back();
98  } else {
99  s_currObj = &s_objPtr;
100  }
101 }
virtual StatusCode update()
Provide empty placeholder for internal object reconfiguration callback.
Definition: DataObject.cpp:75
static const CLID & classID()
Retrieve reference to class definition structure (static access)
Definition: DataObject.cpp:69
GAUDI_API void popCurrentDataObject()
GAUDI_API DataObject * getCurrentDataObject()
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
virtual const name_type & name() const =0
Name of the directory (or key)
STL class.
unsigned char m_version
Version number.
Definition: DataObject.h:45
virtual unsigned long addRef()
Add reference to object.
Definition: DataObject.cpp:63
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:61
T reset(T... args)
unsigned int CLID
Class ID definition.
Definition: ClassID.h:18
GAUDI_API void pushCurrentDataObject(DataObject **pobjAddr)
T move(T... args)
DataObject()
Standard Constructor.
Definition: DataObject.cpp:23
const std::string & name() const
Retreive DataObject name. It is the name when registered in the store.
Definition: DataObject.cpp:72
virtual unsigned long release()
release reference to object
Definition: DataObject.cpp:56
std::unique_ptr< LinkManager > m_pLinkMgr
Store of symbolic links.
Definition: DataObject.h:49
STL class.
STL class.
virtual const CLID & clID() const
Retrieve reference to class definition structure.
Definition: DataObject.cpp:66
DataObject & operator=(const DataObject &rhs)
Assignment Operator.
Definition: DataObject.cpp:29
virtual ~DataObject()
Standard Destructor.
Definition: DataObject.cpp:47
IRegistry * m_pRegistry
Pointer to the Registry Object.
Definition: DataObject.h:47
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:40
unsigned long m_refCount
Reference count.
Definition: DataObject.h:43