region: move rotate90 out of the header
This commit is contained in:
parent
38e1ce63fd
commit
9d0e9a9f1d
75
region.cpp
75
region.cpp
@ -243,6 +243,59 @@ cruft::region<S,T>::operator== (region rhs) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename T>
|
||||||
|
cruft::region<2,T>
|
||||||
|
cruft::rotate90 (cruft::region<2,T> obj, int steps)
|
||||||
|
{
|
||||||
|
CHECK_LIMIT (steps, 0, 3);
|
||||||
|
|
||||||
|
switch (steps) {
|
||||||
|
case 0:
|
||||||
|
return obj;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
return region2<T> {
|
||||||
|
point2<T> {
|
||||||
|
T(obj.p.x - obj.e.h),
|
||||||
|
obj.p.y
|
||||||
|
},
|
||||||
|
extent2<T> {
|
||||||
|
obj.e.h,
|
||||||
|
obj.e.w,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
return region2<T> {
|
||||||
|
point2<T> {
|
||||||
|
obj.p.x,
|
||||||
|
T(obj.p.y - obj.e.h),
|
||||||
|
},
|
||||||
|
obj.e,
|
||||||
|
};
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
return region2<T> {
|
||||||
|
obj.p,
|
||||||
|
extent2<T> {
|
||||||
|
obj.e.h,
|
||||||
|
obj.e.w,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
unreachable();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
template cruft::region2<i32> cruft::rotate90 (cruft::region2<i32>, int);
|
||||||
|
template cruft::region2<i64> cruft::rotate90 (cruft::region2<i64>, int);
|
||||||
|
template cruft::region2<f32> cruft::rotate90 (cruft::region2<f32>, int);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
template <size_t S, typename T>
|
template <size_t S, typename T>
|
||||||
std::ostream&
|
std::ostream&
|
||||||
@ -264,22 +317,22 @@ namespace cruft::debug {
|
|||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
#define INSTANTIATE_S_T(S,T) \
|
#define INSTANTIATE_S_T(S,T) \
|
||||||
template struct cruft::region<S,T>; \
|
template struct cruft::region<S,T>; \
|
||||||
template std::ostream& cruft::operator<< (std::ostream&, const region<S,T>&); \
|
template std::ostream& cruft::operator<< (std::ostream&, const region<S,T>&); \
|
||||||
template struct cruft::debug::validator<cruft::region<S,T>>;
|
template struct cruft::debug::validator<cruft::region<S,T>>;
|
||||||
|
|
||||||
#define INSTANTIATE(T) \
|
#define INSTANTIATE(T) \
|
||||||
INSTANTIATE_S_T(2,T) \
|
INSTANTIATE_S_T(2,T) \
|
||||||
INSTANTIATE_S_T(3,T)
|
INSTANTIATE_S_T(3,T)
|
||||||
|
|
||||||
INSTANTIATE(int16_t);
|
INSTANTIATE(i16);
|
||||||
INSTANTIATE(int32_t);
|
INSTANTIATE(i32);
|
||||||
INSTANTIATE(int64_t);
|
INSTANTIATE(i64);
|
||||||
|
|
||||||
INSTANTIATE(uint16_t)
|
INSTANTIATE(u16)
|
||||||
INSTANTIATE(uint32_t)
|
INSTANTIATE(u32)
|
||||||
INSTANTIATE(uint64_t)
|
INSTANTIATE(u64)
|
||||||
|
|
||||||
INSTANTIATE(float)
|
INSTANTIATE(f32)
|
||||||
INSTANTIATE(double)
|
INSTANTIATE(f64)
|
||||||
|
44
region.hpp
44
region.hpp
@ -349,48 +349,8 @@ namespace cruft {
|
|||||||
/// `steps` must lie in the range [0, 4) so we can avoid an expensive
|
/// `steps` must lie in the range [0, 4) so we can avoid an expensive
|
||||||
/// modulus in the typical case.
|
/// modulus in the typical case.
|
||||||
template <typename T>
|
template <typename T>
|
||||||
cruft::region<2,T>
|
cruft::region2<T>
|
||||||
rotate (cruft::region<2,T> obj, int steps)
|
rotate90 (cruft::region2<T> obj, int steps);
|
||||||
{
|
|
||||||
CHECK_LIMIT (steps, 0, 3);
|
|
||||||
|
|
||||||
switch (steps) {
|
|
||||||
case 0:
|
|
||||||
return obj;
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
return region2<T> {
|
|
||||||
point2<T> {
|
|
||||||
obj.p.x - obj.e.h,
|
|
||||||
obj.p.y
|
|
||||||
},
|
|
||||||
extent2<T> {
|
|
||||||
obj.e.h,
|
|
||||||
obj.e.w,
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
return region2<T> {
|
|
||||||
point2<T> {
|
|
||||||
obj.p.x,
|
|
||||||
obj.p.y - obj.e.h,
|
|
||||||
},
|
|
||||||
obj.e,
|
|
||||||
};
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
return region2<T> {
|
|
||||||
obj.p,
|
|
||||||
extent2<T> {
|
|
||||||
obj.e.h,
|
|
||||||
obj.e.w,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
unreachable();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -228,7 +228,7 @@ main (int, char **)
|
|||||||
};
|
};
|
||||||
|
|
||||||
for (auto const &obj: TESTS) {
|
for (auto const &obj: TESTS) {
|
||||||
auto const computed = rotate (orig, obj.rotation);
|
auto const computed = rotate90 (orig, obj.rotation);
|
||||||
tap.expect_eq (computed, obj.res, "%! rotation", obj.rotation);
|
tap.expect_eq (computed, obj.res, "%! rotation", obj.rotation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user