ATLAS Offline Software
Classes | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
Token Class Reference

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

#include <Token.h>

Inheritance diagram for Token:
Collaboration diagram for Token:

Classes

struct  OID_t
 

Public Member Functions

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

Static Public Member Functions

static int numInstances ()
 expose Token instance counter for debugging More...
 

Private Member Functions

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

Private Attributes

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

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 }

◆ 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),
29  m_dbID(Guid::null()),
31  m_oid(OID_t(~0x0LL, ~0x0LL)),
32  m_type(0) {
33  s_numCount.fetch_add(1, std::memory_order_relaxed);
34 }

◆ 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),
50  m_dbID(Guid::null()),
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 }

◆ ~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.

Reimplemented in pool::DbToken.

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 }

◆ 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.toString(),
210  m_cntID,
212  m_technology & KEY_MASK
213  );
214 }

◆ less()

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

Fast token comparison: operator less.

Operator to allow ordering.

Reimplemented in pool::DbToken.

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 }

◆ 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); }

◆ 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); }

◆ 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; }

◆ 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 }

◆ setDb() [1/2]

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

Set database name.

Definition at line 66 of file Token.h.

66 { m_dbID = db; return *this; }

◆ 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; }

◆ 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.toString(),
138  m_cntID,
140  m_technology,
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:
Token::m_type
int m_type
Token type.
Definition: Token.h:123
Guid::toString
constexpr void toString(std::span< char, 36 > buf, bool uppercase=true) const noexcept
Automatic conversion to string representation.
Definition: Guid.h:179
vtune_athena.format
format
Definition: vtune_athena.py:14
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
WriteCellNoiseToCool.src
src
Definition: WriteCellNoiseToCool.py:513
CaloCondBlobAlgs_fillNoiseFromASCII.db
db
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:42
mergePhysValFiles.start
start
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:13
Token::auxString
const std::string & auxString() const
Access auxiliary string.
Definition: Token.h:91
Token::m_dbID
Guid m_dbID
Database identifier.
Definition: Token.h:115
python.SystemOfUnits.second
float second
Definition: SystemOfUnits.py:135
Token::m_technology
unsigned int m_technology
Technology identifier.
Definition: Token.h:113
Token::less
virtual bool less(const Token &pTok) const
Fast token comparison: operator less.
Definition: Token.cxx:114
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:92
Token::m_classID
Guid m_classID
Object global identifier.
Definition: Token.h:119
LABEL_OID
constexpr std::string_view LABEL_OID
Definition: Token.cxx:19
Token::m_cntID
std::string m_cntID
Container identifier.
Definition: Token.h:117
LABEL_TECH
constexpr std::string_view LABEL_TECH
Definition: Token.cxx:18
Token::equal
virtual bool equal(const Token &pTok) const
Fast token comparison: operator equals.
Definition: Token.cxx:97
LABEL_CNT
constexpr std::string_view LABEL_CNT
Definition: Token.cxx:16
res
std::pair< std::vector< unsigned int >, bool > res
Definition: JetGroupProductTest.cxx:11
add-xsec-uncert-quadrature-N.label
label
Definition: add-xsec-uncert-quadrature-N.py:104
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
Token::m_oid
OID_t m_oid
Persistent object identifier.
Definition: Token.h:121
LABEL_DB
constexpr std::string_view LABEL_DB
Definition: Token.cxx:15
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:16
Guid::null
static const Guid & null() noexcept
NULL-Guid: static class method.
Definition: Guid.cxx:14
LABEL_CLID
constexpr std::string_view LABEL_CLID
Definition: Token.cxx:17
Token::m_auxString
std::string m_auxString
Auxiliary string.
Definition: Token.h:125
trigbs_pickEvents.cnt
cnt
Definition: trigbs_pickEvents.py:71
Token::oid
const OID_t & oid() const
Access object identifier.
Definition: Token.h:81
DeMoScan.first
bool first
Definition: DeMoScan.py:534
copySelective.source
string source
Definition: copySelective.py:31
calibdata.copy
bool copy
Definition: calibdata.py:26
Token::m_refCount
int m_refCount
Reference count.
Definition: Token.h:111
Token::set
const Token & set(Token *pToken) const
Set token information.
Definition: Token.cxx:216
Guid::fromString
constexpr Guid & fromString(std::string_view s)
Automatic conversion from string representation.
Definition: Guid.h:99