1 #ifndef VTESTBED_GEOMETRY_RECTANGLE_HH 2 #define VTESTBED_GEOMETRY_RECTANGLE_HH 6 #include <vtestbed/geometry/types.hh> 12 template <
class T,
int N>
19 static constexpr
const int dimensions = N;
20 using scalar_type = T;
21 using value_type =
typename base_type::value_type;
22 using pointer =
typename base_type::pointer;
23 using const_pointer =
typename base_type::const_pointer;
24 using reference =
typename base_type::reference;
25 using const_reference =
typename base_type::const_reference;
26 using iterator =
typename base_type::iterator;
27 using const_iterator =
typename base_type::const_iterator;
28 using size_type =
typename base_type::size_type;
29 using difference_type =
typename base_type::difference_type;
30 using reverse_iterator =
typename base_type::reverse_iterator;
31 using const_reverse_iterator =
typename base_type::const_reverse_iterator;
34 using base_type::base_type;
35 using base_type::operator=;
36 using base_type::operator[];
40 Rectangle(const_reference p0, const_reference p1):
45 return this->back() - this->front();
48 inline const_reference min()
const {
return this->front(); }
49 inline const_reference max()
const {
return this->back(); }
50 inline reference min() {
return this->front(); }
51 inline reference max() {
return this->back(); }
52 inline void clear() { this->front() = T{}, this->back() = T{}; }
56 template <
class T,
int N>
59 return (r[0]+r[1])*T{0.5};
62 template <
class T,
int N>
64 area(
const Rectangle<T,N>& r) {
65 return product(r[1] - r[0]);
72 #endif // vim:filetype=cpp