From c865de5aa6a92003e54fc1723a8afc0f5276a193 Mon Sep 17 00:00:00 2001 From: Neil Groves Date: Mon, 4 Aug 2014 17:53:14 +0100 Subject: [PATCH 1/5] Hotfix to add back advance_begin and advance_end. --- doc/reference/utilities.qbk | 7 +++++++ include/boost/range/iterator_range_core.hpp | 20 ++++++++++++++++++++ include/boost/range/sub_range.hpp | 14 ++++++++++++++ test/iterator_range.cpp | 18 ++++++++++++++++++ test/sub_range.cpp | 18 ++++++++++++++++++ 5 files changed, 77 insertions(+) diff --git a/doc/reference/utilities.qbk b/doc/reference/utilities.qbk index 24d11d7..8cbc34a 100644 --- a/doc/reference/utilities.qbk +++ b/doc/reference/utilities.qbk @@ -73,6 +73,10 @@ namespace boost void drop_front(); void drop_front(difference_type n); bool empty() const; + + iterator_range& advance_begin(difference_type n); + iterator_range& advance_end(difference_type n); + // for Bidirectional: value_type& back() const; void drop_back(); @@ -263,6 +267,9 @@ namespace boost reference front(); const_reference front() const; + sub_range& advance_begin(difference_type n); + sub_range& advance_end(difference_type n); + // If traversal >= bidirectional: reference back(); const_reference back(); diff --git a/include/boost/range/iterator_range_core.hpp b/include/boost/range/iterator_range_core.hpp index 143796b..8108947 100644 --- a/include/boost/range/iterator_range_core.hpp +++ b/include/boost/range/iterator_range_core.hpp @@ -266,6 +266,9 @@ public: BOOST_ASSERT(n >= difference_type()); std::advance(this->m_Begin, n); } + + // Deprecated + void pop_front() { drop_front(); } protected: template @@ -331,6 +334,9 @@ public: BOOST_ASSERT(n >= difference_type()); std::advance(this->m_End, -n); } + + // Deprecated + void pop_back() { drop_back(); } }; template @@ -528,6 +534,20 @@ public: return *this; } + iterator_range& advance_begin( + BOOST_DEDUCED_TYPENAME base_type::difference_type n) + { + std::advance(this->m_Begin, n); + return *this; + } + + iterator_range& advance_end( + BOOST_DEDUCED_TYPENAME base_type::difference_type n) + { + std::advance(this->m_End, n); + return *this; + } + protected: // // Allow subclasses an easy way to access the diff --git a/include/boost/range/sub_range.hpp b/include/boost/range/sub_range.hpp index ecc045b..8d5d168 100644 --- a/include/boost/range/sub_range.hpp +++ b/include/boost/range/sub_range.hpp @@ -261,6 +261,20 @@ public: iterator_range_::operator=( static_cast(r) ); return *this; } + + sub_range& advance_begin( + BOOST_DEDUCED_TYPENAME base::difference_type n) + { + std::advance(this->m_Begin, n); + return *this; + } + + sub_range& advance_end( + BOOST_DEDUCED_TYPENAME base::difference_type n) + { + std::advance(this->m_End, n); + return *this; + } }; } // namespace 'boost' diff --git a/test/iterator_range.cpp b/test/iterator_range.cpp index 6b4dda6..168eb22 100644 --- a/test/iterator_range.cpp +++ b/test/iterator_range.cpp @@ -249,6 +249,23 @@ inline void check_iterator_range_operator() Pred()); } +inline void test_advance() +{ + std::vector l; + l.push_back(1); + l.push_back(2); + typedef boost::iterator_range::iterator> rng_t; + + rng_t r1(l.begin(), l.end()); + BOOST_CHECK(r1.advance_begin(1).advance_end(-1).empty()); + + rng_t r2(l.begin(), l.end()); + BOOST_CHECK_EQUAL(r2.advance_begin(1).size(), 1u); + + rng_t r3(l.begin(), l.end()); + BOOST_CHECK_EQUAL(r3.advance_end(-1).size(), 1u); +} + boost::unit_test::test_suite* init_unit_test_suite( int argc, char* argv[] ) { boost::unit_test::test_suite* test = BOOST_TEST_SUITE( "Range Test Suite" ); @@ -261,6 +278,7 @@ boost::unit_test::test_suite* init_unit_test_suite( int argc, char* argv[] ) test->add(BOOST_TEST_CASE(&check_iterator_range_operator)); test->add(BOOST_TEST_CASE(&check_iterator_range_operator)); test->add(BOOST_TEST_CASE(&iterator_range_test_detail::check_make_iterator_range_n)); + test->add(BOOST_TEST_CASE(&test_advance)); return test; } diff --git a/test/sub_range.cpp b/test/sub_range.cpp index 0ea8fed..be48811 100644 --- a/test/sub_range.cpp +++ b/test/sub_range.cpp @@ -228,6 +228,22 @@ void const_propagation_const_collection(void) check_constant_type(crng.back()); } +inline void test_advance() +{ + std::vector l; + l.push_back(1); + l.push_back(2); + typedef boost::sub_range > rng_t; + rng_t r1(l.begin(), l.end()); + BOOST_CHECK(r1.advance_begin(1).advance_end(-1).empty()); + + rng_t r2(l.begin(), l.end()); + BOOST_CHECK_EQUAL(r2.advance_begin(1).size(), 1u); + + rng_t r3(l.begin(), l.end()); + BOOST_CHECK_EQUAL(r3.advance_end(-1).size(), 1u); +} + } // anonymous namespace } // namespace boost_range_test @@ -244,6 +260,8 @@ boost::unit_test::test_suite* init_unit_test_suite(int, char*[]) test->add(BOOST_TEST_CASE( &boost_range_test::const_propagation_mutable_collection)); + test->add(BOOST_TEST_CASE(&boost_range_test::test_advance)); + return test; } From b0b08e0039f3cd4dffc0242f16d0f03e09434856 Mon Sep 17 00:00:00 2001 From: Neil Groves Date: Mon, 4 Aug 2014 19:32:37 +0100 Subject: [PATCH 2/5] Add upgrade documentation about pop_front() and pop_back() being renamed. --- doc/upgrade.qbk | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/upgrade.qbk b/doc/upgrade.qbk index 9bbf904..47fa8cb 100644 --- a/doc/upgrade.qbk +++ b/doc/upgrade.qbk @@ -15,6 +15,9 @@ been noted that some calling code was relying on member functions such as `size()` being present despite the underlying iterators not being random-access due to `iterator_reference::type` not being a reference. The suggested refactoring is to use `boost::size(rng)`. +# The undocumented __iterator_range__ `pop_front()` has been deprecated and is +replaced by `drop_front(). Similarly `pop_back()` has been replaced by +`drop_back()`. [endsect] From 1965b797d8eed824a4aef6259e913b7cb2dd5c00 Mon Sep 17 00:00:00 2001 From: levinmk Date: Fri, 12 Dec 2014 16:43:32 -0600 Subject: [PATCH 3/5] fix ticket #10754 as described in https://svn.boost.org/trac/boost/ticket/10754, postfix_increment_proxy and writable_postfix_increment_proxy were moved to boost::iterators::detail namespace --- include/boost/range/detail/any_iterator.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/include/boost/range/detail/any_iterator.hpp b/include/boost/range/detail/any_iterator.hpp index 555bd57..ffc0aeb 100644 --- a/include/boost/range/detail/any_iterator.hpp +++ b/include/boost/range/detail/any_iterator.hpp @@ -114,6 +114,7 @@ namespace boost }; } // namespace range_detail + namespace iterators { namespace detail { // Rationale: @@ -245,8 +246,8 @@ namespace boost any_iterator_type stored_iterator; }; - - } + } //namespace detail + } //namespace iterators namespace range_detail { From 4f66482414c060d8d08310bb5dd14dff84611a92 Mon Sep 17 00:00:00 2001 From: tobias-loew Date: Wed, 12 Aug 2015 15:32:31 +0200 Subject: [PATCH 4/5] Ticket #10397 - compilation error with mfc-iteratior-support: ambiguous symbol fixed compilation error for mfc-iteration-support changed boost::range_detail::range_const_iterator to boost::range_detail::range_const_iterator_helper to address compilation error when using mfc-iteration-support --- include/boost/range/const_iterator.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/boost/range/const_iterator.hpp b/include/boost/range/const_iterator.hpp index 3413e59..727fdad 100644 --- a/include/boost/range/const_iterator.hpp +++ b/include/boost/range/const_iterator.hpp @@ -36,7 +36,7 @@ namespace boost BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( const_iterator ) template< typename C > -struct range_const_iterator +struct range_const_iterator_helper : extract_const_iterator {}; @@ -45,7 +45,7 @@ struct range_const_iterator ////////////////////////////////////////////////////////////////////////// template< typename Iterator > -struct range_const_iterator > +struct range_const_iterator_helper > { typedef Iterator type; }; @@ -55,7 +55,7 @@ struct range_const_iterator > ////////////////////////////////////////////////////////////////////////// template< typename T, std::size_t sz > -struct range_const_iterator< T[sz] > +struct range_const_iterator_helper< T[sz] > { typedef const T* type; }; @@ -64,7 +64,7 @@ struct range_const_iterator< T[sz] > template struct range_const_iterator - : range_detail::range_const_iterator< + : range_detail::range_const_iterator_helper< BOOST_DEDUCED_TYPENAME remove_reference::type > { From 7567dce0c13fd545d69a80a7ac2e81e174525458 Mon Sep 17 00:00:00 2001 From: Rene Rivera Date: Fri, 7 Oct 2016 23:07:36 -0500 Subject: [PATCH 5/5] Add, and update, documentation build targets. --- doc/Jamfile.v2 | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/Jamfile.v2 b/doc/Jamfile.v2 index 82a8d7f..c507180 100644 --- a/doc/Jamfile.v2 +++ b/doc/Jamfile.v2 @@ -28,3 +28,8 @@ boostbook quickbook pdf:img.src.path=$(images_location)/ ; +############################################################################### +alias boostdoc ; +explicit boostdoc ; +alias boostrelease : quickbook ; +explicit boostrelease ;