From 537f2474c9af89525590b5880a1d281826b4774f Mon Sep 17 00:00:00 2001
From: Nathan Ridge
Last revised: December 13, 2012 at 06:53:49 GMT |
+Last revised: January 14, 2013 at 08:50:06 GMT |
everything from Boost.Range version 1 (Boost versions 1.42 and - below). Includes the core range functions and metafunctinos, but + below). Includes the core range functions and metafunctions, but excludes Range Adaptors and Range Algorithms.
std::vector<int> vec; -boost::replace_copy_if( rng, std::back_inserter(vec), pred ); +boost::replace_copy_if( rng, std::back_inserter(vec), pred, new_value );
diff --git a/doc/html/range/reference/adaptors/reference/adjacent_filtered.html b/doc/html/range/reference/adaptors/reference/adjacent_filtered.html index f83b737..91772cf 100644 --- a/doc/html/range/reference/adaptors/reference/adjacent_filtered.html +++ b/doc/html/range/reference/adaptors/reference/adjacent_filtered.html @@ -112,7 +112,7 @@
#include <boost/range/adaptor/adjacent_filtered.hpp> #include <boost/range/algorithm/copy.hpp> #include <boost/assign.hpp> -#include <algorithm> +#include <iterator> #include <functional> #include <iostream> #include <vector> @@ -138,7 +138,7 @@This would produce the output:
-1,2,3,4,5,6 +1,2,3,4,5,6,diff --git a/doc/html/range/reference/adaptors/reference/copied.html b/doc/html/range/reference/adaptors/reference/copied.html index 6902098..16ba126 100644 --- a/doc/html/range/reference/adaptors/reference/copied.html +++ b/doc/html/range/reference/adaptors/reference/copied.html @@ -109,7 +109,7 @@
#include <boost/range/adaptor/copied.hpp> #include <boost/range/algorithm/copy.hpp> #include <boost/assign.hpp> -#include <algorithm> +#include <iterator> #include <iostream> #include <vector> @@ -134,7 +134,7 @@This would produce the output:
-2,3,4,5 +2,3,4,5,diff --git a/doc/html/range/reference/adaptors/reference/filtered.html b/doc/html/range/reference/adaptors/reference/filtered.html index 5d45709..84c6df2 100644 --- a/doc/html/range/reference/adaptors/reference/filtered.html +++ b/doc/html/range/reference/adaptors/reference/filtered.html @@ -112,7 +112,7 @@
#include <boost/range/adaptor/filtered.hpp> #include <boost/range/algorithm/copy.hpp> #include <boost/assign.hpp> -#include <algorithm> +#include <iterator> #include <iostream> #include <vector> @@ -132,6 +132,8 @@ boost::copy( input | filtered(is_even()), std::ostream_iterator<int>(std::cout, ",")); + + return 0; }@@ -140,7 +142,7 @@
This would produce the output:
-2,4,6,8 +2,4,6,8,diff --git a/doc/html/range/reference/adaptors/reference/indexed.html b/doc/html/range/reference/adaptors/reference/indexed.html index ab6a776..4a2d29f 100644 --- a/doc/html/range/reference/adaptors/reference/indexed.html +++ b/doc/html/range/reference/adaptors/reference/indexed.html @@ -55,7 +55,7 @@
@@ -67,7 +67,8 @@
rng | - boost::adaptors::indexed
+ boost::adaptors::indexed(start_index)@@ -104,7 +105,7 @@ -
boost::adaptors::index(rng)
+boost::adaptors::index(rng, + start_index)
#include <boost/range/adaptor/indexed.hpp> #include <boost/range/algorithm/copy.hpp> #include <boost/assign.hpp> -#include <algorithm> +#include <iterator> #include <iostream> #include <vector> @@ -123,27 +124,6 @@ display_element_and_index(boost::begin(rng), boost::end(rng)); } -template<class Iterator1, class Iterator2> -void check_element_and_index( - Iterator1 test_first, - Iterator1 test_last, - Iterator2 reference_first, - Iterator2 reference_last) -{ - BOOST_CHECK_EQUAL( std::distance(test_first, test_last), - std::distance(reference_first, reference_last) ); - - int reference_index = 0; - - Iterator1 test_it = test_first; - Iterator2 reference_it = reference_first; - for (; test_it != test_last; ++test_it, ++reference_it, ++reference_index) - { - BOOST_CHECK_EQUAL( *test_it, *reference_it ); - BOOST_CHECK_EQUAL( test_it.index(), reference_index ); - } -} - int main(int argc, const char* argv[]) { using namespace boost::assign; diff --git a/doc/html/range/reference/adaptors/reference/indirected.html b/doc/html/range/reference/adaptors/reference/indirected.html index d185d79..f2ea353 100644 --- a/doc/html/range/reference/adaptors/reference/indirected.html +++ b/doc/html/range/reference/adaptors/reference/indirected.html @@ -108,7 +108,7 @@#include <boost/range/adaptor/indirected.hpp> #include <boost/range/algorithm/copy.hpp> #include <boost/shared_ptr.hpp> -#include <algorithm> +#include <iterator> #include <iostream> #include <vector> @@ -134,7 +134,7 @@This would produce the output:
-0,1,2,3,4,5,6,7,8,9 +0,1,2,3,4,5,6,7,8,9,diff --git a/doc/html/range/reference/adaptors/reference/map_keys.html b/doc/html/range/reference/adaptors/reference/map_keys.html index 58c164f..c7f05a3 100644 --- a/doc/html/range/reference/adaptors/reference/map_keys.html +++ b/doc/html/range/reference/adaptors/reference/map_keys.html @@ -107,7 +107,7 @@
#include <boost/range/adaptor/map.hpp> #include <boost/range/algorithm/copy.hpp> #include <boost/assign.hpp> -#include <algorithm> +#include <iterator> #include <iostream> #include <map> #include <vector> @@ -134,7 +134,7 @@This would produce the output:
-0,1,2,3,4,5,6,7,8,9 +0,1,2,3,4,5,6,7,8,9,diff --git a/doc/html/range/reference/adaptors/reference/map_values.html b/doc/html/range/reference/adaptors/reference/map_values.html index d467ffb..22008da 100644 --- a/doc/html/range/reference/adaptors/reference/map_values.html +++ b/doc/html/range/reference/adaptors/reference/map_values.html @@ -109,7 +109,7 @@
#include <boost/range/adaptor/map.hpp> #include <boost/range/algorithm/copy.hpp> #include <boost/assign.hpp> -#include <algorithm> +#include <iterator> #include <iostream> #include <map> #include <vector> @@ -136,7 +136,7 @@This would produce the output:
-0,10,20,30,40,50,60,70,80,90 +0,10,20,30,40,50,60,70,80,90,diff --git a/doc/html/range/reference/adaptors/reference/replaced.html b/doc/html/range/reference/adaptors/reference/replaced.html index a0fc28e..d70b2d5 100644 --- a/doc/html/range/reference/adaptors/reference/replaced.html +++ b/doc/html/range/reference/adaptors/reference/replaced.html @@ -125,7 +125,7 @@
#include <boost/range/adaptor/replaced.hpp> #include <boost/range/algorithm/copy.hpp> #include <boost/assign.hpp> -#include <algorithm> +#include <iterator> #include <iostream> #include <vector> @@ -150,7 +150,7 @@This would produce the output:
-1,10,3,10,5,10,7,10,9 +1,10,3,10,5,10,7,10,9,diff --git a/doc/html/range/reference/adaptors/reference/replaced_if.html b/doc/html/range/reference/adaptors/reference/replaced_if.html index 05b26b3..e5363d3 100644 --- a/doc/html/range/reference/adaptors/reference/replaced_if.html +++ b/doc/html/range/reference/adaptors/reference/replaced_if.html @@ -121,7 +121,7 @@
#include <boost/range/adaptor/replaced_if.hpp> #include <boost/range/algorithm/copy.hpp> #include <boost/assign.hpp> -#include <algorithm> +#include <iterator> #include <iostream> #include <vector> @@ -151,7 +151,7 @@This would produce the output:
-1,10,3,10,5,10,7,10,9 +1,10,3,10,5,10,7,10,9,diff --git a/doc/html/range/reference/adaptors/reference/reversed.html b/doc/html/range/reference/adaptors/reference/reversed.html index 1db2af4..ab61716 100644 --- a/doc/html/range/reference/adaptors/reference/reversed.html +++ b/doc/html/range/reference/adaptors/reference/reversed.html @@ -100,11 +100,11 @@
#include <boost/range/adaptor/reversed.hpp> #include <boost/range/algorithm/copy.hpp> #include <boost/assign.hpp> -#include <algorithm> +#include <iterator> #include <iostream> #include <vector> -void reversed_example_test() +int main(int argc, const char* argv[]) { using namespace boost::adaptors; using namespace boost::assign; @@ -125,7 +125,7 @@This would produce the output:
-9,8,7,6,5,4,3,2,1 +9,8,7,6,5,4,3,2,1,diff --git a/doc/html/range/reference/adaptors/reference/sliced.html b/doc/html/range/reference/adaptors/reference/sliced.html index 1f4e63d..664ee47 100644 --- a/doc/html/range/reference/adaptors/reference/sliced.html +++ b/doc/html/range/reference/adaptors/reference/sliced.html @@ -110,7 +110,7 @@
#include <boost/range/adaptor/sliced.hpp> #include <boost/range/algorithm/copy.hpp> #include <boost/assign.hpp> -#include <algorithm> +#include <iterator> #include <iostream> #include <vector> @@ -135,7 +135,7 @@This would produce the output:
-3,4,5 +3,4,5,diff --git a/doc/html/range/reference/adaptors/reference/strided.html b/doc/html/range/reference/adaptors/reference/strided.html index 8ff19e1..b16af14 100644 --- a/doc/html/range/reference/adaptors/reference/strided.html +++ b/doc/html/range/reference/adaptors/reference/strided.html @@ -102,7 +102,7 @@
#include <boost/range/adaptor/strided.hpp> #include <boost/range/algorithm/copy.hpp> #include <boost/assign.hpp> -#include <algorithm> +#include <iterator> #include <iostream> #include <vector> @@ -127,7 +127,7 @@This would produce the output:
-1,3,5,7,9 +1,3,5,7,9,diff --git a/doc/html/range/reference/adaptors/reference/tokenized.html b/doc/html/range/reference/adaptors/reference/tokenized.html index 1b9a97d..ec50b79 100644 --- a/doc/html/range/reference/adaptors/reference/tokenized.html +++ b/doc/html/range/reference/adaptors/reference/tokenized.html @@ -26,6 +26,7 @@ +
@@ -134,6 +135,50 @@ Access Range + + +++
+#include <boost/range/adaptor/tokenized.hpp> +#include <boost/range/algorithm/copy.hpp> +#include <boost/assign.hpp> +#include <iterator> +#include <iostream> +#include <vector> + +int main(int argc, const char* argv[]) +{ + using namespace boost::adaptors; + + typedef boost::sub_match< std::string::iterator > match_type; + + std::string input = " a b c d e f g hijklmnopqrstuvwxyz"; + boost::copy( + input | tokenized(boost::regex("\\w+")), + std::ostream_iterator<match_type>(std::cout, "\n")); + + return 0; +} +++
++ This would produce the output: +
+a +b +c +d +e +f +g +hijklmnopqrstuvwxyz +++
diff --git a/doc/html/range/reference/adaptors/reference/transformed.html b/doc/html/range/reference/adaptors/reference/transformed.html index 9a272b0..5f38ed5 100644 --- a/doc/html/range/reference/adaptors/reference/transformed.html +++ b/doc/html/range/reference/adaptors/reference/transformed.html @@ -113,7 +113,7 @@ #include <boost/range/adaptor/transformed.hpp> #include <boost/range/algorithm/copy.hpp> #include <boost/assign.hpp> -#include <algorithm> +#include <iterator> #include <iostream> #include <vector> @@ -144,7 +144,7 @@This would produce the output:
-2,4,6,8,10,12,14,16,18,20 +2,4,6,8,10,12,14,16,18,20,diff --git a/doc/html/range/reference/adaptors/reference/type_erased.html b/doc/html/range/reference/adaptors/reference/type_erased.html index 20430be..f0a5ce6 100644 --- a/doc/html/range/reference/adaptors/reference/type_erased.html +++ b/doc/html/range/reference/adaptors/reference/type_erased.html @@ -190,7 +190,7 @@ #include <boost/range/algorithm/copy.hpp> #include <boost/assign.hpp> #include <boost/foreach.hpp> -#include <algorithm> +#include <iterator> #include <iostream> #include <list> #include <vector> @@ -279,10 +279,10 @@
This would produce the output:
-1,2,3,4,5 -6,7,8,9,10 -11,12,13,14,15 -11,12,13,14,15 ++ +1,2,3,4,5, +6,7,8,9,10, +11,12,13,14,15, +11,12,13,14,15,diff --git a/doc/html/range/reference/adaptors/reference/uniqued.html b/doc/html/range/reference/adaptors/reference/uniqued.html index 2ef82e0..cf3b672 100644 --- a/doc/html/range/reference/adaptors/reference/uniqued.html +++ b/doc/html/range/reference/adaptors/reference/uniqued.html @@ -105,11 +105,11 @@
#include <boost/range/adaptor/uniqued.hpp> #include <boost/range/algorithm/copy.hpp> #include <boost/assign.hpp> -#include <algorithm> +#include <iterator> #include <iostream> #include <vector> -void uniqued_example_test() +int main(int argc, const char* argv[]) { using namespace boost::assign; using namespace boost::adaptors; @@ -120,6 +120,8 @@ boost::copy( input | uniqued, std::ostream_iterator<int>(std::cout, ",")); + + return 0; }@@ -128,7 +130,7 @@
This would produce the output:
-1,2,3,4,5,6 +1,2,3,4,5,6,diff --git a/doc/html/range/reference/algorithms/heap/pop_heap.html b/doc/html/range/reference/algorithms/heap/pop_heap.html index 633ba1f..996ba5d 100644 --- a/doc/html/range/reference/algorithms/heap/pop_heap.html +++ b/doc/html/range/reference/algorithms/heap/pop_heap.html @@ -52,8 +52,8 @@
pop_heap
removes the - largest element from the heap. It is assumed thatbegin(rng), prior(end(rng))
is already a heap and that the element - to be added is*prior(end(rng))
. + largest element from the heap. It is assumed thatbegin(rng), prior(end(rng))
is already a heap (and therefore the + largest element is*begin(rng)
).The ordering relationship is determined by using
operator<
in the non-predicate versions, and diff --git a/doc/html/range/reference/algorithms/numeric/inner_product.html b/doc/html/range/reference/algorithms/numeric/inner_product.html index 4c2742d..2db9eb5 100644 --- a/doc/html/range/reference/algorithms/numeric/inner_product.html +++ b/doc/html/range/reference/algorithms/numeric/inner_product.html @@ -47,7 +47,8 @@ Value inner_product( const SinglePassRange1& rng1, const SinglePassRange2& rng2, Value init, - BinaryOperation1 op1 ); + BinaryOperation1 op1, + BinaryOperation2 op2 );diff --git a/doc/html/range/reference/extending/method_3/method_3_1.html b/doc/html/range/reference/extending/method_3/method_3_1.html index 10283cb..6628403 100644 --- a/doc/html/range/reference/extending/method_3/method_3_1.html +++ b/doc/html/range/reference/extending/method_3/method_3_1.html @@ -81,6 +81,14 @@ { return reverse_range<const BidirectionalRng>( r ); } +
+ Declare the adaptor itself (it is a variable of the tag type). + diff --git a/doc/html/range/reference/extending/method_3/method_3_2.html b/doc/html/range/reference/extending/method_3/method_3_2.html index 829179a..e21cd5f 100644 --- a/doc/html/range/reference/extending/method_3/method_3_2.html +++ b/doc/html/range/reference/extending/method_3/method_3_2.html @@ -80,15 +80,8 @@namespace +{ + const detail::reverse_forwarder reversed = detail::reverse_forwarder(); +}Implement a holder class to hold the arguments required to construct - the RangeAdaptor. - - -- The holder combines multiple parameters into one that can be passed as - the right operand of
-operator|()
. --
+ the RangeAdaptor. The holder combines multiple parameters into one + that can be passed as the right operand ofoperator|()
.template<typename T> class replace_holder : public boost::range_detail::holder2<T> { @@ -100,23 +93,15 @@ void operator=(const replace_holder&); };--
--
- +
+- Define an instance of the holder with the name of the adaptor -
-
static boost::range_detail::forwarder2<replace_holder> replaced = boost::range_detail::forwarder2<replace_holder>();--
--
- +
+- Define
operator|
--
template<typename SinglePassRange> inline replace_range<SinglePassRange> operator|(SinglePassRange& rng, @@ -133,8 +118,8 @@ return replace_range<const SinglePassRange>(rng, f.val1, f.val2); }--
+ +
diff --git a/doc/reference/adaptors.qbk b/doc/reference/adaptors.qbk index 91401c0..96f2ca3 100644 --- a/doc/reference/adaptors.qbk +++ b/doc/reference/adaptors.qbk @@ -93,7 +93,7 @@ What this means is that ['*no*] algorithm with the `_if` suffix is needed. Furth `` std::vector vec; -boost::replace_copy_if( rng, std::back_inserter(vec), pred ); +boost::replace_copy_if( rng, std::back_inserter(vec), pred, new_value ); `` With adaptors and algorithms we can express this as diff --git a/doc/reference/adaptors/adjacent_filtered.qbk b/doc/reference/adaptors/adjacent_filtered.qbk index a15f992..f8b4289 100644 --- a/doc/reference/adaptors/adjacent_filtered.qbk +++ b/doc/reference/adaptors/adjacent_filtered.qbk @@ -19,35 +19,13 @@ * [*Returned Range Category:] The minimum of the range category of `rng` and __forward_range__ [section:adjacent_filtered_example adjacent_filtered example] -`` -#include -#include -#include -#include -#include -#include -#include - -int main(int argc, const char* argv[]) -{ - using namespace boost::assign; - using namespace boost::adaptors; - - std::vector input; - input += 1,1,2,2,2,3,4,5,6; - - boost::copy( - input | adjacent_filtered(std::not_equal_to ()), - std::ostream_iterator (std::cout, ",")); - - return 0; -} -`` +[import ../../../test/adaptor_test/adjacent_filtered_example.cpp] +[adjacent_filtered_example] [endsect] This would produce the output: `` -1,2,3,4,5,6 +1,2,3,4,5,6, `` [endsect] diff --git a/doc/reference/adaptors/copied.qbk b/doc/reference/adaptors/copied.qbk index 69ee46d..2a8abcc 100644 --- a/doc/reference/adaptors/copied.qbk +++ b/doc/reference/adaptors/copied.qbk @@ -17,34 +17,13 @@ * [*Returned Range Category:] __random_access_range__ [section:copied_example copied example] -`` -#include -#include -#include -#include -#include -#include - -int main(int argc, const char* argv[]) -{ - using namespace boost::assign; - using namespace boost::adaptors; - - std::vector input; - input += 1,2,3,4,5,6,7,8,9,10; - - boost::copy( - input | copied(1, 5), - std::ostream_iterator (std::cout, ",")); - - return 0; -} -`` +[import ../../../test/adaptor_test/copied_example.cpp] +[copied_example] [endsect] This would produce the output: `` -2,3,4,5 +2,3,4,5, `` [endsect] diff --git a/doc/reference/adaptors/examples/adjacent_filtered.cpp b/doc/reference/adaptors/examples/adjacent_filtered.cpp deleted file mode 100644 index cc7cd9b..0000000 --- a/doc/reference/adaptors/examples/adjacent_filtered.cpp +++ /dev/null @@ -1,32 +0,0 @@ -// Boost.Range library -// -// Copyright Thorsten Ottosen 2003-2004. Use, modification and -// distribution is 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) -// -// For more information, see http://www.boost.org/libs/range/ -// -#include -#include -#include -#include -#include -#include -#include - -int main(int argc, const char* argv[]) -{ - using namespace boost::assign; - using namespace boost::adaptors; - - std::vector input; - input += 1,1,2,2,2,3,4,5,6; - - boost::copy( - input | adjacent_filtered(std::not_equal_to ()), - std::ostream_iterator (std::cout, ",")); - - return 0; -} - diff --git a/doc/reference/adaptors/examples/copied.cpp b/doc/reference/adaptors/examples/copied.cpp deleted file mode 100644 index 2de46ab..0000000 --- a/doc/reference/adaptors/examples/copied.cpp +++ /dev/null @@ -1,31 +0,0 @@ -// Boost.Range library -// -// Copyright Thorsten Ottosen 2003-2004. Use, modification and -// distribution is 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) -// -// For more information, see http://www.boost.org/libs/range/ -// -#include -#include -#include -#include -#include -#include - -int main(int argc, const char* argv[]) -{ - using namespace boost::assign; - using namespace boost::adaptors; - - std::vector input; - input += 1,2,3,4,5,6,7,8,9,10; - - boost::copy( - input | copied(1, 5), - std::ostream_iterator (std::cout, ",")); - - return 0; -} - diff --git a/doc/reference/adaptors/examples/filtered.cpp b/doc/reference/adaptors/examples/filtered.cpp deleted file mode 100644 index 6471237..0000000 --- a/doc/reference/adaptors/examples/filtered.cpp +++ /dev/null @@ -1,36 +0,0 @@ -// Boost.Range library -// -// Copyright Thorsten Ottosen 2003-2004. Use, modification and -// distribution is 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) -// -// For more information, see http://www.boost.org/libs/range/ -// -#include -#include -#include -#include -#include -#include - -struct is_even -{ - bool operator()(int x) const { return x % 2 == 0; } -}; - -int main(int argc, const char* argv[]) -{ - using namespace boost::assign; - using namespace boost::adaptors; - - std::vector input; - input += 1,2,3,4,5,6,7,8,9; - - boost::copy( - input | filtered(is_even()), - std::ostream_iterator (std::cout, ",")); - - return 0; -} - diff --git a/doc/reference/adaptors/examples/indexed.cpp b/doc/reference/adaptors/examples/indexed.cpp deleted file mode 100644 index bb141e8..0000000 --- a/doc/reference/adaptors/examples/indexed.cpp +++ /dev/null @@ -1,45 +0,0 @@ -// Boost.Range library -// -// Copyright Thorsten Ottosen 2003-2004. Use, modification and -// distribution is 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) -// -// For more information, see http://www.boost.org/libs/range/ -// -#include -#include -#include -#include -#include -#include - -template -void display_element_and_index(Iterator first, Iterator last) -{ - for (Iterator it = first; it != last; ++it) - { - std::cout << "Element = " << *it - << " Index = " << it.index() << std::endl; - } -} - -template -void display_element_and_index(const SinglePassRange& rng) -{ - display_element_and_index(boost::begin(rng), boost::end(rng)); -} - -int main(int argc, const char* argv[]) -{ - using namespace boost::assign; - using namespace boost::adaptors; - - std::vector input; - input += 10,20,30,40,50,60,70,80,90; - - display_element_and_index( input | indexed(0) ); - - return 0; -} - diff --git a/doc/reference/adaptors/examples/map_keys.cpp b/doc/reference/adaptors/examples/map_keys.cpp deleted file mode 100644 index 006e7e9..0000000 --- a/doc/reference/adaptors/examples/map_keys.cpp +++ /dev/null @@ -1,33 +0,0 @@ -// Boost.Range library -// -// Copyright Thorsten Ottosen 2003-2004. Use, modification and -// distribution is 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) -// -// For more information, see http://www.boost.org/libs/range/ -// -#include -#include -#include -#include -#include -#include