You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
108 lines
3.4 KiB
108 lines
3.4 KiB
/* |
|
Copyright 2008 Intel Corporation |
|
|
|
Use, modification and distribution are subject to the Boost Software License, |
|
Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at |
|
http://www.boost.org/LICENSE_1_0.txt). |
|
*/ |
|
#ifndef BOOST_POLYGON_POLYGON_45_WITH_HOLES_DATA_HPP |
|
#define BOOST_POLYGON_POLYGON_45_WITH_HOLES_DATA_HPP |
|
#include "isotropy.hpp" |
|
#include "polygon_45_data.hpp" |
|
namespace boost { namespace polygon{ |
|
struct polygon_45_with_holes_concept; |
|
template <typename T> |
|
class polygon_45_with_holes_data { |
|
public: |
|
typedef polygon_45_with_holes_concept geometry_type; |
|
typedef T coordinate_type; |
|
typedef typename polygon_45_data<T>::iterator_type iterator_type; |
|
typedef typename std::list<polygon_45_data<coordinate_type> >::const_iterator iterator_holes_type; |
|
typedef polygon_45_data<coordinate_type> hole_type; |
|
typedef typename coordinate_traits<T>::coordinate_distance area_type; |
|
typedef point_data<T> point_type; |
|
|
|
// default constructor of point does not initialize x and y |
|
inline polygon_45_with_holes_data() : self_(), holes_() {} //do nothing default constructor |
|
|
|
template<class iT> |
|
inline polygon_45_with_holes_data(iT input_begin, iT input_end) : self_(), holes_() { |
|
set(input_begin, input_end); |
|
} |
|
|
|
template<class iT, typename hiT> |
|
inline polygon_45_with_holes_data(iT input_begin, iT input_end, hiT holes_begin, hiT holes_end) : self_(), holes_() { |
|
set(input_begin, input_end); |
|
set_holes(holes_begin, holes_end); |
|
} |
|
|
|
template<class iT> |
|
inline polygon_45_with_holes_data& set(iT input_begin, iT input_end) { |
|
self_.set(input_begin, input_end); |
|
return *this; |
|
} |
|
|
|
// initialize a polygon from x,y values, it is assumed that the first is an x |
|
// and that the input is a well behaved polygon |
|
template<class iT> |
|
inline polygon_45_with_holes_data& set_holes(iT input_begin, iT input_end) { |
|
holes_.clear(); //just in case there was some old data there |
|
for( ; input_begin != input_end; ++ input_begin) { |
|
holes_.push_back(hole_type()); |
|
holes_.back().set((*input_begin).begin(), (*input_begin).end()); |
|
} |
|
return *this; |
|
} |
|
|
|
// copy constructor (since we have dynamic memory) |
|
inline polygon_45_with_holes_data(const polygon_45_with_holes_data& that) : self_(that.self_), |
|
holes_(that.holes_) {} |
|
|
|
// assignment operator (since we have dynamic memory do a deep copy) |
|
inline polygon_45_with_holes_data& operator=(const polygon_45_with_holes_data& that) { |
|
self_ = that.self_; |
|
holes_ = that.holes_; |
|
return *this; |
|
} |
|
|
|
template <typename T2> |
|
inline polygon_45_with_holes_data& operator=(const T2& rvalue); |
|
|
|
// get begin iterator, returns a pointer to a const coordinate_type |
|
inline const iterator_type begin() const { |
|
return self_.begin(); |
|
} |
|
|
|
// get end iterator, returns a pointer to a const coordinate_type |
|
inline const iterator_type end() const { |
|
return self_.end(); |
|
} |
|
|
|
inline std::size_t size() const { |
|
return self_.size(); |
|
} |
|
|
|
// get begin iterator, returns a pointer to a const polygon |
|
inline const iterator_holes_type begin_holes() const { |
|
return holes_.begin(); |
|
} |
|
|
|
// get end iterator, returns a pointer to a const polygon |
|
inline const iterator_holes_type end_holes() const { |
|
return holes_.end(); |
|
} |
|
|
|
inline std::size_t size_holes() const { |
|
return holes_.size(); |
|
} |
|
|
|
public: |
|
polygon_45_data<coordinate_type> self_; |
|
std::list<hole_type> holes_; |
|
}; |
|
|
|
|
|
} |
|
} |
|
#endif |
|
|
|
|