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_TRAITS_HPP |
9 | #define BOOST_POLYGON_RECTANGLE_TRAITS_HPP |
10 | |
11 | #include "isotropy.hpp" |
12 | |
13 | namespace boost { namespace polygon{ |
14 | |
15 | template <typename T, typename enable = gtl_yes> |
16 | struct rectangle_traits {}; |
17 | template <typename T> |
18 | struct rectangle_traits<T, gtl_no> {}; |
19 | |
20 | template <typename T> |
21 | struct rectangle_traits<T, typename gtl_same_type<typename T::interval_type, typename T::interval_type>::type> { |
22 | typedef typename T::coordinate_type coordinate_type; |
23 | typedef typename T::interval_type interval_type; |
24 | static inline interval_type get(const T& rectangle, orientation_2d orient) { |
25 | return rectangle.get(orient); } |
26 | }; |
27 | |
28 | template <typename T> |
29 | struct rectangle_mutable_traits { |
30 | template <typename T2> |
31 | static inline void set(T& rectangle, orientation_2d orient, const T2& interval) { |
32 | rectangle.set(orient, interval); } |
33 | template <typename T2, typename T3> |
34 | static inline T construct(const T2& interval_horizontal, |
35 | const T3& interval_vertical) { |
36 | return T(interval_horizontal, interval_vertical); } |
37 | }; |
38 | } |
39 | } |
40 | #endif |
41 | |