7#include "../macros.hpp"
13hi_export_module(hikogui.utility.units);
15hi_export
namespace hi {
inline namespace v1 {
17template<
typename Tag,
typename T,
typename Ratio = std::ratio<1>>
23 constexpr unit(
unit const&)
noexcept =
default;
24 constexpr unit(
unit&&)
noexcept =
default;
25 constexpr unit& operator=(
unit const&)
noexcept =
default;
26 constexpr unit& operator=(
unit&&)
noexcept =
default;
28 constexpr explicit unit(value_type value)
noexcept : _value(value) {}
30 template<
typename OtherT,
typename OtherRatio>
32 requires(
not std::is_same_v<unit<Tag, OtherT, OtherRatio>,
unit>)
37 tmp *= conversion::den;
38 tmp /= conversion::num;
42 template<
typename OtherT,
typename OtherRatio>
44 requires(
not std::is_same_v<unit<Tag, OtherT, OtherRatio>,
unit>)
49 tmp *= conversion::den;
50 tmp /= conversion::num;
55 [[
nodiscard]]
constexpr value_type count()
const noexcept
60 [[
nodiscard]]
constexpr unit operator*(value_type
const& rhs)
const noexcept
62 return unit{count() * rhs};
65 [[
nodiscard]]
constexpr unit operator/(value_type
const& rhs)
const noexcept
67 return unit{count() / rhs};
72 _value += rhs.count();
78 _value -= rhs.count();
82 [[
nodiscard]]
constexpr unit& operator*=(value_type
const& rhs)
noexcept
88 [[
nodiscard]]
constexpr unit& operator/=(value_type
const& rhs)
noexcept
100template<
typename Tag,
typename T1,
typename Ratio1,
typename T2,
typename Ratio2>
105 std::common_type_t<T1, T2>,
106 std::conditional_t<std::ratio_less_v<Ratio1, Ratio2>, Ratio1, Ratio2>>;
110hi_export
namespace hi {
inline namespace v1 {
112template<
typename Tag,
typename T1,
typename Ratio1,
typename T2,
typename Ratio2>
118 auto const rhs_ = common_type{rhs};
120 return lhs_.count() ==
rhs_.count();
123template<
typename Tag,
typename T1,
typename Ratio1,
typename T2,
typename Ratio2>
128 auto const lhs_ = common_type{lhs};
129 auto const rhs_ = common_type{rhs};
131 return lhs_.count() <=>
rhs_.count();
134template<
typename Tag,
typename T1,
typename Ratio1,
typename T2,
typename Ratio2>
139 auto const lhs_ = common_type{lhs};
140 auto const rhs_ = common_type{rhs};
142 return common_type{
lhs_.count() +
rhs_.count()};
145template<
typename Tag,
typename T1,
typename Ratio1,
typename T2,
typename Ratio2>
150 auto const lhs_ = common_type{lhs};
151 auto const rhs_ = common_type{rhs};
153 return common_type{
lhs_.count() -
rhs_.count()};
156template<
typename Tag,
typename T1,
typename Ratio1,
typename T2,
typename Ratio2>
161 auto const lhs_ = common_type{lhs};
162 auto const rhs_ = common_type{rhs};
Functions for casting values between types savely.
@ other
The gui_event does not have associated data.
DOXYGEN BUG.
Definition algorithm_misc.hpp:20
The HikoGUI namespace.
Definition recursive_iterator.hpp:15
constexpr Out narrow_cast(In const &rhs) noexcept
Cast numeric values without loss of precision.
Definition cast.hpp:378