ATLAS Offline Software
Loading...
Searching...
No Matches
DetectorDescription/Identifier/Identifier/Identifier.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef IDENTIFIER_IDENTIFIER_H
6#define IDENTIFIER_IDENTIFIER_H
7
8
10#include <string>
11#include <string_view>
12#include <iosfwd>
13
14class MsgStream;
15/*
16 *
17 * @brief Identifier is a simple type-safe 64 bit unsigned integer. An
18 * Identifier relies on other classes - IdHelpers - to encode and
19 * decode its information.
20 *
21 * The default constructor created an Identifier an invalid state
22 * which can be check with the "is_valid" method to allow some error
23 * checking.
24 *
25 */
27public:
28
30 using value_type = unsigned long long;
31 using diff_type = long long;
32 using size_type = unsigned long long ;
33
34 static constexpr unsigned int NBITS = sizeof(value_type) * 8; // bits per byte
35 static constexpr value_type MAX_BIT = (static_cast<value_type>(1) << (NBITS - 1));
36 static constexpr value_type ALL_BITS = ~(static_cast<value_type>(0));
37
39 Identifier() = default;
40
44 explicit Identifier (value_type value);
45
47 Identifier (const Identifier32& other);
48
52 explicit Identifier (int value);
54
61
62private:
66
67public:
68
70 void set (std::string_view id);
71
73 void clear ();
74
77
81
84
87 value_type operator() (const Identifier& id){
88 return id.get_compact();
89 }
90 };
91
92 bool operator == (const Identifier& other) const = default;
93 inline auto operator <=> (const Identifier & other) const {return m_id <=> other.m_id;}
100 bool operator == (value_type other) const;
102 bool operator == (int other) const;
103
105 bool is_valid () const;
106
108 std::string getString() const;
109
111 void show (std::ostream & out) const;
112 void show (MsgStream & out) const;
113
114private:
117
120
123
124 // allow IdDict access to the following private methods
125 friend class IdDictDictionary;
127 friend class AtlasDetectorID;
128 friend class PixelID;
129
131 max_value = ~(static_cast<value_type>(0))
132 };
133
135};
136
137MsgStream&
138operator<<(MsgStream& f, const Identifier& id);
139
140std::ostream&
141operator<<(std::ostream& os, const Identifier& id);
142
144namespace std {
145 template<>
146 struct hash<Identifier>{
147 size_t operator()(const Identifier& id) const{
148 return static_cast<size_t>(id.get_compact());
149 }
150 };
151}
152
154
155#endif
bool operator==(const DataVector< T > &a, const DataVector< T > &b)
Vector equality comparison.
MsgStream & operator<<(MsgStream &f, const Identifier &id)
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.
void show(std::ostream &out) const
Print out in hex form.
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 set(std::string_view id)
build from a string form - hexadecimal
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)
STL namespace.
A get_compact functional for use in STL algorithms.