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

This class provides a encapsulation of a GUID/UUID/CLSID/IID data structure (128 bit number). More...

#include <Guid.h>

Collaboration diagram for Guid:

Classes

struct  FallBack
 
class  string
 A class designed to facilitate exchange of Guid::string objects without additional allocations. More...
 

Public Types

enum  GuidGenMethod { GuidGenDefault, GuidGenRandom, GuidGenByTime }
 

Public Member Functions

constexpr Guid ()
 Standard constructor. More...
 
 Guid (bool assign)
 Standard constructor (With possible initialization) More...
 
 Guid (const std::string &s, FallBack)
 
constexpr Guid (std::string_view s)
 Constructor for Guid from string_view. More...
 
constexpr Guid (const char *s)
 
 Guid (const Guid &c)=default
 Copy constructor. More...
 
Guidoperator= (const Guid &c)=default
 
auto operator (const Guid &) const =default
 Magic spaceship operator. More...
 
bool operator== (const Guid &) const =default
 
bool operator== (std::string_view str) const
 
constexpr void toString (std::span< char, StrLen > buf, bool uppercase=true) const noexcept
 Automatic conversion to string representation. More...
 
constexpr std::string toString (bool uppercase=true) const
 
constexpr Guid::string to_fixed_string (bool uppercase=true) const
 
constexpr void fromString (std::string_view s)
 Automatic conversion from string representation. More...
 
void fromStringFallBack (const std::string &)
 
unsigned int data1 () const
 Allow accessors to member data. More...
 
unsigned short data2 () const
 
unsigned short data3 () const
 
unsigned char data4 (unsigned int i) const
 
void setData1 (unsigned int data)
 Allow modifiers for member data. More...
 
void setData2 (unsigned short data)
 
void setData3 (unsigned short data)
 
void setData4 (unsigned char data, unsigned int i)
 

Static Public Member Functions

constexpr static int stringSize ()
 
static bool isGuid (std::string_view) noexcept
 
static const Guidnull () noexcept
 NULL-Guid: static class method. More...
 
static GuidGenMethod initGuidGenMethod ()
 Checks for POOL_GUID_TIME or POOL_GUID_RANDOM env variables. More...
 
static void create (Guid &guid, GuidGenMethod method=GuidGenDefault)
 Create a new Guid default method is currently Random, can be changed by param, API or environment. More...
 

Static Public Attributes

static constexpr size_t StrLen = 36
 
static const GuidGenMethod m_guidGenMethod = Guid::initGuidGenMethod()
 

Private Member Functions

constexpr void setToNull () noexcept
 

Private Attributes

unsigned int m_data1 {}
 
unsigned short m_data2 {}
 
unsigned short m_data3 {}
 
std::array< unsigned char, 8 > m_data4 {}
 

Friends

bool operator== (std::string_view str, const Guid &rhs)
 Equality operator. More...
 
bool operator!= (std::string_view str, const Guid &rhs)
 Non-equality operator. More...
 
std::ostream & operator<< (std::ostream &os, const Guid &rhs)
 Extraction operators. More...
 

Detailed Description

This class provides a encapsulation of a GUID/UUID/CLSID/IID data structure (128 bit number).

Definition at line 25 of file Guid.h.

Member Enumeration Documentation

◆ GuidGenMethod

Enumerator
GuidGenDefault 
GuidGenRandom 
GuidGenByTime 

Definition at line 84 of file Guid.h.

Constructor & Destructor Documentation

◆ Guid() [1/6]

constexpr Guid::Guid ( )
inlineconstexpr

Standard constructor.

Definition at line 43 of file Guid.h.

43 : m_data1(0U), m_data2(0U), m_data3(0U), m_data4() {}

◆ Guid() [2/6]

Guid::Guid ( bool  assign)
inlineexplicit

Standard constructor (With possible initialization)

Definition at line 45 of file Guid.h.

45 : Guid() { if (assign) create(*this); }

◆ Guid() [3/6]

Guid::Guid ( const std::string &  s,
FallBack   
)
inline

Definition at line 48 of file Guid.h.

◆ Guid() [4/6]

constexpr Guid::Guid ( std::string_view  s)
inlineconstexpr

Constructor for Guid from string_view.

Definition at line 50 of file Guid.h.

50 { fromString(s); }

◆ Guid() [5/6]

constexpr Guid::Guid ( const char *  s)
inlineconstexpr

Definition at line 52 of file Guid.h.

52 { fromString(s); }

◆ Guid() [6/6]

Guid::Guid ( const Guid c)
default

Copy constructor.

Member Function Documentation

◆ create()

void Guid::create ( Guid guid,
GuidGenMethod  method = GuidGenDefault 
)
static

Create a new Guid default method is currently Random, can be changed by param, API or environment.

Create a new Guid.

Definition at line 29 of file Guid.cxx.

29  {
30  uuid_t me_;
32  switch(method) {
33  case GuidGenRandom:
34  ::uuid_generate(me_);
35  break;
36  case GuidGenByTime:
37  ::uuid_generate_time(me_);
38  break;
39  default:
40  ::uuid_generate(me_);
41  break;
42  }
43  unsigned int *d1 = (unsigned int*)me_;
44  unsigned short *d2 = (unsigned short*)(me_ + 4);
45  unsigned short *d3 = (unsigned short*)(me_ + 6);
46  guid.m_data1 = *d1;
47  guid.m_data2 = *d2;
48  guid.m_data3 = *d3;
49  for (unsigned int i = 0; i < 8; i++) {
50  guid.m_data4[i] = me_[i + 8];
51  }
52 }

◆ data1()

unsigned int Guid::data1 ( ) const
inline

Allow accessors to member data.

Definition at line 94 of file Guid.h.

94 { return m_data1; }

◆ data2()

unsigned short Guid::data2 ( ) const
inline

Definition at line 95 of file Guid.h.

95 { return m_data2; }

◆ data3()

unsigned short Guid::data3 ( ) const
inline

Definition at line 96 of file Guid.h.

96 { return m_data3; }

◆ data4()

unsigned char Guid::data4 ( unsigned int  i) const
inline

Definition at line 97 of file Guid.h.

97 { if (i < 8) return m_data4[i]; return 0; }

◆ fromString()

constexpr void Guid::fromString ( std::string_view  s)
constexpr

Automatic conversion from string representation.

Definition at line 143 of file Guid.h.

143  {
144  // Trim any whitespace
145  if(std::is_constant_evaluated() && std::min(sv.find_first_not_of(' '), sv.size()) > 0){
146  throw std::runtime_error("Remove spaces from GUID");
147  }
148  sv.remove_prefix(std::min(sv.find_first_not_of(' '), sv.size()));
149  auto last_non_space = sv.find_last_not_of(' ');
150  if (last_non_space == std::string_view::npos) {
151  sv = {}; // String is empty or all spaces
152  } else {
153  if(std::is_constant_evaluated() && (sv.size() - last_non_space - 1)!=0){
154  throw std::runtime_error("Remove spaces from GUID");
155  }
156  sv.remove_suffix(sv.size() - last_non_space - 1);
157  }
158 
159  // Validate format
160  if (sv.size() != 36 ||
161  sv[8] != '-' || sv[13] != '-' || sv[18] != '-' || sv[23] != '-') {
162  setToNull();
163  if(std::is_constant_evaluated()){
164  throw std::runtime_error("failed to compile time parse GUID");
165  }
166  return;
167  }
168  bool success = true;
169  // Custom constexpr hex parser
170  auto parse_hex = [&success](std::string_view part) -> unsigned long long {
171  unsigned long long val = 0;
172  for (char c : part) {
173  val <<= 4; // Multiply by 16
174  if (c >= '0' && c <= '9') {
175  val += static_cast<unsigned long long>(c - '0');
176  } else if (c >= 'a' && c <= 'f') {
177  val += static_cast<unsigned long long>(10 + c - 'a');
178  } else if (c >= 'A' && c <= 'F') {
179  val += static_cast<unsigned long long>(10 + c - 'A');
180  } else {
181  success = false;
182  return 0;
183  }
184  }
185  return val;
186  };
187 
188  // Parse m_data1 (positions 0-7)
189  m_data1 = static_cast<unsigned int>(parse_hex(sv.substr(0, 8)));
190 
191  // Parse m_data2 (positions 9-12)
192  m_data2 = static_cast<unsigned short>(parse_hex(sv.substr(9, 4)));
193 
194  // Parse m_data3 (positions 14-17)
195  m_data3 = static_cast<unsigned short>(parse_hex(sv.substr(14, 4)));
196 
197 
198  // Parse m_data4 bytes
199  int pos = 19;
200  for(int i =0; i< 2; i++){
201  auto val = parse_hex(sv.substr(pos, 2));
202  m_data4[i] = static_cast<unsigned char>(val);
203  pos+=2;
204  }
205  //Skip the dash at pos 23
206  pos = 24;
207  for(int i =2; i< 8; i++){
208  auto val = parse_hex(sv.substr(pos, 2));
209  m_data4[i] = static_cast<unsigned char>(val);
210  pos+=2;
211  }
212 
213  if (!success) {
214  setToNull();
215  if(std::is_constant_evaluated()){
216  throw std::runtime_error("failed to compile time parse GUID");
217  }
218  }
219  return;
220 }

◆ fromStringFallBack()

void Guid::fromStringFallBack ( const std::string &  s)

Definition at line 86 of file Guid.cxx.

86  {
87  //If it conforms to correct Guid use fast method
88  if(isGuid(s)){
89  fromString(s);
90  return;
91  }
92  //If not try "old" more error tolerant method
93  //sscanf will correct subtle corner cases:
94  //when the input string was missing a single hexadecimal digit,
95  // e.g., 83B9F174-5E27-11E4-98C2-02163E00A82,
96  // sscanf still reported 11 successful conversions.
97  //So, the outcome is an "auto-corrected" CLID as 83B9F174-5E27-11E4-98C2-02163E00A802
98  static const char* const fmt_Guid = "%08X-%04hX-%04hX-%02hhX%02hhX-%02hhX%02hhX%02hhX%02hhX%02hhX%02hhX";
99  if (::sscanf(s.c_str(), fmt_Guid, &m_data1, &m_data2, &m_data3,
100  &m_data4[0], &m_data4[1], &m_data4[2], &m_data4[3], &m_data4[4], &m_data4[5], &m_data4[6], &m_data4[7]) != 11) {
101  setToNull();
102  }
103  return;
104 }

◆ initGuidGenMethod()

Guid::GuidGenMethod Guid::initGuidGenMethod ( )
static

Checks for POOL_GUID_TIME or POOL_GUID_RANDOM env variables.

Definition at line 20 of file Guid.cxx.

20  {
21  char* envv = getenv("POOL_GUID_TIME");
22  if (envv != 0 && *envv) return GuidGenByTime;
23  envv = getenv("POOL_GUID_RANDOM");
24  if (envv != 0 && *envv) return GuidGenRandom;
25  return GuidGenDefault;
26 }

◆ isGuid()

bool Guid::isGuid ( std::string_view  sv)
staticnoexcept

Definition at line 54 of file Guid.cxx.

54  {
55  // The GUID must be exactly 36 characters long
56  if (sv.size() != 36) {
57  return false;
58  }
59 
60  // Check for hyphens at specific positions (0-based indices: 8, 13, 18, 23)
61  if (sv[8] != '-' || sv[13] != '-' || sv[18] != '-' || sv[23] != '-') {
62  return false;
63  }
64 
65  // Validate that all other characters are hexadecimal digits (0-9, a-f, A-F)
66  for (size_t i = 0; i < 36; ++i) {
67  // Skip hyphen positions
68  if (i == 8 || i == 13 || i == 18 || i == 23) {
69  continue;
70  }
71 
72  char c = sv[i];
73  // Check if it's a valid hex digit
74  if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))) {
75  return false;
76  }
77  }
78  return true;
79 }

◆ null()

const Guid & Guid::null ( )
staticnoexcept

NULL-Guid: static class method.

Definition at line 14 of file Guid.cxx.

14  {
15  return clid_null;
16 }

◆ operator()

auto Guid::operator ( const Guid ) const
default

Magic spaceship operator.

◆ operator=()

Guid& Guid::operator= ( const Guid c)
default

◆ operator==() [1/2]

bool Guid::operator== ( const Guid ) const
default

◆ operator==() [2/2]

bool Guid::operator== ( std::string_view  str) const

Definition at line 81 of file Guid.cxx.

81  {
82  return str.size() == Guid::string::stringSize() && *this == Guid(str);
83 }

◆ setData1()

void Guid::setData1 ( unsigned int  data)
inline

Allow modifiers for member data.

Definition at line 100 of file Guid.h.

100 { m_data1 = data; }

◆ setData2()

void Guid::setData2 ( unsigned short  data)
inline

Definition at line 101 of file Guid.h.

101 { m_data2 = data; }

◆ setData3()

void Guid::setData3 ( unsigned short  data)
inline

Definition at line 102 of file Guid.h.

102 { m_data3 = data; }

◆ setData4()

void Guid::setData4 ( unsigned char  data,
unsigned int  i 
)
inline

Definition at line 103 of file Guid.h.

103 { if (i < 8) m_data4[i] = data; }

◆ setToNull()

constexpr void Guid::setToNull ( )
constexprprivatenoexcept

Definition at line 135 of file Guid.h.

135  {
136  m_data1 = 0U;
137  m_data2 = 0U;
138  m_data3 = 0U;
139  m_data4.fill('\0');
140 }

◆ stringSize()

constexpr static int Guid::stringSize ( )
inlinestaticconstexpr

Definition at line 61 of file Guid.h.

61 { return StrLen; }

◆ to_fixed_string()

constexpr Guid::string Guid::to_fixed_string ( bool  uppercase = true) const
inlineconstexpr

Definition at line 70 of file Guid.h.

70  {
72  toString(buffer, uppercase);
73  return buffer;
74  }

◆ toString() [1/2]

constexpr std::string Guid::toString ( bool  uppercase = true) const
inlineconstexpr

Definition at line 65 of file Guid.h.

65  {
66  std::string buf(Guid::string::stringSize(), ' ');
67  toString(std::span<char, stringSize()>(buf.data(), stringSize()), uppercase);
68  return buf;
69  }

◆ toString() [2/2]

constexpr void Guid::toString ( std::span< char, StrLen buf,
bool  uppercase = true 
) const
constexprnoexcept

Automatic conversion to string representation.

Friends And Related Function Documentation

◆ operator!=

bool operator!= ( std::string_view  str,
const Guid rhs 
)
friend

Non-equality operator.

Definition at line 108 of file Guid.h.

108 { return !(rhs.operator==(str)); }

◆ operator<<

std::ostream& operator<< ( std::ostream &  os,
const Guid rhs 
)
friend

Extraction operators.

Definition at line 106 of file Guid.cxx.

106  {
107  auto buff = rhs.to_fixed_string();
108  os.write(buff.data(), buff.size());
109  return os;
110 }

◆ operator==

bool operator== ( std::string_view  str,
const Guid rhs 
)
friend

Equality operator.

Definition at line 106 of file Guid.h.

106 { return (rhs.operator==(str)); }

Member Data Documentation

◆ m_data1

unsigned int Guid::m_data1 {}
private

Definition at line 114 of file Guid.h.

◆ m_data2

unsigned short Guid::m_data2 {}
private

Definition at line 115 of file Guid.h.

◆ m_data3

unsigned short Guid::m_data3 {}
private

Definition at line 116 of file Guid.h.

◆ m_data4

std::array<unsigned char,8> Guid::m_data4 {}
private

Definition at line 117 of file Guid.h.

◆ m_guidGenMethod

const Guid::GuidGenMethod Guid::m_guidGenMethod = Guid::initGuidGenMethod()
static

Definition at line 85 of file Guid.h.

◆ StrLen

constexpr size_t Guid::StrLen = 36
staticconstexpr

Definition at line 27 of file Guid.h.


The documentation for this class was generated from the following files:
RunTileTBRec.method
method
Definition: RunTileTBRec.py:73
LArG4FSStartPointFilter.part
part
Definition: LArG4FSStartPointFilter.py:21
get_hdefs.buff
buff
Definition: get_hdefs.py:61
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
CxxUtils::span
span(T *ptr, std::size_t sz) -> span< T >
A couple needed deduction guides.
Guid::stringSize
constexpr static int stringSize()
Definition: Guid.h:61
Guid::Guid
constexpr Guid()
Standard constructor.
Definition: Guid.h:43
Guid::setToNull
constexpr void setToNull() noexcept
Definition: Guid.h:135
Guid::fromString
constexpr void fromString(std::string_view s)
Automatic conversion from string representation.
Definition: Guid.h:143
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
dq_defect_virtual_defect_validation.d1
d1
Definition: dq_defect_virtual_defect_validation.py:79
Guid::StrLen
static constexpr size_t StrLen
Definition: Guid.h:27
Guid::string::stringSize
static constexpr int stringSize()
Definition: Guid.h:37
Guid::to_fixed_string
constexpr Guid::string to_fixed_string(bool uppercase=true) const
Definition: Guid.h:70
Guid::fromStringFallBack
void fromStringFallBack(const std::string &)
Definition: Guid.cxx:86
Guid::m_data3
unsigned short m_data3
Definition: Guid.h:116
Guid::GuidGenByTime
@ GuidGenByTime
Definition: Guid.h:84
Guid::create
static void create(Guid &guid, GuidGenMethod method=GuidGenDefault)
Create a new Guid default method is currently Random, can be changed by param, API or environment.
Definition: Guid.cxx:29
Guid::toString
constexpr void toString(std::span< char, StrLen > buf, bool uppercase=true) const noexcept
Automatic conversion to string representation.
createCoolChannelIdFile.buffer
buffer
Definition: createCoolChannelIdFile.py:11
Guid::GuidGenRandom
@ GuidGenRandom
Definition: Guid.h:84
Guid::operator
auto operator(const Guid &) const =default
Magic spaceship operator.
lumiFormat.i
int i
Definition: lumiFormat.py:85
python.DecayParser.buf
buf
print ("=> [%s]"cmd)
Definition: DecayParser.py:26
Guid::GuidGenDefault
@ GuidGenDefault
Definition: Guid.h:84
python.CaloAddPedShiftConfig.str
str
Definition: CaloAddPedShiftConfig.py:42
ReadFromCoolCompare.os
os
Definition: ReadFromCoolCompare.py:226
pool_uuid.guid
guid
Definition: pool_uuid.py:112
Guid::m_data1
unsigned int m_data1
Definition: Guid.h:114
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:16
SCT_ConditionsAlgorithms::CoveritySafe::getenv
std::string getenv(const std::string &variableName)
get an environment variable
Definition: SCT_ConditionsUtilities.cxx:17
Guid::string
A class designed to facilitate exchange of Guid::string objects without additional allocations.
Definition: Guid.h:31
Guid::m_guidGenMethod
static const GuidGenMethod m_guidGenMethod
Definition: Guid.h:85
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
dq_defect_virtual_defect_validation.d2
d2
Definition: dq_defect_virtual_defect_validation.py:81
LArCellConditions.sv
bool sv
Definition: LArCellConditions.py:45
python.SystemOfUnits.s
float s
Definition: SystemOfUnits.py:147
str
Definition: BTagTrackIpAccessor.cxx:11
Guid::m_data4
std::array< unsigned char, 8 > m_data4
Definition: Guid.h:117
Guid::m_data2
unsigned short m_data2
Definition: Guid.h:115
Guid::isGuid
static bool isGuid(std::string_view) noexcept
Definition: Guid.cxx:54
python.compressB64.c
def c
Definition: compressB64.py:93