ATLAS Offline Software
Loading...
Searching...
No Matches
DetectorDescription/Identifier/Identifier/Identifier.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef IDENTIFIER_IDENTIFIER_H
6#define IDENTIFIER_IDENTIFIER_H
7
8#include "GaudiKernel/MsgStream.h"
10#include <string>
11
12/*
13 *
14 * @brief Identifier is a simple type-safe 64 bit unsigned integer. An
15 * Identifier relies on other classes - IdHelpers - to encode and
16 * decode its information.
17 *
18 * The default constructor created an Identifier an invalid state
19 * which can be check with the "is_valid" method to allow some error
20 * checking.
21 *
22 */
24public:
25
27 using value_type = unsigned long long;
28 using diff_type = long long;
29 using size_type = unsigned long long ;
30
31 static constexpr unsigned int NBITS = sizeof(value_type) * 8; // bits per byte
32 static constexpr value_type MAX_BIT = (static_cast<value_type>(1) << (NBITS - 1));
33 static constexpr value_type ALL_BITS = ~(static_cast<value_type>(0));
34
36 Identifier() = default;
37
41 explicit Identifier (value_type value);
42
44 Identifier (const Identifier32& other);
45
49 explicit Identifier (int value);
51
53 Identifier& operator = (const Identifier32& old);
54 Identifier& operator = (value_type value);
57 Identifier& operator = (int value);
58
59private:
63
64public:
65
67 void set (const std::string& id);
68
70 void clear ();
71
74
78
81
85 return id.get_compact();
86 }
87 };
88
89 bool operator == (const Identifier& other) const = default;
90 inline auto operator <=> (const Identifier & other) const {return m_id <=> other.m_id;}
97 bool operator == (value_type other) const;
99 bool operator == (int other) const;
100
102 bool is_valid () const;
103
105 std::string getString() const;
106
108 void show () const;
109
110private:
113
116
119
120 // allow IdDict access to the following private methods
121 friend class IdDictDictionary;
123 friend class AtlasDetectorID;
124 friend class PixelID;
125
127 max_value = ~(static_cast<value_type>(0))
128 };
129
131};
132
133
135namespace std {
136 template<>
137 struct hash<Identifier>{
138 size_t operator()(const Identifier& id) const{
139 return static_cast<size_t>(id.get_compact());
140 }
141 };
142}
143
145
146#endif
bool operator==(const DataVector< T > &a, const DataVector< T > &b)
Vector equality comparison.
constexpr std::enable_if_t< is_bitmask_v< E >, E & > operator&=(E &lhs, E rhs)
operator&=
Definition bitmask.h:185
constexpr std::enable_if_t< is_bitmask_v< E >, E & > operator|=(E &lhs, E rhs)
operator|=
Definition bitmask.h:197
unsigned int value_type
std::string getString() const
Provide a string form of the identifier - hexadecimal.
bool is_valid() const
Check if id is in a valid state.
void clear()
Reset to invalid state.
value_type get_compact() const
Get the compact id.
Identifier(const Identifier32 &other)
Constructor from Identifier32.
Identifier(Identifier32::value_type value)
Constructor from 32-bit value_type and int (to avoid common implicit conversions)
Identifier & set_literal(value_type value)
Set literal value.
void show() const
Print out in hex form.
value_type extract(size_type shift, size_type mask) const
extract field from identifier (shift first, then mask)
value_type mask_shift(value_type mask, size_type shift) const
extract field(s) by masking first, then shifting
value_type extract(size_type shift) const
extract field, no mask
Identifier()=default
Default constructor.
Identifier32 get_identifier32() const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
Identifier(value_type value)
Identifier(int value)
void set(const std::string &id)
build from a string form - hexadecimal
STL namespace.
A get_compact functional for use in STL algorithms.