ATLAS Offline Software
Loading...
Searching...
No Matches
Token Class Reference

This class provides a token that identifies in a unique way objects on the persistent storage. More...

#include <Token.h>

Collaboration diagram for Token:

Classes

struct  OID_t

Public Member Functions

 Token ()
 Standard Constructor.
 Token (const Token *source)
 Constructor with data assignment.
 Token (Token &&source) noexcept
 Allow move.
virtual ~Token ()
 Standard destructor: release all allocated resources.
bool operator< (const Token &refToken) const
 Operator < to allow ordering.
bool operator> (const Token &refToken) const
 Operator > to allow ordering.
bool operator== (const Token &refToken) const
 Equality operator.
bool operator!= (const Token &refToken) const
 Equality operator.
virtual bool less (const Token &pTok) const
 Fast token comparison: operator less.
virtual bool equal (const Token &pTok) const
 Fast token comparison: operator equals.
int release ()
 Release token: Decrease reference count and eventually delete.
int addRef ()
 Increase reference count.
const GuiddbID () const
 Access database identifier.
TokensetDb (const Guid &db)
 Set database name.
TokensetDb (const std::string &db)
const std::string & contID () const
 Access container identifier.
TokensetCont (const std::string &cnt)
 Set container name.
const GuidclassID () const
 Access database identifier.
TokensetClassID (const Guid &cl_id)
 Access database identifier.
int technology () const
 Access technology type.
TokensetTechnology (int t)
 Set technology type.
const OID_toid () const
 Access object identifier.
OID_toid ()
 Access object identifier.
TokensetOid (const OID_t &oid)
 Set object identifier.
int type () const
 Access token type.
TokensetType (int t)
 Set token type.
const std::string & auxString () const
 Access auxiliary string.
TokensetAuxString (const std::string &auxString)
 Set auxiliary string.
virtual const std::string toString () const
 Retrieve the string representation of the token.
virtual const std::string key () const
 Retrieve token key.
TokenfromString (const std::string_view from)
 Build from the string representation of a token.
const Tokenset (Token *pToken) const
 Set token information.
const TokensetData (Token *pToken) const
 Set all the data part of the token.

Static Public Member Functions

static int numInstances ()
 expose Token instance counter for debugging

Private Member Functions

 Token (const Token &copy)
 No copy allowed: put prototype to disable bit-wise copy.
Tokenoperator= (const Token &copy)
 No assignment allowed: put prototype to disable bit-wise assignment.

Private Attributes

int m_refCount
 Reference count.
unsigned int m_technology
 Technology identifier.
Guid m_dbID
 Database identifier.
std::string m_cntID
 Container identifier.
Guid m_classID
 Object global identifier.
OID_t m_oid
 Persistent object identifier.
int m_type
 Token type.
std::string m_auxString
 Auxiliary string.

Detailed Description

This class provides a token that identifies in a unique way objects on the persistent storage.

Definition at line 21 of file Token.h.

Constructor & Destructor Documentation

◆ Token() [1/4]

Token::Token ( const Token & copy)
private

No copy allowed: put prototype to disable bit-wise copy.

Copy constructor.

Definition at line 37 of file Token.cxx.

37 : m_refCount(1),
38 m_technology(copy.m_technology),
39 m_dbID(copy.m_dbID),
40 m_classID(copy.m_classID),
41 m_oid(copy.m_oid),
42 m_type(0) {
43 copy.setData(this);
44 s_numCount.fetch_add(1, std::memory_order_relaxed);
45}
static std::atomic< int > s_numCount
Definition Token.cxx:22
int m_refCount
Reference count.
Definition Token.h:111
Guid m_classID
Object global identifier.
Definition Token.h:119
unsigned int m_technology
Technology identifier.
Definition Token.h:113
OID_t m_oid
Persistent object identifier.
Definition Token.h:121
int m_type
Token type.
Definition Token.h:123
Guid m_dbID
Database identifier.
Definition Token.h:115
bool copy
Definition calibdata.py:26

◆ Token() [2/4]

Token::Token ( )

Standard Constructor.

Standard Constructor(1): Empty constructor.

Definition at line 27 of file Token.cxx.

27 : m_refCount(1),
28 m_technology(0),
31 m_oid(OID_t(~0x0LL, ~0x0LL)),
32 m_type(0) {
33 s_numCount.fetch_add(1, std::memory_order_relaxed);
34}
static const Guid & null() noexcept
NULL-Guid: static class method.
Definition Guid.cxx:14

◆ Token() [3/4]

Token::Token ( const Token * source)
explicit

Constructor with data assignment.

Copy constructor.

Definition at line 48 of file Token.cxx.

48 : m_refCount(1),
49 m_technology(0),
52 m_oid(OID_t(~0x0LL, ~0x0LL)),
53 m_type(0) {
54 if (source != 0) {
55 source->setData(this);
56 }
57 s_numCount.fetch_add(1, std::memory_order_relaxed);
58}

◆ Token() [4/4]

Token::Token ( Token && source)
explicitnoexcept

Allow move.

Move constructor.

Definition at line 61 of file Token.cxx.

62 : m_refCount (1),
63 m_technology (source.m_technology),
64 m_dbID (std::move (source.m_dbID)),
65 m_cntID (std::move (source.m_cntID)),
66 m_classID (std::move (source.m_classID)),
67 m_oid (std::move (source.m_oid)),
68 m_type (source.m_type),
69 m_auxString (std::move (source.m_auxString))
70{
71 s_numCount.fetch_add(1, std::memory_order_relaxed);
72}
std::string m_auxString
Auxiliary string.
Definition Token.h:125
std::string m_cntID
Container identifier.
Definition Token.h:117

◆ ~Token()

Token::~Token ( )
virtual

Standard destructor: release all allocated resources.

Definition at line 75 of file Token.cxx.

75 {
76 s_numCount.fetch_sub(1, std::memory_order_relaxed);
77}

Member Function Documentation

◆ addRef()

int Token::addRef ( )
inline

Increase reference count.

Definition at line 62 of file Token.h.

62{ return ++m_refCount; }

◆ auxString()

const std::string & Token::auxString ( ) const
inline

Access auxiliary string.

Definition at line 91 of file Token.h.

91{ return m_auxString; }

◆ classID()

const Guid & Token::classID ( ) const
inline

Access database identifier.

Definition at line 73 of file Token.h.

73{ return m_classID; }

◆ contID()

const std::string & Token::contID ( ) const
inline

Access container identifier.

Definition at line 69 of file Token.h.

69{ return m_cntID; }

◆ dbID()

const Guid & Token::dbID ( ) const
inline

Access database identifier.

Definition at line 64 of file Token.h.

64{ return m_dbID; }

◆ equal()

bool Token::equal ( const Token & pTok) const
virtual

Fast token comparison: operator equals.

Equality operator.

Definition at line 97 of file Token.cxx.

97 {
98 if (&copy != this) {
99 if (m_oid.second == copy.m_oid.second) {
100 if (m_classID == copy.m_classID) {
101 if (m_dbID == copy.m_dbID) {
102 if (m_cntID == copy.m_cntID) {
103 return true;
104 }
105 }
106 }
107 }
108 return false;
109 }
110 return true;
111}

◆ fromString()

Token & Token::fromString ( const std::string_view from)

Build from the string representation of a token.

Definition at line 147 of file Token.cxx.

147 {
148 m_auxString.clear();
149 size_t pos = 0;
150 while (pos < src.size()) {
151 size_t start = src.find('[', pos);
152 if (start == std::string_view::npos) break;
153 size_t eq = src.find('=', start);
154 size_t end = src.find(']', start);
155 if (eq != std::string_view::npos && end != std::string_view::npos) {
156 std::string_view label = src.substr(start, eq - start + 1);
157 if (label == LABEL_DB) {
158 m_dbID.fromString(src.substr(eq + 1, end - eq - 1));
159 } else if (label == LABEL_CNT) {
160 m_cntID = std::string(src.substr(eq + 1, end - eq - 1));
161 } else if (label == LABEL_CLID) {
162 m_classID.fromString(src.substr(eq + 1, end - eq - 1));
163 } else if (label == LABEL_TECH) {
164 std::string_view num_str = src.substr(eq + 1, end - eq - 1);
165 int tech = 0;
166 std::from_chars(num_str.data(), num_str.data() + num_str.size(), tech, 16);
167 m_technology = tech;
168 } else if (label == LABEL_OID) {
169 std::string_view oid_str = src.substr(eq + 1, end - eq - 1);
170 size_t dash = oid_str.find('-');
171 if (dash != std::string_view::npos) {
172 std::string_view first_str = oid_str.substr(0, dash);
173 std::string_view second_str = oid_str.substr(dash + 1);
174
175 // Check if this is legacy format (8 digits) vs modern format (16 digits)
176 // Legacy format: 5 + 8 + 1 + 8 + 1 = 23 characters total for [OID=XXXXXXXX-XXXXXXXX]
177 // Modern format: 5 + 16 + 1 + 16 + 1 = 39 characters total for [OID=XXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXX]
178 bool is_legacy = (end - start + 1) == 23; // Total bracket length check
179
180 uint64_t first = 0;
181 uint64_t second = 0;
182 std::from_chars(first_str.data(), first_str.data() + first_str.size(), first, 16);
183 std::from_chars(second_str.data(), second_str.data() + second_str.size(), second, 16);
184
185 if (is_legacy) {
186 // Handle legacy format: extend 32-bit ~0x0 to 64-bit ~0x0LL
187 if (static_cast<uint32_t>(first) == ~0x0U) first = ~0x0ULL;
188 if (static_cast<uint32_t>(second) == ~0x0U) second = ~0x0ULL;
189 }
190
191 m_oid.first = static_cast<long long int>(first);
192 m_oid.second = static_cast<long long int>(second);
193 }
194 } else {
195 m_auxString += src.substr(start, end - start + 1);
196 }
197 pos = end + 1;
198 } else {
199 break;
200 }
201 }
202 return *this;
203}
constexpr std::string_view LABEL_DB
Definition Token.cxx:15
constexpr std::string_view LABEL_TECH
Definition Token.cxx:18
constexpr std::string_view LABEL_CLID
Definition Token.cxx:17
constexpr std::string_view LABEL_CNT
Definition Token.cxx:16
constexpr std::string_view LABEL_OID
Definition Token.cxx:19
std::string label(const std::string &format, int i)
Definition label.h:19
bool first
Definition DeMoScan.py:534
setEventNumber uint32_t

◆ key()

const std::string Token::key ( ) const
virtual

Retrieve token key.

Retrieve the string representation of the token.

Definition at line 206 of file Token.cxx.

206 {
207 return std::format(
208 "[DB={}][CNT={}][CLID={}][TECH={:08X}]",
209 m_dbID.to_fixed_string(),
210 m_cntID,
211 m_classID.to_fixed_string(),
213 );
214}
static const int KEY_MASK
Definition Token.cxx:21

◆ less()

bool Token::less ( const Token & pTok) const
virtual

Fast token comparison: operator less.

Operator to allow ordering.

Definition at line 114 of file Token.cxx.

114 {
115 if (&copy != this) {
116 if (m_oid.second < copy.m_oid.second)
117 return true;
118 else if (m_oid.second > copy.m_oid.second)
119 return false;
120 if (!(m_classID == copy.m_classID)) {
121 return (m_classID < copy.m_classID);
122 }
123 if (!(m_dbID == copy.m_dbID)) {
124 return (m_dbID < copy.m_dbID);
125 }
126 int res = m_cntID.compare(copy.m_cntID);
127 if (res != 0) {
128 return (res < 0);
129 }
130 }
131 return false;
132}
std::pair< std::vector< unsigned int >, bool > res

◆ numInstances()

int Token::numInstances ( )
static

expose Token instance counter for debugging

Definition at line 24 of file Token.cxx.

24{ return s_numCount; }

◆ oid() [1/2]

OID_t & Token::oid ( )
inline

Access object identifier.

Definition at line 83 of file Token.h.

83{ return m_oid; }

◆ oid() [2/2]

const OID_t & Token::oid ( ) const
inline

Access object identifier.

Definition at line 81 of file Token.h.

81{ return m_oid; }

◆ operator!=()

bool Token::operator!= ( const Token & refToken) const
inline

Equality operator.

Definition at line 54 of file Token.h.

54{ return !equal(refToken); }
virtual bool equal(const Token &pTok) const
Fast token comparison: operator equals.
Definition Token.cxx:97

◆ operator<()

bool Token::operator< ( const Token & refToken) const
inline

Operator < to allow ordering.

Definition at line 45 of file Token.h.

45{ return less(refToken); }
virtual bool less(const Token &pTok) const
Fast token comparison: operator less.
Definition Token.cxx:114

◆ operator=()

Token & Token::operator= ( const Token & copy)
private

No assignment allowed: put prototype to disable bit-wise assignment.

Assignment operator.

Definition at line 89 of file Token.cxx.

89 {
90 if (&copy != this) {
91 copy.setData(this);
92 }
93 return *this;
94}

◆ operator==()

bool Token::operator== ( const Token & refToken) const
inline

Equality operator.

Definition at line 52 of file Token.h.

52{ return equal(refToken); }

◆ operator>()

bool Token::operator> ( const Token & refToken) const
inline

Operator > to allow ordering.

Definition at line 47 of file Token.h.

47 {
48 if (less(refToken)) return false;
49 return !equal(refToken);
50 }

◆ release()

int Token::release ( )

Release token: Decrease reference count and eventually delete.

Definition at line 80 of file Token.cxx.

80 {
81 int cnt = --m_refCount;
82 if (0 >= cnt) {
83 delete this;
84 }
85 return cnt;
86}

◆ set()

const Token & Token::set ( Token * pToken) const

Set token information.

Definition at line 216 of file Token.cxx.

216 {
217 pToken->m_technology = m_technology;
218 pToken->m_dbID = m_dbID;
219 pToken->m_cntID = m_cntID;
220 pToken->m_classID = m_classID;
221 pToken->m_oid.first = m_oid.first;
222 return *this;
223}

◆ setAuxString()

Token & Token::setAuxString ( const std::string & auxString)
inline

Set auxiliary string.

Definition at line 93 of file Token.h.

93{ m_auxString = auxString; return *this; }
const std::string & auxString() const
Access auxiliary string.
Definition Token.h:91

◆ setClassID()

Token & Token::setClassID ( const Guid & cl_id)
inline

Access database identifier.

Definition at line 75 of file Token.h.

75{ m_classID = cl_id; return *this; }

◆ setCont()

Token & Token::setCont ( const std::string & cnt)
inline

Set container name.

Definition at line 71 of file Token.h.

71{ m_cntID = cnt; return *this; }

◆ setData()

const Token & Token::setData ( Token * pToken) const

Set all the data part of the token.

Definition at line 225 of file Token.cxx.

225 {
226 this->set(pToken);
227 pToken->m_oid.second = m_oid.second;
228 pToken->m_type = m_type;
229 pToken->m_auxString = m_auxString;
230 return *this;
231}
const Token & set(Token *pToken) const
Set token information.
Definition Token.cxx:216

◆ setDb() [1/2]

Token & Token::setDb ( const Guid & db)
inline

Set database name.

Definition at line 66 of file Token.h.

◆ setDb() [2/2]

Token & Token::setDb ( const std::string & db)
inline

Definition at line 67 of file Token.h.

67{ m_dbID.fromString(db); return *this; }

◆ setOid()

Token & Token::setOid ( const OID_t & oid)
inline

Set object identifier.

Definition at line 85 of file Token.h.

85{ m_oid = oid; return *this; }
const OID_t & oid() const
Access object identifier.
Definition Token.h:81

◆ setTechnology()

Token & Token::setTechnology ( int t)
inline

Set technology type.

Definition at line 79 of file Token.h.

79{ m_technology = t; return *this; }

◆ setType()

Token & Token::setType ( int t)
inline

Set token type.

Definition at line 89 of file Token.h.

89{ m_type = t; return *this; }

◆ technology()

int Token::technology ( ) const
inline

Access technology type.

Definition at line 77 of file Token.h.

77{ return m_technology; }

◆ toString()

const std::string Token::toString ( ) const
virtual

Retrieve the string representation of the token.

Definition at line 134 of file Token.cxx.

134 {
135 return std::format(
136 "[DB={}][CNT={}][CLID={}][TECH={:08X}][OID={:016X}-{:016X}]{}",
137 m_dbID.to_fixed_string(),
138 m_cntID,
139 m_classID.to_fixed_string(),
141 static_cast<uint64_t>(m_oid.first),
142 static_cast<uint64_t>(m_oid.second),
144 );
145}

◆ type()

int Token::type ( ) const
inline

Access token type.

Definition at line 87 of file Token.h.

87{ return m_type; }

Member Data Documentation

◆ m_auxString

std::string Token::m_auxString
private

Auxiliary string.

Definition at line 125 of file Token.h.

◆ m_classID

Guid Token::m_classID
private

Object global identifier.

Definition at line 119 of file Token.h.

◆ m_cntID

std::string Token::m_cntID
private

Container identifier.

Definition at line 117 of file Token.h.

◆ m_dbID

Guid Token::m_dbID
private

Database identifier.

Definition at line 115 of file Token.h.

◆ m_oid

OID_t Token::m_oid
private

Persistent object identifier.

Definition at line 121 of file Token.h.

◆ m_refCount

int Token::m_refCount
private

Reference count.

Definition at line 111 of file Token.h.

◆ m_technology

unsigned int Token::m_technology
private

Technology identifier.

Definition at line 113 of file Token.h.

◆ m_type

int Token::m_type
private

Token type.

Definition at line 123 of file Token.h.


The documentation for this class was generated from the following files: