HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
length.hpp
1// Copyright Take Vos 2024.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
4
5#pragma once
6
7#include "em_squares.hpp"
8#include "pixels.hpp"
9#include "points.hpp"
10#include "dips.hpp"
11#include "../macros.hpp"
12#include <hikothird/au.hh>
13#include <concepts>
14#include <variant>
15
16hi_export_module(hikogui.unit : length);
17
18hi_export namespace hi {
19inline namespace v1 {
20
21template<typename T>
22using length_variant =
23 std::variant<au::Quantity<Points, T>, au::Quantity<Pixels, T>, au::Quantity<Dips, T>, au::Quantity<EmSquares, T>>;
24
25template<typename T>
26class length_quantity : public length_variant<T> {
27 using super = length_variant<T>;
28
29 using super::super;
30};
31
34
35} // namespace v1
36}
37
38template<std::integral T>
39struct std::hash<hi::length_quantity<T>> {
40 [[nodiscard]] size_t operator()(hi::length_quantity<T> const& rhs) const noexcept
41 {
42 auto h = std::hash<size_t>{}(rhs.index());
43 h ^= std::visit(
44 [](auto&& rhs_) {
45 return std::hash<T>{}(rhs_);
46 },
47 rhs);
48 return h;
49 }
50};
The HikoGUI namespace.
Definition array_generic.hpp:20
DOXYGEN BUG.
Definition algorithm_misc.hpp:20
Definition length.hpp:26
Definition au.hh:3518
T operator()(T... args)