2
3
4
5
6
7
8
9
10
11
12
13
14
15
17#ifndef MIR_GEOMETRY_DIMENSIONS_H_
18#define MIR_GEOMETRY_DIMENSIONS_H_
32template<
typename T,
typename Tag>
41 template <
typename Q = T>
42 constexpr typename std::enable_if<std::is_integral<Q>::value,
int>::
type as_int()
const
47 template <
typename Q = T>
48 constexpr typename std::enable_if<std::is_integral<Q>::value, uint32_t>::
type as_uint32_t()
const
66 constexpr Value(Value
const& that)
noexcept
72 explicit constexpr Value(Value<U, Tag>
const& value)
noexcept
73 :
value{
static_cast<T>(value.as_value())}
77 template<
typename U,
typename std::enable_if<std::is_scalar<U>::value,
bool>::type =
true>
78 explicit constexpr Value(U
const& value)
noexcept
79 :
value{
static_cast<T>(value)}
83 inline constexpr auto operator == (Value<T, Tag>
const& rhs)
const ->
bool
85 return value == rhs.as_value();
88 inline constexpr auto operator != (Value<T, Tag>
const& rhs)
const ->
bool
90 return value != rhs.as_value();
93 inline constexpr auto operator <= (Value<T, Tag>
const& rhs)
const ->
bool
95 return value <= rhs.as_value();
98 inline constexpr auto operator >= (Value<T, Tag>
const& rhs)
const ->
bool
100 return value >= rhs.as_value();
103 inline constexpr auto operator < (Value<T, Tag>
const& rhs)
const ->
bool
105 return value < rhs.as_value();
108 inline constexpr auto operator > (Value<T, Tag>
const& rhs)
const ->
bool
110 return value > rhs.as_value();
117template<
typename T,
typename Tag>
118std::ostream& operator<<(std::ostream& out, Value<T, Tag>
const& value)
120 out << value.as_value();