15namespace dimval::detail {
17[[nodiscard]]
inline std::size_t hash_combine(std::size_t seed,
const std::size_t v)
noexcept {
19 seed ^= v + 0x9e3779b97f4a7c15ULL + (seed << 6) + (seed >> 2);
25template <dimval::UnitLike U, dimval::NumericValue T>
26struct std::hash<dimval::UnitValue<U, T>> {
28 std::size_t s = std::hash<std::string_view>{}(U::id);
29 s = dimval::detail::hash_combine(s, std::hash<T>{}(v.v));
34template <dimval::MeasureLike M, dimval::NumericValue T>
35struct std::hash<dimval::MeasureValue<M, T>> {
37 std::size_t s = std::hash<std::string_view>{}(M::id);
38 s = dimval::detail::hash_combine(s, std::hash<T>{}(v.v));
43template <dimval::UnitLike U, dimval::NumericValue T>
44struct std::hash<dimval::UnitRangeValue<U, T>> {
46 std::size_t s = std::hash<std::string_view>{}(U::id);
47 s = dimval::detail::hash_combine(s, std::hash<T>{}(r.min().v));
48 s = dimval::detail::hash_combine(s, std::hash<T>{}(r.max().v));
49 s = dimval::detail::hash_combine(s,
static_cast<std::size_t
>(r.inclusion().lower));
50 s = dimval::detail::hash_combine(s,
static_cast<std::size_t
>(r.inclusion().upper));
55template <dimval::MeasureLike M, dimval::NumericValue T>
56struct std::hash<dimval::MeasureRangeValue<M, T>> {
58 std::size_t s = std::hash<std::string_view>{}(M::id);
59 s = dimval::detail::hash_combine(s, std::hash<T>{}(r.min().v));
60 s = dimval::detail::hash_combine(s, std::hash<T>{}(r.max().v));
61 s = dimval::detail::hash_combine(s,
static_cast<std::size_t
>(r.inclusion().lower));
62 s = dimval::detail::hash_combine(s,
static_cast<std::size_t
>(r.inclusion().upper));
Closed/open interval over a MeasureValue<M,T>.
Definition range.hpp:196
Closed/open interval over a UnitValue<U,T>.
Definition range.hpp:45
MeasureValue<M,T>: a UnitValue tagged with an additional semantic measure.
UnitRangeValue and MeasureRangeValue — closed/open intervals of dimensional values.
A value carrying both a measure tag and a unit tag.
Definition measure.hpp:31
A value paired at the type level with a unit tag.
Definition unit.hpp:36
Concepts and helper accessors that drive the static side of dimval.
UnitValue<U,T>: a strongly-typed value carrying a compile-time unit tag.