Chris@16
|
1 /*
|
Chris@16
|
2 Copyright 2008 Intel Corporation
|
Chris@16
|
3
|
Chris@16
|
4 Use, modification and distribution are subject to the Boost Software License,
|
Chris@16
|
5 Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
6 http://www.boost.org/LICENSE_1_0.txt).
|
Chris@16
|
7 */
|
Chris@16
|
8 #ifndef BOOST_POLYGON_POLYGON_45_SET_VIEW_HPP
|
Chris@16
|
9 #define BOOST_POLYGON_POLYGON_45_SET_VIEW_HPP
|
Chris@16
|
10 namespace boost { namespace polygon{
|
Chris@16
|
11
|
Chris@16
|
12 template <typename ltype, typename rtype, int op_type>
|
Chris@16
|
13 class polygon_45_set_view;
|
Chris@16
|
14
|
Chris@16
|
15 template <typename ltype, typename rtype, int op_type>
|
Chris@16
|
16 struct polygon_45_set_traits<polygon_45_set_view<ltype, rtype, op_type> > {
|
Chris@16
|
17 typedef typename polygon_45_set_view<ltype, rtype, op_type>::coordinate_type coordinate_type;
|
Chris@16
|
18 typedef typename polygon_45_set_view<ltype, rtype, op_type>::iterator_type iterator_type;
|
Chris@16
|
19 typedef typename polygon_45_set_view<ltype, rtype, op_type>::operator_arg_type operator_arg_type;
|
Chris@16
|
20
|
Chris@16
|
21 static inline iterator_type begin(const polygon_45_set_view<ltype, rtype, op_type>& polygon_45_set);
|
Chris@16
|
22 static inline iterator_type end(const polygon_45_set_view<ltype, rtype, op_type>& polygon_45_set);
|
Chris@16
|
23
|
Chris@16
|
24 template <typename input_iterator_type>
|
Chris@16
|
25 static inline void set(polygon_45_set_view<ltype, rtype, op_type>& polygon_45_set,
|
Chris@16
|
26 input_iterator_type input_begin, input_iterator_type input_end);
|
Chris@16
|
27
|
Chris@16
|
28 static inline bool clean(const polygon_45_set_view<ltype, rtype, op_type>& polygon_45_set);
|
Chris@16
|
29
|
Chris@16
|
30 };
|
Chris@16
|
31
|
Chris@16
|
32 template <typename value_type, typename ltype, typename rtype, int op_type>
|
Chris@16
|
33 struct compute_45_set_value {
|
Chris@16
|
34 static
|
Chris@16
|
35 void value(value_type& output_, const ltype& lvalue_, const rtype& rvalue_) {
|
Chris@16
|
36 output_.set(polygon_45_set_traits<ltype>::begin(lvalue_),
|
Chris@16
|
37 polygon_45_set_traits<ltype>::end(lvalue_));
|
Chris@16
|
38 value_type rinput_;
|
Chris@16
|
39 rinput_.set(polygon_45_set_traits<rtype>::begin(rvalue_),
|
Chris@16
|
40 polygon_45_set_traits<rtype>::end(rvalue_));
|
Chris@16
|
41 #ifdef BOOST_POLYGON_MSVC
|
Chris@16
|
42 #pragma warning (push)
|
Chris@16
|
43 #pragma warning (disable: 4127)
|
Chris@16
|
44 #endif
|
Chris@16
|
45 if(op_type == 0)
|
Chris@16
|
46 output_ |= rinput_;
|
Chris@16
|
47 else if(op_type == 1)
|
Chris@16
|
48 output_ &= rinput_;
|
Chris@16
|
49 else if(op_type == 2)
|
Chris@16
|
50 output_ ^= rinput_;
|
Chris@16
|
51 else
|
Chris@16
|
52 output_ -= rinput_;
|
Chris@16
|
53 #ifdef BOOST_POLYGON_MSVC
|
Chris@16
|
54 #pragma warning (pop)
|
Chris@16
|
55 #endif
|
Chris@16
|
56 }
|
Chris@16
|
57 };
|
Chris@16
|
58
|
Chris@16
|
59 template <typename value_type, typename ltype, typename rcoord, int op_type>
|
Chris@16
|
60 struct compute_45_set_value<value_type, ltype, polygon_45_set_data<rcoord>, op_type> {
|
Chris@16
|
61 static
|
Chris@16
|
62 void value(value_type& output_, const ltype& lvalue_, const polygon_45_set_data<rcoord>& rvalue_) {
|
Chris@16
|
63 output_.set(polygon_45_set_traits<ltype>::begin(lvalue_),
|
Chris@16
|
64 polygon_45_set_traits<ltype>::end(lvalue_));
|
Chris@16
|
65 #ifdef BOOST_POLYGON_MSVC
|
Chris@16
|
66 #pragma warning (push)
|
Chris@16
|
67 #pragma warning (disable: 4127)
|
Chris@16
|
68 #endif
|
Chris@16
|
69 if(op_type == 0)
|
Chris@16
|
70 output_ |= rvalue_;
|
Chris@16
|
71 else if(op_type == 1)
|
Chris@16
|
72 output_ &= rvalue_;
|
Chris@16
|
73 else if(op_type == 2)
|
Chris@16
|
74 output_ ^= rvalue_;
|
Chris@16
|
75 else
|
Chris@16
|
76 output_ -= rvalue_;
|
Chris@16
|
77 #ifdef BOOST_POLYGON_MSVC
|
Chris@16
|
78 #pragma warning (pop)
|
Chris@16
|
79 #endif
|
Chris@16
|
80 }
|
Chris@16
|
81 };
|
Chris@16
|
82
|
Chris@16
|
83 template <typename ltype, typename rtype, int op_type>
|
Chris@16
|
84 class polygon_45_set_view {
|
Chris@16
|
85 public:
|
Chris@16
|
86 typedef typename polygon_45_set_traits<ltype>::coordinate_type coordinate_type;
|
Chris@16
|
87 typedef polygon_45_set_data<coordinate_type> value_type;
|
Chris@16
|
88 typedef typename value_type::iterator_type iterator_type;
|
Chris@16
|
89 typedef polygon_45_set_view operator_arg_type;
|
Chris@16
|
90 private:
|
Chris@16
|
91 const ltype& lvalue_;
|
Chris@16
|
92 const rtype& rvalue_;
|
Chris@16
|
93 mutable value_type output_;
|
Chris@16
|
94 mutable bool evaluated_;
|
Chris@16
|
95
|
Chris@16
|
96 polygon_45_set_view& operator=(const polygon_45_set_view&);
|
Chris@16
|
97 public:
|
Chris@16
|
98 polygon_45_set_view(const ltype& lvalue,
|
Chris@16
|
99 const rtype& rvalue ) :
|
Chris@16
|
100 lvalue_(lvalue), rvalue_(rvalue), output_(), evaluated_(false) {}
|
Chris@16
|
101
|
Chris@16
|
102 // get iterator to begin vertex data
|
Chris@16
|
103 public:
|
Chris@16
|
104 const value_type& value() const {
|
Chris@16
|
105 if(!evaluated_) {
|
Chris@16
|
106 evaluated_ = true;
|
Chris@16
|
107 compute_45_set_value<value_type, ltype, rtype, op_type>::value(output_, lvalue_, rvalue_);
|
Chris@16
|
108 }
|
Chris@16
|
109 return output_;
|
Chris@16
|
110 }
|
Chris@16
|
111 public:
|
Chris@16
|
112 iterator_type begin() const { return value().begin(); }
|
Chris@16
|
113 iterator_type end() const { return value().end(); }
|
Chris@16
|
114
|
Chris@16
|
115 bool dirty() const { return value().dirty(); } //result of a boolean is clean
|
Chris@16
|
116 bool sorted() const { return value().sorted(); } //result of a boolean is sorted
|
Chris@16
|
117
|
Chris@16
|
118 // template <typename input_iterator_type>
|
Chris@16
|
119 // void set(input_iterator_type input_begin, input_iterator_type input_end,
|
Chris@16
|
120 // orientation_2d orient) const {
|
Chris@16
|
121 // orient_ = orient;
|
Chris@16
|
122 // output_.clear();
|
Chris@16
|
123 // output_.insert(output_.end(), input_begin, input_end);
|
Chris@16
|
124 // polygon_sort(output_.begin(), output_.end());
|
Chris@16
|
125 // }
|
Chris@16
|
126 };
|
Chris@16
|
127
|
Chris@16
|
128 template <typename ltype, typename rtype, int op_type>
|
Chris@16
|
129 typename polygon_45_set_traits<polygon_45_set_view<ltype, rtype, op_type> >::iterator_type
|
Chris@16
|
130 polygon_45_set_traits<polygon_45_set_view<ltype, rtype, op_type> >::
|
Chris@16
|
131 begin(const polygon_45_set_view<ltype, rtype, op_type>& polygon_45_set) {
|
Chris@16
|
132 return polygon_45_set.begin();
|
Chris@16
|
133 }
|
Chris@16
|
134 template <typename ltype, typename rtype, int op_type>
|
Chris@16
|
135 typename polygon_45_set_traits<polygon_45_set_view<ltype, rtype, op_type> >::iterator_type
|
Chris@16
|
136 polygon_45_set_traits<polygon_45_set_view<ltype, rtype, op_type> >::
|
Chris@16
|
137 end(const polygon_45_set_view<ltype, rtype, op_type>& polygon_45_set) {
|
Chris@16
|
138 return polygon_45_set.end();
|
Chris@16
|
139 }
|
Chris@16
|
140 template <typename ltype, typename rtype, int op_type>
|
Chris@16
|
141 bool polygon_45_set_traits<polygon_45_set_view<ltype, rtype, op_type> >::
|
Chris@16
|
142 clean(const polygon_45_set_view<ltype, rtype, op_type>& polygon_45_set) {
|
Chris@16
|
143 return polygon_45_set.value().clean(); }
|
Chris@16
|
144
|
Chris@16
|
145 template <typename geometry_type_1, typename geometry_type_2, int op_type>
|
Chris@16
|
146 geometry_type_1& self_assignment_boolean_op_45(geometry_type_1& lvalue_, const geometry_type_2& rvalue_) {
|
Chris@16
|
147 typedef geometry_type_1 ltype;
|
Chris@16
|
148 typedef geometry_type_2 rtype;
|
Chris@16
|
149 typedef typename polygon_45_set_traits<ltype>::coordinate_type coordinate_type;
|
Chris@16
|
150 typedef polygon_45_set_data<coordinate_type> value_type;
|
Chris@16
|
151 value_type output_;
|
Chris@16
|
152 value_type rinput_;
|
Chris@16
|
153 output_.set(polygon_45_set_traits<ltype>::begin(lvalue_),
|
Chris@16
|
154 polygon_45_set_traits<ltype>::end(lvalue_));
|
Chris@16
|
155 rinput_.set(polygon_45_set_traits<rtype>::begin(rvalue_),
|
Chris@16
|
156 polygon_45_set_traits<rtype>::end(rvalue_));
|
Chris@16
|
157 #ifdef BOOST_POLYGON_MSVC
|
Chris@16
|
158 #pragma warning (push)
|
Chris@16
|
159 #pragma warning (disable: 4127)
|
Chris@16
|
160 #endif
|
Chris@16
|
161 if(op_type == 0)
|
Chris@16
|
162 output_ |= rinput_;
|
Chris@16
|
163 else if(op_type == 1)
|
Chris@16
|
164 output_ &= rinput_;
|
Chris@16
|
165 else if(op_type == 2)
|
Chris@16
|
166 output_ ^= rinput_;
|
Chris@16
|
167 else
|
Chris@16
|
168 output_ -= rinput_;
|
Chris@16
|
169 #ifdef BOOST_POLYGON_MSVC
|
Chris@16
|
170 #pragma warning (pop)
|
Chris@16
|
171 #endif
|
Chris@16
|
172 polygon_45_set_mutable_traits<geometry_type_1>::set(lvalue_, output_.begin(), output_.end());
|
Chris@16
|
173 return lvalue_;
|
Chris@16
|
174 }
|
Chris@16
|
175
|
Chris@16
|
176 template <typename concept_type>
|
Chris@16
|
177 struct fracture_holes_option_by_type {
|
Chris@16
|
178 static const bool value = true;
|
Chris@16
|
179 };
|
Chris@16
|
180 template <>
|
Chris@16
|
181 struct fracture_holes_option_by_type<polygon_45_with_holes_concept> {
|
Chris@16
|
182 static const bool value = false;
|
Chris@16
|
183 };
|
Chris@16
|
184 template <>
|
Chris@16
|
185 struct fracture_holes_option_by_type<polygon_with_holes_concept> {
|
Chris@16
|
186 static const bool value = false;
|
Chris@16
|
187 };
|
Chris@16
|
188
|
Chris@16
|
189 template <typename ltype, typename rtype, int op_type>
|
Chris@16
|
190 struct geometry_concept<polygon_45_set_view<ltype, rtype, op_type> > { typedef polygon_45_set_concept type; };
|
Chris@16
|
191
|
Chris@16
|
192 namespace operators {
|
Chris@16
|
193 struct y_ps45_b : gtl_yes {};
|
Chris@16
|
194
|
Chris@16
|
195 template <typename geometry_type_1, typename geometry_type_2>
|
Chris@16
|
196 typename enable_if< typename gtl_and_4< y_ps45_b,
|
Chris@16
|
197 typename is_polygon_45_or_90_set_type<geometry_type_1>::type,
|
Chris@16
|
198 typename is_polygon_45_or_90_set_type<geometry_type_2>::type,
|
Chris@16
|
199 typename is_either_polygon_45_set_type<geometry_type_1, geometry_type_2>::type>::type,
|
Chris@16
|
200 polygon_45_set_view<geometry_type_1, geometry_type_2, 0> >::type
|
Chris@16
|
201 operator|(const geometry_type_1& lvalue, const geometry_type_2& rvalue) {
|
Chris@16
|
202 return polygon_45_set_view<geometry_type_1, geometry_type_2, 0>
|
Chris@16
|
203 (lvalue, rvalue);
|
Chris@16
|
204 }
|
Chris@16
|
205
|
Chris@16
|
206 struct y_ps45_p : gtl_yes {};
|
Chris@16
|
207
|
Chris@16
|
208 template <typename geometry_type_1, typename geometry_type_2>
|
Chris@16
|
209 typename enable_if< typename gtl_and_4< y_ps45_p,
|
Chris@16
|
210 typename gtl_if<typename is_polygon_45_or_90_set_type<geometry_type_1>::type>::type,
|
Chris@16
|
211 typename gtl_if<typename is_polygon_45_or_90_set_type<geometry_type_2>::type>::type,
|
Chris@16
|
212 typename gtl_if<typename is_either_polygon_45_set_type<geometry_type_1, geometry_type_2>::type>::type>::type,
|
Chris@16
|
213 polygon_45_set_view<geometry_type_1, geometry_type_2, 0> >::type
|
Chris@16
|
214 operator+(const geometry_type_1& lvalue, const geometry_type_2& rvalue) {
|
Chris@16
|
215 return polygon_45_set_view<geometry_type_1, geometry_type_2, 0>
|
Chris@16
|
216 (lvalue, rvalue);
|
Chris@16
|
217 }
|
Chris@16
|
218
|
Chris@16
|
219 struct y_ps45_s : gtl_yes {};
|
Chris@16
|
220
|
Chris@16
|
221 template <typename geometry_type_1, typename geometry_type_2>
|
Chris@16
|
222 typename enable_if< typename gtl_and_4< y_ps45_s, typename is_polygon_45_or_90_set_type<geometry_type_1>::type,
|
Chris@16
|
223 typename is_polygon_45_or_90_set_type<geometry_type_2>::type,
|
Chris@16
|
224 typename is_either_polygon_45_set_type<geometry_type_1, geometry_type_2>::type>::type,
|
Chris@16
|
225 polygon_45_set_view<geometry_type_1, geometry_type_2, 1> >::type
|
Chris@16
|
226 operator*(const geometry_type_1& lvalue, const geometry_type_2& rvalue) {
|
Chris@16
|
227 return polygon_45_set_view<geometry_type_1, geometry_type_2, 1>
|
Chris@16
|
228 (lvalue, rvalue);
|
Chris@16
|
229 }
|
Chris@16
|
230
|
Chris@16
|
231 struct y_ps45_a : gtl_yes {};
|
Chris@16
|
232
|
Chris@16
|
233 template <typename geometry_type_1, typename geometry_type_2>
|
Chris@16
|
234 typename enable_if< typename gtl_and_4< y_ps45_a, typename is_polygon_45_or_90_set_type<geometry_type_1>::type,
|
Chris@16
|
235 typename is_polygon_45_or_90_set_type<geometry_type_2>::type,
|
Chris@16
|
236 typename is_either_polygon_45_set_type<geometry_type_1, geometry_type_2>::type>::type,
|
Chris@16
|
237 polygon_45_set_view<geometry_type_1, geometry_type_2, 1> >::type
|
Chris@16
|
238 operator&(const geometry_type_1& lvalue, const geometry_type_2& rvalue) {
|
Chris@16
|
239 return polygon_45_set_view<geometry_type_1, geometry_type_2, 1>
|
Chris@16
|
240 (lvalue, rvalue);
|
Chris@16
|
241 }
|
Chris@16
|
242
|
Chris@16
|
243 struct y_ps45_x : gtl_yes {};
|
Chris@16
|
244
|
Chris@16
|
245 template <typename geometry_type_1, typename geometry_type_2>
|
Chris@16
|
246 typename enable_if< typename gtl_and_4< y_ps45_x, typename is_polygon_45_or_90_set_type<geometry_type_1>::type,
|
Chris@16
|
247 typename is_polygon_45_or_90_set_type<geometry_type_2>::type,
|
Chris@16
|
248 typename is_either_polygon_45_set_type<geometry_type_1, geometry_type_2>::type>::type,
|
Chris@16
|
249 polygon_45_set_view<geometry_type_1, geometry_type_2, 2> >::type
|
Chris@16
|
250 operator^(const geometry_type_1& lvalue, const geometry_type_2& rvalue) {
|
Chris@16
|
251 return polygon_45_set_view<geometry_type_1, geometry_type_2, 2>
|
Chris@16
|
252 (lvalue, rvalue);
|
Chris@16
|
253 }
|
Chris@16
|
254
|
Chris@16
|
255 struct y_ps45_m : gtl_yes {};
|
Chris@16
|
256
|
Chris@16
|
257 template <typename geometry_type_1, typename geometry_type_2>
|
Chris@16
|
258 typename enable_if< typename gtl_and_4< y_ps45_m,
|
Chris@16
|
259 typename gtl_if<typename is_polygon_45_or_90_set_type<geometry_type_1>::type>::type,
|
Chris@16
|
260 typename gtl_if<typename is_polygon_45_or_90_set_type<geometry_type_2>::type>::type,
|
Chris@16
|
261 typename gtl_if<typename is_either_polygon_45_set_type<geometry_type_1, geometry_type_2>::type>::type>::type,
|
Chris@16
|
262 polygon_45_set_view<geometry_type_1, geometry_type_2, 3> >::type
|
Chris@16
|
263 operator-(const geometry_type_1& lvalue, const geometry_type_2& rvalue) {
|
Chris@16
|
264 return polygon_45_set_view<geometry_type_1, geometry_type_2, 3>
|
Chris@16
|
265 (lvalue, rvalue);
|
Chris@16
|
266 }
|
Chris@16
|
267
|
Chris@16
|
268 struct y_ps45_pe : gtl_yes {};
|
Chris@16
|
269
|
Chris@16
|
270 template <typename geometry_type_1, typename geometry_type_2>
|
Chris@16
|
271 typename enable_if< typename gtl_and_4<y_ps45_pe, typename is_mutable_polygon_45_set_type<geometry_type_1>::type, gtl_yes,
|
Chris@16
|
272 typename is_polygon_45_or_90_set_type<geometry_type_2>::type>::type,
|
Chris@16
|
273 geometry_type_1>::type &
|
Chris@16
|
274 operator+=(geometry_type_1& lvalue, const geometry_type_2& rvalue) {
|
Chris@16
|
275 return self_assignment_boolean_op_45<geometry_type_1, geometry_type_2, 0>(lvalue, rvalue);
|
Chris@16
|
276 }
|
Chris@16
|
277
|
Chris@16
|
278 struct y_ps45_be : gtl_yes {};
|
Chris@16
|
279
|
Chris@16
|
280 template <typename geometry_type_1, typename geometry_type_2>
|
Chris@16
|
281 typename enable_if< typename gtl_and_3<y_ps45_be, typename is_mutable_polygon_45_set_type<geometry_type_1>::type,
|
Chris@16
|
282 typename is_polygon_45_or_90_set_type<geometry_type_2>::type>::type,
|
Chris@16
|
283 geometry_type_1>::type &
|
Chris@16
|
284 operator|=(geometry_type_1& lvalue, const geometry_type_2& rvalue) {
|
Chris@16
|
285 return self_assignment_boolean_op_45<geometry_type_1, geometry_type_2, 0>(lvalue, rvalue);
|
Chris@16
|
286 }
|
Chris@16
|
287
|
Chris@16
|
288 struct y_ps45_se : gtl_yes {};
|
Chris@16
|
289
|
Chris@16
|
290 template <typename geometry_type_1, typename geometry_type_2>
|
Chris@16
|
291 typename enable_if< typename gtl_and_3< y_ps45_se,
|
Chris@16
|
292 typename is_mutable_polygon_45_set_type<geometry_type_1>::type,
|
Chris@16
|
293 typename is_polygon_45_or_90_set_type<geometry_type_2>::type>::type,
|
Chris@16
|
294 geometry_type_1>::type &
|
Chris@16
|
295 operator*=(geometry_type_1& lvalue, const geometry_type_2& rvalue) {
|
Chris@16
|
296 return self_assignment_boolean_op_45<geometry_type_1, geometry_type_2, 1>(lvalue, rvalue);
|
Chris@16
|
297 }
|
Chris@16
|
298
|
Chris@16
|
299 struct y_ps45_ae : gtl_yes {};
|
Chris@16
|
300
|
Chris@16
|
301 template <typename geometry_type_1, typename geometry_type_2>
|
Chris@16
|
302 typename enable_if< typename gtl_and_3<y_ps45_ae, typename is_mutable_polygon_45_set_type<geometry_type_1>::type,
|
Chris@16
|
303 typename is_polygon_45_or_90_set_type<geometry_type_2>::type>::type,
|
Chris@16
|
304 geometry_type_1>::type &
|
Chris@16
|
305 operator&=(geometry_type_1& lvalue, const geometry_type_2& rvalue) {
|
Chris@16
|
306 return self_assignment_boolean_op_45<geometry_type_1, geometry_type_2, 1>(lvalue, rvalue);
|
Chris@16
|
307 }
|
Chris@16
|
308
|
Chris@16
|
309 struct y_ps45_xe : gtl_yes {};
|
Chris@16
|
310
|
Chris@16
|
311 template <typename geometry_type_1, typename geometry_type_2>
|
Chris@16
|
312 typename enable_if<
|
Chris@16
|
313 typename gtl_and_3<y_ps45_xe, typename is_mutable_polygon_45_set_type<geometry_type_1>::type,
|
Chris@16
|
314 typename is_polygon_45_or_90_set_type<geometry_type_2>::type>::type,
|
Chris@16
|
315 geometry_type_1>::type &
|
Chris@16
|
316 operator^=(geometry_type_1& lvalue, const geometry_type_2& rvalue) {
|
Chris@16
|
317 return self_assignment_boolean_op_45<geometry_type_1, geometry_type_2, 2>(lvalue, rvalue);
|
Chris@16
|
318 }
|
Chris@16
|
319
|
Chris@16
|
320 struct y_ps45_me : gtl_yes {};
|
Chris@16
|
321
|
Chris@16
|
322 template <typename geometry_type_1, typename geometry_type_2>
|
Chris@16
|
323 typename enable_if< typename gtl_and_3<y_ps45_me, typename is_mutable_polygon_45_set_type<geometry_type_1>::type,
|
Chris@16
|
324 typename is_polygon_45_or_90_set_type<geometry_type_2>::type>::type,
|
Chris@16
|
325 geometry_type_1>::type &
|
Chris@16
|
326 operator-=(geometry_type_1& lvalue, const geometry_type_2& rvalue) {
|
Chris@16
|
327 return self_assignment_boolean_op_45<geometry_type_1, geometry_type_2, 3>(lvalue, rvalue);
|
Chris@16
|
328 }
|
Chris@16
|
329
|
Chris@16
|
330 struct y_ps45_rpe : gtl_yes {};
|
Chris@16
|
331
|
Chris@16
|
332 template <typename geometry_type_1, typename coordinate_type_1>
|
Chris@16
|
333 typename enable_if< typename gtl_and_3< y_ps45_rpe, typename is_mutable_polygon_45_set_type<geometry_type_1>::type,
|
Chris@16
|
334 typename gtl_same_type<typename geometry_concept<coordinate_type_1>::type,
|
Chris@16
|
335 coordinate_concept>::type>::type,
|
Chris@16
|
336 geometry_type_1>::type &
|
Chris@16
|
337 operator+=(geometry_type_1& lvalue, coordinate_type_1 rvalue) {
|
Chris@16
|
338 return resize(lvalue, rvalue);
|
Chris@16
|
339 }
|
Chris@16
|
340
|
Chris@16
|
341 struct y_ps45_rme : gtl_yes {};
|
Chris@16
|
342
|
Chris@16
|
343 template <typename geometry_type_1, typename coordinate_type_1>
|
Chris@16
|
344 typename enable_if< typename gtl_and_3<y_ps45_rme, typename gtl_if<typename is_mutable_polygon_45_set_type<geometry_type_1>::type>::type,
|
Chris@16
|
345 typename gtl_same_type<typename geometry_concept<coordinate_type_1>::type,
|
Chris@16
|
346 coordinate_concept>::type>::type,
|
Chris@16
|
347 geometry_type_1>::type &
|
Chris@16
|
348 operator-=(geometry_type_1& lvalue, coordinate_type_1 rvalue) {
|
Chris@16
|
349 return resize(lvalue, -rvalue);
|
Chris@16
|
350 }
|
Chris@16
|
351
|
Chris@16
|
352 struct y_ps45_rp : gtl_yes {};
|
Chris@16
|
353
|
Chris@16
|
354 template <typename geometry_type_1, typename coordinate_type_1>
|
Chris@16
|
355 typename enable_if< typename gtl_and_3<y_ps45_rp, typename gtl_if<typename is_mutable_polygon_45_set_type<geometry_type_1>::type>::type,
|
Chris@16
|
356 typename gtl_same_type<typename geometry_concept<coordinate_type_1>::type,
|
Chris@16
|
357 coordinate_concept>::type>
|
Chris@16
|
358 ::type, geometry_type_1>::type
|
Chris@16
|
359 operator+(const geometry_type_1& lvalue, coordinate_type_1 rvalue) {
|
Chris@16
|
360 geometry_type_1 retval(lvalue);
|
Chris@16
|
361 retval += rvalue;
|
Chris@16
|
362 return retval;
|
Chris@16
|
363 }
|
Chris@16
|
364
|
Chris@16
|
365 struct y_ps45_rm : gtl_yes {};
|
Chris@16
|
366
|
Chris@16
|
367 template <typename geometry_type_1, typename coordinate_type_1>
|
Chris@16
|
368 typename enable_if< typename gtl_and_3<y_ps45_rm, typename gtl_if<typename is_mutable_polygon_45_set_type<geometry_type_1>::type>::type,
|
Chris@16
|
369 typename gtl_same_type<typename geometry_concept<coordinate_type_1>::type,
|
Chris@16
|
370 coordinate_concept>::type>
|
Chris@16
|
371 ::type, geometry_type_1>::type
|
Chris@16
|
372 operator-(const geometry_type_1& lvalue, coordinate_type_1 rvalue) {
|
Chris@16
|
373 geometry_type_1 retval(lvalue);
|
Chris@16
|
374 retval -= rvalue;
|
Chris@16
|
375 return retval;
|
Chris@16
|
376 }
|
Chris@16
|
377 }
|
Chris@16
|
378 }
|
Chris@16
|
379 }
|
Chris@16
|
380 #endif
|