From 84463ae8ba96c1d6c9b5f7e85815757be4376f2b Mon Sep 17 00:00:00 2001 From: Samuel Debionne Date: Tue, 3 Mar 2015 15:46:54 +0100 Subject: [PATCH 1/2] [iterators] Fix point_iterator with raw pointer base Fix point_iterator (and adapt reverse_point_iterator to the fix) to support curves implemented with raw pointer as iterator. The fix uses boost::iterator_adaptor that implements base() a synonyme of base_ptr() that consequently has been removed. The operators are also redondant and removed. --- .../geometry/iterators/point_iterator.hpp | 46 +++---------------- .../iterators/point_reverse_iterator.hpp | 12 +---- 2 files changed, 8 insertions(+), 50 deletions(-) diff --git a/include/boost/geometry/iterators/point_iterator.hpp b/include/boost/geometry/iterators/point_iterator.hpp index 2517a648f..8ed9000d0 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(base const& 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..ec5d7e5d3 100644 --- a/include/boost/geometry/iterators/point_reverse_iterator.hpp +++ b/include/boost/geometry/iterators/point_reverse_iterator.hpp @@ -29,16 +29,6 @@ class point_reverse_iterator private: typedef std::reverse_iterator > base; - inline base* base_ptr() - { - return this; - } - - inline base const* base_ptr() const - { - return this; - } - template friend class point_reverse_iterator; template friend inline point_reverse_iterator points_rbegin(G&); @@ -54,7 +44,7 @@ public: template inline point_reverse_iterator(point_reverse_iterator const& other) - : base(*other.base_ptr()) + : base(other.base()) { static const bool is_conv = boost::is_convertible < From 73a9a475988d53cb17c1797b82bf5f8a7517d0bb Mon Sep 17 00:00:00 2001 From: Samuel Debionne Date: Wed, 4 Mar 2015 10:10:02 +0100 Subject: [PATCH 2/2] [iterators] Use base_type from boost::iterator_adaptor Use base_type from boost::iterator_adaptor. Remove base type definition that clash with the base() function of boost::iterator_adaptor. Reformat to follow coding guidelines. --- .../boost/geometry/iterators/point_iterator.hpp | 14 +++++++------- .../geometry/iterators/point_reverse_iterator.hpp | 7 ++++--- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/include/boost/geometry/iterators/point_iterator.hpp b/include/boost/geometry/iterators/point_iterator.hpp index 8ed9000d0..d08fb36ed 100644 --- a/include/boost/geometry/iterators/point_iterator.hpp +++ b/include/boost/geometry/iterators/point_iterator.hpp @@ -246,19 +246,19 @@ struct points_end // MK:: need to add doc here template class point_iterator - : public boost::iterator_adaptor < - point_iterator - , typename 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; - 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) : point_iterator::iterator_adaptor_(base_it) {} + inline point_iterator(typename point_iterator::base_type& base_it) + : point_iterator::iterator_adaptor_(base_it) {} public: inline point_iterator() {} diff --git a/include/boost/geometry/iterators/point_reverse_iterator.hpp b/include/boost/geometry/iterators/point_reverse_iterator.hpp index ec5d7e5d3..b464c5f22 100644 --- a/include/boost/geometry/iterators/point_reverse_iterator.hpp +++ b/include/boost/geometry/iterators/point_reverse_iterator.hpp @@ -27,7 +27,7 @@ class point_reverse_iterator : public std::reverse_iterator > { private: - typedef std::reverse_iterator > base; + typedef std::reverse_iterator > base_type; template friend class point_reverse_iterator; template @@ -36,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() {} @@ -44,7 +45,7 @@ public: template inline point_reverse_iterator(point_reverse_iterator const& other) - : base(other.base()) + : base_type(other.base()) { static const bool is_conv = boost::is_convertible <