diff --git a/include/boost/geometry/iterators/point_iterator.hpp b/include/boost/geometry/iterators/point_iterator.hpp index 2517a648f..d08fb36ed 100644 --- a/include/boost/geometry/iterators/point_iterator.hpp +++ b/include/boost/geometry/iterators/point_iterator.hpp @@ -11,6 +11,7 @@ #define BOOST_GEOMETRY_ITERATORS_POINT_ITERATOR_HPP #include +#include #include #include #include @@ -245,33 +246,26 @@ struct points_end // MK:: need to add doc here template class point_iterator - : public detail::point_iterator::iterator_type::type + : public boost::iterator_adaptor + < + point_iterator, + typename detail::point_iterator::iterator_type::type + > { private: - typedef typename detail::point_iterator::iterator_type::type base; - - inline base* base_ptr() - { - return this; - } - - inline base const* base_ptr() const - { - return this; - } - template friend class point_iterator; template friend inline point_iterator points_begin(G&); template friend inline point_iterator points_end(G&); - inline point_iterator(base const& base_it) : base(base_it) {} + inline point_iterator(typename point_iterator::base_type& base_it) + : point_iterator::iterator_adaptor_(base_it) {} public: inline point_iterator() {} template inline point_iterator(point_iterator const& other) - : base(*other.base_ptr()) + : point_iterator::iterator_adaptor_(other.base()) { static const bool is_conv = boost::is_convertible< @@ -289,32 +283,6 @@ public: NOT_CONVERTIBLE, (point_iterator)); } - - inline point_iterator& operator++() // prefix - { - base::operator++(); - return *this; - } - - inline point_iterator& operator--() // prefix - { - base::operator--(); - return *this; - } - - inline point_iterator operator++(int) // postfix - { - point_iterator copy(*this); - base::operator++(); - return copy; - } - - inline point_iterator operator--(int) // postfix - { - point_iterator copy(*this); - base::operator--(); - return copy; - } }; diff --git a/include/boost/geometry/iterators/point_reverse_iterator.hpp b/include/boost/geometry/iterators/point_reverse_iterator.hpp index 1c2ac0169..b464c5f22 100644 --- a/include/boost/geometry/iterators/point_reverse_iterator.hpp +++ b/include/boost/geometry/iterators/point_reverse_iterator.hpp @@ -27,17 +27,7 @@ class point_reverse_iterator : public std::reverse_iterator > { private: - typedef std::reverse_iterator > base; - - inline base* base_ptr() - { - return this; - } - - inline base const* base_ptr() const - { - return this; - } + typedef std::reverse_iterator > base_type; template friend class point_reverse_iterator; template @@ -46,7 +36,8 @@ private: template friend inline point_reverse_iterator points_rend(G&); - inline point_reverse_iterator(base const& base_it) : base(base_it) {} + inline point_reverse_iterator(base_type const& base_it) + : base_type(base_it) {} public: inline point_reverse_iterator() {} @@ -54,7 +45,7 @@ public: template inline point_reverse_iterator(point_reverse_iterator const& other) - : base(*other.base_ptr()) + : base_type(other.base()) { static const bool is_conv = boost::is_convertible <