]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | /* |
2 | Copyright 2008 Intel Corporation | |
3 | ||
4 | Use, modification and distribution are subject to the Boost Software License, | |
5 | Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at | |
6 | http://www.boost.org/LICENSE_1_0.txt). | |
7 | */ | |
8 | #ifndef BOOST_POLYGON_RECTANGLE_DATA_HPP | |
9 | #define BOOST_POLYGON_RECTANGLE_DATA_HPP | |
10 | ||
11 | #include "isotropy.hpp" | |
12 | //interval | |
13 | #include "interval_data.hpp" | |
14 | ||
15 | namespace boost { namespace polygon{ | |
16 | ||
17 | template <typename T> | |
18 | class rectangle_data { | |
19 | public: | |
20 | typedef T coordinate_type; | |
21 | typedef interval_data<T> interval_type; | |
22 | inline rectangle_data():ranges_() {} | |
23 | inline rectangle_data(T xl, T yl, T xh, T yh):ranges_() { | |
24 | if(xl > xh) std::swap(xl, xh); | |
25 | if(yl > yh) std::swap(yl, yh); | |
26 | ranges_[HORIZONTAL] = interval_data<T>(xl, xh); | |
27 | ranges_[VERTICAL] = interval_data<T>(yl, yh); | |
28 | } | |
29 | template <typename interval_type_1, typename interval_type_2> | |
30 | inline rectangle_data(const interval_type_1& hrange, | |
31 | const interval_type_2& vrange):ranges_() { | |
32 | set(HORIZONTAL, hrange); set(VERTICAL, vrange); } | |
33 | ||
34 | inline rectangle_data(const rectangle_data& that):ranges_() { (*this) = that; } | |
35 | inline rectangle_data& operator=(const rectangle_data& that) { | |
36 | ranges_[0] = that.ranges_[0]; ranges_[1] = that.ranges_[1]; return *this; | |
37 | } | |
38 | template <typename T2> | |
39 | inline rectangle_data& operator=(const T2& rvalue); | |
40 | ||
41 | template <typename T2> | |
42 | inline bool operator==(const T2& rvalue) const; | |
43 | template <typename T2> | |
44 | inline bool operator!=(const T2& rvalue) const { return !((*this) == rvalue); } | |
45 | ||
46 | inline interval_data<coordinate_type> get(orientation_2d orient) const { | |
47 | return ranges_[orient.to_int()]; } | |
48 | inline coordinate_type get(direction_2d dir) const { | |
49 | return ranges_[orientation_2d(dir).to_int()].get(direction_1d(dir)); | |
50 | } | |
51 | inline void set(direction_2d dir, coordinate_type value) { | |
52 | return ranges_[orientation_2d(dir).to_int()].set(direction_1d(dir), value); | |
53 | } | |
54 | template <typename interval_type_1> | |
55 | inline void set(orientation_2d orient, const interval_type_1& interval); | |
56 | private: | |
57 | interval_data<coordinate_type> ranges_[2]; | |
58 | }; | |
59 | ||
60 | ||
61 | } | |
62 | } | |
63 | #endif |