19 #ifndef MIR_GEOMETRY_DIMENSIONS_H_
20 #define MIR_GEOMETRY_DIMENSIONS_H_
37 template<DimensionTag Tag>
44 template<
typename AnyInteger>
45 explicit IntWrapper(AnyInteger value) : value(static_cast<ValueType>(value)) {}
49 return (uint32_t)value;
64 template<DimensionTag Tag>
65 std::ostream& operator<<(std::ostream& out, IntWrapper<Tag>
const& value)
67 out << value.as_int();
71 template<DimensionTag Tag>
77 template<DimensionTag Tag>
83 template<DimensionTag Tag>
86 return lhs.
as_int() <= rhs.as_int();
89 template<DimensionTag Tag>
95 template<DimensionTag Tag>
98 return lhs.
as_int() < rhs.as_int();
101 template<DimensionTag Tag>
120 inline DeltaY
operator+(DeltaY lhs, DeltaY rhs) {
return DeltaY(lhs.as_int() + rhs.as_int()); }
122 inline DeltaY
operator-(DeltaY lhs, DeltaY rhs) {
return DeltaY(lhs.as_int() - rhs.as_int()); }
125 inline X
operator+(X lhs, DeltaX rhs) {
return X(lhs.as_int() + rhs.as_int()); }
126 inline Y
operator+(Y lhs, DeltaY rhs) {
return Y(lhs.as_int() + rhs.as_int()); }
127 inline X
operator-(X lhs, DeltaX rhs) {
return X(lhs.as_int() - rhs.as_int()); }
128 inline Y
operator-(Y lhs, DeltaY rhs) {
return Y(lhs.as_int() - rhs.as_int()); }
131 inline DeltaX
operator-(X lhs, X rhs) {
return DeltaX(lhs.as_int() - rhs.as_int()); }
132 inline DeltaY
operator-(Y lhs, Y rhs) {
return DeltaY(lhs.as_int() - rhs.as_int()); }
135 template<
typename Scalar>
136 inline Width
operator*(Scalar scale, Width
const& w) {
return Width{scale*w.
as_int()}; }
137 template<
typename Scalar>
138 inline Height
operator*(Scalar scale, Height
const& h) {
return Height{scale*h.
as_int()}; }
139 template<
typename Scalar>
141 template<
typename Scalar>
143 template<
typename Scalar>
144 inline Width
operator*(Width
const& w, Scalar scale) {
return scale*w; }
145 template<
typename Scalar>
146 inline Height
operator*(Height
const& h, Scalar scale) {
return scale*h; }
147 template<
typename Scalar>
148 inline DeltaX
operator*(DeltaX
const&
dx, Scalar scale) {
return scale*
dx; }
149 template<
typename Scalar>
150 inline DeltaY
operator*(DeltaY
const&
dy, Scalar scale) {
return scale*
dy; }
152 template<
typename Target,
typename Source>
153 inline Target
dim_cast(Source s) {
return Target(s.as_int()); }
All things Mir.
Definition: buffer_stream.h:37
bool operator==(IntWrapper< Tag > const &lhs, IntWrapper< Tag > const &rhs)
Definition: dimensions.h:72
Width operator*(Scalar scale, Width const &w)
Definition: dimensions.h:136
detail::IntWrapper< detail::dx > DeltaX
Definition: dimensions.h:115
float as_float() const
Definition: dimensions.h:55
DeltaX operator-(DeltaX lhs, DeltaX rhs)
Definition: dimensions.h:121
detail::IntWrapper< detail::height > Height
Definition: dimensions.h:109
int ValueType
Definition: dimensions.h:41
Definition: dimensions.h:35
detail::IntWrapper< detail::stride > Stride
Definition: dimensions.h:111
Definition: dimensions.h:35
DimensionTag
Definition: dimensions.h:35
Definition: dimensions.h:35
detail::IntWrapper< detail::width > Width
Definition: dimensions.h:108
uint32_t as_uint32_t() const
Definition: dimensions.h:47
bool operator>=(IntWrapper< Tag > const &lhs, IntWrapper< Tag > const &rhs)
Definition: dimensions.h:90
Definition: dimensions.h:35
detail::IntWrapper< detail::x > X
Definition: dimensions.h:113
detail::IntWrapper< detail::dy > DeltaY
Definition: dimensions.h:116
bool operator>(IntWrapper< Tag > const &lhs, IntWrapper< Tag > const &rhs)
Definition: dimensions.h:102
Target dim_cast(Source s)
Definition: dimensions.h:153
Definition: dimensions.h:35
Definition: dimensions.h:35
bool operator!=(IntWrapper< Tag > const &lhs, IntWrapper< Tag > const &rhs)
Definition: dimensions.h:78
detail::IntWrapper< detail::y > Y
Definition: dimensions.h:114
Definition: dimensions.h:38
Definition: dimensions.h:35
DeltaX operator+(DeltaX lhs, DeltaX rhs)
Definition: dimensions.h:119
IntWrapper(AnyInteger value)
Definition: dimensions.h:45
int as_int() const
Definition: dimensions.h:51
IntWrapper()
Definition: dimensions.h:43