12#include "detray/definitions/detail/qualifiers.hpp"
13#include "detray/definitions/geometry.hpp"
14#include "detray/definitions/indexing.hpp"
15#include "detray/utils/bit_encoder.hpp"
22namespace detray::geometry {
58 return static_cast<dindex>(
59 encoder::template get_bits<k_volume_mask>(m_value));
66 encoder::template get_bits<k_id_mask>(m_value));
72 return static_cast<dindex>(
73 encoder::template get_bits<k_index_mask>(m_value));
79 return static_cast<dindex>(
80 encoder::template get_bits<k_transform_mask>(m_value));
86 return static_cast<dindex>(
87 encoder::template get_bits<k_extra_mask>(m_value));
95 encoder::template set_bits<k_volume_mask>(m_value,
volume);
104 encoder::template set_bits<k_id_mask>(
106 static_cast<std::underlying_type_t<surface_id>
>(
id)));
115 encoder::template set_bits<k_index_mask>(m_value,
index);
124 encoder::template set_bits<k_transform_mask>(m_value,
index);
133 encoder::template set_bits<k_extra_mask>(m_value,
extra);
142 return encoder::template
is_invalid<k_volume_mask, k_id_mask, k_index_mask,
143 k_transform_mask>(m_value);
155 const auto l{lhs.index()};
156 const auto r{rhs.index()};
157 if (l < r || (l == r && l < r)) {
158 return std::strong_ordering::less;
160 if (l > r || (l == r && l > r)) {
161 return std::strong_ordering::greater;
163 return std::strong_ordering::equivalent;
168 static constexpr value_t k_volume_mask = 0xfff0000000000000;
169 static constexpr value_t k_id_mask = 0x000f000000000000;
170 static constexpr value_t k_index_mask = 0x0000fffff8000000;
171 static constexpr value_t k_transform_mask = 0x0000000007ffffc0;
172 static constexpr value_t k_extra_mask = 0x000000000000003f;
176 static_assert(k_volume_mask + k_id_mask + k_index_mask + k_transform_mask +
178 ~static_cast<value_t>(0));
181 value_t m_value{~static_cast<value_t>(0)};
186 if (c.is_invalid()) {
190 os <<
"vol = " << c.volume();
191 os <<
" | id = " << c.id() <<
"(" <<
static_cast<int>(c.id()) <<
")";
192 os <<
" | index = " << c.index();
193 os <<
" | trf = " << c.transform();
194 os <<
" | extra = " << c.extra();
206struct hash<
detray::geometry::identifier> {
208 return std::hash<detray::geometry::identifier::value_t>()(gid.value());
Sets masked bits to a given value.
Definition bit_encoder.hpp:28
Unique identifier for geometry objects, based on the ACTS GeometryIdentifier.
Definition identifier.hpp:36
friend std::ostream & operator<<(std::ostream &os, const identifier c)
Print the surface identifier.
Definition identifier.hpp:185
constexpr identifier & set_extra(value_t extra)
Set the extra identifier.
Definition identifier.hpp:132
constexpr surface_id id() const
Definition identifier.hpp:64
constexpr dindex volume() const
Definition identifier.hpp:57
constexpr dindex extra() const
Definition identifier.hpp:85
detail::bit_encoder< value_t > encoder
Bit encoder used to read and update the packed fields.
Definition identifier.hpp:41
std::uint_least64_t value_t
Unsigned storage type for the packed identifier fields.
Definition identifier.hpp:39
constexpr bool is_invalid() const noexcept
Check whether the identifier is valid to use.
Definition identifier.hpp:141
constexpr identifier & set_id(surface_id id)
Set the surface id.
Definition identifier.hpp:103
constexpr value_t value() const noexcept
Definition identifier.hpp:53
constexpr identifier & set_index(value_t index)
Set the surface index.
Definition identifier.hpp:114
constexpr identifier()=default
Construct default identifier with all values set to 1.
constexpr identifier & set_transform(value_t index)
Set the transform index.
Definition identifier.hpp:123
constexpr identifier & set_volume(value_t volume)
Set the volume index.
Definition identifier.hpp:94
constexpr dindex index() const
Definition identifier.hpp:71
friend constexpr auto operator<=>(const identifier lhs, const identifier rhs) noexcept
Comparison operators.
Definition identifier.hpp:153
constexpr identifier(value_t encoded)
Construct from an already encoded value.
Definition identifier.hpp:46
bool operator==(const identifier &rhs) const =default
Compare the complete packed identifier value.
constexpr dindex transform() const
Definition identifier.hpp:78
Detray include(s).
Definition array_operators.hpp:18
unsigned int dindex
Default index type.
Definition indexing.hpp:18
surface_id
surface type, resolved during navigation.
Definition geometry.hpp:41