The Gaudi Framework  master (82fdf313)
Loading...
Searching...
No Matches
DataObject.cpp
Go to the documentation of this file.
1/***********************************************************************************\
2* (c) Copyright 1998-2024 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\***********************************************************************************/
16#include <boost/io/ios_state.hpp>
17#include <memory>
18#include <vector>
19
20static std::string _sDataObjectCppNotRegistered( "NotRegistered" );
21
24
27
30 m_version = rhs.m_version;
31 m_pLinkMgr.reset( new LinkManager() );
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
56unsigned long DataObject::release() {
57 unsigned long cnt = --m_refCount;
58 if ( 0 == cnt ) delete this;
59 return cnt;
60}
61
63unsigned long DataObject::addRef() { return ++m_refCount; }
64
66const CLID& DataObject::clID() const { return CLID_DataObject; }
67
69const CLID& DataObject::classID() { return CLID_DataObject; }
70
72const std::string& DataObject::name() const { return m_pRegistry ? m_pRegistry->name() : _sDataObjectCppNotRegistered; }
73
76
77std::ostream& DataObject::fillStream( std::ostream& s ) const {
78 boost::io::ios_flags_saver _{ s };
79 return s << "DataObject at " << std::hex << this;
80}
81
82static DataObject* s_objPtr = nullptr;
83static DataObject** s_currObj = &s_objPtr;
84
85static std::vector<DataObject**>& objectStack() {
86 static std::unique_ptr<std::vector<DataObject**>> s_current{ new std::vector<DataObject**>() };
87 return *s_current;
88}
89
90DataObject* Gaudi::getCurrentDataObject() { return *s_currObj; }
91
93 static std::vector<DataObject**>& c = objectStack();
94 c.push_back( pobjAddr );
95 s_currObj = pobjAddr ? pobjAddr : &s_objPtr;
96}
97
99 static std::vector<DataObject**>& c = objectStack();
100 if ( !c.empty() ) {
101 s_currObj = c.back();
102 c.pop_back();
103 } else {
104 s_currObj = &s_objPtr;
105 }
106}
unsigned int CLID
Class ID definition.
Definition ClassID.h:16
A DataObject is the base class of any identifiable object on any data store.
Definition DataObject.h:37
virtual unsigned long addRef()
Add reference to object.
std::atomic< unsigned long > m_refCount
Reference count.
Definition DataObject.h:40
DataObject & operator=(const DataObject &rhs)
Assignment Operator.
const std::string & name() const
Retreive DataObject name. It is the name when registered in the store.
IRegistry * m_pRegistry
Pointer to the Registry Object.
Definition DataObject.h:44
virtual std::ostream & fillStream(std::ostream &s) const
Fill the output stream (ASCII)
std::unique_ptr< LinkManager > m_pLinkMgr
Store of symbolic links.
Definition DataObject.h:46
virtual const CLID & clID() const
Retrieve reference to class definition structure.
virtual StatusCode update()
Provide empty placeholder for internal object reconfiguration callback.
DataObject()
Standard Constructor.
virtual unsigned long release()
release reference to object
static const CLID & classID()
Retrieve reference to class definition structure (static access)
unsigned char m_version
Version number.
Definition DataObject.h:42
virtual ~DataObject()
Standard Destructor.
This class is used for returning status codes from appropriate routines.
Definition StatusCode.h:64
constexpr static const auto SUCCESS
Definition StatusCode.h:99
GAUDI_API void pushCurrentDataObject(DataObject **pobjAddr)
GAUDI_API void popCurrentDataObject()
GAUDI_API DataObject * getCurrentDataObject()
STL namespace.