From 55fd3ca5b27223aee514cb1f936724f5f7148bf5 Mon Sep 17 00:00:00 2001
From: Neil Groves
Date: Sat, 1 Jan 2011 16:46:32 +0000
Subject: [PATCH] [boost][range] - Updated begin/end to be protected against
accidental ADL to improve compatibility with C++0x. Added any_range which
adds type erasure support. Added a type_erased adaptor to utilise the
any_range. Implemented the any_iterator using a small buffer optimization to
avoid heap usage.
[SVN r67541]
---
doc/boost_range.qbk | 2 +
doc/html/index.html | 5 +-
doc/html/quickbook_HTML.manifest | 2 +
.../range/concepts/bidirectional_range.html | 16 +-
doc/html/range/concepts/concept_checking.html | 2 +-
doc/html/range/concepts/forward_range.html | 10 +-
.../range/concepts/random_access_range.html | 12 +-
.../range/concepts/single_pass_range.html | 16 +-
doc/html/range/history_ack.html | 4 +-
doc/html/range/introduction.html | 6 +-
doc/html/range/mfc_atl.html | 4 +-
doc/html/range/reference.html | 1 +
.../reference/adaptors/introduction.html | 6 +-
.../range/reference/adaptors/reference.html | 1 +
.../reference/adaptors/reference/strided.html | 6 +-
.../adaptors/reference/tokenized.html | 6 +-
.../adaptors/reference/type_erased.html | 305 +++++++++
.../reference/algorithms/heap/make_heap.html | 10 +-
.../reference/algorithms/heap/pop_heap.html | 12 +-
.../reference/algorithms/heap/push_heap.html | 12 +-
.../reference/algorithms/heap/sort_heap.html | 12 +-
.../reference/algorithms/mutating/copy.html | 12 +-
.../algorithms/mutating/copy_backward.html | 12 +-
.../reference/algorithms/mutating/fill.html | 10 +-
.../reference/algorithms/mutating/fill_n.html | 10 +-
.../algorithms/mutating/generate.html | 12 +-
.../algorithms/mutating/inplace_merge.html | 16 +-
.../reference/algorithms/mutating/merge.html | 16 +-
.../algorithms/mutating/nth_element.html | 10 +-
.../algorithms/mutating/partial_sort.html | 10 +-
.../algorithms/mutating/partition.html | 10 +-
.../algorithms/mutating/random_shuffle.html | 12 +-
.../reference/algorithms/mutating/remove.html | 10 +-
.../algorithms/mutating/remove_copy.html | 10 +-
.../algorithms/mutating/remove_copy_if.html | 10 +-
.../algorithms/mutating/remove_if.html | 10 +-
.../algorithms/mutating/replace.html | 10 +-
.../algorithms/mutating/replace_copy.html | 10 +-
.../algorithms/mutating/replace_copy_if.html | 10 +-
.../algorithms/mutating/replace_if.html | 10 +-
.../algorithms/mutating/reverse.html | 10 +-
.../algorithms/mutating/reverse_copy.html | 10 +-
.../reference/algorithms/mutating/rotate.html | 12 +-
.../algorithms/mutating/rotate_copy.html | 12 +-
.../reference/algorithms/mutating/sort.html | 10 +-
.../algorithms/mutating/stable_partition.html | 10 +-
.../algorithms/mutating/stable_sort.html | 10 +-
.../algorithms/mutating/swap_ranges.html | 10 +-
.../algorithms/mutating/transform.html | 12 +-
.../reference/algorithms/mutating/unique.html | 10 +-
.../algorithms/mutating/unique_copy.html | 10 +-
.../reference/algorithms/new/copy_n.html | 10 +-
.../range/reference/algorithms/new/erase.html | 10 +-
.../reference/algorithms/new/for_each.html | 10 +-
.../reference/algorithms/new/insert.html | 10 +-
.../range/reference/algorithms/new/iota.html | 10 +-
.../reference/algorithms/new/is_sorted.html | 10 +-
.../reference/algorithms/new/overwrite.html | 10 +-
.../reference/algorithms/new/push_back.html | 10 +-
.../reference/algorithms/new/push_front.html | 10 +-
.../algorithms/new/remove_erase.html | 10 +-
.../algorithms/new/remove_erase_if.html | 10 +-
.../non_mutating/adjacent_find.html | 10 +-
.../non_mutating/binary_search.html | 12 +-
.../algorithms/non_mutating/count.html | 10 +-
.../algorithms/non_mutating/count_if.html | 10 +-
.../algorithms/non_mutating/equal.html | 10 +-
.../algorithms/non_mutating/equal_range.html | 12 +-
.../algorithms/non_mutating/find.html | 10 +-
.../algorithms/non_mutating/find_end.html | 10 +-
.../non_mutating/find_first_of.html | 10 +-
.../algorithms/non_mutating/find_if.html | 12 +-
.../algorithms/non_mutating/for_each.html | 10 +-
.../non_mutating/lexicographical_compare.html | 10 +-
.../algorithms/non_mutating/lower_bound.html | 12 +-
.../algorithms/non_mutating/max_element.html | 10 +-
.../algorithms/non_mutating/min_element.html | 10 +-
.../algorithms/non_mutating/mismatch.html | 12 +-
.../algorithms/non_mutating/search.html | 10 +-
.../algorithms/non_mutating/search_n.html | 10 +-
.../algorithms/non_mutating/upper_bound.html | 12 +-
.../algorithms/numeric/accumulate.html | 14 +-
.../numeric/adjacent_difference.html | 16 +-
.../algorithms/numeric/inner_product.html | 16 +-
.../algorithms/numeric/partial_sum.html | 16 +-
.../permutation/next_permutation.html | 10 +-
.../permutation/prev_permutation.html | 10 +-
.../reference/algorithms/set/includes.html | 12 +-
.../algorithms/set/set_difference.html | 12 +-
.../algorithms/set/set_intersection.html | 12 +-
.../set/set_symmetric_difference.html | 12 +-
.../reference/algorithms/set/set_union.html | 12 +-
.../concept_implementation/semantics.html | 2 +-
doc/html/range/reference/ranges.html | 7 +-
.../range/reference/ranges/any_range.html | 177 ++++++
.../reference/ranges/counting_range.html | 14 +-
doc/html/range/reference/ranges/irange.html | 10 +-
.../range/reference/ranges/istream_range.html | 6 +-
.../reference/utilities/iterator_range.html | 6 +-
doc/html/range/reference/utilities/join.html | 4 +-
.../range/reference/utilities/sub_range.html | 2 +-
doc/reference/adaptors.qbk | 1 +
doc/reference/adaptors/type_erased.qbk | 151 +++++
doc/reference/ranges.qbk | 1 +
doc/reference/ranges/any_range.qbk | 115 ++++
include/boost/range/adaptor/sliced.hpp | 1 +
include/boost/range/adaptor/type_erased.hpp | 218 +++++--
include/boost/range/any_range.hpp | 204 ++++++
include/boost/range/begin.hpp | 23 +-
include/boost/range/concepts.hpp | 23 +-
include/boost/range/detail/any_iterator.hpp | 587 +++++++++++++++++
.../range/detail/any_iterator_buffer.hpp | 119 ++++
.../range/detail/any_iterator_interface.hpp | 258 ++++++++
.../range/detail/any_iterator_wrapper.hpp | 590 ++++++++++++++++++
include/boost/range/detail/begin.hpp | 28 +-
include/boost/range/detail/end.hpp | 37 +-
include/boost/range/end.hpp | 23 +-
test/Jamfile.v2 | 4 +
test/adaptor_test/type_erased.cpp | 487 +++++++++++++++
test/adaptor_test/type_erased_example.cpp | 115 ++++
test/begin.cpp | 119 ++++
test/end.cpp | 119 ++++
122 files changed, 4087 insertions(+), 594 deletions(-)
create mode 100644 doc/html/range/reference/adaptors/reference/type_erased.html
create mode 100644 doc/html/range/reference/ranges/any_range.html
create mode 100644 doc/reference/adaptors/type_erased.qbk
create mode 100644 doc/reference/ranges/any_range.qbk
create mode 100644 include/boost/range/any_range.hpp
create mode 100644 include/boost/range/detail/any_iterator.hpp
create mode 100644 include/boost/range/detail/any_iterator_buffer.hpp
create mode 100644 include/boost/range/detail/any_iterator_interface.hpp
create mode 100644 include/boost/range/detail/any_iterator_wrapper.hpp
mode change 100755 => 100644 include/boost/range/detail/begin.hpp
mode change 100755 => 100644 include/boost/range/detail/end.hpp
create mode 100644 test/adaptor_test/type_erased.cpp
create mode 100644 test/adaptor_test/type_erased_example.cpp
create mode 100644 test/begin.cpp
create mode 100644 test/end.cpp
diff --git a/doc/boost_range.qbk b/doc/boost_range.qbk
index 80bbf06..be09bc6 100644
--- a/doc/boost_range.qbk
+++ b/doc/boost_range.qbk
@@ -78,6 +78,7 @@
[def __range_adaptors_reversed__ [link range.reference.adaptors.reference.reversed reversed]]
[def __range_adaptors_sliced__ [link range.reference.adaptors.reference.sliced sliced]]
[def __range_adaptors_strided__ [link range.reference.adaptors.reference.strided strided]]
+[def __range_adaptors_type_erased__ [link range.reference.adaptors.reference.type_erased type_erased]]
[def __range_adaptors_tokenized__ [link range.reference.adaptors.reference.tokenized tokenized]]
[def __range_adaptors_transformed__ [link range.reference.adaptors.reference.transformed transformed]]
[def __range_adaptors_uniqued__ [link range.reference.adaptors.reference.uniqued uniqued]]
@@ -174,6 +175,7 @@
[def __sgi_inner_product__ [@http://www.sgi.com/tech/stl/inner_product.html inner_product]]
[def __sgi_partial_sum__ [@http://www.sgi.com/tech/stl/partial_sum.html partial_sum]]
+[def __type_erasure_article__ [@http://www.artima.com/cppsource/type_erasure.html type erasure article]]
Boost.Range is a collection of concepts and utilities, range-based algorithms,
as well as range adaptors that allow for efficient and expressive code.
diff --git a/doc/html/index.html b/doc/html/index.html
index dd72835..1be23d5 100644
--- a/doc/html/index.html
+++ b/doc/html/index.html
@@ -30,7 +30,7 @@
Copyright © 2003 -2010 Thorsten Ottosen, Neil Groves
-Last revised: December 26, 2010 at 20:24:07 GMT
+Last revised: January 01, 2011 at 16:31:27 GMT
diff --git a/doc/html/quickbook_HTML.manifest b/doc/html/quickbook_HTML.manifest
index b12e40e..1b32f72 100644
--- a/doc/html/quickbook_HTML.manifest
+++ b/doc/html/quickbook_HTML.manifest
@@ -30,6 +30,7 @@ range/reference/adaptors/reference/replaced_if.html
range/reference/adaptors/reference/reversed.html
range/reference/adaptors/reference/sliced.html
range/reference/adaptors/reference/strided.html
+range/reference/adaptors/reference/type_erased.html
range/reference/adaptors/reference/tokenized.html
range/reference/adaptors/reference/transformed.html
range/reference/adaptors/reference/uniqued.html
@@ -118,6 +119,7 @@ range/reference/algorithms/numeric/adjacent_difference.html
range/reference/algorithms/numeric/inner_product.html
range/reference/algorithms/numeric/partial_sum.html
range/reference/ranges.html
+range/reference/ranges/any_range.html
range/reference/ranges/counting_range.html
range/reference/ranges/istream_range.html
range/reference/ranges/irange.html
diff --git a/doc/html/range/concepts/bidirectional_range.html b/doc/html/range/concepts/bidirectional_range.html
index 8e05a64..6e3dc8c 100644
--- a/doc/html/range/concepts/bidirectional_range.html
+++ b/doc/html/range/concepts/bidirectional_range.html
@@ -27,7 +27,7 @@
Bidirectional Range
@@ -75,7 +75,7 @@
Traversal Iterator.
@@ -83,7 +83,7 @@
Forward Range
@@ -136,7 +136,7 @@
@@ -221,7 +221,7 @@
@@ -232,7 +232,7 @@
Forward Range .
diff --git a/doc/html/range/concepts/concept_checking.html b/doc/html/range/concepts/concept_checking.html
index ae552a4..20a2fbb 100644
--- a/doc/html/range/concepts/concept_checking.html
+++ b/doc/html/range/concepts/concept_checking.html
@@ -79,7 +79,7 @@
diff --git a/doc/html/range/concepts/forward_range.html b/doc/html/range/concepts/forward_range.html
index be65866..7937f8c 100644
--- a/doc/html/range/concepts/forward_range.html
+++ b/doc/html/range/concepts/forward_range.html
@@ -27,7 +27,7 @@
Forward Range
@@ -73,14 +73,14 @@
Traversal Iterator.
Single Pass Range
@@ -132,7 +132,7 @@
diff --git a/doc/html/range/concepts/random_access_range.html b/doc/html/range/concepts/random_access_range.html
index 5a50b04..3124ddc 100644
--- a/doc/html/range/concepts/random_access_range.html
+++ b/doc/html/range/concepts/random_access_range.html
@@ -27,7 +27,7 @@
Random Access Range
@@ -35,7 +35,7 @@
Access Traversal Iterator.
@@ -43,7 +43,7 @@
Bidirectional Range
@@ -89,7 +89,7 @@
@@ -139,7 +139,7 @@
@@ -147,7 +147,7 @@
boost :: size ( a )
completes in amortized constant time.
@@ -198,7 +198,7 @@
@@ -266,7 +266,7 @@
@@ -276,7 +276,7 @@
constant time.
diff --git a/doc/html/range/history_ack.html b/doc/html/range/history_ack.html
index 29c6173..49355b5 100644
--- a/doc/html/range/history_ack.html
+++ b/doc/html/range/history_ack.html
@@ -26,7 +26,7 @@
History and Acknowledgement
@@ -79,7 +79,7 @@
The concept checks and their documentation was provided by Daniel Walker.
diff --git a/doc/html/range/introduction.html b/doc/html/range/introduction.html
index d3c86a1..a68d315 100644
--- a/doc/html/range/introduction.html
+++ b/doc/html/range/introduction.html
@@ -70,7 +70,7 @@
@@ -84,7 +84,7 @@
@@ -98,7 +98,7 @@
diff --git a/doc/html/range/mfc_atl.html b/doc/html/range/mfc_atl.html
index 633143c..2ca51fd 100644
--- a/doc/html/range/mfc_atl.html
+++ b/doc/html/range/mfc_atl.html
@@ -34,7 +34,7 @@
References
@@ -100,7 +100,7 @@
diff --git a/doc/html/range/reference.html b/doc/html/range/reference.html
index f8246fb..50f6ed0 100644
--- a/doc/html/range/reference.html
+++ b/doc/html/range/reference.html
@@ -58,6 +58,7 @@
Provided Ranges
+any_range
counting_range
istream_range
irange
diff --git a/doc/html/range/reference/adaptors/introduction.html b/doc/html/range/reference/adaptors/introduction.html
index 7eff9ad..4991499 100644
--- a/doc/html/range/reference/adaptors/introduction.html
+++ b/doc/html/range/reference/adaptors/introduction.html
@@ -122,7 +122,7 @@
situations, you will really appreciate the succinctness of operator |()
.
@@ -169,7 +169,7 @@
is the design solution to this problem.
@@ -186,7 +186,7 @@
diff --git a/doc/html/range/reference/adaptors/reference.html b/doc/html/range/reference/adaptors/reference.html
index dffb6fe..4e5b99a 100644
--- a/doc/html/range/reference/adaptors/reference.html
+++ b/doc/html/range/reference/adaptors/reference.html
@@ -39,6 +39,7 @@
reversed
sliced
strided
+type_erased
tokenized
transformed
uniqued
diff --git a/doc/html/range/reference/adaptors/reference/strided.html b/doc/html/range/reference/adaptors/reference/strided.html
index c28ac99..592b83e 100644
--- a/doc/html/range/reference/adaptors/reference/strided.html
+++ b/doc/html/range/reference/adaptors/reference/strided.html
@@ -7,7 +7,7 @@
-
+