Browse Source

Math: added Range::padded() function.

pull/34/head
Vladimír Vondruš 13 years ago
parent
commit
66e6ab6684
  1. 17
      src/Math/Range.h
  2. 13
      src/Math/Test/RangeTest.cpp

17
src/Math/Range.h

@ -143,9 +143,19 @@ template<UnsignedInt dimensions, class T> class Range {
*
* Translates the minimal and maximal coordinates by given amount. Size
* remains the same.
* @see @ref padded()
*/
Range<dimensions, T> translated(const VectorType& vector) const;
/**
* @brief Padded rage
*
* Translates the minimal and maximal coordinates by given amount.
* Center remains the same.
* @see @ref translated()
*/
Range<dimensions, T> padded(const VectorType& padding) const;
private:
VectorType _min, _max;
};
@ -157,6 +167,9 @@ template<UnsignedInt dimensions, class T> class Range {
} \
Type<T> translated(const VectorType<T>& vector) const { \
return Range<dimensions, T>::translated(vector); \
} \
Type<T> padded(const VectorType<T>& padding) const { \
return Range<dimensions, T>::padded(padding); \
}
#endif
@ -437,6 +450,10 @@ template<UnsignedInt dimensions, class T> Range<dimensions, T> Range<dimensions,
return {_min + vector, _max + vector};
}
template<UnsignedInt dimensions, class T> Range<dimensions, T> Range<dimensions, T>::padded(const VectorType& padding) const {
return {_min - padding, _max + padding};
}
}}
namespace Corrade { namespace Utility {

13
src/Math/Test/RangeTest.cpp

@ -50,6 +50,7 @@ class RangeTest: public Corrade::TestSuite::Tester {
void center();
void translated();
void padded();
void subclassTypes();
void subclass();
@ -80,6 +81,7 @@ RangeTest::RangeTest() {
&RangeTest::center,
&RangeTest::translated,
&RangeTest::padded,
&RangeTest::subclassTypes,
&RangeTest::subclass,
@ -282,6 +284,14 @@ void RangeTest::translated() {
CORRADE_COMPARE(a.size(), b.size());
}
void RangeTest::padded() {
Range2Di a({34, 23}, {47, 30});
Range2Di b({31, 28}, {50, 25});
CORRADE_COMPARE(a.padded({3, -5}), b);
CORRADE_COMPARE(a.center(), b.center());
}
template<class T> class BasicRect: public Math::Range<2, T> {
public:
template<class ...U> BasicRect(U&&... args): Math::Range<2, T>{std::forward<U>(args)...} {}
@ -297,6 +307,7 @@ void RangeTest::subclassTypes() {
const Recti r;
CORRADE_VERIFY((std::is_same<decltype(r.translated(a)), Recti>::value));
CORRADE_VERIFY((std::is_same<decltype(r.padded(a)), Recti>::value));
}
void RangeTest::subclass() {
@ -305,6 +316,8 @@ void RangeTest::subclass() {
CORRADE_COMPARE(Recti(Vector2i{34, 23}, Vector2i{47, 30}).translated({-17, 40}),
Recti(Vector2i{17, 63}, Vector2i{30, 70}));
CORRADE_COMPARE(Recti(Vector2i{34, 23}, Vector2i{47, 30}).padded({3, -5}),
Recti(Vector2i{31, 28}, Vector2i{50, 25}));
}
void RangeTest::debug() {

Loading…
Cancel
Save