| /* |
| 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_ITERATOR_POINTS_TO_COMPACT_HPP |
| #define BOOST_POLYGON_ITERATOR_POINTS_TO_COMPACT_HPP |
| namespace boost { namespace polygon{ |
| template <typename iT, typename point_type> |
| class iterator_points_to_compact { |
| private: |
| iT iter_, iterEnd_; |
| orientation_2d orient_; |
| mutable typename point_traits<point_type>::coordinate_type coord_; |
| public: |
| typedef typename point_traits<point_type>::coordinate_type coordinate_type; |
| typedef std::forward_iterator_tag iterator_category; |
| typedef coordinate_type value_type; |
| typedef std::ptrdiff_t difference_type; |
| typedef const coordinate_type* pointer; //immutable |
| typedef const coordinate_type& reference; //immutable |
| |
| inline iterator_points_to_compact() : iter_(), iterEnd_(), orient_(), coord_() {} |
| inline iterator_points_to_compact(iT iter, iT iterEnd) : |
| iter_(iter), iterEnd_(iterEnd), orient_(HORIZONTAL), coord_() {} |
| inline iterator_points_to_compact(const iterator_points_to_compact& that) : |
| iter_(that.iter_), iterEnd_(that.iterEnd_), orient_(that.orient_), coord_(that.coord_) {} |
| //use bitwise copy and assign provided by the compiler |
| inline iterator_points_to_compact& operator++() { |
| //iT tmp = iter_; |
| ++iter_; |
| //iT tmp2 = iter_; |
| orient_.turn_90(); |
| //while(tmp2 != iterEnd_ && get(*tmp2, orient_) == get(*tmp, orient_)) { |
| // iter_ = tmp2; |
| // ++tmp2; |
| //} |
| return *this; |
| } |
| inline const iterator_points_to_compact operator++(int) { |
| iT tmp(*this); |
| ++(*this); |
| return tmp; |
| } |
| inline bool operator==(const iterator_points_to_compact& that) const { |
| return (iter_ == that.iter_); |
| } |
| inline bool operator!=(const iterator_points_to_compact& that) const { |
| return (iter_ != that.iter_); |
| } |
| inline reference operator*() const { coord_ = get(*iter_, orient_); |
| return coord_; |
| } |
| }; |
| } |
| } |
| #endif |
| |