17 #ifndef MIR_GEOMETRY_DIMENSIONS_H_
18 #define MIR_GEOMETRY_DIMENSIONS_H_
23 #include <type_traits>
32 template<
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();
117 template<
typename T,
typename Tag>
118 std::ostream& operator<<(std::ostream& out, Value<T, Tag>
const& value)
120 out << value.as_value();
205 template<
typename T,
typename Scalar>
207 template<
typename T,
typename Scalar>
209 template<
typename T,
typename Scalar>
211 template<
typename T,
typename Scalar>
213 template<
typename T,
typename Scalar>
215 template<
typename T,
typename Scalar>
217 template<
typename T,
typename Scalar>
219 template<
typename T,
typename Scalar>
223 template<
typename T,
typename Scalar>
225 template<
typename T,
typename Scalar>
227 template<
typename T,
typename Scalar>
229 template<
typename T,
typename Scalar>