19 #ifndef MIR_GEOMETRY_DIMENSIONS_H_
20 #define MIR_GEOMETRY_DIMENSIONS_H_
35 template<
typename Tag>
42 template<
typename AnyInteger>
43 explicit IntWrapper(AnyInteger value) : value(static_cast<ValueType>(value)) {}
47 return (uint32_t)value;
62 template<
typename Tag>
63 std::ostream& operator<<(std::ostream& out, IntWrapper<Tag>
const& value)
65 out << value.as_int();
69 template<
typename Tag>
75 template<
typename Tag>
81 template<
typename Tag>
84 return lhs.
as_int() <= rhs.as_int();
87 template<
typename Tag>
93 template<
typename Tag>
96 return lhs.
as_int() < rhs.as_int();
99 template<
typename Tag>
147 template<
typename Scalar>
148 inline Width
operator*(Scalar scale, Width
const& w) {
return Width{scale*w.
as_int()}; }
149 template<
typename Scalar>
150 inline Height
operator*(Scalar scale, Height
const& h) {
return Height{scale*h.
as_int()}; }
151 template<
typename Scalar>
152 inline DeltaX
operator*(Scalar scale, DeltaX
const& dx) {
return DeltaX{scale*dx.
as_int()}; }
153 template<
typename Scalar>
154 inline DeltaY
operator*(Scalar scale, DeltaY
const& dy) {
return DeltaY{scale*dy.
as_int()}; }
155 template<
typename Scalar>
156 inline Width
operator*(Width
const& w, Scalar scale) {
return scale*w; }
157 template<
typename Scalar>
158 inline Height
operator*(Height
const& h, Scalar scale) {
return scale*h; }
159 template<
typename Scalar>
160 inline DeltaX
operator*(DeltaX
const& dx, Scalar scale) {
return scale*dx; }
161 template<
typename Scalar>
162 inline DeltaY
operator*(DeltaY
const& dy, Scalar scale) {
return scale*dy; }
164 template<
typename Target,
typename Source>
165 inline Target
dim_cast(Source s) {
return Target(s.as_int()); }
All things Mir.
Definition: atomic_callback.h:25
bool operator==(IntWrapper< Tag > const &lhs, IntWrapper< Tag > const &rhs)
Definition: dimensions.h:70
Width operator*(Scalar scale, Width const &w)
Definition: dimensions.h:148
float as_float() const
Definition: dimensions.h:53
DeltaX operator-(DeltaX lhs, DeltaX rhs)
Definition: dimensions.h:119
int ValueType
Definition: dimensions.h:39
detail::IntWrapper< struct DeltaXTag > DeltaX
Definition: dimensions.h:113
detail::IntWrapper< struct YTag > Y
Definition: dimensions.h:112
detail::IntWrapper< struct WidthTag > Width
Definition: dimensions.h:106
uint32_t as_uint32_t() const
Definition: dimensions.h:45
bool operator>=(IntWrapper< Tag > const &lhs, IntWrapper< Tag > const &rhs)
Definition: dimensions.h:88
bool operator>(IntWrapper< Tag > const &lhs, IntWrapper< Tag > const &rhs)
Definition: dimensions.h:100
Target dim_cast(Source s)
Definition: dimensions.h:165
X & operator-=(X &lhs, DeltaX rhs)
Definition: dimensions.h:129
detail::IntWrapper< struct StrideTag > Stride
Definition: dimensions.h:109
X & operator+=(X &lhs, DeltaX rhs)
Definition: dimensions.h:127
bool operator!=(IntWrapper< Tag > const &lhs, IntWrapper< Tag > const &rhs)
Definition: dimensions.h:76
detail::IntWrapper< struct XTag > X
Definition: dimensions.h:111
Definition: dimensions.h:36
detail::IntWrapper< struct HeightTag > Height
Definition: dimensions.h:107
detail::IntWrapper< struct DeltaYTag > DeltaY
Definition: dimensions.h:114
DeltaX operator+(DeltaX lhs, DeltaX rhs)
Definition: dimensions.h:117
IntWrapper(AnyInteger value)
Definition: dimensions.h:43
int as_int() const
Definition: dimensions.h:49
IntWrapper()
Definition: dimensions.h:41