Chris@16: /* Chris@16: Copyright 2008 Intel Corporation Chris@16: Chris@16: Use, modification and distribution are subject to the Boost Software License, Chris@16: Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at Chris@16: http://www.boost.org/LICENSE_1_0.txt). Chris@16: */ Chris@16: #ifndef BOOST_POLYGON_POLYGON_DATA_HPP Chris@16: #define BOOST_POLYGON_POLYGON_DATA_HPP Chris@16: namespace boost { namespace polygon{ Chris@16: struct polygon_concept; Chris@16: template Chris@16: class polygon_data { Chris@16: public: Chris@16: typedef polygon_concept geometry_type; Chris@16: typedef T coordinate_type; Chris@16: typedef typename std::vector >::const_iterator iterator_type; Chris@16: typedef typename coordinate_traits::coordinate_distance area_type; Chris@16: typedef point_data point_type; Chris@16: Chris@16: inline polygon_data() : coords_() {} //do nothing default constructor Chris@16: Chris@16: template Chris@16: inline polygon_data(iT input_begin, iT input_end) : coords_(input_begin, input_end) {} Chris@16: Chris@16: template Chris@16: inline polygon_data& set(iT input_begin, iT input_end) { Chris@16: coords_.clear(); //just in case there was some old data there Chris@16: coords_.insert(coords_.end(), input_begin, input_end); Chris@16: return *this; Chris@16: } Chris@16: Chris@16: // copy constructor (since we have dynamic memory) Chris@16: inline polygon_data(const polygon_data& that) : coords_(that.coords_) {} Chris@16: Chris@16: // assignment operator (since we have dynamic memory do a deep copy) Chris@16: inline polygon_data& operator=(const polygon_data& that) { Chris@16: coords_ = that.coords_; Chris@16: return *this; Chris@16: } Chris@16: Chris@16: template Chris@16: inline polygon_data& operator=(const T2& rvalue); Chris@16: Chris@16: inline bool operator==(const polygon_data& that) const { Chris@16: if(coords_.size() != that.coords_.size()) return false; Chris@16: for(std::size_t i = 0; i < coords_.size(); ++i) { Chris@16: if(coords_[i] != that.coords_[i]) return false; Chris@16: } Chris@16: return true; Chris@16: } Chris@16: Chris@16: inline bool operator!=(const polygon_data& that) const { return !((*this) == that); } Chris@16: Chris@16: // get begin iterator, returns a pointer to a const Unit Chris@16: inline iterator_type begin() const { return coords_.begin(); } Chris@16: Chris@16: // get end iterator, returns a pointer to a const Unit Chris@16: inline iterator_type end() const { return coords_.end(); } Chris@16: Chris@16: inline std::size_t size() const { return coords_.size(); } Chris@16: Chris@16: public: Chris@16: std::vector > coords_; Chris@16: }; Chris@16: Chris@16: } Chris@16: } Chris@16: #endif