From ba7975f7eb6ef4c10701f0e59921e557a58f74d4 Mon Sep 17 00:00:00 2001 From: nobody Date: Tue, 19 Jun 2007 01:09:14 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create tag 'SPIRIT_1_6_4_MINIBOOST'. [SVN r38030] --- doc/.cvsignore | 1 - doc/BidirectionalTraversal.html | 351 -- doc/BidirectionalTraversal.rst | 41 - doc/ForwardTraversal.html | 342 -- doc/ForwardTraversal.rst | 31 - doc/GNUmakefile | 15 - doc/IncrementableIterator.html | 341 -- doc/IncrementableIterator.rst | 32 - doc/InteroperableIterator.rst | 61 - doc/Jamfile.v2 | 20 - doc/LvalueIterator.html | 331 -- doc/LvalueIterator.rst | 25 - doc/RandomAccessTraversal.html | 409 --- doc/RandomAccessTraversal.rst | 67 - doc/ReadableIterator.html | 339 -- doc/ReadableIterator.rst | 26 - doc/SinglePassIterator.html | 343 -- doc/SinglePassIterator.rst | 32 - doc/SwappableIterator.html | 329 -- doc/SwappableIterator.rst | 23 - doc/WritableIterator.html | 327 -- doc/WritableIterator.rst | 21 - doc/access.png | Bin 11127 -> 0 bytes doc/access2old.png | Bin 42175 -> 0 bytes doc/counting_iterator.html | 577 ---- doc/counting_iterator.pdf | Bin 72583 -> 0 bytes doc/counting_iterator.rst | 43 - doc/counting_iterator_abstract.rst | 8 - doc/counting_iterator_eg.rst | 43 - doc/counting_iterator_ref.rst | 149 - doc/default.css | 226 -- doc/docutils.sty | 54 - doc/facade-and-adaptor.html | 2992 ----------------- doc/facade-and-adaptor.pdf | Bin 226024 -> 0 bytes doc/facade-and-adaptor.rst | 438 --- doc/facade_iterator_category.rst | 53 - doc/filter_iterator.html | 689 ---- doc/filter_iterator.pdf | Bin 69532 -> 0 bytes doc/filter_iterator.rst | 33 - doc/filter_iterator_abstract.rst | 15 - doc/filter_iterator_eg.rst | 72 - doc/filter_iterator_ref.rst | 177 - doc/func_output_iter_abstract.rst | 12 - doc/func_output_iter_ref.rst | 73 - doc/function_output_iterator.html | 467 --- doc/function_output_iterator.pdf | Bin 57133 -> 0 bytes doc/function_output_iterator.rst | 28 - doc/function_output_iterator_eg.rst | 39 - doc/generate.py | 32 - doc/index.html | 521 --- doc/index.rst | 323 -- doc/indirect_iterator.html | 621 ---- doc/indirect_iterator.pdf | Bin 75031 -> 0 bytes doc/indirect_iterator.rst | 34 - doc/indirect_iterator_abstract.rst | 15 - doc/indirect_iterator_eg.rst | 73 - doc/indirect_iterator_ref.rst | 181 - doc/indirect_reference_ref.rst | 29 - doc/interoperability-revisited.rst | 235 -- doc/issues.rst | 152 - doc/iterator_adaptor.html | 737 ---- doc/iterator_adaptor.pdf | Bin 100117 -> 0 bytes doc/iterator_adaptor.rst | 41 - doc/iterator_adaptor_abstract.rst | 19 - doc/iterator_adaptor_body.rst | 43 - doc/iterator_adaptor_ref.rst | 182 - doc/iterator_adaptor_tutorial.rst | 135 - doc/iterator_archetypes.html | 500 --- doc/iterator_archetypes.pdf | Bin 61213 -> 0 bytes doc/iterator_archetypes.rst | 193 -- doc/iterator_concepts.html | 403 --- doc/iterator_concepts.pdf | Bin 66710 -> 0 bytes doc/iterator_concepts.rst | 130 - doc/iterator_facade.html | 1624 --------- doc/iterator_facade.pdf | Bin 167634 -> 0 bytes doc/iterator_facade.rst | 44 - doc/iterator_facade_abstract.rst | 8 - doc/iterator_facade_body.rst | 195 -- doc/iterator_facade_ref.rst | 441 --- doc/iterator_facade_tutorial.rst | 523 --- doc/iterator_traits.html | 400 --- doc/iterator_traits.pdf | Bin 49650 -> 0 bytes doc/iterator_traits.rst | 98 - doc/make_counting_iterator.rst | 12 - doc/make_filter_iterator.rst | 19 - doc/make_reverse_iterator.rst | 13 - doc/make_transform_iterator.rst | 23 - doc/make_zip_iterator.rst | 12 - doc/new-iter-concepts.html | 1303 ------- doc/new-iter-concepts.pdf | Bin 175676 -> 0 bytes doc/new-iter-concepts.rst | 803 ----- doc/oldeqnew.png | Bin 33786 -> 0 bytes doc/permutation_iter_abstract.rst | 8 - doc/permutation_iterator.html | 587 ---- doc/permutation_iterator.pdf | Bin 66744 -> 0 bytes doc/permutation_iterator.rst | 41 - doc/permutation_iterator_body.rst | 19 - doc/permutation_iterator_eg.rst | 71 - doc/permutation_iterator_ref.rst | 130 - doc/pointee.html | 459 --- doc/pointee.pdf | Bin 62356 -> 0 bytes doc/pointee.rst | 88 - doc/pointee_ref.rst | 38 - doc/ref_problem.rst | 63 - doc/reverse_iterator.html | 573 ---- doc/reverse_iterator.pdf | Bin 61924 -> 0 bytes doc/reverse_iterator.rst | 33 - doc/reverse_iterator_abstract.rst | 12 - doc/reverse_iterator_eg.rst | 45 - doc/reverse_iterator_ref.rst | 141 - doc/rst2html | 10 - doc/rst2latex | 7 - doc/scanrst.py | 29 - doc/sources.py | 24 - doc/syscmd.py | 14 - doc/transform_iterator.html | 622 ---- doc/transform_iterator.pdf | Bin 67596 -> 0 bytes doc/transform_iterator.rst | 32 - doc/transform_iterator_abstract.rst | 7 - doc/transform_iterator_eg.rst | 46 - doc/transform_iterator_ref.rst | 175 - doc/traversal.png | Bin 9112 -> 0 bytes doc/zip_iterator.html | 643 ---- doc/zip_iterator.pdf | Bin 62372 -> 0 bytes doc/zip_iterator.rst | 29 - doc/zip_iterator_abstract.rst | 10 - doc/zip_iterator_eg.rst | 116 - doc/zip_iterator_ref.rst | 155 - example/counting_iterator_example.cpp | 52 - example/filter_iterator_example.cpp | 58 - example/func_output_iter_example.cpp | 46 - example/indirect_iterator_example.cpp | 59 - example/node.hpp | 60 - example/node_iterator1.cpp | 34 - example/node_iterator1.hpp | 42 - example/node_iterator2.cpp | 43 - example/node_iterator2.hpp | 73 - example/node_iterator3.cpp | 43 - example/node_iterator3.hpp | 60 - example/permutation_iter_example.cpp | 67 - example/reverse_iterator.cpp | 19 - example/reverse_iterator_example.cpp | 41 - example/transform_iterator_example.cpp | 76 - include/boost/function_output_iterator.hpp | 56 - include/boost/pending/detail/int_iterator.hpp | 74 - include/boost/pending/integer_range.hpp | 59 - include/boost/pending/iterator_adaptors.hpp | 6 - include/boost/pending/iterator_tests.hpp | 268 -- include/boost/pointee.hpp | 74 - include/boost/shared_container_iterator.hpp | 62 - index.html | 12 - test/Jamfile.v2 | 47 - test/concept_tests.cpp | 94 - test/constant_iter_arrow.cpp | 16 - test/constant_iter_arrow_fail.cpp | 20 - test/counting_iterator_test.cpp | 300 -- test/filter_iterator_test.cpp | 272 -- test/indirect_iter_member_types.cpp | 89 - test/indirect_iterator_test.cpp | 221 -- test/interoperable.cpp | 60 - test/interoperable_fail.cpp | 21 - test/is_convertible_fail.cpp | 19 - test/is_lvalue_iterator.cpp | 145 - test/is_readable_iterator.cpp | 93 - test/iter_archetype_default_ctor.cpp | 21 - test/iterator_adaptor_cc.cpp | 46 - test/iterator_adaptor_test.cpp | 337 -- test/iterator_archetype_cc.cpp | 61 - test/iterator_facade.cpp | 106 - test/iterator_traits_test.cpp | 218 -- test/lvalue_concept_fail.cpp | 20 - test/permutation_iterator_test.cpp | 103 - test/pointee.cpp | 72 - test/reverse_iterator_test.cpp | 174 - test/static_assert_same.hpp | 20 - test/transform_iterator_test.cpp | 248 -- test/unit_tests.cpp | 110 - test/zip_iterator_test.cpp | 833 ----- 178 files changed, 29189 deletions(-) delete mode 100755 doc/.cvsignore delete mode 100644 doc/BidirectionalTraversal.html delete mode 100755 doc/BidirectionalTraversal.rst delete mode 100644 doc/ForwardTraversal.html delete mode 100755 doc/ForwardTraversal.rst delete mode 100755 doc/GNUmakefile delete mode 100644 doc/IncrementableIterator.html delete mode 100755 doc/IncrementableIterator.rst delete mode 100644 doc/InteroperableIterator.rst delete mode 100644 doc/Jamfile.v2 delete mode 100644 doc/LvalueIterator.html delete mode 100755 doc/LvalueIterator.rst delete mode 100644 doc/RandomAccessTraversal.html delete mode 100644 doc/RandomAccessTraversal.rst delete mode 100644 doc/ReadableIterator.html delete mode 100755 doc/ReadableIterator.rst delete mode 100644 doc/SinglePassIterator.html delete mode 100755 doc/SinglePassIterator.rst delete mode 100644 doc/SwappableIterator.html delete mode 100755 doc/SwappableIterator.rst delete mode 100644 doc/WritableIterator.html delete mode 100755 doc/WritableIterator.rst delete mode 100644 doc/access.png delete mode 100644 doc/access2old.png delete mode 100644 doc/counting_iterator.html delete mode 100755 doc/counting_iterator.pdf delete mode 100644 doc/counting_iterator.rst delete mode 100644 doc/counting_iterator_abstract.rst delete mode 100644 doc/counting_iterator_eg.rst delete mode 100644 doc/counting_iterator_ref.rst delete mode 100644 doc/default.css delete mode 100755 doc/docutils.sty delete mode 100755 doc/facade-and-adaptor.html delete mode 100755 doc/facade-and-adaptor.pdf delete mode 100644 doc/facade-and-adaptor.rst delete mode 100755 doc/facade_iterator_category.rst delete mode 100644 doc/filter_iterator.html delete mode 100755 doc/filter_iterator.pdf delete mode 100644 doc/filter_iterator.rst delete mode 100644 doc/filter_iterator_abstract.rst delete mode 100644 doc/filter_iterator_eg.rst delete mode 100644 doc/filter_iterator_ref.rst delete mode 100644 doc/func_output_iter_abstract.rst delete mode 100644 doc/func_output_iter_ref.rst delete mode 100644 doc/function_output_iterator.html delete mode 100755 doc/function_output_iterator.pdf delete mode 100644 doc/function_output_iterator.rst delete mode 100644 doc/function_output_iterator_eg.rst delete mode 100644 doc/generate.py delete mode 100755 doc/index.html delete mode 100755 doc/index.rst delete mode 100644 doc/indirect_iterator.html delete mode 100755 doc/indirect_iterator.pdf delete mode 100644 doc/indirect_iterator.rst delete mode 100644 doc/indirect_iterator_abstract.rst delete mode 100644 doc/indirect_iterator_eg.rst delete mode 100644 doc/indirect_iterator_ref.rst delete mode 100755 doc/indirect_reference_ref.rst delete mode 100755 doc/interoperability-revisited.rst delete mode 100755 doc/issues.rst delete mode 100644 doc/iterator_adaptor.html delete mode 100755 doc/iterator_adaptor.pdf delete mode 100644 doc/iterator_adaptor.rst delete mode 100644 doc/iterator_adaptor_abstract.rst delete mode 100644 doc/iterator_adaptor_body.rst delete mode 100644 doc/iterator_adaptor_ref.rst delete mode 100755 doc/iterator_adaptor_tutorial.rst delete mode 100755 doc/iterator_archetypes.html delete mode 100755 doc/iterator_archetypes.pdf delete mode 100755 doc/iterator_archetypes.rst delete mode 100644 doc/iterator_concepts.html delete mode 100755 doc/iterator_concepts.pdf delete mode 100755 doc/iterator_concepts.rst delete mode 100644 doc/iterator_facade.html delete mode 100755 doc/iterator_facade.pdf delete mode 100644 doc/iterator_facade.rst delete mode 100644 doc/iterator_facade_abstract.rst delete mode 100644 doc/iterator_facade_body.rst delete mode 100644 doc/iterator_facade_ref.rst delete mode 100755 doc/iterator_facade_tutorial.rst delete mode 100755 doc/iterator_traits.html delete mode 100755 doc/iterator_traits.pdf delete mode 100755 doc/iterator_traits.rst delete mode 100755 doc/make_counting_iterator.rst delete mode 100755 doc/make_filter_iterator.rst delete mode 100644 doc/make_reverse_iterator.rst delete mode 100755 doc/make_transform_iterator.rst delete mode 100755 doc/make_zip_iterator.rst delete mode 100755 doc/new-iter-concepts.html delete mode 100755 doc/new-iter-concepts.pdf delete mode 100644 doc/new-iter-concepts.rst delete mode 100644 doc/oldeqnew.png delete mode 100644 doc/permutation_iter_abstract.rst delete mode 100644 doc/permutation_iterator.html delete mode 100755 doc/permutation_iterator.pdf delete mode 100644 doc/permutation_iterator.rst delete mode 100644 doc/permutation_iterator_body.rst delete mode 100644 doc/permutation_iterator_eg.rst delete mode 100644 doc/permutation_iterator_ref.rst delete mode 100755 doc/pointee.html delete mode 100755 doc/pointee.pdf delete mode 100755 doc/pointee.rst delete mode 100755 doc/pointee_ref.rst delete mode 100644 doc/ref_problem.rst delete mode 100644 doc/reverse_iterator.html delete mode 100755 doc/reverse_iterator.pdf delete mode 100644 doc/reverse_iterator.rst delete mode 100644 doc/reverse_iterator_abstract.rst delete mode 100644 doc/reverse_iterator_eg.rst delete mode 100644 doc/reverse_iterator_ref.rst delete mode 100755 doc/rst2html delete mode 100755 doc/rst2latex delete mode 100644 doc/scanrst.py delete mode 100644 doc/sources.py delete mode 100644 doc/syscmd.py delete mode 100644 doc/transform_iterator.html delete mode 100755 doc/transform_iterator.pdf delete mode 100644 doc/transform_iterator.rst delete mode 100644 doc/transform_iterator_abstract.rst delete mode 100755 doc/transform_iterator_eg.rst delete mode 100644 doc/transform_iterator_ref.rst delete mode 100644 doc/traversal.png delete mode 100755 doc/zip_iterator.html delete mode 100755 doc/zip_iterator.pdf delete mode 100755 doc/zip_iterator.rst delete mode 100755 doc/zip_iterator_abstract.rst delete mode 100755 doc/zip_iterator_eg.rst delete mode 100755 doc/zip_iterator_ref.rst delete mode 100644 example/counting_iterator_example.cpp delete mode 100644 example/filter_iterator_example.cpp delete mode 100644 example/func_output_iter_example.cpp delete mode 100644 example/indirect_iterator_example.cpp delete mode 100755 example/node.hpp delete mode 100755 example/node_iterator1.cpp delete mode 100755 example/node_iterator1.hpp delete mode 100755 example/node_iterator2.cpp delete mode 100755 example/node_iterator2.hpp delete mode 100755 example/node_iterator3.cpp delete mode 100755 example/node_iterator3.hpp delete mode 100644 example/permutation_iter_example.cpp delete mode 100644 example/reverse_iterator.cpp delete mode 100644 example/reverse_iterator_example.cpp delete mode 100644 example/transform_iterator_example.cpp delete mode 100644 include/boost/function_output_iterator.hpp delete mode 100644 include/boost/pending/detail/int_iterator.hpp delete mode 100644 include/boost/pending/integer_range.hpp delete mode 100644 include/boost/pending/iterator_adaptors.hpp delete mode 100644 include/boost/pending/iterator_tests.hpp delete mode 100755 include/boost/pointee.hpp delete mode 100644 include/boost/shared_container_iterator.hpp delete mode 100755 index.html delete mode 100644 test/Jamfile.v2 delete mode 100644 test/concept_tests.cpp delete mode 100755 test/constant_iter_arrow.cpp delete mode 100755 test/constant_iter_arrow_fail.cpp delete mode 100644 test/counting_iterator_test.cpp delete mode 100644 test/filter_iterator_test.cpp delete mode 100644 test/indirect_iter_member_types.cpp delete mode 100644 test/indirect_iterator_test.cpp delete mode 100755 test/interoperable.cpp delete mode 100644 test/interoperable_fail.cpp delete mode 100644 test/is_convertible_fail.cpp delete mode 100755 test/is_lvalue_iterator.cpp delete mode 100755 test/is_readable_iterator.cpp delete mode 100755 test/iter_archetype_default_ctor.cpp delete mode 100644 test/iterator_adaptor_cc.cpp delete mode 100644 test/iterator_adaptor_test.cpp delete mode 100644 test/iterator_archetype_cc.cpp delete mode 100755 test/iterator_facade.cpp delete mode 100644 test/iterator_traits_test.cpp delete mode 100644 test/lvalue_concept_fail.cpp delete mode 100644 test/permutation_iterator_test.cpp delete mode 100755 test/pointee.cpp delete mode 100644 test/reverse_iterator_test.cpp delete mode 100644 test/static_assert_same.hpp delete mode 100644 test/transform_iterator_test.cpp delete mode 100644 test/unit_tests.cpp delete mode 100755 test/zip_iterator_test.cpp diff --git a/doc/.cvsignore b/doc/.cvsignore deleted file mode 100755 index 59a4657..0000000 --- a/doc/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -GNUmakefile diff --git a/doc/BidirectionalTraversal.html b/doc/BidirectionalTraversal.html deleted file mode 100644 index 5bc8342..0000000 --- a/doc/BidirectionalTraversal.html +++ /dev/null @@ -1,351 +0,0 @@ - - - - - - -Bidirectional Traversal Concept - - - -
-

Bidirectional Traversal Concept

- - - -

A class or built-in type X models the Bidirectional Traversal -concept if, in addition to X meeting the requirements of Forward -Traversal Iterator, the following expressions are valid and respect -the stated semantics.

- ----- - - - - - - - - - - - - - - - - - - - - - - -
Bidirectional Traversal Iterator Requirements (in addition to Forward Traversal -Iterator)
ExpressionReturn TypeAssertion/Semantics / -Pre-/Post-condition
--rX&pre: there exists -s such that r -== ++s. post: -s is -dereferenceable. ---(++r) == r. ---r == --s -implies r == -s. &r == &--r.
r--convertible to const X&
-{
-  X tmp = r;
-  --r;
-  return tmp;
-}
-
-
iterator_traversal<X>::typeConvertible to -bidirectional_traversal_tag 
-
- - diff --git a/doc/BidirectionalTraversal.rst b/doc/BidirectionalTraversal.rst deleted file mode 100755 index a62b8bd..0000000 --- a/doc/BidirectionalTraversal.rst +++ /dev/null @@ -1,41 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -Bidirectional Traversal Concept -............................... - -A class or built-in type ``X`` models the *Bidirectional Traversal* -concept if, in addition to ``X`` meeting the requirements of Forward -Traversal Iterator, the following expressions are valid and respect -the stated semantics. - -+--------------------------------------------------------------------------------------+ -|Bidirectional Traversal Iterator Requirements (in addition to Forward Traversal | -|Iterator) | -+--------------------------------+-------------------------------+---------------------+ -|Expression |Return Type |Assertion/Semantics /| -| | |Pre-/Post-condition | -+================================+===============================+=====================+ -|``--r`` |``X&`` |pre: there exists | -| | |``s`` such that ``r | -| | |== ++s``. post: | -| | |``s`` is | -| | |dereferenceable. | -| | |``--(++r) == r``. | -| | |``--r == --s`` | -| | |implies ``r == | -| | |s``. ``&r == &--r``. | -+--------------------------------+-------------------------------+---------------------+ -|``r--`` |convertible to ``const X&`` |:: | -| | | | -| | | { | -| | | X tmp = r; | -| | | --r; | -| | | return tmp; | -| | | } | -+--------------------------------+-------------------------------+---------------------+ -|``iterator_traversal::type`` |Convertible to | | -| |``bidirectional_traversal_tag``| | -| | | | -+--------------------------------+-------------------------------+---------------------+ diff --git a/doc/ForwardTraversal.html b/doc/ForwardTraversal.html deleted file mode 100644 index 934aa56..0000000 --- a/doc/ForwardTraversal.html +++ /dev/null @@ -1,342 +0,0 @@ - - - - - - -Forward Traversal Concept - - - -
-

Forward Traversal Concept

- - - -

A class or built-in type X models the Forward Traversal -concept if, in addition to X meeting the requirements of Default -Constructible and Single Pass Iterator, the following expressions are -valid and respect the stated semantics.

- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Forward Traversal Iterator Requirements (in addition to Default Constructible and Single Pass Iterator)
ExpressionReturn TypeAssertion/Note
X u;X&note: u may have a -singular value.
++rX&r == s and r is -dereferenceable implies -++r == ++s.
iterator_traits<X>::difference_typeA signed integral type representing -the distance between iterators 
iterator_traversal<X>::typeConvertible to -forward_traversal_tag 
-
- - diff --git a/doc/ForwardTraversal.rst b/doc/ForwardTraversal.rst deleted file mode 100755 index 80dd9c7..0000000 --- a/doc/ForwardTraversal.rst +++ /dev/null @@ -1,31 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -Forward Traversal Concept -......................... - -A class or built-in type ``X`` models the *Forward Traversal* -concept if, in addition to ``X`` meeting the requirements of Default -Constructible and Single Pass Iterator, the following expressions are -valid and respect the stated semantics. - -+--------------------------------------------------------------------------------------------------------+ -|Forward Traversal Iterator Requirements (in addition to Default Constructible and Single Pass Iterator) | -+---------------------------------------+-----------------------------------+----------------------------+ -|Expression |Return Type |Assertion/Note | -+=======================================+===================================+============================+ -|``X u;`` |``X&`` |note: ``u`` may have a | -| | |singular value. | -+---------------------------------------+-----------------------------------+----------------------------+ -|``++r`` |``X&`` |``r == s`` and ``r`` is | -| | |dereferenceable implies | -| | |``++r == ++s.`` | -+---------------------------------------+-----------------------------------+----------------------------+ -|``iterator_traits::difference_type``|A signed integral type representing| | -| |the distance between iterators | | -| | | | -+---------------------------------------+-----------------------------------+----------------------------+ -|``iterator_traversal::type`` |Convertible to | | -| |``forward_traversal_tag`` | | -+---------------------------------------+-----------------------------------+----------------------------+ diff --git a/doc/GNUmakefile b/doc/GNUmakefile deleted file mode 100755 index 85917f7..0000000 --- a/doc/GNUmakefile +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright David Abrahams 2004. Distributed under 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) - -ECHO = /bin/echo - -all: - @${ECHO} "/libs/iterator/doc/GNUmakefile should be replaced by" - @${ECHO} - @${ECHO} " http://www.boost-consulting.com/writing/GNUmakefile," - @${ECHO} - @${ECHO} "before proceeding. That file is not included in the Boost" - @${ECHO} "distribution because it is licensed under the GPL, which violates" - @${ECHO} "Boost license requirements." - diff --git a/doc/IncrementableIterator.html b/doc/IncrementableIterator.html deleted file mode 100644 index c42cfff..0000000 --- a/doc/IncrementableIterator.html +++ /dev/null @@ -1,341 +0,0 @@ - - - - - - -Incrementable Iterator Concept - - - -
-

Incrementable Iterator Concept

- - - -

A class or built-in type X models the Incrementable Iterator -concept if, in addition to X being Assignable and Copy -Constructible, the following expressions are valid and respect the -stated semantics.

- ----- - - - - - - - - - - - - - - - - - - - - - - -
Incrementable Iterator Requirements (in addition to Assignable, Copy Constructible)
ExpressionReturn TypeAssertion/Semantics
++rX&&r == &++r
r++X
-{
-   X tmp = r;
-   ++r;
-   return tmp;
-}
-
-
iterator_traversal<X>::typeConvertible to -incrementable_traversal_tag 
-
- - diff --git a/doc/IncrementableIterator.rst b/doc/IncrementableIterator.rst deleted file mode 100755 index a1f92ec..0000000 --- a/doc/IncrementableIterator.rst +++ /dev/null @@ -1,32 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -Incrementable Iterator Concept -.............................. - -A class or built-in type ``X`` models the *Incrementable Iterator* -concept if, in addition to ``X`` being Assignable and Copy -Constructible, the following expressions are valid and respect the -stated semantics. - - -+-------------------------------------------------------------------------------------+ -|Incrementable Iterator Requirements (in addition to Assignable, Copy Constructible) | -| | -+--------------------------------+-------------------------------+--------------------+ -|Expression |Return Type |Assertion/Semantics | -+================================+===============================+====================+ -|``++r`` |``X&`` |``&r == &++r`` | -+--------------------------------+-------------------------------+--------------------+ -|``r++`` |``X`` |:: | -| | | | -| | | { | -| | | X tmp = r; | -| | | ++r; | -| | | return tmp; | -| | | } | -+--------------------------------+-------------------------------+--------------------+ -|``iterator_traversal::type`` |Convertible to | | -| |``incrementable_traversal_tag``| | -+--------------------------------+-------------------------------+--------------------+ diff --git a/doc/InteroperableIterator.rst b/doc/InteroperableIterator.rst deleted file mode 100644 index 3632ff2..0000000 --- a/doc/InteroperableIterator.rst +++ /dev/null @@ -1,61 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -Interoperable Iterator Concept -.............................. - -A class or built-in type ``X`` that models Single Pass Iterator is -*interoperable with* a class or built-in type ``Y`` that also models -Single Pass Iterator if the following expressions are valid and -respect the stated semantics. In the tables below, ``x`` is an object -of type ``X``, ``y`` is an object of type ``Y``, ``Distance`` is -``iterator_traits::difference_type``, and ``n`` represents a -constant object of type ``Distance``. - -+-----------+-----------------------+---------------------------------------------------+ -|Expression |Return Type |Assertion/Precondition/Postcondition | -+===========+=======================+===================================================+ -|``y = x`` |``Y`` |post: ``y == x`` | -+-----------+-----------------------+---------------------------------------------------+ -|``Y(x)`` |``Y`` |post: ``Y(x) == x`` | -+-----------+-----------------------+---------------------------------------------------+ -|``x == y`` |convertible to ``bool``|``==`` is an equivalence relation over its domain. | -+-----------+-----------------------+---------------------------------------------------+ -|``y == x`` |convertible to ``bool``|``==`` is an equivalence relation over its domain. | -+-----------+-----------------------+---------------------------------------------------+ -|``x != y`` |convertible to ``bool``|``bool(a==b) != bool(a!=b)`` over its domain. | -+-----------+-----------------------+---------------------------------------------------+ -|``y != x`` |convertible to ``bool``|``bool(a==b) != bool(a!=b)`` over its domain. | -+-----------+-----------------------+---------------------------------------------------+ - -If ``X`` and ``Y`` both model Random Access Traversal Iterator then -the following additional requirements must be met. - -+-----------+-----------------------+---------------------+--------------------------------------+ -|Expression |Return Type |Operational Semantics|Assertion/ Precondition | -+===========+=======================+=====================+======================================+ -|``x < y`` |convertible to ``bool``|``y - x > 0`` |``<`` is a total ordering relation | -+-----------+-----------------------+---------------------+--------------------------------------+ -|``y < x`` |convertible to ``bool``|``x - y > 0`` |``<`` is a total ordering relation | -+-----------+-----------------------+---------------------+--------------------------------------+ -|``x > y`` |convertible to ``bool``|``y < x`` |``>`` is a total ordering relation | -+-----------+-----------------------+---------------------+--------------------------------------+ -|``y > x`` |convertible to ``bool``|``x < y`` |``>`` is a total ordering relation | -+-----------+-----------------------+---------------------+--------------------------------------+ -|``x >= y`` |convertible to ``bool``|``!(x < y)`` | | -+-----------+-----------------------+---------------------+--------------------------------------+ -|``y >= x`` |convertible to ``bool``|``!(y < x)`` | | -+-----------+-----------------------+---------------------+--------------------------------------+ -|``x <= y`` |convertible to ``bool``|``!(x > y)`` | | -+-----------+-----------------------+---------------------+--------------------------------------+ -|``y <= x`` |convertible to ``bool``|``!(y > x)`` | | -+-----------+-----------------------+---------------------+--------------------------------------+ -|``y - x`` |``Distance`` |``distance(Y(x),y)`` |pre: there exists a value ``n`` of | -| | | |``Distance`` such that ``x + n == y``.| -| | | |``y == x + (y - x)``. | -+-----------+-----------------------+---------------------+--------------------------------------+ -|``x - y`` |``Distance`` |``distance(y,Y(x))`` |pre: there exists a value ``n`` of | -| | | |``Distance`` such that ``y + n == x``.| -| | | |``x == y + (x - y)``. | -+-----------+-----------------------+---------------------+--------------------------------------+ diff --git a/doc/Jamfile.v2 b/doc/Jamfile.v2 deleted file mode 100644 index 2fe0c7a..0000000 --- a/doc/Jamfile.v2 +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright Thomas Witt 2005. Use, modification, and distribution are -# 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) - -using quickbook ; - -xml iterator - : - quickbook/iterator.qbk - ; - -boostbook standalone - : - iterator - : - toc.max.depth=3 - toc.section.depth=3 - chunk.section.depth=4 - ; - diff --git a/doc/LvalueIterator.html b/doc/LvalueIterator.html deleted file mode 100644 index 6575694..0000000 --- a/doc/LvalueIterator.html +++ /dev/null @@ -1,331 +0,0 @@ - - - - - - -Lvalue Iterator Concept - - - -
-

Lvalue Iterator Concept

- - - -

The Lvalue Iterator concept adds the requirement that the return -type of operator* type be a reference to the value type of the -iterator.

- ----- - - - - - - - - - - - - - - -
Lvalue Iterator Requirements
ExpressionReturn TypeNote/Assertion
*aT&T is cv -iterator_traits<X>::value_type -where cv is an optional -cv-qualification. -pre: a is -dereferenceable. If a -== b then *a is -equivalent to *b.
-
- - diff --git a/doc/LvalueIterator.rst b/doc/LvalueIterator.rst deleted file mode 100755 index 39c2672..0000000 --- a/doc/LvalueIterator.rst +++ /dev/null @@ -1,25 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -Lvalue Iterator Concept -....................... - -The *Lvalue Iterator* concept adds the requirement that the return -type of ``operator*`` type be a reference to the value type of the -iterator. - -+-------------------------------------------------------------+ -| Lvalue Iterator Requirements | -+-------------+-----------+-----------------------------------+ -|Expression |Return Type|Note/Assertion | -+=============+===========+===================================+ -|``*a`` | ``T&`` |``T`` is *cv* | -| | |``iterator_traits::value_type`` | -| | |where *cv* is an optional | -| | |cv-qualification. | -| | |pre: ``a`` is | -| | |dereferenceable. If ``a | -| | |== b`` then ``*a`` is | -| | |equivalent to ``*b``. | -+-------------+-----------+-----------------------------------+ diff --git a/doc/RandomAccessTraversal.html b/doc/RandomAccessTraversal.html deleted file mode 100644 index 4dd09ca..0000000 --- a/doc/RandomAccessTraversal.html +++ /dev/null @@ -1,409 +0,0 @@ - - - - - - -Random Access Traversal Concept - - - -
-

Random Access Traversal Concept

- - - -

A class or built-in type X models the Random Access Traversal -concept if the following expressions are valid and respect the stated -semantics. In the table below, Distance is -iterator_traits<X>::difference_type and n represents a -constant object of type Distance.

- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Random Access Traversal Iterator Requirements (in addition to Bidirectional Traversal)
ExpressionReturn TypeOperational SemanticsAssertion/ -Precondition
r += nX&
-{
-  Distance m = n;
-  if (m >= 0)
-    while (m--)
-      ++r;
-  else
-    while (m++)
-      --r;
-  return r;
-}
-
-
 
a + n, n + aX{ X tmp = a; return tmp -+= n; } 
r -= nX&return r += -n 
a - nX{ X tmp = a; return tmp --= n; } 
b - aDistancea < b ?  distance(a,b) -: -distance(b,a)pre: there exists a -value n of -Distance such that -a + n == b. b -== a + (b - a).
a[n]convertible to T*(a + n)pre: a is a Readable -Iterator
a[n] = vconvertible to T*(a + n) = vpre: a is a Writable -iterator
a < bconvertible to boolb - a > 0< is a total -ordering relation
a > bconvertible to boolb < a> is a total -ordering relation
a >= bconvertible to bool!(a < b) 
a <= bconvertible to bool!(a > b) 
iterator_traversal<X>::typeConvertible to -random_access_traversal_tag  
-
- - diff --git a/doc/RandomAccessTraversal.rst b/doc/RandomAccessTraversal.rst deleted file mode 100644 index 490faf6..0000000 --- a/doc/RandomAccessTraversal.rst +++ /dev/null @@ -1,67 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -Random Access Traversal Concept -............................... - -A class or built-in type ``X`` models the *Random Access Traversal* -concept if the following expressions are valid and respect the stated -semantics. In the table below, ``Distance`` is -``iterator_traits::difference_type`` and ``n`` represents a -constant object of type ``Distance``. - -+------------------------------------------------------------------------------------------------------------------+ -|Random Access Traversal Iterator Requirements (in addition to Bidirectional Traversal) | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|Expression |Return Type |Operational Semantics |Assertion/ | -| | | |Precondition | -+===============================+=================================+=========================+======================+ -|``r += n`` |``X&`` |:: | | -| | | | | -| | | { | | -| | | Distance m = n; | | -| | | if (m >= 0) | | -| | | while (m--) | | -| | | ++r; | | -| | | else | | -| | | while (m++) | | -| | | --r; | | -| | | return r; | | -| | | } | | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``a + n``, ``n + a`` |``X`` |``{ X tmp = a; return tmp| | -| | |+= n; }`` | | -| | | | | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``r -= n`` |``X&`` |``return r += -n`` | | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``a - n`` |``X`` |``{ X tmp = a; return tmp| | -| | |-= n; }`` | | -| | | | | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``b - a`` |``Distance`` |``a < b ? distance(a,b) |pre: there exists a | -| | |: -distance(b,a)`` |value ``n`` of | -| | | |``Distance`` such that| -| | | |``a + n == b``. ``b | -| | | |== a + (b - a)``. | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``a[n]`` |convertible to T |``*(a + n)`` |pre: a is a *Readable | -| | | |Iterator* | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``a[n] = v`` |convertible to T |``*(a + n) = v`` |pre: a is a *Writable | -| | | |iterator* | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``a < b`` |convertible to ``bool`` |``b - a > 0`` |``<`` is a total | -| | | |ordering relation | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``a > b`` |convertible to ``bool`` |``b < a`` |``>`` is a total | -| | | |ordering relation | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``a >= b`` |convertible to ``bool`` |``!(a < b)`` | | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``a <= b`` |convertible to ``bool`` |``!(a > b)`` | | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``iterator_traversal::type``|Convertible to | | | -| |``random_access_traversal_tag`` | | | -+-------------------------------+---------------------------------+-------------------------+----------------------+ diff --git a/doc/ReadableIterator.html b/doc/ReadableIterator.html deleted file mode 100644 index b6873c4..0000000 --- a/doc/ReadableIterator.html +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - -Readable Iterator Concept - - - -
-

Readable Iterator Concept

- - - -

A class or built-in type X models the Readable Iterator concept -for value type T if, in addition to X being Assignable and -Copy Constructible, the following expressions are valid and respect -the stated semantics. U is the type of any specified member of -type T.

- ----- - - - - - - - - - - - - - - - - - - - - - - -
Readable Iterator Requirements (in addition to Assignable and Copy Constructible)
ExpressionReturn TypeNote/Precondition
iterator_traits<X>::value_typeTAny non-reference, -non-cv-qualified type
*aConvertible to T
-
pre: a is dereferenceable. If a == b then *a
-
is equivalent to *b.
-
-
a->mU&pre: pre: (*a).m is well-defined. Equivalent to (*a).m.
-
- - diff --git a/doc/ReadableIterator.rst b/doc/ReadableIterator.rst deleted file mode 100755 index 27f79f8..0000000 --- a/doc/ReadableIterator.rst +++ /dev/null @@ -1,26 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -Readable Iterator Concept -......................... - -A class or built-in type ``X`` models the *Readable Iterator* concept -for value type ``T`` if, in addition to ``X`` being Assignable and -Copy Constructible, the following expressions are valid and respect -the stated semantics. ``U`` is the type of any specified member of -type ``T``. - -+-----------------------------------------------------------------------------------------------------------------------------+ -|Readable Iterator Requirements (in addition to Assignable and Copy Constructible) | -+-----------------------------------+------------------------+----------------------------------------------------------------+ -|Expression |Return Type |Note/Precondition | -+===================================+========================+================================================================+ -|``iterator_traits::value_type`` |``T`` |Any non-reference, | -| | |non-cv-qualified type | -+-----------------------------------+------------------------+----------------------------------------------------------------+ -|``*a`` | Convertible to ``T`` |pre: ``a`` is dereferenceable. If ``a == b`` then ``*a`` | -| | | is equivalent to ``*b``. | -+-----------------------------------+------------------------+----------------------------------------------------------------+ -|``a->m`` |``U&`` |pre: ``pre: (*a).m`` is well-defined. Equivalent to ``(*a).m``. | -+-----------------------------------+------------------------+----------------------------------------------------------------+ diff --git a/doc/SinglePassIterator.html b/doc/SinglePassIterator.html deleted file mode 100644 index 9a725e7..0000000 --- a/doc/SinglePassIterator.html +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - -Single Pass Iterator Concept - - - -
-

Single Pass Iterator Concept

- - - -

A class or built-in type X models the Single Pass Iterator -concept if the following expressions are valid and respect the stated -semantics.

- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Single Pass Iterator Requirements (in addition to Incrementable Iterator and Equality -Comparable)
ExpressionReturn TypeAssertion/Semantics / -Pre-/Post-condition
++rX&pre: r is -dereferenceable; post: -r is dereferenceable or -r is past-the-end
a == bconvertible to bool== is an equivalence -relation over its domain
a != bconvertible to bool!(a == b)
iterator_traversal<X>::typeConvertible to -single_pass_traversal_tag 
-
- - diff --git a/doc/SinglePassIterator.rst b/doc/SinglePassIterator.rst deleted file mode 100755 index eaa50e0..0000000 --- a/doc/SinglePassIterator.rst +++ /dev/null @@ -1,32 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -Single Pass Iterator Concept -............................ - -A class or built-in type ``X`` models the *Single Pass Iterator* -concept if the following expressions are valid and respect the stated -semantics. - - -+------------------------------------------------------------------------------------------+ -|Single Pass Iterator Requirements (in addition to Incrementable Iterator and Equality | -|Comparable) | -+--------------------------------+-----------------------------+---------------------------+ -|Expression |Return Type |Assertion/Semantics / | -| | |Pre-/Post-condition | -+================================+=============================+===========================+ -|``++r`` |``X&`` |pre: ``r`` is | -| | |dereferenceable; post: | -| | |``r`` is dereferenceable or| -| | |``r`` is past-the-end | -+--------------------------------+-----------------------------+---------------------------+ -|``a == b`` |convertible to ``bool`` |``==`` is an equivalence | -| | |relation over its domain | -+--------------------------------+-----------------------------+---------------------------+ -|``a != b`` |convertible to ``bool`` |``!(a == b)`` | -+--------------------------------+-----------------------------+---------------------------+ -|``iterator_traversal::type`` |Convertible to | | -| |``single_pass_traversal_tag``| | -+--------------------------------+-----------------------------+---------------------------+ diff --git a/doc/SwappableIterator.html b/doc/SwappableIterator.html deleted file mode 100644 index c11b570..0000000 --- a/doc/SwappableIterator.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - -Swappable Iterator Concept - - - -
-

Swappable Iterator Concept

- - - -

A class or built-in type X models the Swappable Iterator concept -if, in addition to X being Copy Constructible, the following -expressions are valid and respect the stated semantics.

- ----- - - - - - - - - - - - - - - -
Swappable Iterator Requirements (in addition to Copy Constructible)
ExpressionReturn TypePostcondition
iter_swap(a, b)voidthe pointed to values are -exchanged
-
-
[Note: An iterator that is a model of the Readable and Writable Iterator concepts
-
is also a model of Swappable Iterator. --end note]
-
-
- - diff --git a/doc/SwappableIterator.rst b/doc/SwappableIterator.rst deleted file mode 100755 index 55554e7..0000000 --- a/doc/SwappableIterator.rst +++ /dev/null @@ -1,23 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -Swappable Iterator Concept -.......................... - -A class or built-in type ``X`` models the *Swappable Iterator* concept -if, in addition to ``X`` being Copy Constructible, the following -expressions are valid and respect the stated semantics. - -+---------------------------------------------------------------------+ -|Swappable Iterator Requirements (in addition to Copy Constructible) | -+-------------------------+-------------+-----------------------------+ -|Expression |Return Type |Postcondition | -+=========================+=============+=============================+ -|``iter_swap(a, b)`` |``void`` |the pointed to values are | -| | |exchanged | -+-------------------------+-------------+-----------------------------+ - -[*Note:* An iterator that is a model of the *Readable* and *Writable Iterator* concepts - is also a model of *Swappable Iterator*. *--end note*] - diff --git a/doc/WritableIterator.html b/doc/WritableIterator.html deleted file mode 100644 index 76d621d..0000000 --- a/doc/WritableIterator.html +++ /dev/null @@ -1,327 +0,0 @@ - - - - - - -Writable Iterator Concept - - - -
-

Writable Iterator Concept

- - - -

A class or built-in type X models the Writable Iterator concept -if, in addition to X being Copy Constructible, the following -expressions are valid and respect the stated semantics. Writable -Iterators have an associated set of value types.

- ----- - - - - - - - - - - - - - - -
Writable Iterator Requirements (in addition to Copy Constructible)
ExpressionReturn TypePrecondition
*a = o pre: The type of o -is in the set of -value types of X
-
- - diff --git a/doc/WritableIterator.rst b/doc/WritableIterator.rst deleted file mode 100755 index 49b6e16..0000000 --- a/doc/WritableIterator.rst +++ /dev/null @@ -1,21 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -Writable Iterator Concept -......................... - -A class or built-in type ``X`` models the *Writable Iterator* concept -if, in addition to ``X`` being Copy Constructible, the following -expressions are valid and respect the stated semantics. Writable -Iterators have an associated *set of value types*. - -+---------------------------------------------------------------------+ -|Writable Iterator Requirements (in addition to Copy Constructible) | -+-------------------------+--------------+----------------------------+ -|Expression |Return Type |Precondition | -+=========================+==============+============================+ -|``*a = o`` | | pre: The type of ``o`` | -| | | is in the set of | -| | | value types of ``X`` | -+-------------------------+--------------+----------------------------+ diff --git a/doc/access.png b/doc/access.png deleted file mode 100644 index 80011dcc7c82a35cbc173b314a9e247db0bf3f8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11127 zcmeAS@N?(olHy`uVBq!ia0y~yVEE6#z_5&iiGhJ(*6VYN7#J8>(j9#r85q`|FlX(0 z$-tn%;OXKRQZeW4-pZKZv1^6a%~dT)e7SBQtIAxa#_=+W+5d31(nZ#lk3d)*DzEIHVRmr zx38FEJoEFs@0{z6XIeh5eb(D7z{Jy&+1au}_P_xF$r-;4m+9jt9Lx0p*tp=OnLVF`Qw5e7fsFUjvP7S z;_A9Em*Zi0eC^a(v%1P|=4_ikKi=87x!~{PBU~68-%AVq)%G&`ybBJ}#V}|DKgw?83_utGVwUJ#tc;oPTErqvD!X ztBj0{UcG+ZEO2jcb@{h9Hw6x@S+iz!`1(c6Z{NHT5*Dtms!BUM>+74F#vBhXFZX9; zIC}JGj@j?o`THJz{wZ+CIQ`t3*xh1IFCISJSoJll*Xe4qm-#mDD!f zi$X#|pKhklcjTBnX;Mr~%%ew-CVV!}yJKKr@Zj^$jT<+rsi_q|KgY|%)6>-zwYTc) zWOe_Z-dsPOo1UPJMZDshu}X(axPamF)g|9{$l+Bf-xAfddXqjT=%=i!m^CADuLLGBbmOl$4m5SXEWkwd>dItG;x2E&ccDwEp~> zPn@kzj0_su+QOYK$;po!8yTysf9pnXyK?QCn5ZZ#8{49`cXxNUOQ}viSz+_<>gw)BFWKA)xNzaKXU~@V&u3%!^LhUNKX13+fAi*z%WqyEp<{u6 zb8~a`A|@_w-qEDMl~-zie`955|Niys+K7!# z?(WaOy}hj+w#K2<$jC@XN2kEz&a<<#6+a9+dG_=3^MeI$GWNbN%`|IvNDNef{d`?Y%idha<7PeEXCsS9X`b*V5Jw z4GmRnk(HI5HEWjr-!H+Qo}P7ec3M2#+_!fWDjUUxg}E&ZU}Ix@QSz&mTRbQzXv>x@ zpIS3=b472?^fx*d`1jz!gY)LiJEXcf{rta=$K@4U1O){vZ0_B;6XWgu`qtKLfkS)t z*o20Lva_?Nr$4u?{g!jprlzHxI&tE~%a=1}&AODaWwv>~6Nj&lkCJge^@>YTX4~u!-@cWVl(Yzxm6Yt* zy?gP?$7q;EEX+ zu3lBu*6u$3*iy!?y88DV%VGwGwQJXAWo4~!N={bpbWxgovYD?%;M$cd9v&WN=G)gV znmg}K!mHym_9X=7Nn959`73dG`pT96jvYJp?p~jr{rK_2!^^9xs>;jDtM32b?^#({nwpxz*Q{ory>{V3!seS5HgN$J-{0L`uwcQS zJ$v}g)Gt~4DL>u)e&6pupU>OBm@s9E$QM>mPftw^jT0wMOz=?g_C9@gcX|BYs;yhL zh}<<6bzih-k;~N*H#fGaUZQsz{Cs>$3JMZ7M!eW4+p=N9h7FrG2|1m3{@K{b=)&}v z&`?on>EAy-CU3cY>sC}$)U68_1jNOUCm394OifMI)z$s^^QWPq;n%NUo5a{S?os3>qqSl#c% z%a^skUM~Ot>-zpDPoL)B-Ng#3eYS4f_U-G}*qud7XU&RocR&8S@9L#Xo3?COa`~l@ zkkE^dPgjMmPD)NzY+1N)p_P@@Y_r@+6DM-=@cfy-T$%0F`BSHqCVIFieYF4o^E|uk ziN_!3%$dW%(llj?2*ZKPmp3n8o<3*J90R|3Hk=F`+}y&Ruk-Kixw$1%c%p}jQ0M9C z`tJUhXV0Fks;a8kvfO|EvY?gG+w)olqN1bitG>LbW!!o1-n|nK?(MCZ_kP#KYTch~Rl@7G6cWOBN3 z|Ni_LGhV!Y{rjZ)d<`wFc~+%dPAk@}n>T-czmKd+9?5lMgtXY%rr77vJeaE9mNt&9PmX?+#LRT+eE-o*3-{_FUKKZ0evZbZvPIdozJ_WCz zpPz4E^rRzU`tipnPo1)>_`u+_V!;9dLBYZg4-W1we_vHmv18Y+MT~!UmA<~VE_U|h z$(OHPOUuak@!(+d_4V=Io}P-_HFozeTrkkp)z#5CbNo2Fs9o)^5KqsQ+qakBNKQ>j zVd2w>*|A~4f(OTXr87EIb#?!~UcaBK>F0$nkKfOH^QynQTX~|#CNP*ZY0~cU_j0Wh zfBdLmIBv!+gtzP~6xO{!j+|7@@^Yhn#SZ(=2wXw5g!P>QFFI@_X zjJ$d6+O-=uZk#>)_Gq{G3uSHX)pM=Ooj5Mu{_dkDJe8mK#NThX^JQga)6dWIT^Nv) zn|rZ;LtkIt>eZ_^Zv6P>=H~7B_s>24*k)UHrnypm>n~|3sRD~Rt5;{cxU|flFJING zt*V+TvTR3;Ue`QvHCx--e}8^vUt1%1WSU>vy7>KlhaWz9`joYP^5n_tH`wL+!-IoA ze|Z_Ka$%x@hQjrmH$iD&_3G6N7cz!sDZ zv-?u;`@}@$va+(=+}y<*+!O@b#7>n&Cod%}y?WIu zIoql&1rMF1degG9eqE2Rx2^oNWbfYCE9+_*-rw76UGd?;nVH6|+*7AaX}P{-?I@Go@|_cj)#Y* z$6b5z;memV-?&i`uyE$gnY(xI_V_bX$|vqCck^N20F!xZ*1Xx6d|b}1=ErgQ`Wdrk zrKP9)J1kaq6xhV5C=xe&qKi`JiNy~e7Fb-pdUesaq$M5gzf@IJe$@PHFKDGYrQ+h%tF4bN?fdymT3ub;)YP=HvT{qxU3BwtE*WSg>SC%h9BT<n=6W+Xe^W;eiH#hedvBM^yj>GNk`O7cAR8v!XVJ6ij zJ7wzBzi&35Z)$FKefywY;gIC_6F;jDd$GzTiRIe&ev$nA_n$r$xw^V0Cns-Fn(J|=;eYuxZJ`RA zd*|){_qbWe$;rjW#->6>Q3uTRaD*2VAlTYlN~?a}}4nVBmWFJ8QJ z=gtRvmvk;!zrNo=!KY?7laY~8Pft%wOw5JP?7Y0Zo}MR9Zm@fzA;ACj{+`O>v$ISW zeS7p@Kw5hB%9SslKmY#h?Cj2*@RnEW*R6}&nsv2_m3z{pNdcUv*aYO|^@Zx~vZukx}vRQ0vKO_ih|Y+sw?wl#`pAX%ZC~IrD+w?Yq0n`DH9Nl)a6* zxXV22i1T0Jn*H@H8X6jZzFhXN|MT(q)6>&)b93)c5B6E}@bk~Wz`$R>e(8v8)Tu>5EBpHTT3cHWhY4Js%E;2;e&3$c-R{tX0*mZdXHV0M{dF}we&fxYz-p5qg_iJjF$)7UzJC3B^ypD`J{f`izrV|O+*ncn>HA-% z0*gD_a&MnHb*ieWiid~i(W6H$Z!i9T_V94~wQJX&pP%pV|)!k~LrcW}})zzQ^!Q4E2!u@J11-Vz^izl8} zShIHROrK@Tmp@mZUn3+SaN+9JuM^oG-f*=lu$XhWoqzVMS$Yv07A#tH==gE>JLwzc zyDC=1>!j^{@9gB1bi7YCH8u6^+qZ0NZ031)1h%>}FnoBuet(e0l&-F>Lx&C>Zs+%J zGdZT@&{7`l?&s##c4KY4fzHmIJJr*RM-UNT{f(`8h1Et*uq}pBJ+wW8$t| zRjH{<*ROwHBK?TJyJAKCsV{$-u3WvEoSdATl+@JR9KI$ZFgV!w5c9+K^Hst^LOeV? zpFV${>GSO5WOeo1-5-=(a<15?{;EryGiS~`o61Lz9vOW~X9@}m0*!4|3d`_4e{{5a zx?Zf8hsTAB7bU084i@|PB6#!W&CN|s|NeaT543JFTq-boU%bw`AfAs-HdpMYrtOuO z%>FUp|Bi2e9UUES|2uteZ}s}v-DX+AF?!#-_4ifWU!FW8qfBHTp~1GrFL$hv}OxU#={}A83?``6<&)U`h+p}ubsshEyC(oQeFW*1A-`Q4EM`us< zcfDJF9v&S0{O3=da@sAfAE%?GHOn-6TEX9Q=lnuLuU@+r=IVO%yKd&JsZ(3y-iki^ z_4T#z{6keG9mk{c9-DvC)X`CyeDaWX#{GS@yZ7yr%eAlnH|Jo&ix)3$+`6?$NN@V- z6r=FO9vd{V@vGc-KhSb~SEH7P5r>-gi(pFf{Hb0%(2 z#mDRM^^y`23eAVUwr^8CqmZ3{e_!p#N3GMQU2A6NpE6}iOl<7`W5O(*E{}?KGB9vF zytvr?`r7E@NgEj$Y~=K9Z2sK;|F1kfJv}v5wbkk5$&(v5Z~px0lac_(^K)}&8>jna zW@=9LlC65j!*=-6B_m_w&Fj{kJ9?Bg^-8kQOlh+m2i~X8o?W|o^+527cep(I{QSIP zOJ`^2sZ*y)tYV#=ox{V$mrjzq?XuZRaetqj6i!Y~_Vzyg$p6)NrVlrF_s0!y-oD+NaFEGruHW*@u`w|xQa<%cn=7;&R;xdI>Xgu$>G|pD z(`U@Marv@w_BEX;o}XS`Ue3_)=+UE%z9!adw&vd6R#{Q8;EQASwKbgl{PNd?6Rjss zocO}Z+}!;9xpRL0{_dTRa&mGOEnckH^6%e2F)^_mGwGY|({El{>V2`*>dnr_A1k)Z z;p{&i92&Z}^tG556O*D%?XMCC2ZmMepFjWp^?H2&UHjZK0<$Ob%gisdZ$9|p>(|&V z8G;N8_U@f~Fkyje2QxD>C(EH}y3q^_I%3?d4pL+d*)1$d=3#q$Z*TRAK%<#G#~;V< ztvdR&sI;{7`kF}NExL?GMn=wS4QHO&u)%8@U zdR_GIvHX9By;m+gS&uecv~Sfat(FT%k3PNs|DU4jlTS@gmzI=tD*b@kwtS5D3p46t#tdt7o{*mqg0_dNUhd$(_QAAZ;;WBKUmQ`eeboV z=1Z3>IritiIa|lCPtt<^^X+1{WL#u1w=(&e?eE{OusPq`oBP&_7cW+2 zrj=XViMMeGj`}bmSR!=`m@ctQs!oruYUl*5_*3NQY#`I`mUCtBb z2hZo%voW~1xpm!|xU!*Qh5YN^f~>5pZ{NOUXxO%G+oDBEfxDHzb@cw)xKEy;;N6{_ z_wL0pIOON+bJ-mGA#r4}f9>C2Tlen$yE=Tm%i9i(m+#+)hlRa+_s(s%iqOlqx3^C= zsq*oG)Z3Q|RZUH|E??g6qsGi|BBiLjygVvu){418`A3}p-dH2fARs8{s3Np^^JYed zn>TM36&2mM^Bq*ECfC+`d!OE%e!i%bm>mzl6cpZuatb zcXn2P*Q+|IXl^df;IK5v*vRPJot?^A*N;ei3<%B6etoEwJ31=LvZFp zb46cUdw2eQyTIy3!>b2=g%~DZu$AxWceMFc$J6tXA=v)dm((S%=KpzF+tt<8)YRnm z@cfUZ{D)>d>GAlRH1VFgsi~;0-M@uB@xK&$JkNE6Z4~YPV&|iF`QpXE9V*(|r%#;V zi1qgM^<5vgchk0Qa<66|s7p&*ws!5>HEVQkZQH(m`m||nlkNZV9a|xJGHHI&#Cz_p zuBzJF-aC#QIr8MvQtyoFqg|ru=jX{@Gf&ySb!%u;l$0)LSl3BKsM6-1iqHPTk3U}6 zY~RzL?gDmY+@1KS2eg4VF$S5c%C?q80Tq}HIf7RDl z3s~PARr||#EaT_>SNYl5)jvNy{r2`Y>*R}HzLZRP1DXc3vWf~17oU3i^y$qJI$BeA z<=@};;K74^`}T=yhrM|5;?BNWkZ)Fi8o{lttbFaa_f#6U6g)pS_t&pqetv#oVPRjt zewCG#ZEI^=@$BvG?TZ&LW}PY0woUcTlM5_!85p=)KfSoPSUY^3gp|~!j4g?^yDLAd zSxq>Zvgk`FL&K6KOCCIUaOX}8D{E^rJ3klCxw+QmPwwj+d-A;g{^!a+KQ?aLw(Udh z4DxdN9ZAWV z>F4Kt{Q2kEvu6_~2xx1so;GdT>+9>?U0rY9zTMu^5)u*;5fNc9(?_m9JU;&X^Uw7^ zpH8p*{A}jTnTnD8x2J8G%)@s0%$YU+_b+&JN`!0as#UM9tPEbba3MoOVy$qD+1IaM zH8^8(a&j^=S8m<9wWo(?_Sv`%35`2y|AScue*6{X;{q9z1yP=FQ6U^K4(edR1ClI&g zKx+Z+?<&=n>)*a<)34|D|1FE3`EWcuaNxisRc{edQC=P%8CluYt5@5X&9D?pc>K@s zN%G^GTeoh_nl(#9gsaiPK~;ut`QE*Cz>JhI#Ymef#z;@wkNZ?Oy?HUws{li#K<5buD@F-(CuN7NJD9 z&oW}pd5I?1ot=_1ejOLkIme#-t7)Y?lrWll_5Y`*-Z>l9d-glp6m9MA`}eO-YwE4* z*Ui(<$#AtgEe-nm_3PI!UrI_#r%svT@>aI(#mqmzI?g(>8YuYG-`V` zroLJ&&mbTq^ytweB~8th3lVVw+L`Qu}}&d!Io z=igsspqQWkK6G{1+W7tZ)~)lqaxbx?Cv#yPL&KIWU-nji2hCFde!u_m#|nG<{i{}K ziR}ORcKiKB4Y@rpkCg=4GdQ@qKK=LicV%T|#&i!AIjfQtTeeI&n)LGZ>;FF<_rJI% zaO_LstNWiNUHts|cJ8#SDvfohto*tCe%N>T3V#D3flFrNK{`%jx zX3d(t)!)6myxQ8@tSl@#Zq0po@QQs~!mI!G4jhjkKjxRS@mLzsQye7ZVJ= z_A6e_xMMF=U@@n^-`~}>b?)4`&CQ3;&9&a>u~3s|*}udI)28upaI9FdLP3DT&CTt2 zzr1^Ym*Fyr8Ncp#Z`$-}rg6Fik6U5k#(n$#Jv}{r;~URlo}4@ON;7<(-P>CosS}ow z@nTczX_ptAX7A*k4ZhYhczSx?ul;`a&dy?IXJ=m@AD2hW%l;X%NdK&1kdu>Jx^$_W zoZRW@`uF!#ZcdPm=P_gr{@<>sskt-xc;Bj3t8Q*i4_M zj}IS6+naoNZ}oR3CZ-OTq>PLg7tTl}bC|uBb>6VAKBu6tP*X$W#(-Cu39san1Hx3dBw4pQ zS(d&E$K*s%e(M?-1cZlw|MK$kv17*;Z);vz&vVetPWZ?y z)9h2HPfyp6fA{Forqb8fjvaFgtZr#sSaP@O8~X2xUYRr_K7$63MTsJ&6qJ`#R`oryo!HbtzHkR{`6*_ z{r35Dc1DK4y81sqKrM8J1NU`i{`mCtG&4INkJg_0|8*rLU;ckl*V59mwEXFO?!np7C(IWaB;V$)WW|j*_Zvh=&UsHf_ALHp~dd~>!P>wtz|v? z_~W6&hnbm~t*xzR`l!u5>*w#EzA+*$E{=ui;iaYC#m~-Y>guvG6zsfn=gyrUKPnm@ zN%FKUU7DJf_U!5D>8#(IAS;2gG}P7A_4M*yh+evSH8dGNJIdeBOZa|r zvijDoTUXd+gE-%a^uF0OP7r7 z?Dp;7fB)FAW2aANUtbsNqV)0S=jQ@W!NI}I%*_1!{K3J&si{x5ZQHhPogP!;h0B)@ zKP(W_kMmi4ahh(lnzHib*|W9ZoM~p~zjEbDi}$Kks~8yW-n}buXxTC~Q`4=xcI{I4 zpO=xH{r=wG>Z_|lpFMjf;MDkce*M3jmoE#;N=r)aOgzlS@$m8S{^#fC@6WqyB`Z7E zwOdRvJDAPq?_zZ$qoS9WmI^o(7k_^9=FOKcCF$wu91DAUeM?GAS}xqbfB(>-rn70z z9NTkmiwOxaDaPz7dAT+Fx! zSez<;eRZ;YN6X!}oBUf_Ubf5EIULWsv%^qHspCs>CBMPA+#nXvNV9aQ~X0!N9~sM@Q$&moID9 zudn~|LU5{=u8z)<0F8V1?lCZMa&iiFE?KhVNP@wdwQKM1tF3-?gfl(;Ij^)C14CDL zclg>U)i*qoPm0KWV_^7Dv1i}Df3L5v|5@{|nVsLu%Zq_w-MV$p&(GJ_*I&P8P0W@I zLB4k9ZxdT}qqi+cmgG5hZmxCyy*-h!v9gjNz{vnwS&?<}oJ;M`PD4&kP7|rKw{BS( z8w)!{1O_f#y3}>~Wo0EL1<>3dw%&GVXedXbyL0ULuPq* zI(nv0of@byrLmFGYHr=bL#a99ptOB{uf%lP6DZ-MY14!2((9G6#-{wPM|>nwp(#W>23!Wno&letrJoHs0uM zIf8jpPCxDYJl$$x!Yg@ONlD3~q9PM1-nVAv=E58-zP`SE?aYcPptX6dwNvKK%}q&R zQS9mNE-o!?6>xKN+qHA2Bgf60Z5uZlN^PmAuC}(aa^kSIvbuBk?!_G*-rlQs?66Q) zcJ}n-jP*Ww@??nC*8ThAA8>X_k&y$M3YG{(oI{_3zZv(-vm+_4S3Xi*fuX zz`&+y>M$;lb!N=i-_CbqY={rdIGi6b~T`03N9pplH})0eMW z_3FWc2XEf&Nk1=FTKaX@E-P7CS*yA0R+k;~80?n;5 r4_@gvtUWldED>JKfa@9@#6S5^6^>`Bbqhkq60|Ns~x}&cn1H<|g=B!;W z85k58JY5_^D(1YoTWJ&W`@hA9!ztMk-W;O7t|^@cC&DI%m~YXz=yb8@vews^Vc+lV zx_UKkhwB!v!0SQl#G(QcmvK%^iC6O8Hgm?wo|)g@_kaIxy#MD6&%0fM@1M)d8Rw_p zd;Zm~_*~`L-#YJ=*%%H8us8}V34gSRkHJxZ6ese|IIyyt1o6pwmqz$yX;*Hcg!>I{DoJ=`%$h}{#w6t{Uv}s=6-u;rsZB7d(c&JQd?N#{8m&%>8 zVsU`Rw{PE8hp)FQe#W!D#YJgv{r|dib1Vl7#lAR&^UJNn2?ZAfmCpCaA9F#+@urd&b9sJXOUD2 z*yhl-rC;9u+0&{v8AS_Rz!+4@f2!AD{wR^%x|wVQEX;pc<}D-?&W@SSFKs|=G{9vvz!|n z5)Z4Ws8rOarl!uFJ9m5D-CNfuUU*qzQ7*&Re)!?9sxppC`2qKtByDcwl$Dfxxwp6a z_3PJ_hbs~!)b#Y;J$qL6_Lixp=E{A255K&;9K9{)pn;E%4-bQao}QkXnwp+o-{FT# zmMl4Q_AE0K)10|;e_Qde{CpR%&4F$9p+kp6wZon~d2(R8k&#hjW8?2{Z(na`NJ>fy zTN`y$+9>75hQvpY9tAJ=ySuymeUGH^FI^s%pZh?1JAeK9C2gMP;_mM4<<%!|Z)asS z>+nM!dAmQ4j&^s8>%V)RAZJ_k#DpcY?4|41&!0VOTk#>m&8=Q^XyBoEqV&k4YdseT0 z-79TA!$<9pc(0qZUCoYd+rHi2p1(g;Oh0Z=hW1vD*_iA@K~3MLUK)Cj7wCweokaym}gTdBr7W`E}ou{@ZjakofRLG zSXo*BW%9|}{dse9^Xu#DAAkIjKlA#k(A9czduGg-@#591UstD^n4A00x7)jO=gxKO z`0h#GyLeGhSXfw6GBP~;`Qyi%v#ze%n0&m>dk)7X`wJ5_o*WMd2>3An{~!0@;Nr)} zdLJL}KY#kPx3_on<}}~_kdGf9yK{1O9yxL(-$&F(&DhLL?C^#S8#d&xbdQXj>7zD# z#*90=O1Y<GyY+_xmlMJ$v@~S*EX_ot>>C_BuMPMWL4WtL_BGwYzrx z`t|j7`1-iFZ{B?Q@F8Mf&CeyCldERVJN&R_`fizZaeH^w{r%O~$ET^evaPL6&hq8` zSMT2S_4UQ=EL!?t|E^uT9zA}ntgOt<#WhVoeqYtsSNEhl6c#mYVl@)jx@F6szu)g) zym&GH-k!)E1q-K7pT2c#X?&!v`h!Owe^mFM_vQ2F*RL(ZLPF-)*Z;e;)Z0br z;`Qs-@810@z1yARQ|-c>MjizoHf2psO)D!aW#!~=Z*I<;H}BlJa~~>Q{;piJ=FEi) z0`pp*6~^y~SN#TIj{%ip=UxY*SGD*5>6=)QgX($doY8fUY-lszTZ@uJXT zPCLK6o4fn{eYLj_9XfRSboReLKR0dKw5Utnz~IA=kB?cH8c#pn6tQOAx^<^covO1F zkByJ7|M=)Ax40fCTz~$otgNhke9?gAr`ro1b0sekuGG)Z&MtQA{q^;F{Mj>Sy1KjH z-`%~v=4X-MGA_RM;(vdBatf;*Id<&Tix)BbY9f7n-h6s``mapeu3f+M_x}lsimG~a zq;t9de4)-GPft%@zI^%jVhN5z&2FMDE(><-keIi7+Jp%ayGmYePCtLFUta&!f`8}d zT9+T|ll}eS;o(o8ifnE7s(Me`5V6L&o$v3r+xdUxduGhI(IaV`c4o%KTeqY{MW4QZ zfB)*$r>|e{E_!-uqO$w9dYcmgZJSsx)xUcEIypIc@#4kz_f~IDIXP*@j2Vm-0sA&= z`0(-Z@lT&V>4>dfw20~OhNq{e7hBAkGiQ!w@UjjqEmhT}XJ?z|-`g|ON6p>E<;BaF zzO&8FUcX*`ZB1mxlISJ%3qFf^%wK%@B_}86#fuk1w60#gdiC__>|;HWAHudWcAQK( zb>c*V#J49WC*R#&o}Q9&pvY>jpMrpk)UE%=>$~r-3SC`OQ*%ML&LduWL9~t$$A$~cx^?C6?=8KU z@j}dgi9FApUa_B!j0~49U%tLBcJ;!Ag`b|BoN1gM78dM8x-1lF* z?YB!!NGN!9W#z3~QTh4rH*DBon0$|6 z@t4?%?W}D*FBHZBrAIukYET-Qu%n%=q*5di>kBZx`|L{%l;B)A+}lhfP^c z?by+ysfSuPU%q^4UH)#(>ebf8&wT9rA7A0$5%Z3JmTrZKiAmkhr_(oW+LU~}?_=J_ z$FWaa75;Ns+7%2uWvZQaQtBb+o!G3@qRu&XAXh@ z|Dp75v_1YR9yW3x7+!`YCa#n zeG3Z=JbC8KnNz23?I>K_)z!7a`L%kpe)NZks3asGK zDEZ}P)A0)zK74t3`Oo$rx%c-JCL%LCmyetEkyXU)H6Iix%{b9u&|=2c z!p?VYW7=6MUf$lz%l*&KGF`oDm6n~|zjo<4i~V`$?sMgTe7xVjf^S`+IS5@%H@teL=4JZ57)dT)c4M#@=f4 z|GIVBVQU<=|KN3e@l(wC(4kiDt5>er*xD}ln`?FA-HvzGAzE8EZY+FvXXhfml!VO8 z%+9W^uD(7$Utia`J<U+$@d)Pd;Cmr~#$}wmAr}INIeuNbBBP{r%V9>)+nqPEJbN zw@b@x_TH?ktNj0#-`gD3X zQp3w|V^gYkP>@iK_wviv*F*+~hab29d$5_Eo15E^=k-&)cc)IBy1TplyGG5A4-c1m zPv4jP#AfEqnd#@|Jk(D#nz?V^zO`%D)*9|!f9z>d_06WFq@=vNyRI(&@ZsU%^>KS& zJ>K!_2*X)1AGOct?f+l7cu{ephl)_AgF;1RWov6|ZEP+pE32iYrPF`c<(Cg1K3v^X z>#{IlMMzfs99}W0&h_i_lad}Sa_u(DzgP40l&HMCJkMcJv3BLkzCF+Mdwza=eB6JY zO{4cz4;3~xwyNst|EJw}0-VH?_rH8Dy0YBT(sJd>l^;rDVqyvk3ZkNeD4lmTcQ*_HWXiJ9lQA z=WA(dem(kT->sXQ)2nYb>BaB6vzUcJKt#l3!Mu9teN=vtH-MV$!G%=l;@9$#E%C`0O@wGZBPW0HY zVat{&K5DODy_z*+#)AS2t*KV2r>1mub*cN$d-3w+L9U<6#pj6cm)p8^+qSTfkc`Ys z+qypyfq{k3&dl8F!nAbRvVC=bt<=@o-vvwX96LE#-H=CESU7rHj$~V6zr6jnEn8}S zeaXzuUOjp82@|54ZETAC#7os!Kd0!gciI$&=^L^Y5EFZQ8!V$88t3 zB}g1gF_O2dxpDF0!#8hu*4GK@NGi1Gxk>d-n>^XL_E!nd;iBT=j}?3R`uG?g9BgJc zPCIkpVS(+eKmY#zUball)%EC>En7H+)eb!U`Ri+TYUdmPe10Vq@}+qf$>ncv9gXK~buu(JfB$rI zijk$g{rzj##HOXBq|BH(Gc_%3)~s1tT3X*C{;gfRcInck!fHMhe|~ISxbWeTPT~1B zl|j+bufd%!j)l5HbMgxd3yX?2wY9m`*6!W4t13D=x~gi|lqplTZZ$o_o?`U#%F5u4 z8#h|Wbm`Jdmo62&y!f(Y#?kaMGZeM8Z;NLiDraL`BCPIbVQKmCURY@8 z!;e3v>&G)O^vT(JsR)6p4qe^7+1K?L7`l&c+Oj2PQ_9I@zOz46)KpelGAP*D#d&(3 zyn8n`Ha0do+FD78iD5(jeLHXO({ruMU%hfz$a_9Wa-k>yu5es-s$P-$q5TH zGZYjSc6N0MS?Sj`ZFO~V@tI=*N?~zvagQE73SS@hH$=szonKx}fP-J&E@flHpQnC) ze%IH>=Vxaheps+M{e0Z^yt!RnU8`4XGb~uS^5lsV83&tK)6&v@{raV+rx!1`xwDgV z4iCeHyLWSwl0L0e{ru}|c5UrnS?jVJH*WaMwF=ERc|ftma9`C|udpyN28YELIam%I z>y>6?=!#l(A&3e z*?qmaK5pW^-3t~h*jfDi&@n43D>rxd^YiWH844aBetWb?X@*E@9wP@KbDrBo}QU`^X5&>9e`@9^0(v-*EE$;po`i=Qztv~2Sz*e9+RGhyPy$Xz8bXPf7L`t<2opX~0+&uQY~ z;=#ee3=WZzGnXuRGDS1Erlv+jR8(9qhJ&G_tE)-+&FAOmkN3;JfBDi=MX0x@$I9CJ zch%Y-Wy~hg6%`deGYk&i1%rzhCpswH*-^;M5D*l!X#M*8SFf@%c=-Ct+E$q`DCp|) zzMIa-5WL*4x4%E#Kw`05ua=e;6T_aGpF)Q>{P|O3HCIkR;K0)&Mh12Nc`>_6G#MDy zseah}`r6vhU%s#~tXQ>b+LS3AbH)2F-1_t9&z(DWEM)i?5-u)sJ$Ue-lk&s$%a<-q zeR^tYg^gVQacgU9byZbHh8;2Mnwp#{D=WRcx;AYpij9?JP%tyQcI}!N!-mSw&x)U) zJJ>JWd4!pruO{&f4;yp);j?qCuiw5sdwYweOy7lVJ9h1wXI08o_v-uodhsZu0*=@o zUS8hAZM@73GL}V0Zrr$W{kk|qLSo{?sZ+nMoOz zP8X$**VabgFL!;#y>Q{e567piT$$oFLN=iyjR`+k~Ha9R3@Y|nucGlYH z?Vs3{Bcx;YCMvccK4`FJ-@bqU{{Bu&OEb9n{^sWNM@KqsrA+hg>^O47W#Rm@r%r9! zzCC^OO@@Zc%l+Hi+R{=|JUl!CR)&1&oZB{k{`{RgE!Rl4A8u`FVPMF+w>~j&0k_w6#y)xbfr7&CMXk z%Lb{cs@llqCnSK%huqw~RbOANTD9uVotPWvRVSb1m$PXwRu$l|kXg5ES=-sP?Cfm) zs4X4^aWJbx*dw|pET*xQt#=94jtOGY16s+_V)Sr z_RN_hVuN79a+Q*j+QW5!U#+yfeEpjnhCd2jU0r`fywUHpR9AQR z^E-F=F!NypPR`B;4-zWo#AZax$jUM^GlM$A6(5r-JOVbPJP_C=@o@UN6r=SqJ3*a^ z>hJGttG;-6dY-&=Y0}v=ZZk`3>)-S1|22wwd3y_Uw9J_!qpQ1?m0K)9LQPFgO;giT zL7+u%-TJtRznbREk(qsVU-9$4IdkT$U7K50R#shIT~=0BTf2Aqbn&)C5w54-@7GVC zJh^#&;-SR>8V?^noUwsdOI_VPJY0O8<)cTBHf`F})zy_^bo0=mMO(Liy|B>v@-pA% z_9dS_e~yib`Oz%6X6=?OAx=(7FE1^XXuEp-`s0rkp`lmf>;IO%zqeONNa#lW^{jth zvu4lM*3#0^(P^o>cKLGg>uYPlqoh1>(nW7>82bDBTQqIDFqf^>>F48qdjp=;D^@57 zaAaR!chq3bo;@+{?(P}gE$6;JJlyW)<`xtbB++(uj-|1U&7ZHYuOB^n)XmK;DJe;W zEA{oYwI5u#8yyFGI@rt(8d!;nk^+OSM2Y5uFWR?0vKA=aCA4VeO3uR@mMv3@ zJK4m_{eWLgQ*-6(>+6I6uimj^$J({Le7)fT0S-%pLPJ6r82bA9j`z#A&$q4rw`cEO zTZRLdFBiYOwA6pTUG4vWf0uYpmb0(>^X+YPW@hHS7#?2U_&pVckB{+IEO9D``{T%U z?b^+onwpxN)l+oDyrZIaZQK}`pO z_ICG-j2BD2rzh|;GhDcINl97x^1XZiS`EKj?7QwAolu#Z`}XGM^y9tK?7KyryxE%k zb=?>m_Ux(g@HjEgwmK*{`0kxMY3Js6s!cwq9>(_LH9y0Fr$y?%v%Z|S|3Al~@X+bg z++zD`eg*{wetdkqA6x_#78aVBnTd&s^~>2ZG3=@Q?B?x#`tDuXe@*XRy_z&>QdWLG zJ3~oXnU{x0&5sWYckGbJvvx9HA*}AVCSoH~SX@NJiq)%c-@W_x-8(r+$;#i~a&>ie zwdDWlhG*pNS!~GA@Z(2Cb#-;c(qLa-UY(M%GCp43r}=?JMMiIgIqIhQE&p6U&1-2{ zY3acm37ro+5XUw5h2!hT*{b{r~r6U)S65B-7;9r>CdG*Tb>X&|WDwl358 z|5R01S9e3YRn3nAPEO9?;9yYiGC$vHuAHo_ZR)8hzO&6TGczlzs}Ijtxpe80tE+2_ z-u8tH6*V+ET$D`B%#Iy9=H}uO5gpCW%DT7m^RY8$dYl#(Sj@R~D@t!VcX?CrGM~nD zwbpappjs(zPsPIJ%h~IdMMOkatX#Qr)haHxL-#LDn>KB>d45@0*`e*?`f)OrMJhH& z*_XH2-+xe_nDFS)qxbjrF24LyhA;i|v$L~i&HD7|Q@oJzn#S!jMPWFv+E$;KMTC*-xH4(GclsX>rllW@cEhZ=c-Z z4Ie%f=uNlIzNTX|lSkj|?TZ&THm9H8Rr>nY?c4hwcU^IR^5jWTQIU#@$^*$dR@T;E zzka2kpZD|EuOx|S)2F+u2t9rJ)R3q8eUbf$WNg2TY)1)J-_fK{tj8SrH1 z=l_2?J^tI9o6UzGCNM8uy7XnquNF>WA79_suU^&E*8bG57l@MnAH^G9D#NF)sK~hf z(cbd+_x4tQugcNf6B_;^ed&@VUESS=JiF`u{*tf%qo}EQa`!%m7obG()12!^R7N+; z^X^26{DpHZ3X{&yv(?knGc`2@H76%} z&6_uehJ@tg<}UZ0y)E~)nW^d4SFc{V_se;Dd%u41V#bUaH*Vaxv!_y+!JzU}inFt` zxA$pgc0K`)7VYqLZ|>|YzPG3H)vH&JkM$axo3CHBiizRI&6@|~S(-jSQjfTOak2aL zHIdB!tDl{byuq??;)gx;|L@(o6XWT5^32j}s?!DWe9v$VDl#~n(4z{+omY0{; zo30)4N%Ve>{Ld>%EFhzJrOg-^9?aud#-gz1q;=Vw4VyQEM(5V8TQ_y8XpCfs%cCdCujTW z@ndEN4==AtlP7og^oZW;>?yt`UzYH0}x8p~xo5zcq@bz(P zSFMT)4&I!9f8Ru9_ggn_R#sP^pJ90T>eZ=UOQj?wU%q}VEhVL;sd-Rat-^cXf&~tt zp{0+GbY^8`{rmUN-sLzG&yCG@_GV;dfu_i8(pe29c;f80Y}_cgFC#l!TTk!Z#$au2 z?bq+#u`z7fzWs1YdZj<-dV037iiwaMUwd#^*tbtlz3-j6Yppf)REp8V zlMdC@znA;Z|F?REz3T?uwQJW}T3Y`3$}x>c=6{(XQ=^*yY_qr5)<(<9%6^!|#NZGd zJh`XG2NIb5-eLRRcbPcU{P@6V=JkS&m0`u|)vpWZ3LSY`eQ*0u-_|hv4n<% ze6e%XpEY}S>oK;!x1Zjx?*4Hw`w0WXhU5GU37ccl4 zJ2Zif$z;_7{@c1A@->FMctdV2Qu_SXOZyM2YS6wi(ry+#KOeSLY$B9-+9mX<$1 zJUpC{k;l@=_NbD3iMXPoV)C&bPd~qTR;91b&Ng?IJ*V*T;o)}M>Te&GbMYJ&5fx>> zwKSeX$!SGCWFq(#bmngpYm)-Ur%H|JFH_%}9w^dp_E0{NQ2O)J)2FAWPxesp_dkE{ z{Q0kTX*&Y$-n|>6_x(1LOjp3R7uxqz8=l@{pXfH>;Pb=n{GXqlwXXj5=FQE`{c^Ue zmM?$)^l9n8KR^9_@Bg0h(8qo*ioC-s8B$^^P3NOL29-ITI#KIC17o%j2~NH`+Ee zH;1o}i;alrIR5x}pKNzxL}KE?IdfztpM26QdGFdaHH&S37Q6SaS+gc3CFMbOcJ}Kx zZ{CRO#~qk${OkWkWqXq;y1%&cD;jj8x0RHX^hg>n+qG-gf&~xW-rl};?b^-h=eKR& ze*NM_PhVeO504#HU$b&@a;mDTa&mOq5)BOvQ;aMX6cntiqT=HAtysa4%AKN-k)O}c z&0YQXm#L5Fgw|Hpnv!Mv_y2F>l}^}pV?&~|gM&kHadA}Ctl3;1wTEGA0cK0j^^4z@ z1M1%`@tizs_U!HX_v2z>&ZKRAerD$9hlkmD4$qo3D<&o;!z9YXqhrdH5JyKwFVX*E zr^Mnj@9n8HH8uUCI&tE}4aSUt8X^{dOk15ed3nEn`t+!1r-jVA)vLRG)U>s<;&v9f zhK7Fq`T6;_ZQH`v$33kt;;XT({FK7W+Z(z%OgD1VlK9(g3bo6=^Qx<;q`bPa^25Y< zo3CHLE_UmERJ1chOEgdU!`9Z;)+I}x>?(b&7q{oc)1uFxKj+`su`%Hw6T^WYA0HbV z85LN}*|^bA=K3_Jg)?T&dQ@PMo}SKgxKGaZmOrnYOTe}tUhaJ|FAEp>L`Tp5zUw>V zG)<9HU833{p`nI6lc!C4#w)|i9(v56$4Bk(#oh`~GJJ61ciZIY)6Fw4sr>tYs8K3> zO~l7vU$Y}4BYk~+c@A@Nb5ET*H8eCdI5_y>jECpv*$T@<|NHp(_@4NLJ^S`O_^drq zzvWy}eQ){udmx1$GV}ANPnq(>*I{9RTff}eWy{F~daazx$)dkENxg z!q&x{+&|sl!{f!q*X`0$fAZ_<>VktOPn|0I-(5&pnAQD&>p#&e+kZ%%pKssa)AK}s z{rdLD@m`*uZ}08Bed9(%P|zfE zIin^XzWH|x($3BKd0f7JP2^@aI};sc<>c4b)=r!_@ztwWTeofn^}7RNV`as}Ky@Y0 z;T0jT=2#XR@F-6{+1uMIasS4rprD|wTep5_kAklzu&etM5fRa0wtBtFAwgdDjd5%d z%Ys(Unl-Dftt~ArE%|s~tFy-T?c1|6Gc~ofqobpD@7#G%-QzRcM6pC?fhG1EBi4kj z4(sgh7VdO0H8pj1cK-22i{Zdr>+%ANIoq~vTfO@A63@v-Mn(+xXFPN|KJEM0uSXvi zs0d}gy|q=@y^n>#V5U!KXz0D--U;=ry~0=TpPOSjdFoV9@v~}`meRx%yA7HTKQu8j zJJi1FQ%On5i4!Lt6j%hhbSW%yTz=Wx+q=^xssHv=D=VuTIc5FD58l3gn`0L3?fv?2 zJ3lWkZ&z2>pZ-@_85sd#VbAKX3Cup5w)rOWtHL;Yt`e11`#;Jxn&;iI_*W#ucU?I& zK|)Pi`*#0A#S;w<3IY!-_sF&6@o{l+ojiFmEiKJLhVNeTL4RN0weFoQEi8MyxPERA z*!Cj-+O=zZe0)kg3wH0eR#RKHb?er}i<|wHZ{NE0Vup#;T)*X)t*xwf#H`!4?c2Av zw=19XOjLaF_;|mptgMb$_t~`1|GrfuCL|a*=pA%OKK-4)L?uh()TvXyUM`>iAbEd9 zYf@5DR#ujKzg+CD63zd615XHCxp=Yg>8Ys?9whwOlWil{fB4~pz+k@i%NH*`eD|*I z>#NXzr)N%ZgwM!W=I^IXKj?i$RKA^QSjk`qtVPe zckl8Z*9I*>SiU^HqQc^rr{R?a@2fk4f`hC7{n^>x&Tey8T}@3*U;q89SFc{YsQC8g z=C5B>f$SX}axvNu9;#KWJo@3`VP+;KB_*YRRT51X!tF{tJv`>v*W0P6xVX8w`S_eU zcTUgN_U`@r_QuAS4;(mf?AWs>CnsOMdUX+>uwdi2Z{IFl2vAmD%qwjsAtj|3wPnTb z-O+At&u(l?{{8*Ecxg#T#scL)4!5O2bLY<8y?gilz18fyrE<)EKRn!CSXj6{|NgZr zS7LS)JZxg+E-5K-k=4BPeADL5hYueX78ag6ckcByk)R=Nw&sOv)|^S&n3S9>t{0>6 zia~Iq<4vZ620YdO|NU)Z<$iW{_V(oCeE*90+9yw(C@3yIea4IxD^~0%czCFlTU<&? zs!PjnN&kh6Evv)Vx3#yImzMtg`LnXRT3cKDaJ{RGOU}JLmX?;4zrMU1AIJ4JWG z|I2sp);>8g(Ra2P=iXJa3=`(gl@%8kmzVE9{7_6cYD>aFrhkUz6Xiq7%D(L^el8>= zR57#knCdiU<#$H)8M|L2(4$d=0eUrw_Gq%gV|wU9!YQR{Ycdk5%3wNp7 zg!fFT+)MmTOifk6Q@0aOrm(ZOw{nZ0n`<2&7Z-P>kXLboapAi=mTHqZ&-<)cv7*CD z;|V)xx_|qvTetG=?~@f5pFVG1UUKs0f`?Aw;nxL~-8!t+9qjQ@Yj1Bqe2!($nND*9 zyQUh`DY_HtE?vAhan2kWaq;PsCMBh%ZA&=V^z-xc)vH%`Tdh0T?6%m|-MziNeepS# zOX30B9DdyfjhWuvEiNxVf6kmW%a^m~i(J2SNvJf&-r&kihhL1R#5zuVI3~Wc^tG5w ze9FT^tr;~F_1mq4J?foqG6~vR?DMFpsc~{*l8S%gJ>le&;^*g%9zPB;Js-68XoB41 z?gLvIkBL8YoXhFb0uowr=T1z;arx$h5gQT?HnDQAS-ZCV%@3sw#uFz@FerZJQ*oZ< zm5;(-&?>bB&5yf}96uhvzb-aBJp9VT4u-y?{HM8@JiHRji98210XF45y)^I1QQ%YLeJj>!`?uoIncjN2-npS^%6S_J~RZZLV zP8S7%J$v>XI&^5?x@}EOpdqt`{})|;`S9UGTfg%`8X{U#Z;6Y4<8YfadGh30v$*1q zA3e&-&c1x<(u3QdpPzsJ>{(gUERp|TOr(5WU6-z0>FMaWaQE)$7crMEU0Stzb+yQ` zW5+;KX4AvIOqep|%C&39;xAphmX@FIzxZO=+gqvW>CfN3t^N8cG-BPVRllB^)+e43 z*NaIonpqHf(BRCSJAbaNjsCw$@I*ha?T)k;r%s+!6yRuVY}_+xclrBk*RCD9{`Be7 z6r-6QDp8S<2ZhXL`z{PvwR-j1wQDPxOZQZN*R!^cc6V=gT6o|uM_c03rAt$cBE!S4 zA34I(emHRD70uvfAt50)m7iSv{rSUA*zbL?=f~F-YqxIQx@eJ;xA*IhkB@hCbs49h zd!s7k5f(P>Y+AAe8^e#s{q{DtwzqHJHspC+U~%x^!Q=h%%P(deJ$iK4u3i4~?dDpQ zzM7=!t)i-W_|TzaJ(8baUDZxbPCmG8^2wCq;?M5=a-rej)>c-1lE!RiSwBBLEpR(O z&vx~?b=x*>6qLE*vSHhzMM{y8ky5?WrcX~#OFOpvi?+G>_D!2EUAs2TNA3Nst=;=4 z&9yH7_2b8%Pp9=I+HT&wxpet*b5qkqiDfHSW`gE}mWIT~&!0LKG%X`3DamkPMd0Fn z25Ck!=ggRqk)6$bKP@dSEHw1%rZAg|4-T=hbN}Cd8QAovg25%r%y97eEj&) z%ggKCyLYc%y}EVlmY|>@LqqNFZ;??^@9yjj_V?G<(BNPwcyU2dS68>VxVXH$ys+@& zj2RLP4c*<|At6&PRDKj*qpPHp^yo;Zar(J0pFRnRi|?=c`f9n-LryL(P*0yh!O-yH z#fyekR#pH0{A6g5HqU$U@@3)9J1bVKI5}B8J1gtmt*zQhN=g6z{H(03WMgA{_Uzg9 zb+N*?%BVE~_3qufS+i!bFg3a@{&+n(E$!KZ2OplDmHu~V+cq;!PENJSnkAa5s;a&6 z_H{?QL|3g^RaI3L7#J8YQ5+d5$=Ck+&6}2dZZ0kn5s_D~UbSp{`r_hZK0dzN+j6Ci z)6T36UfwcI!CncJPx<-#Ifd1B>;?gAD=Q(67HRW51_m!LuPz zA~IC|d~IoKJG3VwD{I!oiG|P4&CR^LjFCY{S64rF7YoCO@88XhjTc{jxuI^xv^jI; zBqRynDwE+We|yW6fua3yU|^u9hsTK%CuZ1G8ZkULF;Tg(v9aKnY4)|8ySt{^OB}of zo{wVEc~W2j9!0;uzaBK@b2N#O;oF;=#)XfL$i?5EtnUBj&6^`fj(`Sc%HH0ZG)aiT z!OQE^6wTlky`}5c=_MyWK6T2A;lStT=M8zZ_4NK7nz251ciZvDd%@uOnVHTiLWd6@ zZr#@Ex7^#?`})Jl)$vE*!o(E|yM5Gt|M(#xDVZp7?amz^waMLG zT?Rb2w`NaYvgFCDtE&w`1AOiN`(~SD2Ko7&dvvrrJ3D*xrcFJ)z31oITG#$6sW{`} z>B-rDTv|e+q`W*jI(mKF-d(F!X_=dg%h@OrJNq(w*L}q73;vmmHJ{>^y~Hb`n$W!*SEB=v?X?Rb=mf2#5@F4Kwe>gwvUva;HqfB)a487EUV_4f8QH#4^- zo;r1kkB`s5;NZ3sCr?I3MoLOcpPy}>|MSyRZZVw$20j~Dekyia#VRgh>@PGoHT~!% zrW3(XAL!-j8N0u3?yvZxM~~*_=1NIPE%%?Vr=hVRXr-2x76XI3`|-!e`wyR=XJ3Es z-aR=6(E8hwmzS3N&)--7zwXi!&whFPy5HZ{ZrNgzuh-VrrXROwN8#gRYa%zdoa?st zIC#s-+FDgr^`WAmShuRK?%f+VG)#o*aLftVs;ICqT)28wRaN!sy?cBNFW$VFGGW4x z4-cIS3k`FYUD!6?qA=-bm*|F1hYmT##@>DRF0Z`&`-u}LZg0=e&ddz_`9VKr;Z|2y z*PT0d9N>KP`0?AfZ=<854S80tT-n%q?%cVB3m5*;joOrQ^73;3%KZGhyOyq5!^2Qe zSh%y|5s{IuZf@TqRyo~f3e=c#cXv6zv>8vC zCa5%#nWEda;>nXI8ozk0>RaARNX?|XZzp%VZV?tTmm`f+<2d{qEtz#PoD_hK%g& z;?mMq_v9^GwtV{hIXEatL{v2K-Oke2(>882w3)@ix%TY+`~M#tY%XY;YhBL9#&#*g zgp;##clmoJhIjY&b|*@-Iz7yv*x7mV++6F2ulxG=;+Dx<7NsO6F1)bRB>&zXUTL#} zop)Zn%2JxRBmMk5{hpaelRP~=zgq10zH*z-Y%|_v8?RlvwlVqmzS`em8(0+V)k;*d zI+P}#wB^g2GJSgepC5rfJ~{vY{q>%vV`yfUmzQT(^JBxznUd{?Z*I?@KXe`c4p?}i4z--KX&hv@l=}V)+dvhkdTm?+IswP{jZnmk&!oBT3QYr za!OB67wS||RyIyL(lOgSKS{!EVE_{|Gc<6eq@^ED6#J*f;dW{9#!Z_x@vuF<9$(*@ zFDfb;sdMdEuk_NTOE>=CYt`t0oN4-0rzwwQ6X7JYc&Xu;U(^z-NQ z`J60G`}hB!V_E#=>(}KzGnMr9^OKSe-Cwj|!GfjU)BpYbe*e^|Q}Xt8B_$<)KA*SG z&dQqMvuxhHdmkSkXPtg&{r-Pa0s;nge=2fwb7lC_v$KD<8a{vi+}p$B#p~DKL222j z_SY9lzJtO{($R+LW02q|~_tAN~FP{p;7SyLRoGG-=X?mXj%F z=H`cAyUd<7>w)Osw{PG2`ug6wb?eV|-zn3l_sd#~wI9BiVUn4dsi~>Sb6A4Mt+;se zvSrVvpXr`|;T8*L?-S`#*bv9U+~Wps?(Qz%v}qFy)57EIj0~x%sgE8#dVIWJe9gDu zt(>dYtZ8{}(DHBk$&_hRrf6tt9$ZxgnxZ{*%1c>U*=+XROP7)|Ga~~7585xte{Wdd zbzxgbSXfzU>Bs*68WBx@Is&#iOgOlH@7}o{Dst9kKAxU0Z){9{eSJM>KypR1Q=NfE zw8DuAA6{Hsykv<=WaQ2Hb-y~x=WsdhlQ{+5LR7d2+#7L*cS0sOHl0lQ_3PK6-?#R; z>Mx#Bztg|>zTeUy^W0l0$;rmm-`>>z{#IIAT6^4MM~t3~jiBQ%rc+`k6eiA|UH$o) zud3?O{FO_-2cFtL=fcO^{&TIKK6C(~<4-TfDo)){O;^Nh-U#;DWzP*Xe&wsz3 zTf)(f`|jL!9w8B~qj&De{66yHer9H-ijbzQ?c9S2J9g~w@bK8OWy_Rl)1soHk|eHO zx)c-_w{G#`;)jP=?`b^!GqwKrikIu-_FC2a`0)Ap`O59f52|-hnKGqE!f?@a54T>a zt5>cpS+Qcqv}tCEhgc$V6B8BX`rDiBM8(8Tojhqc^URYcpdr*>zp6@0zuLv!I1$kD zOYDTg!QGjar>E)4$;p9cOJA?wf9A}YTeohVI(-_{Q%*S8w7dNMyPKPjA3x51c*Bhw zHzuq5A3A^R$dQ(|wy^MUcX#*Gr%xZgC|ddL{r&w(N4r2XDG?hV-Po8c(RTFsasB9R zXHK7f{q61TbLY-oym(QfO;trjLQ3k`ks}tCmUAr%7rAe{u|5C(!^7=A-=~-v8w(2y zXJ=-}p`jpXQ&PRwR4)5XiHF;!>&K_1r7c^!)KG%Q zYVJMt)8dk!0`4>YG(0ogeEqUzZTnS>jD*V66u4R+J$%T>upmHV;lhP+ad9zv;_Zh^ zOG_u7OmTHRsvW*=#i~_y_5bc%yY}tX)zyFO|37>UY8z){tclv1b#jvGo-F&C9}dee z8yg!RJ#ysAl`9$|Tyx_5{q^(;3!Q}XWY_;_=3`mSBOe*XM9S>6BH z{^bi-tax#5uC=&++>`$O8#f9v7*u_E@!`XVIHj5P_5Y@52Cs|X-I54bah^tpiod_Mu34ia`nwCr6$SL#ls{Qrl&CSgZ-GhRH9t5hzspgnT+x_ed_gH?}*$D)y z`j>3mwr%NB)_>v*0`l_pPfiH_iwkseVye-tSjOVGPk)N;1bI*^S6Ny4r*}?H&YHDr zEAuP;8Jqf5np!{ju-#dB{p!_3iLj_BDLJ`$Q>KK($Lp)AvL1hQZ*TSXjT<*ES)wx4 z>uq7t?u{D_&CI5`Eq?g%$J^W6_k$<$-yH20ud1s0aL|{Pl{G6XYt^b%@D%_nS88f# zoH%>7cfTAvd;76t$M*mGb^88&dC*FdWuUcP%bE99eqJ`+ysxjWj?SA$N4w9SJ$vxrK^37+x5b*;+S%FJ{&Oq>U0qq#B<^WE-SgP# ze)g3TUf$l<*VnI)+xu(#{W{Pxfb8to`TPH}8Mp7+Ri!_1%9JTSbFHSjC>=ch`R?xW z{2Ln*pFMl_`}_O(7KM+Ncup1(6@BRL)+4bo{k&Xy`g48BNn(!sn55LXB%h#g`Q)27Z&Ef!fXA%4|7K@otXR7A>q@CLYuC!k$ow*X_P*(C+VUk!*2L|d zbvCWMtnAUpia_@kp3)WhjXW8$va-|l4ZPEO7rAt^R;{t5z5o<5yAWr|y`lxfwM41Rw8ik%`&UzkA& zkbyx#RrTqGh0Y>eOLy;dELLwm*pPqp=ut)n z&=!^bb$?Gy)xO9f?@{lhT(4lyU}$K_%F3#%tINP(!)jaeHOpI_?&T4QjEsDKZmzeFPf1x>-0m{nGXj5PWMus2*<_}qsC2zx zYniO>zii2pJA13AhkyF__xFSe6Fz(>kd~hP_V)JZ$jD9uo0J0Qn@oZmzkxUHwzao! zzL{fhZ=aw4UQpSM!!Il{vNKU)qQ{%>4D8d4)6bomZ@>SzW*%E};lo3%lhysRGBQ}$ z*v`#1&o7w&$K8b~mD?p{)22;_4j<0Hy9+b|X_|eFqfAX;p>t3V+{nTMM5E_xAU{{NrPFD@?b>f*}HeS3Dc z`QgVE9G`SSL(4JM)zuyz9SavO?ClX@_?_0KfdHKITKMx%`^zd-| zWDga7e*Sxl_Xs}GUZ5Q4A@7u~#@5l-*Voa}ae29azqGlYfx(5FHznt?x&H%AB)nh0 zcdxCM)~h=^i(i~M(s1eS-P*^;dXta$ZH!p+_V)Jbs;W=+YsDO^+BdO&vQ14(n`d3l zSE|OggPmVa#=61>l*46#nn0$QF&X_Tyv-9Mqr>Eoh z)o8w2FrktAtL}vLjaI_VJahf{`T6Z@e{I>fuPz~B!Q#b>S13EN$xP9mP~ZOl%#mAL zv){gb>nbbw>F$P`Z?dnileI1bZ7{yQJwJX^%E=9hFA~q3_z#+0P+DPZ2uexcUtC=L z^y$;+Z8;ymew{jbvT&(O$BTtIjWukqe0U-)EiK*q<$Qg8zkdCCcTc5pRn&cf_H#wb zhd$;Vh})Vqb>c+9J&e*zyA)GTP0_r*K7M)7N*}e$2M#1$T@|`Me!p00K*xy%`&cgt zzw%LNx^?T;xp}tIQc|GJ8gFlJUu>P(rU074IhbMu>cm%kd^A-%e37xR2Y+mAY#oD)&fEV#qrGy~DyxbQ3ja-R-MVF6_U1)<0?YpH2M-=JH8sgi&b_;<^wJW~ zzXJUW4!854pKE>nzySx9;^#Yyo_d9cPoFYVq9v*JbzrXM6w{P!k=XG>&gocKO zhhMM1JwboX|7y$9S5ta>duPs+T>k{L9I*bs-G3AB>3VYwliloDE+=13-WVZmmh-}} zx2MOaprF8>MR|pMnakgc+Y^jt*8lstyswY1(?w~b2Mg1|)2Fp{bl$wq($>&8aq^_# zFMW%u#;z`|dc{_!g+VLl$2NI-db+y0#tWVozxIEximK|?ty@1%x2gMMVQU-P@4x@8 z4D0^xiOTL$($dlr5-x6Tt5&a;27~TbR<+Qh2?S2w`T6w8lO@ZR9lBmvSa|T@!OYCe z4{v{deqLN${4K=a;-)&4~nqgolUQ`R(ieaDW!a`_Hr4S@l(`KDsLN zKdJQfwU1IK-rwC_9vB!H zzAh#+JG)u+<;$0I=gwWZa-|5@(hVB~7!Euvcz1vQebA8AiuLQypFAljb#=CR{;E~0 zy1KjL_f&jb`MxRM&#!OF6p`6y+wyPUzI`&qsMpQg&rfX4{;gY0O--kMzj^1*9ndH% zL$BNJ(%0A4MsK&P`Efz{-?eLDdegm^2InmCKed-ws;1|LWDNOP4P{WT~vIEG;c{ zTKp*fti$@*a$B;muT%A&_Tk>Q8xd7k;zL5F%%9J{yd_$G@<|q^-OJ==^E4my@bcPK z_tz>v`dzB~mGWQ8(V(@*12wl292Vy1?fqDPrcLFiR&MbJuWxQnpKn?0mXWjJ-?C+D znwpwo-K-25IXOojf0W^CKbdlFhT-93$I`B?iM({_()oF|kJra%({SuYirxRd-t+sYK;yL)?S;?*~yusu>Z-El+@Ixp{v7o?%2^IZT{{t zc+thANt4RT%BD@5w*Swk?*4v$h6l%br6t-9o;`p0^5;K4KRYd+WuAZU%gf81E}+4k z);e+9me$tDsHji(++1CK=h;LC2Nz#o7u)o8`jjaN64!3ti+%t z`QzhbTU*;smqimN2BxR0*Z(Q8x_jCKPO{v8?+ zaN*9*V(^0MzP`ST7cYK(ex9A-&W=K7fB*i|Pe17|>geeB`T69lyKG z_r>(2q@+d5mp^~@EG;Q%(UK)!{{5}q(ILU(_FntmIRRSg=FRl$pUS?~X;)mlq8U46(6y zb)&a6{EvOA<~xgJbI0!8yJyXkVt8=4oqw@gZ&pUej}YmHS=Vmfy!m?>yQPJNjD6jl z@6+m&1=svP(8#V08UteB2+*sFX|L^+x_}8yrzrV2&lmcE|S@}SCH{ZR! zb??8pZ~O4!!wiGOCeXCh?%m+l_Kw2GYzzyQEOCjC-@ke_H^YQkv#hGVWH2~HMcul( zI{YE~a=*D!^77{s4BUF9SnHh*2~Pd|`SZ(?DhCIKKQ}8rJvq75dpZ-tojZ3PxN$H< zY|op!e7QPP%a=E-y1vlcC}C(^aciFJHC{ zz88qWp`gGZCMhf|jE#-$`}_O)`uf)|UQFD4bAHz2dwZ*Q#;m*W-syvM{MM|i%Y0{7 zysT_)ZZ5BO zXHSogrl#O7J5cR$ppm)h;n)2aE(Gj&Y;03XqD|95wQ z_C{?3?Ty-B(UK=(A@lCm)@%j_zV^k77EPKkVZy|ThLxXEKI|0bpLhD9zTh9O2Pp-j ztJbcaI%Ud}qMdtwftr_~9XmHgwZmFkS~&imsyeg9Jy%mx^VF$RAK2@_qYSzX2d-cL z{@`Hq2W4S(zdM`L`Ri3dv#Y|wkJrBP^75KHcWz{4Fe6d%{yY&&6#uO@^b%5)jhqg8Gk|RZ5taI z85V5b9PI7AdcgvR7wbCh>%zmY2QT+yWRT!F_J03=y^>mn|91sB-G0b^Jsz2d*f1sW zX8R#ymfdAk`SQbV5LprAvKKeDm0-MxGF+O=z|!`H7{wd&N_vv;>FNLey`THKA7#k@kUM@*v0zGou8FIIUsp+EaL5K1 z!No2|5;kNnIwrtrIPJ*y;TurpZ^X%FS}9uZ05}LXE$fgtra`G;rI9V)z#I)PfvSkYilpQn9(h!d&r>Y z^iwTu?bk0}<<*nPlfB)RMvTcb`QBimA-VI+LXKH5F7Pce*{=WD7e*4A6{c}yd zvniFk)k!gz`;yrIf4|>%Uj6;J-~P~vl1-mhhOC-7GqSXFtBcafbLZ+lJUA#{|0ggk zOiT_0`Vu43)1PlhJPg{*`&U**rmL%K&6+i!^_oo*(HHmWW&`Dk3st_UyxJ zl{VCxnwZ?k**1A{@cy>r4-4kZnbV=U$+sbK#`5LQJB8J|y1Kl)ywzbGjytNYFZPwK~S z$q3BL%L@*^yrb~(rp=pIuU`GK#A@E@A0HpTzq3R+RoH=8LMfJBFi<1+!vd_?edFkM8bw$O4XV0EJc~Vnb zo15XokB`aD&d%}i_cv@X_;6n9)r%JkE@tHB=BlcyZm9Fne*55Hv-dQe#zXS9RVjIS zdP1EEqF-|>7#b!jyT|RTiS%+_spjG1V`6IR>*ZDT>&we+xwrTIc*M=XFy;L7&rhE| zeOMF_7&x)1$;scJKXdZKL!L_o!~OpJ`E%&-VgET6js6#;rKF}znX<&Bys%L576XHW zfo12@% z*F-3ab?=N>w{m4>K|w)nt?g8=R&MwEHJ^Lu%!!GPj&^cl>UCSaZk<^7QTKki*3%1S zo8>lbcDlKzLu==*U2>L1OP=R1Sa^SL_4N}cPMkTz<2TK-wD}VwgO8fAo*o~AfUIn9 zVnk?YXjIg!wl=n$PfM1lNJ~pwENz|O6}>%A){d8-larH=FE2ND>BWqKtEQ%=qW4M! zOuv8r+{`8L@!Pk!-DPWClvb`^|NYaaCRTG3lOy51@9yjb&8XO(xYca(*< z3!GWj)#v8Eone@qAg!vRQc+bk=@zr$eMfa&-P{`+67%x%K5W>xFV4|1@yCaUA2`(m zug;kx6v4n4-zEAkJoUcLG-XydZn_Ogu; zJSnppjwa2uEM|MPc)8BU`dGshLH8oYPUtOs4+1c68U%cRmyO3hBBp(U z!otFQ?ZwZ|NIE+oetv%b_ix|UMQ(P>y7S`g+t84ZDN#Rjva=Uo%$PZICPPE?_Pm)h zW*m5a_{cJTPEJY7B9$68%d9IaHYOi;QorIZ$;j}x%=W~st=Zx0<9g+Vthra#FdUd+ zm>d%uyU<@rc2>u)_SRNbR@Q^}>+0%26EgefetG-x+TNqz-roMmo-|>iviqUb9UC?n zXid#ZPfyRt;JBXt`O~K@Tesf5dsp3mo{WgdlI6?8Lqn%do$9*$^6@@d(7usp&%Pa( zuV-Lbvvw_L-RPS)dy1d?u{8_I%E}4}8Ks|-sjaOQ78Yh_XWtRpa5PC(U48PiR%H>c zmnBw(`&jdBt*opxM7Uxc>n7&y_#>(v7O*nJ-TnC0)#0ySy<%c;QM!0#W$@LjS9NuC zB6P&+*57S6ad&sG$?j@zXV-aoJ-*&|VZaQZXOmRDuUxs(u|0=@AvrmD1;fPE;p?@u zwWA{AJ3HIlkmqpul`mhuBuIR_>~DY2dC{uh-`+M$3rw0kIW#oXf1ZtJ zROYc`$M)^pw`|$6tgNip*VYPmAKlQUBIJ3$ZTgHE8e4ZUl$&^(9_*8~E-5XI)Co&S zcrZmX_}RI+-KU>_{@K>n78Mn>ZrwUNJG%n;zMRQ|##5(;g@(4iFVD)#YO;2TijLOR z)ipISIdkTW-S0QXD+`tF?c-ftS+_IJnJ_`X($Z2|T3S|Cc1N?vs+Zs2-Zn3K;_<@h zc&~K({YQIN^i+t|mfLpBog15yq5>+EHhoI`_2%YgSs9rRYpXVaDmCl!cN&_SH*enD z7_nxl_jE6nNp;pQZ$FN;dHSyT*s)`W4mtg3VZU_qX6N~TQc_Y6_~rV;gMyT{ihepd zS-qg=@#mifyR{e=EMCma=fHgOb*kc3-uBZ^y>3o+QPR}at^M@mq_&50P+;K2@0^>q zY~3mN;<_@o3y?PKFwlILBe8Hm*7bS~_YM06j-O;37I7&FaIh?@516CD!qn*S zh5wTn2Mbf<3;8Fy0vs$%7wu0(D}WW;3q11aI~#*TNXV6^r>ARcYxnl{ZqK=yl$`w8 zib++dGeW2BeK()LL=P2pb#?Xc{Qm#%mf!beWw$MOa9}s*el6)RsgH4o9u_DmDgF8T z*Ve}7!x7!+ZC}29dv|+#{}-X4=%bZS-*fY<)c7mUmy!2TsHCLCXQq*=ot>S6Lc;fV zce}c}bi}y#t@(FK#=7iH>V7eU(pOiWJV{CFa!|OjIlX`3LPf)jpVr-1bip=FnleR1 zRJ64{?zn-Ds;a7qiHIAIvg@_5!no(ZnVhw}{taJmif$dS{iiv)Tsy7OSf&?7NWIv>(;GHmK?cr$Hv^e{MwqxyLaz`M!N$v z9v|y{{IMeWcwcRJZ-a!1g$!T!(WdofNfK&e-RAlC-aLE8#;lQ=n!0nx4$$(E`|H-N ztE{YaiJrP?#h*WaIEB?hLPBEp*WEpIh^bDp>F~n`4`-Y@efnn3wv8J%zHwK!kU7^Q zY24J*wB*vx7`>YH)#v6|zIydaqV4IECpT{2zQ3n3*w@!LGP3f{jzaMIp~ELndiwgV z-M4Sv>8H1D-QsF>;%g5M4So6wv_Ypsu*$2t`gaSb@B?%1V|}vTS3Wd9p1b$v$Nc46 zwuCr3HhvME{p?wq+T@c-8_n|WtXQ^e+T6LkCzATRU6fW@+zt#3^z!oR7SpZz^W&p~ zla;s1q@SOkXJ=&{+J3gM?$=B8n-}gZiF){OivJvog^Lz3F=XWCrW#0m=)H5~h>OJU zMw4IWa!xznZ@AR)U8vLLP=djsLx(;@d;wJ>2?-14&IPS=SC!rvuOcLv`}J&Hd;*8t z%l`rn_a4=snP+?Z)qDZv!*6bF?UuOEdDim%}q=u zxVS2h9jm^!>^!&5lK_MeEb72r@xvr|Js=-9BrK?t~ zm~c#Pdhh1B^XBEHrY>EvqJvjwiSf7dE3NoupS7$0wr2KhX&V`{oQTrWt!u)L6r7qh zYnIZ)6{}ZkTUq_Ooxgu?%}=8qwij>S_(=Vg=3jUxKO*zU{we$3&Oe)GZDAoHAz@-_ zT3TBA_Wu6+=g+U-xUuj^hoF^}mCNQ9!QX~WYcIY0V*aDHaiQeW|IQ4R-T#Ba!@oZ{ zDV)@`Y?&I*EPl|=y{aGEDn354EPi(4^l52HNyp}C9x9ren&Nsf4+<>w^z;g}Ioc0z z+`fJK+O)}D$A z@%82HKi+))k^zsmudi+GFOzp^K|w)&^X+(TjTU|CT3>;9{1aSm^W$GtS)aqZ|}|9x7Y8!zfbOvLjK42y!-oVKRxkG>Y6=! z_UhHzbr#vz)~w(6>(%P@`;3f@g*#pB|NTf#Pk+8Dbahg4^6OWxqN1axPMyjxW08=a zemun}aYINPB(hZvZ08N(^K5FUgJlVo2d~TjC_v88e(q=twi*Me% zdG*@0b2AJdUs)OKax`WCvzEjeO-)QZ3vS=Iv7_|$HTk+9jOWg6&%Mp&f8o-lUG@L> zZQZ(c>eQ*LR=qmd%wGQPj_1;#$B!PV`OMgmc(`rbwr!ol>RxBN40sk_etGohQK8Ny z8#fx7m|Qu2{Q22yfA)7CjA8p7t|-Fw_wV1QPoB8-%biUyU}9#TJ!=*N!`iiLuU)$~ zYt}3`H@A21-kF-3GB8}a@px0=w(0uu>lQEm{O0Cn#&RQdKRG6%taCo;5o} zd*y~>eSLlLbw5=Z9$Z}PE}>XcfB)kC-+bD=75XpVy_+_DdVBu`CT3<|U*E(Xslvj- zKXyczCD~sLyZ_)j>wyV9m;N_4Bwg4ibN1|6&|YHq{x)k?#iWfpwrl|Ex%mi_u%u- z-rnA2%a+N%krH94>e51^AM4{=Kn6uQvfQpBQT34)CF>l_ygV$Ia zE8Jb&-M@eN;^OYkzfGy5zG2VN32L^sbG?=(Nql=gzn*WK9>)>uM<*sK|A;?wfw8h% z(KjV!iGxB$e*XR4885>NU z6z=Km-Mcsa{Jhr0*+-KMdGxGrcq#tl25A5-R%G~l>eMNTwxh?6m6et8Z42T!60M@D zx^(ek<~pvPg9#-iB}Fn$r7Lk@`wqli{Kz?gqAK#A- zzQYDwPwSn94P^~G7VJDKz}g?NZp8|Znu*doxsLok)g8lBBI$f+oslU&b++re*OQyQ(ZY*52c=-w)e$;M@Pr6U%wuia_!o+(%09%?p{^){oUQ% z+uQaw*)dP~zidb4=VuoeyLW2J@UgGI{q^rI(14ndfT2^s{{oF zJv}}3gPW#L{=clD&CAEK>WfC6&}{SkeYL;Me2!=Hu*)mO9e4ToYx>mxn@;cvw)4wR z+xmIYqD9wFJ}sT_s%`xN>Ca-Zv9b1lzg)htFv4Pk(!B>jlZr6*jW6vMWy?K6FTe=h)}x=f8gW66f2vGI;r+k9{Hkycrod zczII|Br3WVEn3tI0=(^q9~SNWu)VeQ=<6q+tU%|B|NQ)Xz4F2Z3lwZ^W&inkcv#f@ z_yC#Fd8yl-4H1X7)s;^n0p;uS0torfc;k$S5 zrt2O(@N~cCf`vlCpd%*Nu05Nyan77MuU@@U^PP3&-o3uRvB^h_KPo<&>N_Rk|E5pz zVmB2*+jWl}Yde`T&!#dcK3@LT&VBp-y?*lP)QPgg;Zr`joj7~;>V*pm%Pg#|^KWiq z{a5$tiDyjAowKveKmPyr?c1|w&yF2EYFqnD#DC4&wZ0x66(1fP+?aekY+Veeu(!8& za#B*>{e8MZoeT^!XU@#a%Uim1>BNZ>cN~~&UA``U|3BBthc$mb9!^Ev1I8|!B(HyW^Zq7O#ZQO_ik&OJ%x|it}I`@T3c6F z*VcCLwryf&E}5B`p`oG-4{mMEmX(!#`SPW%uI`erpnc#E54GO7apU><`OFOK;`Xju zv!>?R8OctUrql1=zV-FXa!jz=t~CoCP`}eSZDFPI<4FnyT$v zmZoHb&bRQNZ>OuNxwH5=AH#xe+rFKdX?)~VPG;uLf`^BedQXpvj!x{_y0z5LuWwBi zbNcCNx^{MU0rJ|~tB-bz>ql?nVNek2?CI$d5)%4RV>kP3UT*H*ijPYD$4{R>|NLXc zhj*{u-QC@A#v^QfTvyVUi(r}e`ZV_Q+W$o(fa#|=L2MV0$uDYtxpO2hVn&|QA^XJ8j7R9ZV z=9^>wOqWm2=Ec*et@3uYzd|A-cY+q8fKE_NPJRqJjLmO({=Get3>R+Se*Nano`Q#m zc%{uWw6&*CpU%v1Zod8cl`CJq2CXs3&&rY#6l7$$u`#)Q^X6g?kB-(>*NhAe2GGbv zTU#3+AK$)x`-+N+_W%E9&2ZrMZEH2PHWPiNsHiB=6x_0i=xBFW*Ms+s)6dydebHE% z7f_d+ym--~r2Kq+h6M{3Iz~oD>WGz>mio>#I(qhO?yoN|ORWAL>y>u-x#ZHGJ$uyr z=IkhV2-=I2nwpx?q#d?K!meh=`t|D@8yTAq9@s4dO3VflJQjaSOH2R$dcA(JTkoqE zFCKiXFp&b)oy(S`-PutntnOD*T54))+RFRz>C@70Z*G43R>sQ8D%Sn<&6_(HFDgdc z`}+F&s2M9L9Jqcx+}YV#Md<8&`}pAC;>*i?cl>#V-UI);DCoqta37zZ?c2AnIe1{< z!d<(hK+&P?zHO;TcHOx-mU41($BrEfUl((8d;a|^D}$Sxn%sJ&N?%-1WH_+5`g>1L z&%R%;wDa@xt*xzX;{WhHxXQuH`}fD=e(;ir%gcPbySrzb=gWbP!o7FskdxBHBS(%z zL`O?YNaWnx1L{uS+f(`d-Q8rPnS6YF`~QBEUODl`ty@tM5kG$XxN+-NR#ujosp-R2 z-*Ss?-n?mLWp!lArAt9Phpnuv7#L#o!rk4MuUfULf0aeilM~D5*Kw`q<>%+;;9y|5 zv#+-L%ZrQu{{1_4>{wV>Sb$XD8WXvG_oYGU=jQB8J1do&`*vsXb0!84UeV{Do}OOp z-ru%=_UzfUH8o-D<9HbwOxaGfaolm~H1&zHKY8-xvSrJp&2lzu+ZMMiM{?u8!k^;$ zaaS%~irSVlbNlw~ot>WL<>r~1za*4Wav%Tr`1stpb3YUV{Ua@xK-0AVM}*F`S*F?3 zbRrk6TgNw5vckMZ^WKc@A3lGUHcsnV4+8JEWL}owajU7ZVOX$b%au!)HZ5Py&M;x# zJiDSN9t;Prt`1L5PJY-btnO!1|F0%J{dtF=@`8LF9i1ZvZ~p!L&D8i{cK*J`e;=OD zuaDc3A;@sx_;GeKU513SvrPZ}`^Uf_D?9hnrJzfD3beGeo;-PS>-O!=PHu6%I~$YP zZSEgC=B6Wd`c>O$e^1ZCqN1k%UVeUQ8zaC28f@(BhmVA=4y*n9^}5T?O_x-JI(O}| z@@e^Kvm@r+RPFFLZ{IGIzqPA$^~{-)fgCZm!J(n41`?k>eUfMcFW$a%>5`hy3#qNFpI*}!MdtU3#DbuGvfAZu)hDpV1mneHjN5=vcR)#aPOjoa2qXQXgarx=! z=m_diK3@~RzwYX)&?QS1a@T)-ef|BNox#@$8~0i8~KV4iLDsZ*yI7)(t~xwyE5I#txwkKei#6}ES}l8ucF zUrkwAnWd%WbiLSFppC`{Zr=R)<>h6DhSJy9Zr;Al&BDZR;M7#@MD}l=J~e%}T5`A1 zYw5plxAQktZQZ(6KW0b6>Ra1SzP-7beV3lhL=TsxLET+l3GYDb&3~=yI&c49CjXtP z_q3MQR!PnokZ=c3kdiE&Oxu zUR-f;aRgVV%cAw`=g*tx7u99g#u0ftVq4D5HeTru&Wq-4f&^6OTva{2b62m5a#>b> zO3BQ8>0Nqwy3@a{(>8K!xcLTD5k*EG+^I7AY+LdjP-{~}WSV|_U!uhP^YUgn5^af( zkM(M6X#Dtc**`lgEAQ^E)a2yiH#ZFV`T2{Bi+K*4n3_(VI(4ScG7pua($d&{H9s#e z_kVwHFX(LK8G&wYY-gq%ObA$cCH?$7&Q_=3;LEJsVke%p9)4J$qpQ1gA4h&(-oH0D zjXPb0WMpK-#MIQ))mKaF*_)YNyLeGhfBoXc$==?l-`(8}n)(qCU^ojpURWbOEGjZm zvezwoONO9K;?${AL8&4C{=VGXW>URvi8I>T*yeH1yMCloIRDO$#>9y7^75FNJIj1$ z|M~mZQl@Y6NN4B6Cr_?iv&JVb?%t6jPyYP;{O{ktva+%zxq-pK z!s6oLfq{(cK~-;CV)gfTty~U2uU@_S@#9BTRn-qNT2ogoTI3YPwK2lyRvc(SiKzr% zyR(kk?6b$dF1h@2Q_+&BuJg}NU$e7M7Y%C)Fj| zDyypISrjf>v0}xNB}Y!3>T+7R;bxAy`f~BxUmF5KLq)k-r|ZQAg@%@vm!Cg<`tfJb zsRc25OS^jYs!*qjwe|0V&Fr<|tnG&z-I#7aJ*~h0&*OgkQ>RWHIt&7aJg?up zner-T(9mmI|L7Jcz%BV`k0-c4m2{i z^T{@ux>>n^E(zIjZbO^r>*r5SPBt?$Q&UruXq!26=HIW^#>G-uA7V?C11 zpl!E}SLe-~sTs<3>D!@pj>y{yn{VE)|8Kjow7`49ROQ=2OHAiao7Pq?#?IcpXpxe( z_Ug*d&vc`=ow;x!KtqIYkMus7^)GW3Ku2h`Jv@Dip~2toC(FH08d_TOY^%-w=i^z; zQ1;*eV?}OC%9ACYlNlKP{rlG~rhDq_+1#uwDf7ITva+($Qq#G9$BQNH>;BBOE`Rj+ zG3bQ+S>k~w7c5xt^z?M^%(`!HBK7sxuUMgB;jVa>npS>6B9buN}B zc78bq2GDl2D%mOWl9DfrV;%segySloLgqqHY+?@9I-d<^Y zl~ETgO zTwGjKbn4V8CI*|jKQ}I1xN!ZtxsDDG1A}(s`RB|GR#sLSCQ;GR(Vm{1TiAn?Eh|1e zn562x;DdX=+|1dtyIqu4WZhR|XOOTgdh+!2^ra?$o=o;vQc_AgH)rOI85|5R7Hj>e z*|%qpO$?8wmR3+ez>AkJIXO5Y_SIM#2G=P5bG_7|ZCqDZ_weDvC2d|ILEhfoKP+-j zPt*0DrgJd6r=+7n&1+5KrC&4cYOU;|SFKsIX7%dBujN6J(i30zlXc$VhXtVfk0yGg zcwhW3pxEl5upmIAV4qSdC$w%^+Ouu*W@AIc!f$VG7EJmWboay33gdf^9v$s=b8|Z~ z#dETntbJXK(!`96j05U3O-)UG)INWEd;8(Thnv&SvoUb6FsV)EOh3Ch{e0ZUq}B+X zXGJ@gEn9Z*;K8q7zlLau>dDl8K5Jf7RFs>W%gM=UBDHqct|%QbdD|)xJ>|SxTR8RX zPCRoBIeGQ!*Ao+!ZR?rO{(X0Mx0{<=T3TAcCeKyUQ}`J`XWwvgyt}b_)haJ<@5>i1 zG@PA3WlBnNGIRK3g(a7+t&MK?Kj!S@)YRM@9UYx%5|x#u#h?IM=FlKux_$e0`|58x z3=TSC@jHuBA06o|FmwzL|9)|?d-}OKh9)L8|Nd0w=f9t2nw{XhCVKn3N;L~YJnS{a`~DJ2cDdqTwGkt$e^pM>*nTm_3Bj} zvDas28Z$J^nIpr>%DTg?<@s-`B}9)-$m)=yLWM$(|Gq)FXhkNwQJXpQ$3xXob87dO+)5% zb#eUwH5Q(Kez@;A=!64PHEWlK{k~Ho4lns?oPTf6)z#tNDwA&AisI((-nGkW&%eT- z_wL=xzP@g%hsxKlU*qE9HY`6eZP9y0r>-??bbNh%|4dk+zEbAqG^MqbcQUfGvyb;k zGPiGPX<_mAKR^9#oBq++AH{BO&p$5T?daAg!x?_~@S#I1LRQV4J9pti#TeByr%zwL zcCD@D=8`Q@Hhe4q3`SCBO@d8z>P_)d+MAyKC{I80yLIfetEP^@b`w29LPL)x7^nz& zW@oQnx^!t4e<%8#WmHk(=pJS!vno)VO*( z1B0e*>eCb3L^97l)@22E8=IOAZOObG6BDzbMb^6P#j97FBGw!@a6mJ7*_pZ4;?I81 zl6GZaFweht#DM31C9AW;zb}{lE4DtKx*`AmKJWr%#1e}v70e|TJ66@sj!8;d^u~*W zLBYyumfK?6x<3-@=ZJ^0&OdK%VshourJ~Z(uOB}){;rX;saUXhadKK3Xp=$SU8_a4 zle|{1T6O5VwW+D;!M%!0+Pa);Y`YI8?AW<8c6V8CMDiwQmb^trq}0~VhwRwsleI28 z)WTU{EEM;DN6ik=3x^Ilxw@)aSVSmIoB&CB7cN`?Ex&7bvGsga@FAo88J<1T`*iZ(XqL;HfR8>u)V_McxpRIs50@@n$oTKU#|l+d)u7n#pmi1O z67$cu-wtJDkd>9)kj6gg`e~B4{y|4bo5wZY+ zZPUi~Ep@9_ttxojd}&G9o(`8qixw$W1m8Db^7bnikBi@ZQ+|dOD^@7H(_~?|a`mdC zxT*-(!?K5tOV+OCo%YeyEhswLdso$k{DbUH@}Y`Cohi3>tzNx)!v=x-_pAysUD)zg zESbP3xM{*Q|MK$fAqzkJQeP$_CN}9EznakpzrSuzzQlgEwYB~J{{Hl+%hkbm1Gq#& z1t7Bsk6aYNiz;9Ptl;rmfsTLRAzkn^11l#(!-*3f@$vE1)z$Iw_p86Z+q=x6(?v;y zEB=*`O`3%vYk&2gs;{puTnP9PC7+p6Wb^E&c6-vX(z>}Po?E=P5HWis+7S40^XAQ+ zozdHJIQjVME~;({^LjFMzs?7{qtEN-JKS@c)z{aj8NBSs@#E|)EN|}ZjSdW)cr@wY z^sDhRlaKeYva#*EqFQmL0CXkcJnQnlqe&YhbiBP!|M>AkR68s|!cA(XOn>FSQwwJl z&W%_9WO>e-ueG;=b<(6sixw^VaN)H?+tMXVKu0$%@L6&qO7q<7n#c#WUFZMXeLVKa zWv}^~*xh0N{_o%1-24HwyM~R8%{>3!myaI>xmv^5#jISrwzRxl-aJpHE%E5lqgq;8 zYuB#*{_gJP?c3WOa~K#{Sy@5%xD*x|nw#ruYVNG~_~^sK!#iWv?b~P9e|&e@+gXbi zEn2-=d&{afZ*tPppWnH2XWBF|eSLji-rnr%>+bF>W`DQ!_---qta1Crd;^}v0U94d zb+}qT-Atc<&_&|Wjk|Z}o=wZYw`b=0=lU@_0^Hq~FIm#!xBUB;FI%>6_n%?ls335F z-@s?4k*ljKYuxFy&F}B;fB){C-csYhe{-$NKYjkp%gdX7W=13EP-Aab*Vcs#6U)lB zwY9Y^U#@QByRAotkNvugp~=Gn3mvi7FE20u5TGNLe{avtvuAnRKA$>us;ICqFes>L ze{5{*=TDzH!lJ^$*zQYi+q!jW(8`}be+sMlfX=9_`@5^PwY9sO``h^k2~VFs%`v-u zFLWCE>xWD?eFiOm6hf0e*DZ#V^dSp&RX8-_6O$mCC&(0dHU3; z7bU+|1TMZ8rp&9C|LSP(_vTBNf>>EuFJ13ulh_)qBIL;`(AU)!6ciM-CFA1b@LhQR`k% zNWqb4R=1=4+}wu`XaE28dVOPKV_8{Q{ok+CbJo-)rBr`#+pqH>?%4Bs`yUVX9DQ?h z^V)x$h8maG#qRFNeV~$!Ooi6%RVDFUdcxucsFl8e0452`5kH<$L$?l9HH| zB|+;sj=eg*_RHD2$On6S&i}9baB!{5+q=8NU+t7JJXcU!x^?MN)sOp`8W${G+Um8G z&me1i4#UGQUrMyKwOw6Za}pZo8qUnP2fnh!zUs@0Wy{ije0a#vuxQaD&ERDlZsz3X z=1R=GbN_z4*)vNXP^inw%j-)sR6ah|3p&{G&CCyhitCCqGc~8|&$+n?w6fmOkx@*Z ze_!o~2acAOmWw{+Yie0MGJSdb)6JZ1&CSh?jgG;=!QtW8|NZ^__s<_GX=(Q!iG_<7 zJDYe&td>`f(9CT48UAn6fojS5|NlNX{7I~|wA6o|jpDM5tgJ(V0+;UH)BDPi_wmuu z;%8?jPM>aWWYmPMkbBbJnbD*RCyFx^%8hrIE3* zvAMbU`w&l0&w~dK{{H?xetTYQN{UL&tJ4n)YHDi}<8sVypFPX_ui?Jyfs^OY%iGmh zlxT@?9ldlZC^mNP@yDTIVOCaFpDJw3X7f&uG34>~_n&WDU6!7n9vC>Wx!E}@Yt`b# z$|d2Nnwp=VosHgIrfUPb{&ulj@2PX=Kvz)v>@0qM?#IW+g>xVFZ`-yl`}(?vh4+Po zg{SMs-@AD;GA8EDn>Rg)GXgYpG&BlIN@@ZnL5I-K%5ATZ{k65`#sw28(2m>6%F6U} zb2N2ydU|?}oMkXSapcI6x3{+^vuN}3@USq{{Cqk+EiG-bnr~4_$(ofbAAYPTI4Xa5 z!<8#nE-&|goTsL$`t-}o%RAOLmCFUqI&ih8UJ`_``YRhn2}F{kqLv(%In2`Q;V z?YRaoW=@`bd8&4Jfo-Ap&{)dGR1B2*}2x`FE1^<@a)s)&$&4{20Ye~ zZ3qwDtG~Uu$-K5pgXP=gckkZ0_sbphF6fxQLsL`p=7z-PNs}(EiQJs9FGOpq+v05V~LTBB|l@mQwj`ztL8ye0uNMt(0#9)wf1Jo`}PhY-#xwwRch5*MBlg4Fy*E9G3 zc+{Q0|8JO|AD@=<^2@JZzmATIYH@nVZ~te(YS6i&y4H6U&$>oN?p(NV;nuC8I%4|K z+tzH@FyY4a1rr#*m0SwCzq|bWjT=8|?+UagzR>(`FUZyU@87?oqN2s_{b>dgjg5`I zzP=0%jqY!!@ha@8`B@|@J2(COJYIth#&X7UR^0gW^K)W#pvDwIWj7WUmMhn)O`o_x%W)} z`18JW08ftFem*U#YG)ef6S6 zi&m}D66$1OYFxHVZKc4%01XkYrPqpoFWt0BXx)l$wNd5e<(Zi;I|P;Oe!Wn(`S|nm za}%lFis+WtJ;Bk@x367G%gXXv8uWXD{Q)DTf3cvm<}x!MI$M78*Vfh7H#ag`6tr^f z+O;KCvU;G)o6OA3r6nXzcx7j0Ju2Gy?Afy;S2r*!iEy1hb*iVgxAX2~kxMb4fuW)& z9u}d8PW-yXP;K?CDQN$3SPSpxhI!GT1+|Z^I^25{?+_9aB7d<$pyPZ0WOaYOZCo6g z7rgc<{n`gx3veaCU1?&El&O}P*|o!mlQ)z)D%@l3?d@e_V>>_3w)*S}-wt!`Stc2Wg@?E2Z55E`yLj=Ut*z~Pc|Ng^X^zF+3;U)|53j2FwIT6vR8-Wx-@f7;ENzL$ zjve!#Z)a*`v}(;7nVeXG|IBA~+f2TG{c34x2|ggld%7O)HY<)J(aRSsSOC4SX<1WK z)4?$IkMQM9H%eQZJUoN`8ef#!9fUE0M(6sdjHu*=n z4bQ}!r=K} zBlr>(=XO3#P0iT7Ra5CT7Xlu(`m*s4j>ZEW_DKRnea2s#)`Bz0nMQyy&Vq#)u zFnv>&EnBv`{QbRMrKj)RyLax~xm&la%+0s&*)!+#Q@(9k97m!TE?fvYf$CVV^tEf( z-o1Nw?b zq2%SIgV*>PD?YopyGMgTvV_~hKjj&qo4Is!Vm76mOvr8rE%CT?`Ev9ASVeX9cK3f1 zczL@W_Q;o%lxS#cAHKh1`vfm{9wpE^4;Q70lO|0H(2&V-73e5uzZk91#_?k3(ExW1 zkwfcql?6DCC^YRsSvsOD)Y&1g7*dw%m`Ydl92~r zRRZp)Kt!Du3aoWe6zFhduk2pf=b_?M%+11N_yV*d1#}1U=Crd3*^Legb|nD@Vk}IC zPaFytwJCs&Lh9fcUpQ-adt2`6_3PXBU%hhW&D*zs|NM#5^uI{thYlUm5b=^v0^L^h@6XTwzxV&Ijs!2LDE$2FZ1wkdwI7d) zS9tmQp6!#h{@~2a+&t4b{nqW<`!#>A_bDv=c(9q>Jnv3MX6Dadm)K66oo((v*GhHj zi+AtrBJLkPdFITTb?f+ecx0yB5$sraxZxST)gF;{6(1HXSkUk#o~iM{kxpUI$fgTl z`{eoa@4pY2H)l>vOw1pyUpxW-W-D1*&OH8DFu16wXw&A+iFa?^z74wd{%BHYcsR&m zXLgmoe)Q;3-n~6P-InkQxVpMZg8^Ur;ip9p^MCLjbbNScXYu*@_VR0B4r66yn^kK0$Th6V--g0AE2UA0Qf+}wPRj>V=+ zXe;LP^YZx4@2UO{T3oz)xAp9^_x4n7p7JbsnNQ@-B2}9?rrFnietsSu73J0|_0{TA zE7J1&qCQrUcGr!^X0|F<;&HldYwISA|NDWj%D$(HJd?aJ62a!+5LPndD0{y zn~lqttDBl`UA#E?*_oNMX3binxx_RqJbe1Zi3``SfB*93&qX2~b3s71EwP<>%M8ckkb`v(4YWd1GQ?vP7qS%i2^^O-;>(mtWf2+P;1JR#?qv!qvv(k7IY2 z`344Fyn1!&!Gr_XI5{{D2yn1SFtGE>efjk15dVC;+Er`T#6(1JFx=RlKY!!KkI(1V z`z^n0o_~*r;lQ_0RE``vq-0_u!my$Gd!DniGdnwbe0;p6<<9%{|795-ynQPxEbKf>Tu@hc z?dtILLcwd+u3fxn(S!Fhjnn09tEPmQYwX{+F)%Q2Pk3Sg>Y|j#&5ZUAva~ z%zX6hnOW_x605m&kB{*#stL-Bi;ELh_lwz4uyFI{&6_qAd3$p+BpmG$J>1U!{p(j# z1A_zuiM4Cjx>)Mz>8bnAJHp>DXPcFns5sFh&b_X<*m&~El#LP6=6NB(!KcriYrAe` zVNp?CJ$vTN$f&4YyLRbCZgO#U2Ca$>ntJo*&CHaPDf8#=&%M3PviRA7Bg>YlsZEv? z5P0zV_3DKS6~($!gFUiAJA{Lm`|)ydNttF{S?JvE5xk^f`{%1yuYTCDcWZIx)dyT3kOL7?XIS#zOI7KRU>&)e%qZQ)>e z@c6ND{ym$Dx3f&M|NQ;S2%5=Qx^(H1%7-B#Atz3r+`4_cu&}sZ%#P&ad=>k8dwU~v zrd{QoK7Z0AruS})3@1;X)Dh!m*iiod-h&4TGj?QMUA2DyzgZgbVY6J60>i`GJCim_ z95&FKUj6ixXmxeLnGt= zzrP=DeSLj>ebiR2xZUON;}{&AoSGIbN&>H6y6kUnTk&B*NO%7IeYH0?r7|?ESOMCJ zcj(B11qwAO^G&nEA|q$!bmjDNvM^cAjf;-v23>5$$;r7%)1mFkm5|!n+CK*B>g{fe zpFV%i%;2HxzHP1NZ9jMS^xNBVg*sb8KsQrOnL3q`AuB6OL_|bI$kWfSZ|l~rYpOc7 z^L`R@p1`=)Wg~1FIT3Ug_L;QJ4~3h~&NkQ9(9ntBCv(`qZoYla4FjIT$9kp10|Gw0 zTt5HWl`D64m7YF!40L;loSa<2S(o78;K<0CCsVpyl)}TWKRrF&zV_FbcXxLed~7+J zmY$Mwz(*1&5&>&(F?^ii%F1I#sB1$+~rVdV1>?En=Ei{PEGz zS+k^8id>Qk4h=0WEZn$p<4ogpKL>{c>ho)w5@+Oei5z+AenaWszkda-U4F|?NA-n7 zfBsn$>6;Lpe{)l-)4~Z^PhY;Qd~~F9(V|6@CJAY4Yjd?8O4~el&YYC1&I)!8zrKt4 z`ua|tIyL*+nuGFo@w-Yo&p%I=m^Nur(XTI=!NI{Z)~#A~>N%*7=j7zHE&u+#%a@Id zpZO#wKfZG1%1q<*L&cXaU3&BOt)_?<<~|Bv@Gc1LHxg}2mo1xTS1ZMLXGx{t)G1Oi z3eTQB+n#sVs`%NN9fgnY+_~dX3fkTOpjC!1{o|vf9}YqK&G&Z{I{W(OzP`40hl9l) zCy%8^j~&~!W5GbGV(K zo2BXc#QF2)<)x&s$gXlx^7QoFS@4jl{cvG%aWmi4!w*3#4Z#bl@9(dV&vM}5;`;RY zbF>I2HiJTA}7kam9F-lU^k8zas9>NQE91d(G!pJ_c>af7!KUsUEbT%bLPyM2TjZ? z^8)NZ*9#v59ly9}@nSm(sX3Y5Tvu0s{gp|~-f`?8kv)lRQ>;C_%WjN3) zZ4T;@{fgOHbo9oJ9lLi+`zIPmoIH6FbCPkB<`Pr0%1=-3+=*du@b>PWI5DuabZbu6 znya;6F1kxfO8!{5aG_$zj4MScw`YY2?^(;pu*qse#2VxDa|{ecMMWYaB7XDje9wq~ z?2|lkp{3&Zm-{NWx99)=a@oIAQ`x<*W%bp>#KaJ-tLM(0yKq6kZsIvA&Zy0^tL0)y z*cfs0?+$tmgWaG|o25Wnw5PDGAUJ`62Sfb=SjB;cFrsmj=no%7RW52Az{5 z(CHGq+%GgdeEWtC2^%8{T&3GXW-VTvTvcUdgLPW%!sLe$5fKjh9H7f_+7h>J-MU_R z|JJQnZ{3Ot4!(Ti#EH9iK^tZm8sejagBLGaq$JkO$YB5fkMS4P3HQM3iWb>1FlcM9 zW@hKxvURJag+)eow(-m}`TPHhF(}M-ib}RFdlL{4FvBc&R(H2|Nr_2jm&ntnPer&~ z6$B0({`ISB$4dseQ;>STY5UjiEtjrdP2CvL*w`4n%x9)`x!xIZI|au*$rH9qH0{YV z0PUUEo1UGQw{F1#hTvVhcFmeS+r3w+H8CPNd2wGKUt400-TsXmFJ8GaWk>L4@ZORR zFVL>aOD{`yxLmk-^X8p9J~5wPDzBg38e%@@7kGzBQbhs7fywIrPrw^({%*R|5fT=5 zD4i!i;P$?!-A5l?x)fw;YI@Uk-t~t!H>ZOl-#Zc91dWWmdHHg4{x?A=JU6d091NpRNgXjXsY_ z($8uKZ|~Fp{{GItzwhqFix1zt0j;_@w4rc)kB7>n$&;1y1YS+QcQ0-wZ>&a)B~#;% z@DB^m=-$XNu!*&uPxjE^_}4F9fYv)PFmSaVdRk;`Y|O||{On9%c=&Mx9c$~`H*Z>+ zn{Qvb^yul+-p&+OyY0*Eg$oueShtRETcDE@=w#28 z&@1=4dwTX%e}C5@sNC^<`?hUa+1ci1W>S)poGeU_q-`uf8F1CANnSSP@8-;$8M*(L zj9twPi7P1&z}-b1ot$fHB9BbDyxjlrbS3agDVw4v9!W__VPV&1Px_w~5+2UZ%4%wE ze)zj>eEb83i&w8M4O*!*G2`*E-rL)9FJHZS)W9b`{{LJ}2NnhaDJibx3tvkwRiA%% zcX#@k8IHf!cZ=(1WoClbINiQ|`^b?cyLZn%{y1cH}U;?daezHa7P6KYz4a{Pf9_M~@x5x4XRmWQvuA#h-7t z^Icd2c6>6wa3FuCZuGVvKYlPUs0ejVoqF}r(eA{CxQQMqDJfGXOgQlT^Ua*H?CjS^ zyTvPQ;_B+``j0ou3+%4`uE(%o`*w44b8|gCJ~s^phBa|}e_dGUJagvEz`(%s^K6?t zuU)%lX=(Z3{f|i-H*Wm#(;_!FSA+{R;OC#2nR)R32X=-7(d;wo9v*7-p04*$@YBLS z&z?Pt-kx_*L_$U6UtVsmuNMe39Sm7AVd}K0Q?K5ceXRJgm8nrdSy|cEHdaMw z>h$Tyj~%nC_~5WD=D~Y|GhAF;6`>3a@TKgH?C}$PC$2T@beS}NzPzX?t8?DuWgdY6 z0Si{F=s2x%OK8HzIpSNlu2H+bF81|{7asop`I(uDR~K&CVxp$@?AzPhN)tI40)m1T zEnj}U{7KXIgVCU6Qm^Lw%rfb$XzK0d{r8bs$>0Jj54Yk(j|G~`mo5c`MuGG5b90N! z%h?$~%MALm=gyrATG_{-09hXUfR%Ae__~;vj~_EPhw4OZc<|xjVFm_$ef^a)R5fBO zGk1Ji=$4V8(Q|p~j2RZWx3=uqVIdK2Z)YdB>)VVO5}RVKva(5DnVFhxiL$b?3=DeHS1(>1 z92$D{_;#y48Ox^QpE&U?zrHkk)vQ^w3LhWyonvwF>eZ`Pu1xt6D8t}TT58(r)Oc{W zf}EUO^!B`3-=9m&YecwGUtL-G@83TyEv?JT{Xu7JH?eY0nKA`5CLm>QZGHRBofr*~ zS+i$9F3gxTd9tssuX)amgxp---%X&NO{a^JSohYnv$Isar>$7MdiwO~rdoqeIGx~Iv(;vAW2Zae&9lx=etEnBkeS7vE=09hDKhV8(>z3TV$?E>| z1pI%zSls{V)29y2t5>g{pKotp^yI|z`SpG3eG-O`K+`7W?_xHm@%n%+wV19G$;80H z&As^YOXIXN9bH{bzFUi)p0cg}#=uZjU44GO{r-}dLHzvurKP1aGIDcy!?!aq2&?<~ z`1!RxHvKqFfMLS?`Rf-gnlxp~lo>NXBc|*3|BLeT1D*cK&~WV7v1WFD&>aoyS;9g> zrc9ZVk)7?#9}*nQ?5u8SX{oBJ>X^ySC&R(P(Xi0s!@YflkB==_uwc?8Azxo#iJte% z=hrnQ#xODntND0%dMd682@G^xetEiX^f%DqQomjB&h3hV=AwiJF4DyGp-(`)07=Dro8S_rv*o9{YbdEe(386Rabaot+)Oqk!@MG`IWl zp*J_D^OwY0C{66}S}Gr~Rp~elB(8$kk&Xr>=fz zG`B;%#VYfX1H;E4!63cdrJZ(uOA6}tNrbd-A4Y|lP4GZ zeVVhm`rH5b)j=yYx+a}|`a!nPLS}RN`DNnrUuJLedOSB|ZT$XuVe6)xOfg`{NSMVW zym+d1__>+J>2GgseGu_^`|15xTl5VK1e#WduV-5?wf?%afWU!C8@^Q7oIH6_;nd98 zv$;jfcE)&mdVW}a>+W`TDg``Od}Ah=?D*Ua!C0 zerDqlS<5^7o~`A)%-hiieJC@A5ZzfF=YIO<>4h{|sOx%9kJpbOB z%P$=s&e2|AYiD=w?p@GM4q=vuWxH?Rx^?N&r314bO>~z_4C6UH_4BEz_w!xc+;-i4 z_kRC>J0qh{o$B*;)cpK(;>3xkr>E!N*}<6HpmH*HcUfbXo#&(vUzI&UYk*ni`+I`V zacT-$sluV8prD|n*DwO1z!32`MI^VHRt>|SryMF ze;!8xtGRiXm-*hW`@J@9efa9DSzBi*bbS0+IIW&%yU8S#@U>B_wdorpjwEe7m|#)+ zYfIev_URn0PGPp5lVUcdaBi7#_~C}AwYj;u8(cr+Pp|**z;S1c-c&EnrWr=5Tqe(U z7C-0W;!;>~{k6817DtnTRBvKp;+lhDp`oc}v!$g#;7nSviwldRfK+eV!$Yk?oh=F+ zGkwZlU0M0}_xH_8_iH}$Za*3n9K3tiu4m`xuMg1R;^uz1PuBd9)AGwxr%yMI?v(Ss zGx6}-?0fq_8)E+^?AThg`|h55PVe`AmwW%?zy7|-CzmAL-j-YWpSvUQvW7_4ojWlB z56xzu1>Zgq%CYeI{QA1b$9hFvd3kt1qbOU#)6dRw^=DKO;`E%PHT6}m`MrjYpp}2# zY(6i;=bn)8;KT`z^$lj13)XJkD*EMKzntx^oSQ~rXE(-Ju8;Zo_gJT}`ld~ro)lHq z*4jF)Siam{Md<1C=c_}sS}q(p;*yb}QS$-R1F*2DC@B#UYvNFxeO63ZcysxC&=kwG zX<{6p>7Na0t{k9EOPrjXa{cP|_VJ4^&ao=>QW4r}AR#4{6!z?4yZpMfYg4a&XcdpM zsQ8eOm$xo#wJS&F)>}Jv?3k?XFV%Z&u66moZ@02J6gBEoQdBfFIK*0GV`CK+6@`U` z_4ohzq`iL6p_<@jK}PwRTmBn5d8`asb@df9JKu$Olbf5HnHn2HKZ6STt69H3tX{v5 ziT#YV=Kq`N^Y891*JtsZG{-z&&Nc8$wk)5!hX+Rq=)kfBR}W(o6O-g)J+{@~R)lCx z_1crc5dM_ouQVej2mMbaut)A4_-dwpLVhR1ol3 zdgR8m^BW=+o`jmaln?psOA$+0beckNnOqr-$rlRiC} z?7uF0d*33B_QQt7&wO^AIWBr(-I_HuU$2HQoUm$@)(*Fr;9y}%$&+uKTArTz`Q+4l z=U1;@9XfPq)22-i3K9|&R8&;d)Q&wYP-scem-+MhxP1K_>vFv$AHE9V{Xr{RPAi+u z&OO>CTCkOIk4eq$RR^T15)vA=6*aEY(bqqJ=FFLsCmS!DS?e+bd%OJ1JDyi3D!aQVO}v^_x-&-FEGJ>+ql&%v zK71%xrrR5}w(i-?^miL-?hEf*woL8Tjf&ILbPWPBudR>YU->!h*M~DRjS~|SITTx+ z0%Kx)0;k-}@$>Q75}|X4WBbuFX`4f|TIUo#I?|bXdRn3KorR(C@%Fj5OnyzUoL1q^ zw|#x(@4j!T53e%V>fe%Xxkz>60d)z#MT)dbY)|9o_h zj+Tx|W{uGkuf4i&|9<&zqCGu52I|jr+}zzCZn>RUQ#0qDma&D!i^o3A2M<^seEhMb zwDh3q{oNfWQnRA1s`_YnPS9oEb9|IFi1Fcl=ukLyN+^1girPjSAz|D=V z*xR+Z_;Zh>@r$)#9Evw|{@u>s|M$yf|A`YPe*E~cTTHj9*YgfXez&T+y1To(e*8Wg zYisGeq5@@|d-eZopOyJOi+BXCg|4+cWk0-@84}zHb2WIL%`-4FQxo7|VrI^N8l1E- zLP<$!hxDI`_UV1M54MN5UwHu%?A_ye9jO2cObz);>_Fzs7Nyw`tyU}(9qD35ECmaFZXrv`{P1FO8)%# z7`^w2+{v}c7eAfkJ|`w|run@3{F@C~%N=FjKzfq{WVJMUy|ef70!g6Za{wV-qI`uo$X zHWt)|l~~1QWo6aY?md|jwW~zaM!;c`N=CGzUB9r@T)*(xSY9!47RQRcaRHZ=I1Z(4 zHZ?J60bc;`#P^_dR-x5gas9YCMyXywL6gp=b@%tHb2MFFn)dP0Q58?6mQ9;C`>I`D z>OEadCt|{!IcIVg<=);lb^7%EU#~^m+S+DjW(xfI`~Cj;dA8Q+=jJS*SHc)+Z9<=VAt7cWknH;<3cN)}Kb~^UxNp6)R43}(Z3=IJeEp6@Kpdh;+515-2y1Kjf|9-c- zr-vua*U8E0KA_Uu`wg#n8%9yxL( zB|W|Q*sFE1yW^@}stV-#dU$wvdl&D%o4@bpv!&kCmjr1#X_%RPdvvs$V_`!>gTMXX z5Ur_NQ%^~o=b4zA28xKv$h;}Bnwk6bYn8XRxBb5#j~6UZ*cidXCX~0m`uDfDTeof% z>RbZal)I)!+L5DCdSi@Uxz${u&LxW%A5Ji+*n98q@9)Aag)c5BuD=diy|G!TeE0wV zmId1mB&eBh+_>?0pKP+*GQYW}Y_7a4sjRGYTDW23#)*qoyuH0$-mYfHu3f*vn4Z0e zI|WMayDvQbuMW{!_cyl0>aO+sJ&!+D^te5qsO88_C?!PG6b+lW&*_p?{#^%qv-S6Ms*vQ;6>Dl@D{O=SJ z_Axz|=skAfLO|Y=FE1~1wI)42)+=ylQ>u4RP*6a?gqu0*R2s z*MC*~_s##ruWwE?m|=Z%`~L2O2?87}dE2WqGBj*#{#Xuhq|6h zoY^lE$N0HEE>E_5+Wr3zavBdN7)bnokiOGUf`{#~{2W~aeDwVP3_FiMQtrHRlaGOc Ofx*+&&t;ucLK6UGF@%Z$ diff --git a/doc/counting_iterator.html b/doc/counting_iterator.html deleted file mode 100644 index 63136f0..0000000 --- a/doc/counting_iterator.html +++ /dev/null @@ -1,577 +0,0 @@ - - - - - - -Counting Iterator - - - - - - - -
-

Counting Iterator

- --- - - - - - - - - - - - -
Author:David Abrahams, Jeremy Siek, Thomas Witt
Contact:dave@boost-consulting.com, jsiek@osl.iu.edu, witt@ive.uni-hannover.de
Organization:Boost Consulting, Indiana University Open Systems -Lab, University of Hanover Institute for Transport -Railway Operation and Construction
Date:2004-11-01
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.
- - - - --- - - - -
abstract:

How would you fill up a vector with the numbers zero -through one hundred using std::copy()? The only iterator -operation missing from builtin integer types is an -operator*() that returns the current value of the integer. -The counting iterator adaptor adds this crucial piece of -functionality to whatever type it wraps. One can use the -counting iterator adaptor not only with integer types, but with -any incrementable type.

- - - -

counting_iterator adapts an object by adding an operator* that -returns the current value of the object. All other iterator operations -are forwarded to the adapted object.

-
- -
-

counting_iterator synopsis

- - - -
-template <
-    class Incrementable
-  , class CategoryOrTraversal = use_default
-  , class Difference = use_default
->
-class counting_iterator
-{
-public:
-    typedef Incrementable value_type;
-    typedef const Incrementable& reference;
-    typedef const Incrementable* pointer;
-    typedef /* see below */ difference_type;
-    typedef /* see below */ iterator_category;
-
-    counting_iterator();
-    counting_iterator(counting_iterator const& rhs);
-    explicit counting_iterator(Incrementable x);
-    Incrementable const& base() const;
-    reference operator*() const;
-    counting_iterator& operator++();
-    counting_iterator& operator--();
-private:
-    Incrementable m_inc; // exposition
-};
-
-

If the Difference argument is use_default then -difference_type is an unspecified signed integral -type. Otherwise difference_type is Difference.

-

iterator_category is determined according to the following -algorithm:

-
-if (CategoryOrTraversal is not use_default)
-    return CategoryOrTraversal
-else if (numeric_limits<Incrementable>::is_specialized)
-    return iterator-category(
-        random_access_traversal_tag, Incrementable, const Incrementable&)
-else
-    return iterator-category(
-         iterator_traversal<Incrementable>::type,
-         Incrementable, const Incrementable&)
-
-
-
[Note: implementers are encouraged to provide an implementation of
-
operator- and a difference_type that avoids overflows in -the cases where std::numeric_limits<Incrementable>::is_specialized -is true.]
-
-
-
-

counting_iterator requirements

-

The Incrementable argument shall be Copy Constructible and Assignable.

-

If iterator_category is convertible to forward_iterator_tag -or forward_traversal_tag, the following must be well-formed:

-
-Incrementable i, j;
-++i;         // pre-increment
-i == j;      // operator equal
-
-

If iterator_category is convertible to -bidirectional_iterator_tag or bidirectional_traversal_tag, -the following expression must also be well-formed:

-
---i
-
-

If iterator_category is convertible to -random_access_iterator_tag or random_access_traversal_tag, -the following must must also be valid:

-
-counting_iterator::difference_type n;
-i += n;
-n = i - j;
-i < j;
-
-
-
-

counting_iterator models

-

Specializations of counting_iterator model Readable Lvalue -Iterator. In addition, they model the concepts corresponding to the -iterator tags to which their iterator_category is convertible. -Also, if CategoryOrTraversal is not use_default then -counting_iterator models the concept corresponding to the iterator -tag CategoryOrTraversal. Otherwise, if -numeric_limits<Incrementable>::is_specialized, then -counting_iterator models Random Access Traversal Iterator. -Otherwise, counting_iterator models the same iterator traversal -concepts modeled by Incrementable.

-

counting_iterator<X,C1,D1> is interoperable with -counting_iterator<Y,C2,D2> if and only if X is -interoperable with Y.

-
-
-

counting_iterator operations

-

In addition to the operations required by the concepts modeled by -counting_iterator, counting_iterator provides the following -operations.

-

counting_iterator();

- --- - - - - - -
Requires:Incrementable is Default Constructible.
Effects:Default construct the member m_inc.
-

counting_iterator(counting_iterator const& rhs);

- --- - - - -
Effects:Construct member m_inc from rhs.m_inc.
-

explicit counting_iterator(Incrementable x);

- --- - - - -
Effects:Construct member m_inc from x.
-

reference operator*() const;

- --- - - - -
Returns:m_inc
-

counting_iterator& operator++();

- --- - - - - - -
Effects:++m_inc
Returns:*this
-

counting_iterator& operator--();

- --- - - - - - -
Effects:--m_inc
Returns:*this
-

Incrementable const& base() const;

- --- - - - -
Returns:m_inc
- - - -
-template <class Incrementable>
-counting_iterator<Incrementable> make_counting_iterator(Incrementable x);
-
- --- - - - -
Returns:An instance of counting_iterator<Incrementable> -with current constructed from x.
- - - -
-
-

Example

-

This example fills an array with numbers and a second array with -pointers into the first array, using counting_iterator for both -tasks. Finally indirect_iterator is used to print out the numbers -into the first array via indirection through the second array.

-
-int N = 7;
-std::vector<int> numbers;
-typedef std::vector<int>::iterator n_iter;
-std::copy(boost::counting_iterator<int>(0),
-         boost::counting_iterator<int>(N),
-         std::back_inserter(numbers));
-
-std::vector<std::vector<int>::iterator> pointers;
-std::copy(boost::make_counting_iterator(numbers.begin()),
-          boost::make_counting_iterator(numbers.end()),
-          std::back_inserter(pointers));
-
-std::cout << "indirectly printing out the numbers from 0 to "
-          << N << std::endl;
-std::copy(boost::make_indirect_iterator(pointers.begin()),
-          boost::make_indirect_iterator(pointers.end()),
-          std::ostream_iterator<int>(std::cout, " "));
-std::cout << std::endl;
-
-

The output is:

-
-indirectly printing out the numbers from 0 to 7
-0 1 2 3 4 5 6
-
-

The source code for this example can be found here.

-
-
- - diff --git a/doc/counting_iterator.pdf b/doc/counting_iterator.pdf deleted file mode 100755 index 21b2d9656a4acaca75041b05d5cf5c283d7f675a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72583 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%0D`TO5*pS=70`Cj~Tzw+y= zzV=vNn{j@M>FQaNLR{wtUb%8lLL)W*`I!@^j+|l_2oFh4W!zx2aYM(!;GnMN2Dfw5 zzLg2NopZ2b(AL+NcHqkRQ}_AbDeA0fWKp8@F#s{p~DZ znxShWqtj4U?-aw3*8V+ptNCByM~nv5Opf2`nf5TGRa-x(pD~&Bz?(PUmd~C1b*`?% zf&E7R1UHv6{^k7e=W$Z<|K-W+$|K#y7hJY~e|-Lf-J2$Umaq9P`q%mWs-*f3=>t0d z+V8#g{G!`M^!&fDyW`}1 z)AUODxi8~?>=Qe%|HJ&&AKdq?P5yJ=_tpJ(sQl{wGU3y|f2{p?s9gQ^{tvOIp6SqA?yr;j!_eJmg z>$t64`}_V6cTYXmui5_TkNCg$>`gOf?A3zh|`Ok|37?LCpQPn zmg0ZcD}UFm`@=swa^HL>hXvLbSn7VZ@8zuD5b9N&F>`&&!4gXm*&Q<~z2^iuzmE}j zx)5Zu!}sHiJ<508_I^utwPO2Zcg3#rwsB){%JS{6mRzZ9NRD}R==HwW&;OR3H)DFc zy2Q2LmVMLi1@RiPXFr>(&v|fav-IOsPpj7ENO9-=pF%QJ?Boutnb=f&xj6UFG{G}R z*XmBqTP!FRZKYqO| z8>TbMQ=N17Ei>6=w;DfqW+qB#dELEzz@yiL?Ldqy%Z>J^#!%_Wyr+(FtUdYZ$aIrA zI}gm9#1md(o1XFdidyZ$CztMP+%rvCZoWlhO0-teP7jR@>wA{fHGHkHWvkiy{OtQF z{$Cc~_+tOv&9mfO_q9JRtGQjfuB5s4Ew-L9&#?F9$*!8oD;xD+ar-}0nDgb?Q>97k z^j`(PVaeaw{3}D%?f0A2IXw+V1}Y1Rru0s}>#|0{enA^^l3JhO&O1Wg9}`yH{Ig`W z(RWu~-;b4HA0M;7m-G5kYEtbnnOAV@B(1M$7i;b}+-*?#{y@{um?=`{;hvm|T>&oo z%Dn;ZVh8_by$DKC^-Ph;2*3Wf&uv#p*D1e+w+!|D|6LDy8ho!){dRxV*SX9$*=}eq zGZ2mRlrsA)zCq-9l%!a~+3XtAgB*vP8%-3}Nz@rWFMVOSZdQcw%6yhbhZk^irPT$o z{dE11aeR+Z>z5_L8;&eeUvTa0GVWC+XO$GbE@9ZS^%fJa>eSz_;|{2rEL-!+-&WjX zTg|lTO={w?^OiM>?CQ#Ya$)C>%=6!OME0#+ZGKYg?eUq@bMM(67LHF%RufwMp)g>! zY=fQqlcQFv6QgFt&G=w+!Ow)<12fZO}OLYMa2Ukkb4Q)4FpGS2}J}n;%iN*8k|rxiT5wZ*7gd#i#75@$2TAwDnV$ z&R$X}eOPn#nM?1|3i?E!_^G&5<(xiv$t>ygj=%*+_m|qW&i+_3^zu z=^@;cFZtTr9J{tc?@^Jqcfk_l;?tU{Pcr7MeYRXD^SzpX`TwfDCP&W8O#RmN=!)LO z53;KzoM-Jwu*km@8?a)cOI{ZLgGq@?6%x1YZK*Mr$%WX%^E7*GrEapUR6I{O&2q zHRBc+cioZ^+`c=OjH2uYwPspCp7E^toBx=Jo zd#UZ4b9Ov;)8DXO(Y@Vfjg7Qk=iLVZwM*{p$vOCR#@mh6Z{|xl2<=*Tzs>a^k67;X zJG0;IjTSOZUpeu9t)I%jRTH@=D`C8BK7)k((N z1x-GGFcW!w{VwOGFE=j{y_c5-iz6n z{=1~yNLM-SAmHh4zdK%fRjf$O`jeL@oy<1-h95`{I-+~29Irz zUf-Ygq$gIWvP(iB@nq!Vwq}Ln(h*wEZnbW$l3R3c&A$7L&*w%TiJS3v!#hdl`h)n^&RdTh44&US zF){nu`L}-s=84T$es%uDs-UnR>l?)ib{Tv>HOa8bn02YJmD8m!QTAIZ+P-|-cFRuU zl!CFKR7{7$qb+L;100vE;L1OADf)nn-ZiJPIse}@?&h+rZuWV)@!Ma6_nXByb{
X)5+>_@<-o?JDY#Ss`x>oUD zp1luaD_Fp0^V> zT*>=&bYIHaV;ehO6;3@X;iYe2!ZDkl?OpZM4$jLNC9bDmy-+V-{N@K`eq5w-;aHBVoyn*H#s=XA(1U${sXRh zrz2BuWX#Av9O!oBXI76V^XXmf-+P?IxP?}J3wJVa)K2(%$o${ZGp3)6Pg2cB?frln)74#&pg;E;i*}@bbIXn`|Ni91^z2uB|?NGMe`| zw{xsdqF%4p<&;ai;mHmG`c) zPO|jR4~r-bzo4^o!6f^Q^65cYCQ=W7@h{!KCG@PKxbMGJr+ysTs#e#Z#X8?;V&(LT z*&@dc5=H*`h)o0=StlHD( zZF66E-{Yd{%*w0Z_(E4HY;CgBn|n@pVPQw1q2GH4lg^myn!0UsqgWyd z-k7|w=zH1=iEV0SYo_v4FJ(9GzkcGKhtb>R4^CTK?J!@GmVZo z{h4-{VbaFQQM0EmXL;)S{K<_@cBAL!um4K17*6e9`Sx|6W0`xYz{(xv44!MAMRjsm z@lQSe;K%d3TlScRKh}xebNE1>#B#Hja*<2LP2#RzSh&(%-l(co-9qq{_Lo=I`+0o? z^jf2AKJW7CdhqTbuf{#6-K9Pj_H+I>T~V_W&poCS_fMr)_b>C*V;>}+-(1zeQ!2nV zV@r91>*2+Bqk|pi6bqGH;5}--&xk2h&FZ7`so5o6{J%0iucv(}=ec+)=W5JhsV^tp zME7hvrTqNO(uZX(AI`8FXB@c4yO-_8uglh!KLs_S<_bi+i5}dj&8eHHr@|#ZWCb9i;mtzjv8v0E$N{$Tc$duKCp zwusy_Jfy#O){PAxt_#NYtg~0Ws{1rL#Z&hC!CK#Q-PYb30*|@uuC{vJCSfU$tVA`R!S}U?2P0%12M1 z7bQPAb^Nh~@}i3>wdKpFK4t$NTe&^$n1biV*BW63&6_@ayu9s1sNX(!|6nJ9xc5!h z+8a(cU7uMrTjhQUkKmkEZPA^76J~sDRD0KdW&gFr@TK=e9?ZOzb8*YAGYg+>@GlQq zs`e#mDCS>MYRrBG^?;E}wwU0HsPMx&6Mp|vkQk!n;hrZw2wbm5OIk?`oevfCz|`8&eY_J4b; zDx$sV-jW=iOk;80n7+adFZU@roJcTwI;)delwrjNrgoKv_d1HTtV%)U-sNWxYzs=# zeW>+FbEd}6iM_Hig*(?vwf~elUGa>)Ye}2i9rvBHyIMZR&78LU=VZTgQv;Xx+*7Jp zsixZ{nBu*xzvZLu*LAUiUe8UvA-!?GL zap~1=i&Fu`*Wwo%uUl%`CJ?v#@?N%h&BGT~+;L*bIOzYmC-%q+y-NSzUiDXA8RJ9wyterw%WD)ZJpwLmf{8GS6}SyIh30I zcV>2#< zH$88KJy+_XCyGBazDM>2gqzGuGG5_gc+z_Hi>&o?*4(Sqp@&ia1&`syXy`M%hh*Jdib|70la`t_ZWlir<$XFcjCrvL)_U{Kixjll{0Di+9}~ztedXR`Y~blPHuy38ylS*O-@cc zZK9d>JC7}1pyvJWom~^#d8Ji9O?LmW`udeaf$qzh1dA?xJf>4A$a8bK^6@N-zO8du zu9kJX7B2D0u)ZYI61lVPNbiCJhmoi|9W0zRYZ}RJ${MHltD_m7h zFjX@)ukT=2E-Z}SSzGBXGx5w@v45%O(%=8$xcs40B(XW@(~D{?*=6d+CL34S)&G0^ z)!~+e>ki9ne&LG08$Hj8|8~kh`{1Z{?~zo0t>1o{CC-)AixT$EXKZi|cfQ8-?cBo5 zMc$o zZ)rLI@clejk(cHE+Z~I(P4tYIF<0^b`PAFmq0JtrO6n%dw`jk%d|vz4b63kjCryo? zbG?gt71K&4wR?*Rr(Dmv{lHIE>-;9=@DshaXL9)7xMbR%G{x?sSM${=O*en0x^kHd zJUTdW#l?F0pO+?!Ezi36{-mJqhR|h?{tGVh?W?kL?~#k1vGAPug^>2XBQLkPC``Oy z-y5D`q1w0c;gQzr#x~~_Zaue`ZnyH%ws3WGdtlghdEP&-DTxa{cVB(V^e^Du-}}y4 zvp3isdRleiY{Tc7M+@BwFQ|BEuD&1kFQR^jxJL4x8wSsUg_gYd89MFB8N)*_uB}VR zcNTcJ{r2_`FL%B>zxsh{e_P<(-7j8iPCw7*KdtLn2BUT8W%Zjo=KPSo>inec$EJiM z_Zm~>*>s*hu3o>2XJ3ECuF7pG?7Mjs?&Uh)oz-ctzpcVR-|hVAJsbFomMitoFty(^ z$9Yzy_*Ay~61T5>m#Rc2++_YOn7MlSkJbxMRG3n3t^fRV@!4CO{>1Dmu(6yn`}(~q z2R-*c$r(nkE-#;TGiZK)-P1p%O0rS%R+dkDqD_8FZWH{)qh=VBY`6WxdUhw~9}{la zXf{4AkmhNv+i|aP?TgYQ-JhqQ`|E$-SA9j#R4ezWhYKfo&fc_eiNNQ_m)Md6e72~T zzby4x&tWk`_<(Mw**2D7O_sOROYT*R%CC!_t4WiKAU$pcbFRdh&y!u z<^GeG@BR|g`Eqvc+#R1@MJqbZ{kduD^Ow_}8=X%}YPs-H`IFu4lr_)K?Gb$0QB<~K zLbuXkU*$)P%cVYr7AA@Pd1Te&qq#g<;hy-iHnp34+itQJMS5PF7+v@^bm7S<%wKeN z9G!K<$noX7UHi^d7Hzt{u8^hCa)rn?$GuACHA0^l+a~EQNbm1H6BAK!sdatLSN1z^ zH1|e{RewJq!liP-yQS;*_apNwc{xgT59F*;dbG-N$`a1+D|{E2ELM82lvcPUQ>^T= zzM`h1>)8o)hg(A4ST)TIeztvWK>d~YH*4~EYivGmf01T<>~-QdDNl*HJ z6s2DMsaGpo_}Y7AzjVw4Uv2ewbKT~XLKhDjw@_numH1%iNr%x|FUDbKKZ|d_G(cUZ4j&ErUJMvOI zbKjPR2@6#?@0)VXx&5O1-sJNx6DrrOO=n3BP%$<3vVRjQt<99kIKN(-JL6laSj?_B zU%pgRXDog3V5Z}R&)3$9eoXH^C9%NUKk=os(f57% zsSDFs4r|CncYdgRY_vY0TK?rzmfdQfJsyYL70)aSo>k;xvv=Ob7P18da-%0x7?EI&p!P1#|%lmEfI^aeA+Fvt0>FS;$-rTAL|bl+M9oB z54|b;wR!&fREMJVC${f(z4&=O|mq5#reKv?Z%?_uP-PY zdbnmEDQuji)OysDW$!A@Czt*x+;%vA@^bC&RnEI6oz<4x+#_;~CwKE##s|N*O;Z;M zZD*OidBU}u_VyD#8~?^a9NqTW79^TTWNq}8sSGxl4G{&;-&M6Uj;=1s9KpM00Sl|2}F zsFCmAy5;(}B}{Lg@a9x>K2u~Wbk1En6hb3rFZ#i83~5{x%@$z9$*<vqeOK9K%{u$_NM)UHdeB6suknQ^+P_~t`EtU~ z4X16A8(x>}Jma(fkdQymlK!Pj7U^yH7NqmAE@3U_j}_Gu7u}GV8kRO^nZneK>pv~+ zoWK=Sv83WVtz zJe3nKvWItvn(Q_#(*2g8W^_lbDAf0Q^R<>KftSuFYpv4Ue1Dod^U;fOuVR)6>jlQM z$lr2oo&0X4X(^Y@l6QAk1TEIc{C({4$+%00x!PR*>}|6POcZ{2QX{)l=#0fB1)KWr z4B;K#Q}v54-`*tj{ONp=si{Bxrp{ko9xuSx_AsmR{ubqxy~*`v^LD&m*jK^b*qZs~ zy4&7+GYs_mU4k8d*nMB(Yq9RddV%~?#yyW%|1;?J8@xQ8WTHNMiR){j;H8XlqGHj% z+RfJ)T(3H7`ZDIho^a`Xeox(hKkd_ezBR7h7!6)Cyquf3fd$s zCuQ)`&`$V*Rmqf9b(8HRGMnZKCW!yl`6YHzd6Th|Q*z++%hgjRcG(_2+%oT0m{4oP z>YYpW?(4OD#u*y2!E)WTsf$j>MQ1!slb4xYBYLpUZgcUQ@2~0~+Y2uW+xJ&lb9r0$ zKNmt!hqHWtK2hUOv-Iqb zC*)6^yShMfmcXH!pQS&$t#{o1Txo5QWrbLC19%X$z}P|v%8sp9aHkt z6qofo;K#lqeubTgFF6; z2&4Dmn#+!+8;`pl-I&Ik#`R=^*KeD*)264Erru@uSNtQVn%yh^G>Ut}BjfY-?@pat zo_qCj>(%ALtGbWAKb*Zz(?xmDx7g`5$~Jp$t-7B4u72ew#_kPOt|s<5um5VK=!z_z zApVSfhc(BHrwtZN=4A&?JPhsd_mp|nzh_ktr^A#LmUTZ0JG@W%oqZdv|3&(W`7_5@ z7t18?2ew7Nl|A})VQ(Fx-Yl`>-FWl<4{fuf!p^l#uDxcqAx(BuE}vL9@7b2EstxRl zfqkWir9yYyo7NND-~RiX<*|v5Q#O3*y#Cdq`$ct(%EkVl7b7*IeD!9Z-kTYHHtSCO z-6ZFY{5&}|#p_?>#ivVJmp+c1ZspW@hxg}7e@jL=DPbIAWp>p`^*;}O_?f0oHnYOsId`ZyS;sv~llQZS!u{1eFi2rdC@ydVJ zvHR*o6Ei*)?mQSzdbUP+p?U~I``6x;JP^n;2?F`wJ_5Dj*_)QMwb4_g8`({e~ zt7pGoO|W0NT;{~(1ItgmZ}rG|FCX2l)%^F+<9Oxe8Q))Z*KRL8!L_CR=)~DFx#xR3 z+~syZ>=pj-*eK@vjh!`m3HGvHJKJX-m^N<3C?W z`%A-f-nPrXcV@2@F8!-nTKIpXxXz31c2>a|%>P`PEiJy(rq49{HDluO>F-m@OC*eJ z)bopZgpccOys};?$H;f-bGvxM6Sh{W%(D(g+^PODuNrq(Q=`Z{jJh*r!Vf+|76xL-rfHGmrZ=PY5Mc~Y}`z2HD-3F zr)f^9`dR4TcQ#W0@%ud{PlW#-T(?GH_4=qiyO~ZNe#^e-+NKG$i)z<=S#jKD@3nj1 z-JTV{FxfJ}c=;AhXLdQ+*y-=(MD{QBR9}_+F<+}?Az{h`jU!aeQ zYUksftLrneJ{4^$7S2rKpC$fg?H#U$?BfX?qRVbwiJd#=@rM48yPiL`w;azBnx1p` z&#rAdN-HWNH%n>liQ5?Yh41#6%~LC8+>gJ!!R+mSJ;k}r8LkbvlMkfj-e0|2>F$|j zw@;i%?NOUHO(x__K$Zn#&C1BhS7s}1iI{1({O~ue=?)3gD|&;u{#?*l@Z@-W!Ha1! zHLBV{e-fXZGPvTy-FRN_xA3Et*Uz&A#T~a{RTr5N7yrpnV(Fu$F8MFcPo5Tbsj|*~ z&7mjHHPv$WsBe(l%+Eb_b-+t8y=wN|K7E}F78T#S^7;+u!6J`$yEmPeTg|hxzx1}$ zSG7?>M{Y;BGV~_fy1}%#!7GBL0)pDlI>$ht-oqs;->a(wb^VIzhmmFXHXv=q* zAbA_FdDG@^H_X_wy2QuhBInA3x6gRHw|*};y|a9k`TCDVpB2PT-Ar916y2A;>U*}n zmWX$NtG=wy^QUXyx_#pB`{CL1#Q0d+<1YOt3r#y)-wE$p{U>L6{7ZW`_Fpa^j4q~e{Y?y$$4gZ7MphqDij|4oFJa6SZ>^PT5Dx_xDZyj7etV;8}y2;LaX8W|g=MQZ?m)7jfVsQL?f?b^Vwe5M< zzqJxS+n=>aiTpb$#CVBZ-0?L*A%_E#J}dt$J;l*xaC3vdLz#@G=!0VGUC!!<9XJJE zmu&mG{qzybicoXGvXJ|Wb!KI}vMBPfG1<=WbpMs~gL7W6vON&ySn~dThvt69Y4hZk zxp#)<`Tc#NucL9}QrY!|Q{67C^t7wueZ!bLeet1vG21@5PIO(G!Q^vVlsncpik*G` zL2JwIyZ>aayEm}*^i(~_jk>bNq3mHznM|mdc1rT$6+&Odzr0+|b&@;(4etw?^iz=+ zK6#1>eQ5iB@#@F^obnEx>2KDo@;JNIRrTGD5;2#*E(=#|)p6VM^~x__M@_!OKT1!6 zEw(h(CY}sgs?J{|9LW3W?3pXq7teUG=iX75689|M>sxf2JejVmi{7zQp63()|4RQF z>5b7_m_Mvv_I1OxB_&aR6|WsFGg`VoV)6R0DViU}CAnGGO03?mF80chH+ z7PNTB?7bW7RCM}(*58iR5epl6#aHuR=7}}B`Hl786_+4oxqurz1&)IMqV5!it$MIp zqkQK}r^9?V&q@T9+&yMA*`~v6KL4%zLf$Kj-=_ZW-J@{!Q}6$f{S8}xnJ6(X*s(e% zG$QH&x7}jPlqv2T4_0Z_h#&5|e|ehSJrgVAh!7Vc|ID)-4-;fQIfPG3EKp}PTW&mW z_i^_%9JYJ7i)yNN{g1iPpfE#t@fDSh)7E>v`#uC5*X0gj`%-#NB=~6E$*VhS4_WVc z5i<_3OUv51$cSf8w_ZpY+irUzhl3 znI6?c<~>|-Qv(*8{aw_w%vXq$Cz`0>G>|Z75uZ-pZh;a zvhDco>WeJ5)$(3MRrH;9eV4KUdq~+vJEOIpN1^rnIl@i*3+< z#G!O|rtiCxF<*ObaK#*Q;?=L*xx{VuE^ULElFp?Y_RX7poxyj3#fi733g?&(&3Vh9 zc4qr0we_dA8A+(`PgwuzVc_ZwhWo#AX31DPwC7wdxVGcG0_Qr1PyZ|%-u|k*_Bgk9 zGt;`Qsz)pi8tCgyW2$E3Q~qJ_?m}(ZXP036>+_6f7RtHrd9h;qoWjYiS8q?T|6h5p ztWo~!PKL%kr%yMYy2jaN+p<5M(|f(|Q+M0Vf0bSp>MwY(qxx}7_0x*xW51L zo}GR3i?w0Lj-^K`mR)7GJ!IRKv=*UiZzHGQYH*TGz5@)?^K4NzLQg$5(kh+&=SeO}m5HQda+$e?DY?s|bppt(&XY zerWX;xhGnxCpl97GuNtn7iw|tH`e*U;$3`RM^1EqM*ODMC?$cI2!lt(*Yu_=VqA43 za$?fozcyE!&8Drmpr3Y*xvtzazIQ<=M<~lw*Tu4b3UAxmg-I6O+#xw}nbdmzc;($6 z5BxB?7SHW(Ib&6Ejo7mdpNo=KC%!pvsxCSux>Mvb$6V!)2MT|FOIotrdDqYHzpI`} z-dpu7+D`mjX{Z0y%43Ht{U@@=82x!6x@`CEuI{AQ>bF+S_#iRGY>Lbyf#}j#LKAqe zxEZC}YrQ_!`O&U5P_yWxmRi=wqbEPyQQz|LrGal_-eZpm%yd325c z((uzlbC{=f^z~e8d^A-_Hg$v1A%8{n%!;X+!oCw@KkRs>Wzd-a>7Qs``?|d1=*80V z!SDBdC^XQT#@p7elRRzTJa6qUX;Z8g&NtoSDrm3!{+3C+^RH8S3q9kF#jNve56zmW z!LMNPa`BS2cXrOY(0P-+>Uv>)+WPHtHtF--{Qc!~w5ss84KuWPgeRGWtowN}^}bkh zFVnT1Z~k`FZ7R&#aCh2N3#sM=@h;Z5hcdfn+yhn<~+-V<{-OeyI|L6aELi^4u0xa8iFU;ood8f#-X_rOb`!5S_u=Lr+ z&NBXUdD^?#MNIGF-?IPhObybW{G&P6ejlGE?>5WWfc=^7H9NF^9dv$GToIee**Cdj zujj$TZ#^$>%2jWg|3j;6LE-aB`kNL_`gZBl4~bjEX@^>3og* z2^>;xOSYeIbcmm35L4J*wX#4pQ!~H(`0Xbj>B^g*TZMcQWxob?>3D0U2kptly6$aQ6A@Q z+d}N5)7SpgELfx5oN#8wtejKI8=sv&vH0SVA5OZ)@vHjHpLk3>Vdx}R9=UJvvcJm$ zzCHPSBdwzJu18_r#w!78QImOtPhXjlyKaAMa>L}$4`vu^Dk%TEta*2#xSN!4j4Gfp=9gD*p^X@zDK2|IEKYvQy86FLxt5J5F)a`_Am>P4t z4d$z!W?Of9`dh1c2Dg82VlVoU^OpIfU1XnH&+Bg$&gCs)RkmEK&xd}$uJ^rVxtV>Y z`f`_mO?H#_9BWi8oFI7OgXzu33m-1Cw|aZLgs<}XrC-~m4GKP-KQr?^`&;W9(?!ii zc-G!HV79gK@SR!Vvo;$aVojgzeEGf98;yG!x^DTCJ+vkJZ*kq)F64f9!N_iz5b z!((Fg!N`aMkKSGPFcmt|pCFn0c*9Fw^_H*RAJz!%5!7OJyL|e#W%?C>f~Q;W-rnXe>U^Vo#K1x zmukxl4!gNdZ6Ot<=YNO0CjHI1@npw!hDkdv6U3gM&3SQCyvXczvvgAx zoGSOJB~N8biZ{0wS|rg_tGOd{<=*Ajx_eHyp zj=v_UH5pyF$?^I~jINN}{fXLNKQDiMJ@@K`aOP?M`{jT9kACpKgGtTIL3zUFy=w(e zNd2p4JXbXBbSnCZuHf5WU@O&$+U8>nI%O4Qn~$*x$~GTU_=&E@pzRVU+kCvkTtc1Q zwVi!KLJSQcn*)$ebTu|nFi=2QM-Q?K)pbPd^D#C7ZM4ZRNli)0Q7}f@I%901pr4pq zkXlrnn3tkpjC2I5iGhNCL1IyA9{A){2ot_Dg@S&Bf_|ier2%4pk)^4E zeraAxYEf}=eo?A|C6c45zC8%MFC!Hk3x-BW`;ZKcOd-3JQX$b|XoTbn6H`jZ9(tjf@m5EzOK!Jha_M29{=~MBGX=Ei@+j_O}%aD+;uOR4k6( zy&KyVeer<+N7w?3DUSl~Y~A5KQHix{w{xL>*qyg&?~Bjn{eNzE?{`VP`AO$}hR3B| z&rUwKQ%H)-lsB!AdxNA0+nX1s&YU}>$1o-2+Le@a=1rS7Z1iNv$WT#K2o9Ituz1Q! zZ4ZVM=gyyJ6e(|Fu&ii!lfx7vbAi8sO@p)SQ_GEr$lXjYRpb9pJ;E(g&fu7H##grS z)UtKg6xcI(i-W5du-&-B_T<$`CXwyi+4uc?%_aUodIC4cBfd=uj2kvH>*kz^ZA??p zmUd@&9q;$4Z(4%F`~8Q+^8Efw7O^|VEC_P=wcj+JdEq3n1ovwH1*|884yuTO7~opUF~QDA}54JMYtKkq|iFYJFZ z#Zk;GkMF;&*88li{A9g%8L9kCoBnF2JXT8n%$Kq-?QvEfZ%ONp#(#XxGP?h6Gv3;{ zpEp8u>(VVMsgnQquBhi8JGy@)NFJImo%|)UpdF|Eixl%9c`U)Y>5P z)^Xap{fpoH@B5d%@;_&>gZB=H+4+x?zFVK*JiE2L_@`{cy}L4R9whv-KE#`{^;^j% zHp_o}A05^=i81|Oc!)ctbfbCc#(%PnTGfpT5AHM8DQMpi{K8-C{5ICMuD{rMZ|qvd z1@=Y@PEAWNKk=R+tm7_;{g=364flz^{NZ`~_N%4v|5HBnKfJH`?Ejum z4!Lg}_4ZpIWWLI1xqIfnI2O4TeOKd;%YV7u!ETj*@;=MnnOE$OaBrRZ-}i#y)cY(` z1OB%ESaA8mAKwc;cki>Dz4E*L$3o$f<~+rYZcB+zyZJ9nKJ%;ke3_0x}DnSj;h z^$J%`edce8s{Gp+pl#f-((*<99JeyQclGV{^2h)GeW;?ySoi$w8P=3%51zEWlP*(` zm!5t8zlU*ovqS%u*Z2ABUNFD2&&g!2m1=T$@9?alHFCqwgblf$rt_=ryY%z%QVyOC zLSeldwMy?VyA{y<>~X?dZg$bRl3`h;?@wJSFf0=&J7Fsqx3gvYzHs@8mV5<$zB4Ot z6`J4l{G3&{w0hdIH#^_DRLYh#{QP?Q%TY!1HLsqW3h-=-bM$}a`QCAz)ZQu2^ezdp z`Ydm(u1&8p;9tMaXV%`Z3=dsh^`p{jM4nITk6CzHE`oFZgXzbcYI2bo48EgEZ~fUTSwXNDK91-`x#r(H{n#uh5HBOIXuj#X(!*@ zc_5VKWb1}P5zlx5m5ybr}_+4Xwk-g%y)?#(BpHtcH=Q0d)%o5d`OslDae zt{JDMFMWJ|iB%|{;g|c`HOqgMI5XYWTKKso_-N(Djq>e(dTgilEVrqCG3EQ-;@5NR zzBi%YUqm-tr)|*sAx)`GTd@Ctm+OQ*%?8N5noi$aeFe z72ZNAkwu1DwgGDbZe85ytuA^)Oy;BgWG9C2O%ao`p9ap|>2P%ZgzW~!vsE8lDPQZd z$1jHa(20ymg}3M3UA3J*WS;Yln<;E>RgXx|h;b4-P-b+ju-N)Xd*YS&7qP~C)71I4 zUa7hCWs37}b*1XxNB^xYSe_%rK%=|1O(l+X`5|MSdS`|Cl;fyG?Ag^VlWSwC%j zcP{aG=jDfzy4t-z{;ZwTW_RM4$3ESjJ#T(2_mxWctg*zdrel&3_x&E@QiqE2#@ntB zkMrx>Z1#JT*(y1)hI#JWk8SKBmQD}E*qZ~y9KbbZ$y zcE-de@s{E%m;Ti*eX-ZgW!;nc^AAjvRWoTww8}in_vDG=(HlJr&QF_gzyH`bLzeAAnyYIhdwTht;Jygu^PL+#CZCj?c!*VR zT5eC>zMbI#+AEjLn^;`lXyn*%6n_5G zubTF)b0!$D%J$Vq8n1j-;4sOa-CHtcF582?Tl>Gfkvx3imfzv~?(@Wn8hQtfJ{L!; z>^yq%=1Y(EIeT_z#G8M%UBUC<_oe-MQGJsHy4(L|$n;uQJFG7HVL0zsCL2$sY__jU z_gC+V>W_a#`{!Povua1khf5yaA-|LlvoUO*SmfemS?;$dzms=rPwhPUi$nIt;wEE(R{=Ww z8$NZ}S3fkJ=gYpw^^uR?`FpmaB|5oldW^1ouIE+%Z5a30trY=?7xAp0^_j;!4{XznD93Cs;mzg&yPI-OZ{9)wHE#9rXIvGD(+#XJfohG|G z;DMioa6pm99V3O!e}7F|RFhY@j{Drb>4N9idpS+{xwpzNOJ1F~I*K*1)Lut^tyghU z&dyg_&*v~o@wVoutx@8;9qHR79XTwLL%@)suNuPW_q7WlC% z^c-$KC8YYp^d)B(hDJzC*ce{eg<>75mLzzuc*JM`!*sWxn$3 zn^IWzU$G6@RM5Xw8_FxmBvJ&THdc-zEEJ#qIpm6FNa^mHxCB zJ7dh&#oBCJ{O3XEO~&~(#x|$g7~>DWQ;Pck<*iE3ru3y-mImzkuyOlc4(-rH#eU6$ zJ~}_zW#nvE=Er)-sj5!$yEf5ZXQQ(4^Yq0Ie!cz)rCOb{C(gNH6jMHTmvr2$aN!M? z=aoI*JYSNqXzW2ODm*^?xYYg^f7{BUH_f5OIxil@q%Jhl&tFsT4P9+6?O_^~2 zm}>BW$olT0{Exe)T75I$A-__OWzC_L-8yG(n!mm7mhk4Y|Kpx(0+!Z`%vh!_Jbx!c zHlV3VCG5WNwWaqx_DVbw+;qB%N%g8}6~8+B2bNtI61G*oPMp!j@_zkM7EP0n)_c7} z?wiFlOyHWYEFL=Lm|(<@6=yE~ww^qxyr1{AUG|&HNpmU>O!j;(aMFfLyJvIp(hF>F zI~FEh`1HxqkK2u5Vb?LKvu!=aMpwQX)s@X$Ira83RYTp6e>^z&chLiu*<35i{?x88N|Ugi97x1XnLmik_-5We`%Y~%S| zyUu24%#HhQ`~R(ad~EVx&cDC8{?2f>-@i@z++>-GnDl7x#~)hOz7yUM>-nqHqw=ov z6Mgyru_5P~_ectw3Aq$CJ;=TBcA8LVte(f!s#)*n&3vJ-Y}wg%)?UVa4NZ?^GCf{q6|T;iG`DM>oSnzsW4wPY4v z<2OeSU0QtQ(BJMij%SlNA6=?#oO7P@z^$&DB<;(0v!28j;}T_G?Tvno9CR(kt<8; zj=HXCd_Cc*B3ED%(;g|E-#z;@RrCXr^Kb09yjuLnBqg0^$znGSgg9|C)^hefvwZ*c z)xL>~B_)nNKG5U0sJX|+&i2;I4sFpJhfgZ?iJ2J(z4}m~Dj9b;OMLzDg`1kAiuqlF zS!r_0gvRUKKB3|~2!&{SXXPj!A95VBXwb8fpN`<@a{697)>CS)g=p_I8q;O`w z8Lyo$hppWe10>8O@5KcMmBnoYTfIN&J~gk=`DcISH@dU+&ws-n4M} zy3?~Pf7Asov-aEZnsLRltkvc@p&ndoO%i^WPLZtC&~DN{E_!F}iEf4045HWhYu>KA z)M1{sWMaGd`##2 zEZ&En`MW+6PvZK-rZ=fNy=ZRDrcY^IdZrTm6Zhu7&CcH`BtCu8#^qVJJ{~ZPUU~eU z_EFAB)!yl0u-We^p7KWW|fppQN(b8I4I`oB*P zySsOJiqIo2{##oP|MQ%EBtzIkkzdv7!y%JXk7ZAH$ug>5biZmi=gReehUpdIAvfiU ze+7Q{_Vc9BJO5SBUfE7JH|^I`-s7~@Opu3Jzj{mAKAYbOUvj=I$#3J|zxHdYUPV*( zI`<=!4=oYNcz6B0{i+MIMK}EGJj%Lb$-B406Z^N-IG?I)dH>YokVnGqLW8g+WmoUN z7v%ReEO;5dI`W29R@`cN>8-0A?Dob^eJ7}#w^L32S!jDlgOJ~h;U70~-~M$Z zW6siN+tS{Ynk}q)>@_pHm^FV>U!tJxjclFZYrb_?MU^kS=?$~Z4N1Id_ek$(iu!># z#=S0Saw1o5e=o9K8y&`9`+V0`)7U8e_YA!=r+gK4j0mmW&lG3dTa>%g)&FbP=THZ$ zRUdPmT&%>o^d_poHKkId2$;ZAe_vF~(8M*k$vRzr8c{M9)&gopq{i4y^ z`BqByx0r5bP&L2%N*rkk)dqzQ# z+~IBpu3Jn#1-FNX0|l?yU4n4!V?)^USq13PSEWRE%++F@h_{? zn$OW26+fNJ;$2eFv6drHXPM8x+)IZS?)&+bhh6G(#+yCQ{jCGddLrg;oVz@9UAXhf zH50yXvN?EV-z2$3_Lph|Jc57TxRZMGmQ`qQj?r%J);88k5tf*?Z!zURKb?F0Dmkx4 zKXdE4ZyMWX=r$cvuN8mQCFR+l6aDFJ&bGH)D|W0cSohJ}x4M0=u>G=zIWBVdBib7h zysbV5E48hyw_AEiwJ!Dem0r^YHdb}~tCW5$;;9O(-_=%J*u`^sOLc|tv?9IuPVV<#c8g-*cu_v;OTmdn(Mt$U11v=N$}XKIZSf%l@00YQTK>@81Ql z3+HD3wz(5I*Ylp>*VmK0r6%8&=Xd&9TX9CUZ^aD{zlB>`=UTa)PU^VWA1;28dr$8A z)mQdd*?E8XR;l%Ji=N{I=Z%L}oohZfUq>tSzVW0_)BBAlOK2bQQ8u2Io4xMvzC5Rw z-5!q}QVphOa5zkDex1KCNm};nC0}znw+ltmE$m_^;!SRx71?PZlXC5fznFl<5+#HA z^3~Q~zqoDBIH>VIVRvm(=##hopEK6_EO}n*Ak%XBkkR8_o9AB_6|FL1GMl7YQWjfy zZP#{|mo=%%GmqS=nku=kIK%FoP;7VI>A5?WPAa-Cz)*Ir zT4v7YT#L*7w_Y7i5SBX1$MS?aa=W6$|?E>5DOXq%#y?g(8*|SHl9sD>Bty0X3 zsMTs!-Ze`iE8udM(~2h7kZJF3O%Hr5aY5^yM^@a-OLj$7v#S(;XjUzIs^}cf=a(7W z(9dkTRY!SR`-LDC|I@QrulMAwJ;|xLs9<}Z*og_=X$O<)6gNz&IJC&s_S4@#s@J&` zCswRh4tBQY_2a)EqVpsCOq1ZpFN;6?>HRv%T+gYhUn_4?#h;+76&HLLO8xzK?4ps+ ztKU)QdGE_LYnO$|$%TH=U9?!0@1~Bg-XXp(-)C0J%@;n|8C&?qSF$|my+lg;J@@?j z-OJ}L;eImlhTg5y)%q^X0@*u)cmHjAxp`g4k=6@Z*WS8h=gVsaNTim{_n)S6R9X7) zoSkp36hwwOhWtugdqTE;|Bs?m?M+%wmhQ9*-jp;={NInpE9Is=92QwJSDsDw+Ae?W z(AVuQ0=>Jh_cq-TPCXUU!Flm&^NJl?p6$&G4pFOp=-Bnn=w;TmK=sUO`4rDd=?RB* zq#|xPE&6GtDrY_MC1*a1lu^VDUc>9t9CmNG?31p)kxk@>RHM`ET_rKco-J9Sk>A?$ z%dI75k>Aqvv=H@sb6)T~uT0?e+;ehk+6Uzu1}n7FZtDm-eR1`0-*BYjU02kiz9pN_ zuF+nh#F4%4ub|(m+f_w=N590(S{3M+Sn@2XBd1bpwN3TvUkluSZp_$v)adrl=PSHQ zEcZ;!^;*^Cv;Oxwb>-f5zQJdH3QydfQZS?JY>IpQvY6nD4owHYJrjt^sQ;@!i|0Hc(8 z`#Cpomj1zgdwo{?|8wCJ-&fw^Hx3%H+kS05k$m`}dh9;W=L@@TPM&{mi`kLAkEX^? zxq0=SSf={Gsme8$%y_VF>%_R=KNVue0UD#=5d&=K8M< z*^NG?sfBd?-}7se`-yCmCv$eJUNl|J-|&{$ag96O9_Iqh?qo_%+fWm^=dzLUS5H3H z{pJ=`TTFI2{b#gU+OjFJY0mSnvHcvcV+AX+f9n04xNozZZi%><n#H_0TxYVn zUa4bqPMvV=Q-jf_Xm{4C>dB1^k6-0*9y?IHTaw2=X#H6Swdc*-EN@$cX~q=&$>6S8 z6!*S=`NIWFhxyO3PdAN7fB9(d&OejCO{x61=gr@ykBgf3`d<00q0xDbbM90hu{s(1 zRa^)34*#1THCt1j`4>Cyx#+u> z`||1ukw2o69Xms6iyY_bqt>7QrReBy)^UkjVtw#Q8*_7hr^MSGcD(bi)$wfP znP;&v{=fv=+mDa?7jOFz>c}dw&mwd}mOs-$>5}S(Qy<&Ky_ZYPOM4pKx&NezmfRj6 z#g%7fOsl^wwCw3q{l$}#CM}=2!>#*voSARm{|9p|m+ZP$5HHR(+1mcxtO~=Gi~SzG z`~Gmn=I1-2b$RwYd38AFq3PCt2B*#6Bs>fbSdp)t!(Ci-x-v8La+%&2 z?C&+Swx07T;V{elrR$2Xi~RraD^~b&<`Y-PT>X8P+{&}p7YFSBayr3s<`svfflvAN zu3LZj)~WcsGM4W@lL|erSJb}Mvv~b_hH_8Bi+864D}PQo+s|#cHZy^x%d~Vx==INc zk0_^}Jn?XHYMHk2;Yl2eB|_F`?vyR-HlD{S#&zhVYM*N>kHodfR|6HJJo^Q;KbHS) zS;;z=xl2)NOUn^fSLF-!UMwF})-d&5KJ#nK-la@#)A|0cNSYs!p z#ADyLUq5WT%$=#A)bQU)?;gP~?|9npg$Z93t(?BTX|aBf^l3klU+L$rF@JvMvm|9z z2Gfd|-I?!fXW01Y$vn2MS*^h=_3XeM#kzN&uQV#ZelK->ef`#`H`Cj;?bX>Q)Twx5 z&YrLA0qz><`*&7O~4uuv#c&{RFC9bS{K?n z_2|@y3;)G#EjjitjXkwa@0Z(ai#X}R-Ze{2OKjY?COojow7>a4#`W6|5#EC@qKJ+Sn&L`QL1LPs$bS(I~hX;--*V?bdyE zqo%mrs`WoD&TVTDUR7@FJww(cbk4Q(*@ipcYnZH4RuJegdNxyUtN-QG6@8({OLo8f zOQcZ}dQp!R0O=e=I`t~Uc8r!xXkq+7(tG3vuY2Be%R>N3(`!i~{YO?1f zUi{D%w(snZ*&DC3&+fl`zn^Erng{#%H%vMqyDudCf0m&A#f#V7F13YEXunkxvXf)> zr1fftpEQY98-&)ZjoKq2a4WjV{^6@h_qA4N%`PgruCm7IO4A$bdDHp*)|qIOeCk-B zuvsE$dcvHS%zf6oOijxVzQ}^g|8|`?Z8WuB|Q+n>kFZB;Ae=qY1zQnaGuB&wRN9CZ}^PFm7QnS^jshQY6 z*=5>rG|I3<-g4$Yz>3qM=5#&qG&FQ&b^E4Avrzu&G3$0a)s z%DOcB9i6x+CUE<0-Pg5l@9YG87N_!C$6jZ8clhMq$T#6y-iOR;P6b)KI%TdV8g}k& z&X3s7?jOGXU1}~TUwY}r<7LbC1^eB7Io&GGC(5bp!px2G9pTOHYQ6pHb_OfHT@v&+ zkKVv8eABD-TIStba`q6LXYbwuMTe&7XBn!W84qi1Ird_~o~PZfPMhr7 zxn{QDb8n^K6Las^iAPNmFH4@C7`vf=Z{Y`ne@7dfRSGNZ*Yj;#el$mA{lfq4U2`r} zGx=S8;#Z+q`!vWx`R2{6or2ECHrEKLr%vD0+Fi4+6p5or#w8R9w&5IX#?}V&HU@;No|lSd3l;m-nvGtBx~Dz;fnRY z9u;-;8cwr%cxS>-&tJL^@5~79@_hfys%VDA+6S$Z_MAGW(SK>q3a4vE_dYW3JIuzt zsWjow1i7Ohzlu2c7AQE}>h?Nb6~OiP&89i6i7zA$XZ;LXxiRfWQI>N%=g->j%tdz( zSnFgTQrrK`?6_Z*xBtK64_Y3^&zo_`ZfQ0D+k1k$PA_ac{9Sty!zb07pHA^{<#38t zDm4C6=#=VMT~;_FX7$d9@CUL-zorL-o!Pnjw4=)R-|C$=f4=Ltw)bZG@bk6%s)P4M zJ1G-a!MXMMu30xA`e(_vxZBy@zT=xCq zf8X}%&z$~8pl6=w4z0r9!Jq8h*Az{utM#_;U{tzhXe(Tu$!GTd{+8m^+~()==D&UG zyT8gU?e4!Ne)?BDJ=dAtZ!OH0+APP@^U6<%b5C;W&C?ELLhjGDT;aRBfA3YV`w~SD zKInB#3NTvcpm}QLt2q`Im#1Z3UnlY*?XfU#!^$n~et({t z?hX>Int1BTrsU`;MP-{ZGhWC3-Y)qevj1m!sa5?$g(L>OgRz^fbHth4!xlvzEzaG` z$(t%-$>BaRD*STF`JWGT_g5}om#1O%Nn@&{&)FXnU4OO4-D~pHZaw&Tqh0$^j`N=m zT`t{{de+M|m+ST4L&X`QYL?~RE7ecyaP^<+ldh;OXR&DWcwyetuXuQdYL5G}0QZm$ zy%(eBxfk9E+C0DS-La*YXC2+~{)$lhwzHO9owqVrau2^NstJQhdUDad8iY@i2Tb?f7 zzd258^}Ub9#e+AN%6JUPM{{!0K}k zY`I>qG25*v^VN2`@RZMw^`^{CZcx-c9Mtqyf0EO(zqjk3>H7;8h~G%LG5t!&n%%z+ zJz0F`UekoM2)EK;m9CE`gd_X~WxlEe8up$qRDZBtHa@X-<_g35-04z@YdmEi^}1`{ zDE=doD(TL*d6GryeH(_qky~=N_$tS*w|;Zt@KT|Vu7+jI70d?~e-VzJl$>YXl{x>i zQ5d7)t&=5dE~f1J5be3oxHqTNuKSXei{;OA23B5c*SfdI zo{q1xG~D+m^GJ5pubB!-TeXoGzLWC0l8G$4*UgbhzJ6V=>ElQJ?JZ&NCf03H z?pA(%(R%rt`@J*yn9jRbSUjD&HzJ++aM}iwr>8D{vT^z`fj!bjW6APY^LCroYg~Mi z`%CoCuO+&C2R18c@9eE^?Kr>1xc|_T?H)fSo1Hq&xIsB@t=N~dXU{!oKKE?OHNL6o zF;UNzFSf6qHaq(8geeYoOKR>ux}kDfy(Fo1oqld^+w!zt$D`H$ez#w9h6y#tMx^c8 zZoiASXP!ZEqU(thkvegy(>o8aW^IvhJ=3mYv8p)0tW5AzX@aHP9)XPYUys#m)##S4 zF^f9Z73sjXCN|)ZE@IXLWE|k!7gX$^PX-sN_dp+5Z==SO2)g&&nph z)1s)`*z%soTYrU?s#lw@9@=+cj+enKL(zU|r%P{g_JsYaxwTSRCGNU?^d9u#6wsjgqK!3uS$-kS+Zbo0PlsmZin8t^zH4~R*UOqW5Hoftl zq3-P?vj6(KCyI33`l7mG*R+<2wjvkv-`;d&`+wGOWkti9l}r51{w>}1PV$`Q(v_Fz z_@0joUC3gl`R=v zwtTk|-iDqzvouxY>ynukPmbpE+e|qV%wx8h=g_o?o+&GzltfZ|didNj#MO$vC zUM@5H!f@&Gf!Vj0HGaNR@~3Q4)v_n6RE@0uRUg#9_;8`ytk=)-owq&zt1|y+-1Vw# zu`5S5#}1#aMozo)8s`>Hk9n(K<-+N& zx$OJmym?->5evV1srEEWu1ycNeYz_{Tj=x84rAwIMZtxJho^MUEO@gnt?_K;p>KSG zv(@JtYA>57?k9P2c4x%-y<8i2?Ykqrd5&yy;o1)lmCK4(r(V6qdtI%^bE2u&md80M zvb(Kw7F>-!+0r(H(Lerk=h0QV*Dw2aU3ecmV?&jF#>^#^kCjfcWN6eL{QYFBLTreJ zMDYFynO97UZ|1JLC&{P3^io;-%_+;(6CJ;(ZJfVhYxB1YU!Jrv%lGsgxfXe6f0NMB z$_xn>i;o@Qd2x(SUWv))UUyhxW8ZZS1-QM)o@O{ zTeNJwA!Booe)O+X8s}2dcTL{5>!-n{CdJ1e<(-zzi2Rw{9}{@(Yw?Z~HY*r6hef^1 z7Tw|YW%2^%TaTi=4)A@9eK&o^>2vLILWSJ2N{_n!9Q++>Gn{liCLvnT5Y?+xaZPxHUrqGk3sz~;5muF2EQ_t!2{n7`EX z*6H{DU9b3=%BP?8tueflLDclpU`+V{_lDl|@`LB!}g&7CB+hdFU{?!%VKNy)hxBrB> z;95~h!Py_f9$Q@tT{9&?#F@!%PU!Wi4X=Ic?|!;^YVm;&Ee9t)Fw2vF!2K^qOmd;s zD(ge)8>NkI9y$4AMcJD};aav~#!b%s?lyMQ)Dpj6cX?L!B!chv-($8--`aPbJX|7Q zVaa_kZ^s|?s)cJZ+2T$pPK|&1yW&f1jNOYhU+2{SIg-BKbYJMFwy3(63y%4g|EQuIJAlUvom}^_{Dl7V2I$kw>o1GPm@! zjQzLQr?y4up!XI#In|A~{-{b5!uHWq>PsqC<}d4d^QO$VA}C+Y zz4KLasf*3$bqTJUdij_xK8`)KYuAp=C!9Z6{glg)yt|{A$J6Qmj71+lNk5X?E4mK8Z|k#}2d_IvWKs)?Q1%G{=)yzT#C@dy9Kf7CB(*lBx0St^$mq= zjxd6(?**-}F3Kz@$u9zJS3uhw0kR9W$``VAgNV%$mV_4bTUsEk{I^ulPgXEAK-vso zXke(IpQ>PJV1!U+Xke_MpRQnNfV^Pez*Ip$Q^C*xX`Q~Ip@D*ao`Qb9f}tU@cF=7s zpuj=es$pnorl4Pl$HLV00j9zTEWy1wBi{*30+%nXbM$r0Hr~?Kp3(5 z9osD#pylpFu6{?0M(nHKO}X?VJW?}3*R7bKUy}j4B*WN5!PLk^!OYTB0sHEA#D)z0 zMEzv_RQ+`QO#M9leElN*68%!-<>4kEpCd012Md4#4z#= zO!AT?jL-DUUASE5q@NSl#7$EIwjD{~j^y@NJvM2=rX?wwb63t=dinFGIpNQX-~B%O zckjCU|I7c|UH>}$Zhq$Cu9C%bnD~QFl!VTZ;^A9xVcRwXUWR4M_$E$u4Rn;5>!CRN z!3zbMhL^7oGc1v3yb!>iU{#=-yJH%kiBd3^)-n&*2HA_fPHL=-c?+yrvK$ltbEl~P%y0R1^UntP z&XmT_|FZt)di{U#cu(h&1@E=wP3hJ46= zUmYpl@aUgfEkoD;?u0iA0Uy|}uqk96WIhADrTH=PfvbI@h*`pa0#pz)VI zW%-BSZU1F9Y&29ga1mu&k(H6fcuOj(p>JQ=jr}J-)P-nyEUVwW>y7H)lkZ%VMwb>?jFy7caKxP7#-lR9wFEew4!D z?HX>{RVoe&x~^x)j>1dqtmClxk;$)kwJ5yARrYzE|(Dc4^(!S<7!I z9oo?x1C+iZl2R$-(GiRhGg!x zuWQ#BDc;f8Vr08PyXcAVl`U6y>CJ6C(lPhV@;#X|L$WG^EX50d9PP+spR#q!o73@| zAI$03)I4jRU{T6vniPG0^Q`Khucmwv`94d`rXbR5na>`>-*?WbTTJi${o%;E#;b;V zxP>#H@#n|tyceqavoxr8`e#n($6r3b@tm|)Ekiwg7i0MSup5HTLVFVzeE8$KyWmOoOYInS;nJEai}v+C#=kh`JZSBE z`pH9N6{Fr4qg7e2US+L3xy$##;~(oPOV`ik`oJWd>~ihnQiQ z$^Y8fmYsR)?Ql6*`uXp7byx2s2J_t7$B^z@bYk62|p9?nCN!b9YrHf|-=>&b$(py^JnEH@jA(aK>X*J09`9|} z?P}&#+Wu+e6#u{PyQP%RN*80x@ENBJo|Sx^*LKSFvG6tN_dDO)omrhL;-1MS5q0sm zNU?reh1F-_21Dymitw>&bIDgOBqb`f6fi9?_&OJ~dUrV(*h| z)~ktjTD$ru#kQ|o(B33*UjNRKb+_4m>jKXuJu`UZ(tn@l?VZ#Oj}4Cq z{^T*%Q&os9eDPV+sp0D1e{(;rXFPTLg#O2%SCfxb+qo3&4>PVgH7h3jluXLQBilLC zTK2|AWZ!vbGB@p)Qq2j@;(`=Dj(7eWUcc0=i29p%PV|M6eRkEw9P9bw4~0t~zn#3} zf!Ak~vx%8~CpR&Cak-iH_lE2DHzA_)t9_0vH|^)#>honnQM}?Op|8*09ow^R?Gf3d zUPr8%<8Mvd`A$rvPuF=-&c{#J?&upJscWCQH0NGYc+Rh;+ZMB>{2TW+ zadk}l6&Nl4W=@YorKe?mpM`ziU2QeEvY@!=QDd;sT#i;{?U?tg zH~6jEvTB*^rK-?XLC@U3ESG-o>&D61vLv5dJ2CCisp+>Ye2?w&I%jIBKA&&ry)q8X zZCgvcF73JSdV-Jp$M@&z-g9(HJ~IkZsD%@S#huBC;eOc^J&*H`{sOz>TUM|Zp?N|r5{k#aRo>AHUQX8R>< zR)%%@-*+vPy!zL8)%BYa{LAM1t@!O*pM0%+wwHm^Y0svV%P*|vOx$wJX1YgDg6g3) zyQMYyc5(|E>NGm^(^<|9`Am-B>M1@wkvlsdM9bWE^zhZD0`%Q{aJDDiPi$! zHj`ibM1M9ey1{;PEu*}W?ery=(<=AWYly>Z%(#UCd3hZ>#b)`}?D@n3Gmde8s9l~pd+ zr(U1ze&&$A&RgMg5)xPUAG6YbTz%GCH`M8!xN6JQfQt7&uYMHR9i!GCw9ZJ;%4>_q znm;TbqPdc9yUi{>yI!r0@vEcC{sK9T#LNYEcCFXnns7<)Nx1Bil+NYbLT4}^&(e<1 z{n}AxJ~1*WWA%l+uMr!IEZ6Kyogrhk^ziwwF?CCS3vBqh;AmBEsqwGAt2=Fts^pLS z+@gDwnSGL6-YWuKIYRaKfg93cExM;@?(3OYtLqcj4gav-v6- z9dA3&RtHObb7Q`nDq41ryE*EU_qO!DPTs7DeZ2EJTauDpXH{59e1Ca8@~3#8dfa}~ z7thbk%-tXPG+RXQUfjlq<_~5+j~0EeTF)bRVb#)q@^%ycOaJkgc;Knf=e4}z@rt+! z^^76ip?fj<)+UAu1`4oF2&DH4+CYrweo+(9VE`z7YtUtbKJdP^ks-WqZGv&|fQv_H zs2AvdQKtw)PzNSIuLP-YZGwLA0N5^6*AdaTHnUXFcU3S)>MdJ>ug^s8QiD6wDOkGD zSh~vw76k6rMCltF8W}*Z*)%jl>RlsunZe-#@>aBhxiP5w4C)$^icL*G0}loYpqnpE z4M8CdGQrpo6g>tCAllN{93pFG1feZW6iiGl6--P_6ilFUAU&p*CJG=7?|Osd0pvbV z&lJ}Mm1bP}pr`|HJU6s7fee&DHlCx!GS;rQp@Ah*-`fPL-^nSzLLpi~*VI@+7j#Xf zp`o#*0_dhs?7eSS{Y3o~{Z#!-td~Sq=vSh2z(Io(L0oorT&Z~}Am5pQ1V9XsH(?!c zOLH^WhHN7RV`DQMmqVHu7#VQsyAkSuPfd>y&febUxXMvL(ABXdVAT|rEeyvP6d7N7 zh;MKZQjiehVB`#CS>h2GxQaE?Ykkm^z8@F6O*AhlDJaNt|8@DkegD~;zn@#~KUbRe z@66tNU+rGc+W`Hn+|7A>JZ6X!4txI;evaVQ!3*M9u^g)MUKaA27ORb zIyJ2+m~p|WQvnWl?=ntkWe9K;wX76nt(?HIz_DoIq>p@kA`UUmkHUp`0?Lm~{3sEv zv>@NR@QCGQQ-f_R2U=PVKGq14beQYF&{O}mfVrnI&telhpEh%o6QhotGvk{Az6vFd zKc^>}U7W{q;2%fw-PnIIpAJmC`(hbG;Vw_khCD%UC7~4zV(I)$(i2{6Ehtg{FTL!a z-ny553KBQ0{!jXUcWM2a+g6V`uhgecm=k+P)52(h|Di`Gj_h9^_28dDyNckyK)2aR z-UpJebn>ytF#J?*DZhNA`q2ir3a(><8@8+NcvyG5(B;j2-3zzB-DZ#|J$c5*J^IuA z&wuu2q;#tX`K;9YKk@I>zq1$C8}7AE*`uDoJF(GW!55cbf1h8zx?j{;*ic1ho`<~v zS674X%p7mli~ekLMHuom8q|{t=P{g{{7yp0StamAG((kl4P&*C^&_#VzJjhFLs?a`(~&6&SjCy&fmEuR=~af%g#INc8WZx zvfr0qe(UkEl11UI4NtQc*_EDp`lkQD&%^oN)z|lH8A#PhsMuze-9Ks95(U>8OVgAN>Zt7S2=O~H!}^}7afscM%ewE}`Dfafvi-7b-7wvo zZ~X+VyOn0aHzy~Ttv61*eK!Bkh1i~@MVHo?z2E-#f##mtub~!aZ6oa;dWF2(Huvj^ znd$-Ahq7FP*58;Va#T%m{jF4u_1`0BU2RkR?fFw@t%0nBy4@e&&{-2Coge#RSNx&3!*O#B>^%b%U!X74;N#rfU$?$m2?wSPZmzkckPlA!GIaZ&QE z+VCls-;L&!Jy!VT@#E~RM>-`u+Zq2p*x!HQ;;+hr1OE9}qYWQazl`cD6Nw5;NdDuq zZ{`j2DCw!fLQfWS3rtl|oRPwsb7mb^bW}_GSr6y8!P4wkx;AqkwVK$z;GDFWqWI*m z)7o9*v;r=-RpAAI<{(Xq{= z`kZFplEx|FPg=ZQ82@f$$ZO;(mRfzRd&!Jt5%&MiuRE_OvwPaN(|?_>ORfL-k^B3U zjk-&_zWmBQxM8!WZ|j|jjApAXcg|+CHbcRR!B*n%`2{0t2JTa%=;{FydWwtlC=9|oDy?5k~O ze=QgHDo;5g;WFp-pS09jH77;>Et}$;ug7An}vE}C_`hA&Q0!pQb>YQ4d> zyO-p7{Jyh_>^gQf!e4Bz*uPUoYxCdjd1AKS^24rM_k5TBa#vnFedknnzNG3|x@|m* zmet&QX7l6jC&TS4GG22Rh@93rb~f9^VgKXB;+z+4@3wr6`yW@5z4pwZpCXKGNvUNA z%QK#JAYf0z3F>l%MYH%*{9@`YRbJ6`|wfV>5LG~>vz_+&tIDpA~o|u{;{JM zZ{Jy-`8Td<*K~>3AMg54-0`93&u>QYmWY7kQJ>dTPib>!2@jns!S^9XbDde#q(pne z)RVLJ_Welu7C13|#rCaAh94GWh3|fFV@l>dpYyMtz4@5>T0z>ARqbEF>-ksT&08Dn z=qX=kF>|S2ka^y_FAwsRRZ^^_j-_mUxM+^{#MwS|1-}0lHE|~-u0C(|Trt0Qsn`$J zBFl9D!hK&oCtOM62wt;pTP3IXKBt>TEp`{D+a12M^15s0lU1jE-;~ZzmNv@06+9{V z&7Q9sAe>l17rrw4_DbrWfIU41$ zMTG_F-jLj)JVi7*EzLmh_yaSi#lGuvbnl9Ci$%VFD1CQMpTI{A74+%OPu!qQRL4ZRy(^;nH8-cJs5D8r|}+uszh-UdJgS8}X?pF5|+^ z3;#aNjCkhzEHS3>UG(o|M=w6l`jZ{3G41Lzaow^RxjNkIeXigAnzV32{Y`!=zE zn6`Feh4Qu)5~r0DXPx|Y;?@hLYXM8nXN5HyB)N0$WlOrmG11CB!tfY>p2o>!u9`ZF zmD|33bAP`6N?=e{`Q@OW?|e`0-1WYs>}SxnkdXFmKdzZv(*2@fUS#Q4Y5r^8tDWcH z_sL#f*=<>9^KId_n+Lt-TeC>D6}X*f_qH~8@aXi%>uiig!n*SN=CK|wxET<-FYui5 z(Phh+Ke6sux6*1cOVpvC{ehQW+`F!#8+Y%?G@JH`k#>P{tkYJT9zG=P9+}eL717aB zo57LqtvR)4ZQ}abK~K)`+3W9BGLt%S(*5nL+_kn-7Pv&8y(3|I^l_|A<+c3HGup3k z`>Ls=XP9lW>zSovwJV@|LhPijN3Booj)%5vTJtk*b8_1%@wh#8^Il86<1;d=TKTn9 z@|Rlaio$gr7k_az+pGTjciyU7oa0bm^Z(y>HqAHLuW%+VYtrirH@7A%KJ(0_bB5o_ zZk^@6=P$myV%K(e$C|*i#^2)Hi`H#ue{$kp;?hZS|L4eeS==+5-;#byxXtkpC^mn=Qea%u_kGz$T^RUWPd$w}lY=wtwr^nx!_-^;LjIh|PJB}O; zFn{?op3fb8ggEgZnJoxvC9g7v-cO=B%;x)%DHB+|b&K3^1x}~@{X4$`-LnoR& zf9f3iwZoyl@H6LP|DI#68{)nii0?kqt?{Pm)9>hs509_$i3@nQBCBYfXT&?n?GoZH zc8c;(b*C+3`*!MO(D#tq{j%RmeKaPVSeLtT*|XO9t0u0O{p#m$Vk5VH=Ddd*OO`kdE!Cg0@b=6yd`ntqFmX_>;RdqzoZ;(Z;KxCi%)4nDN{bklrktlZ<~{H2;~ z2A}j69j`m`V8+rZpZ%n)-|T#8lU2+rd42Zn3u>2cGVRoww{3fBUH2c8w+9#9-e`Ah z{;_lN`Z;2Pb~@Q#jGryJsL~y?(@#-&e)H+}xcT}Thu^6`d?oD5Uf?77f0Hzqc3D$e z)x0#7o9r+4+J*Y=STSkEgzNT4#5ZcssIxv$V05nBTlTW8)ep^GAAa3&=-qsQC(>rh z$?RW04j(?VTcy+0_NTFpdt}#?&N|n{LXS^hojE`8M}g$wY3ybvbIa|@JiV;-r`qH! zJ?qL_?jMsW{5i%_CH{JIWVUYPdG_>J?hgUYcW>SB5;bm~SF1TqP+7O(M#h|dbMu7i zU%AyRyTX35E%N8VZ4-{}+feLucvkm^wj-zV#M2l5L|C66=RZ;C zZ{e*TdZ%RZy-?#r%2%Rq9TG8Gx9w}wZnZmcGY!}L+&PPHPm5oQ$*k=@kyGofu2$|} zAAE7u?**Q(pRbn@Z_@B_INCJnS5s&8Q?c+Bv0<6duPuArvCD)x{$IqUSLs)`J+)|i zqM`g~N!kbF89(A)3#?qYx%78e=Gs#%n`0hluC;l)@|IRWsEg}&-8uPxytl4+9mnf_ zsl+S8uxG5)97d8$kQ ze5L$_*npylogV^4g{!|RuKmsx8shUx`y>xb$&IHcHf5Mk`ng!Y;Px9^dJjNSyUR{*>_s-8}-}8y{Jj~4QZtHm1$gP^OfBRN@X_g;V;F!{mC9ACDm_+wX19~|VazOv)b`dj_W z=ErfH2Y(aat9$WK%N5aF&Mi!Drp6wri8`|2N(dK!jPR8&#>UsrFOgWaLftMZ_=25D z|DNYDF`pIoy>IbIb{76_b17h*bY$nX2E8v%|Juc0{Ac~=&ym1k5pC4^B*%Ln=P&)A z#?s!H17ygHPq6j(^&uk%3P#3eMxeok;*z4 Xe5Iai}z7eC%6`2XGhrukN7&pMRv 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 Qa|1&IBQ8}{SARDy0JCk>W&i*H diff --git a/doc/counting_iterator.rst b/doc/counting_iterator.rst deleted file mode 100644 index ff7da3c..0000000 --- a/doc/counting_iterator.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. Distributed under 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) - -+++++++++++++++++++ - Counting Iterator -+++++++++++++++++++ - -:Author: David Abrahams, Jeremy Siek, Thomas Witt -:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu, witt@ive.uni-hannover.de -:organization: `Boost Consulting`_, Indiana University `Open Systems - Lab`_, University of Hanover `Institute for Transport - Railway Operation and Construction`_ -:date: $Date$ -:copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. - -.. _`Boost Consulting`: http://www.boost-consulting.com -.. _`Open Systems Lab`: http://www.osl.iu.edu -.. _`Institute for Transport Railway Operation and Construction`: http://www.ive.uni-hannover.de - -:abstract: How would you fill up a vector with the numbers zero - through one hundred using ``std::copy()``? The only iterator - operation missing from builtin integer types is an - ``operator*()`` that returns the current value of the integer. - The counting iterator adaptor adds this crucial piece of - functionality to whatever type it wraps. One can use the - counting iterator adaptor not only with integer types, but with - any incrementable type. - - .. include:: counting_iterator_abstract.rst - -.. contents:: Table of Contents - -``counting_iterator`` synopsis -.............................. - -.. include:: counting_iterator_ref.rst -.. include:: make_counting_iterator.rst - -.. include:: counting_iterator_eg.rst - -.. _iterator-category: iterator_facade.html#iterator-category -.. |iterator-category| replace:: *iterator-category* diff --git a/doc/counting_iterator_abstract.rst b/doc/counting_iterator_abstract.rst deleted file mode 100644 index 117b94e..0000000 --- a/doc/counting_iterator_abstract.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -``counting_iterator`` adapts an object by adding an ``operator*`` that -returns the current value of the object. All other iterator operations -are forwarded to the adapted object. - diff --git a/doc/counting_iterator_eg.rst b/doc/counting_iterator_eg.rst deleted file mode 100644 index b64562d..0000000 --- a/doc/counting_iterator_eg.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -Example -....... - -This example fills an array with numbers and a second array with -pointers into the first array, using ``counting_iterator`` for both -tasks. Finally ``indirect_iterator`` is used to print out the numbers -into the first array via indirection through the second array. - -:: - - int N = 7; - std::vector numbers; - typedef std::vector::iterator n_iter; - std::copy(boost::counting_iterator(0), - boost::counting_iterator(N), - std::back_inserter(numbers)); - - std::vector::iterator> pointers; - std::copy(boost::make_counting_iterator(numbers.begin()), - boost::make_counting_iterator(numbers.end()), - std::back_inserter(pointers)); - - std::cout << "indirectly printing out the numbers from 0 to " - << N << std::endl; - std::copy(boost::make_indirect_iterator(pointers.begin()), - boost::make_indirect_iterator(pointers.end()), - std::ostream_iterator(std::cout, " ")); - std::cout << std::endl; - - -The output is:: - - indirectly printing out the numbers from 0 to 7 - 0 1 2 3 4 5 6 - -The source code for this example can be found `here`__. - -__ ../example/counting_iterator_example.cpp - diff --git a/doc/counting_iterator_ref.rst b/doc/counting_iterator_ref.rst deleted file mode 100644 index 1c5fd1c..0000000 --- a/doc/counting_iterator_ref.rst +++ /dev/null @@ -1,149 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -:: - - template < - class Incrementable - , class CategoryOrTraversal = use_default - , class Difference = use_default - > - class counting_iterator - { - public: - typedef Incrementable value_type; - typedef const Incrementable& reference; - typedef const Incrementable* pointer; - typedef /* see below */ difference_type; - typedef /* see below */ iterator_category; - - counting_iterator(); - counting_iterator(counting_iterator const& rhs); - explicit counting_iterator(Incrementable x); - Incrementable const& base() const; - reference operator*() const; - counting_iterator& operator++(); - counting_iterator& operator--(); - private: - Incrementable m_inc; // exposition - }; - - -If the ``Difference`` argument is ``use_default`` then -``difference_type`` is an unspecified signed integral -type. Otherwise ``difference_type`` is ``Difference``. - -``iterator_category`` is determined according to the following -algorithm: - -.. parsed-literal:: - - if (CategoryOrTraversal is not use_default) - return CategoryOrTraversal - else if (numeric_limits::is_specialized) - return |iterator-category|_\ ( - random_access_traversal_tag, Incrementable, const Incrementable&) - else - return |iterator-category|_\ ( - iterator_traversal::type, - Incrementable, const Incrementable&) - -[*Note:* implementers are encouraged to provide an implementation of - ``operator-`` and a ``difference_type`` that avoids overflows in - the cases where ``std::numeric_limits::is_specialized`` - is true.] - -``counting_iterator`` requirements -.................................. - -The ``Incrementable`` argument shall be Copy Constructible and Assignable. - -If ``iterator_category`` is convertible to ``forward_iterator_tag`` -or ``forward_traversal_tag``, the following must be well-formed:: - - Incrementable i, j; - ++i; // pre-increment - i == j; // operator equal - - -If ``iterator_category`` is convertible to -``bidirectional_iterator_tag`` or ``bidirectional_traversal_tag``, -the following expression must also be well-formed:: - - --i - -If ``iterator_category`` is convertible to -``random_access_iterator_tag`` or ``random_access_traversal_tag``, -the following must must also be valid:: - - counting_iterator::difference_type n; - i += n; - n = i - j; - i < j; - -``counting_iterator`` models -............................ - -Specializations of ``counting_iterator`` model Readable Lvalue -Iterator. In addition, they model the concepts corresponding to the -iterator tags to which their ``iterator_category`` is convertible. -Also, if ``CategoryOrTraversal`` is not ``use_default`` then -``counting_iterator`` models the concept corresponding to the iterator -tag ``CategoryOrTraversal``. Otherwise, if -``numeric_limits::is_specialized``, then -``counting_iterator`` models Random Access Traversal Iterator. -Otherwise, ``counting_iterator`` models the same iterator traversal -concepts modeled by ``Incrementable``. - -``counting_iterator`` is interoperable with -``counting_iterator`` if and only if ``X`` is -interoperable with ``Y``. - - - -``counting_iterator`` operations -................................ - -In addition to the operations required by the concepts modeled by -``counting_iterator``, ``counting_iterator`` provides the following -operations. - - -``counting_iterator();`` - -:Requires: ``Incrementable`` is Default Constructible. -:Effects: Default construct the member ``m_inc``. - - -``counting_iterator(counting_iterator const& rhs);`` - -:Effects: Construct member ``m_inc`` from ``rhs.m_inc``. - - - -``explicit counting_iterator(Incrementable x);`` - -:Effects: Construct member ``m_inc`` from ``x``. - - -``reference operator*() const;`` - -:Returns: ``m_inc`` - - -``counting_iterator& operator++();`` - -:Effects: ``++m_inc`` -:Returns: ``*this`` - - -``counting_iterator& operator--();`` - -:Effects: ``--m_inc`` -:Returns: ``*this`` - - -``Incrementable const& base() const;`` - -:Returns: ``m_inc`` diff --git a/doc/default.css b/doc/default.css deleted file mode 100644 index 8c1e342..0000000 --- a/doc/default.css +++ /dev/null @@ -1,226 +0,0 @@ -/* -:Author: David Goodger -:Contact: goodger@users.sourceforge.net -:date: $Date$ -:version: $Revision$ -:copyright: This stylesheet has been placed in the public domain. - -boostinspect:nolicense - -Default cascading style sheet for the HTML output of Docutils. -*/ - -.first { - margin-top: 0 } - -.last { - margin-bottom: 0 } - -a.toc-backref { - text-decoration: none ; - color: black } - -dd { - margin-bottom: 0.5em } - -div.abstract { - margin: 2em 5em } - -div.abstract p.topic-title { - font-weight: bold ; - text-align: center } - -div.attention, div.caution, div.danger, div.error, div.hint, -div.important, div.note, div.tip, div.warning, div.admonition { - margin: 2em ; - border: medium outset ; - padding: 1em } - -div.attention p.admonition-title, div.caution p.admonition-title, -div.danger p.admonition-title, div.error p.admonition-title, -div.warning p.admonition-title { - color: red ; - font-weight: bold ; - font-family: sans-serif } - -div.hint p.admonition-title, div.important p.admonition-title, -div.note p.admonition-title, div.tip p.admonition-title, -div.admonition p.admonition-title { - font-weight: bold ; - font-family: sans-serif } - -div.dedication { - margin: 2em 5em ; - text-align: center ; - font-style: italic } - -div.dedication p.topic-title { - font-weight: bold ; - font-style: normal } - -div.figure { - margin-left: 2em } - -div.footer, div.header { - font-size: smaller } - -div.sidebar { - margin-left: 1em ; - border: medium outset ; - padding: 0em 1em ; - background-color: #ffffee ; - width: 40% ; - float: right ; - clear: right } - -div.sidebar p.rubric { - font-family: sans-serif ; - font-size: medium } - -div.system-messages { - margin: 5em } - -div.system-messages h1 { - color: red } - -div.system-message { - border: medium outset ; - padding: 1em } - -div.system-message p.system-message-title { - color: red ; - font-weight: bold } - -div.topic { - margin: 2em } - -h1.title { - text-align: center } - -h2.subtitle { - text-align: center } - -hr { - width: 75% } - -ol.simple, ul.simple { - margin-bottom: 1em } - -ol.arabic { - list-style: decimal } - -ol.loweralpha { - list-style: lower-alpha } - -ol.upperalpha { - list-style: upper-alpha } - -ol.lowerroman { - list-style: lower-roman } - -ol.upperroman { - list-style: upper-roman } - -p.attribution { - text-align: right ; - margin-left: 50% } - -p.caption { - font-style: italic } - -p.credits { - font-style: italic ; - font-size: smaller } - -p.label { - white-space: nowrap } - -p.rubric { - font-weight: bold ; - font-size: larger ; - color: maroon ; - text-align: center } - -p.sidebar-title { - font-family: sans-serif ; - font-weight: bold ; - font-size: larger } - -p.sidebar-subtitle { - font-family: sans-serif ; - font-weight: bold } - -p.topic-title { - font-weight: bold } - -pre.address { - margin-bottom: 0 ; - margin-top: 0 ; - font-family: serif ; - font-size: 100% } - -pre.line-block { - font-family: serif ; - font-size: 100% } - -pre.literal-block, pre.doctest-block { - margin-left: 2em ; - margin-right: 2em ; - background-color: #eeeeee } - -span.classifier { - font-family: sans-serif ; - font-style: oblique } - -span.classifier-delimiter { - font-family: sans-serif ; - font-weight: bold } - -span.interpreted { - font-family: sans-serif } - -span.option { - white-space: nowrap } - -span.option-argument { - font-style: italic } - -span.pre { - white-space: pre } - -span.problematic { - color: red } - -table { - margin-top: 0.5em ; - margin-bottom: 0.5em } - -table.citation { - border-left: solid thin gray ; - padding-left: 0.5ex } - -table.docinfo { - margin: 2em 4em } - -table.footnote { - border-left: solid thin black ; - padding-left: 0.5ex } - -td, th { - padding-left: 0.5em ; - padding-right: 0.5em ; - vertical-align: top } - -th.docinfo-name, th.field-name { - font-weight: bold ; - text-align: left ; - white-space: nowrap } - -h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { - font-size: 100% } - -tt { - background-color: #eeeeee } - -ul.auto-toc { - list-style-type: none } diff --git a/doc/docutils.sty b/doc/docutils.sty deleted file mode 100755 index a6fce3f..0000000 --- a/doc/docutils.sty +++ /dev/null @@ -1,54 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%% docutils.sty: A style for docutils latex output %%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% -%% o author: Alexander Schmolck (a.schmolck@gmx.net) -%% o created: 2002-07-07 10:50:31+00:40 -%% o last modified: $Date: 2004/01/29 05:55:26 $ -%% o keywords: -%% o license: -%XXX titlesec -%% XXX geometry -\usepackage{graphicx} -\usepackage{latexsym} % extra symbols -\usepackage{url} % !!!: pay attention when using in other commands!!! -\usepackage{verbatim} % normal verbatim has lenght-limit -\usepackage{enumerate} % easy style choice with e.g: ``\begin{enumerate}[Ex i.]`` -\usepackage{hyperref} %href, htarget and hlink XXX: pdfauthor, pdfcreator etc. -\usepackage{xr} %XXX do we need this? -% need this to have ``fboxes`` in ``enviroments``, as well as ``verbatim``s -\usepackage{fancybox} -\usepackage{mdwtab} % better tables and arrays (fixes spacing and adds - % vertical align and multirows (m)) -\usepackage{ltxtable} % long and autoscaling tables (use X for autoscaled - % columns) -\newcommand{\transition}{\vspace{2em}\par\hrule{}\par\vspace{2em}} -\newcommand{\classifier}[1]{(\textit{#1})} -\newenvironment{topic}[1]% -{\begin{Sbox}% - \begin{minipage}{.8\textwidth}% - \protect{\large{\textbf{#1}}}\par\vspace{.5em}}% -{\end{minipage}\end{Sbox}\fbox{\TheSbox}\par\vspace{.5em}} -%XXX shadow box for warnings? -\newenvironment{admonition}[1]% -{\begin{center}% - \begin{Sbox}% - \begin{minipage}{.9\textwidth}% - \protect{\textsc{#1}}\par\vspace{.2em}}% -{\end{minipage}\end{Sbox}\fbox{\TheSbox}\par\vspace{.5em}\end{center}} - -\newenvironment{doctest}% -{\VerbatimEnvironment - \begin{Verbatim}}% -{\end{Verbatim}} -% {% -% \begin{Sbox}% -% \begin{minipage}{.8\textwidth}% -% \protect{\large{\textsc{#1}}\par\vspace{.5em}}}% -% {\end{minipage}\end{Sbox}\fbox{\TheSbox}\par\vspace{.5em}} -%{\end{minipage}\end{Sbox}\fbox{\TheSbox}} - - -%% just a piece of example code -% \newcommand{\vitem}% -% {\SaveVerb[{\item[\UseVerb{\MyTemp}]}]{\MyTemp}} diff --git a/doc/facade-and-adaptor.html b/doc/facade-and-adaptor.html deleted file mode 100755 index d2199e6..0000000 --- a/doc/facade-and-adaptor.html +++ /dev/null @@ -1,2992 +0,0 @@ - - - - - - -Iterator Facade and Adaptor - - - - - - - - - diff --git a/doc/facade-and-adaptor.pdf b/doc/facade-and-adaptor.pdf deleted file mode 100755 index a77daa477a1f24f3893439ded973ea719d05442b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226024 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

}TI=xYP2sxYtVm9`{Y1hgN;!=d-<^#Gang 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 diff --git a/doc/facade-and-adaptor.rst b/doc/facade-and-adaptor.rst deleted file mode 100644 index 1be63e8..0000000 --- a/doc/facade-and-adaptor.rst +++ /dev/null @@ -1,438 +0,0 @@ -.. Distributed under 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) - -+++++++++++++++++++++++++++++ - Iterator Facade and Adaptor -+++++++++++++++++++++++++++++ - -:Author: David Abrahams, Jeremy Siek, Thomas Witt -:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu, witt@styleadvisor.com -:organization: `Boost Consulting`_, Indiana University `Open Systems - Lab`_, `Zephyr Associates, Inc.`_ -:date: $Date$ - -:Number: This is a revised version of N1530_\ =03-0113, which was - accepted for Technical Report 1 by the C++ standard - committee's library working group. - -.. Version 1.9 of this ReStructuredText document corresponds to - n1530_, the paper accepted by the LWG. - -.. _n1530: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1530.html - -:copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. - -.. _`Boost Consulting`: http://www.boost-consulting.com -.. _`Open Systems Lab`: http://www.osl.iu.edu -.. _`Zephyr Associates, Inc.`: http://www.styleadvisor.com - -:abstract: We propose a set of class templates that help programmers - build standard-conforming iterators, both from scratch and - by adapting other iterators. - -.. contents:: Table of Contents - -============ - Motivation -============ - -Iterators play an important role in modern C++ programming. The -iterator is the central abstraction of the algorithms of the Standard -Library, allowing algorithms to be re-used in in a wide variety of -contexts. The C++ Standard Library contains a wide variety of useful -iterators. Every one of the standard containers comes with constant -and mutable iterators [#mutable]_, and also reverse versions of those -same iterators which traverse the container in the opposite direction. -The Standard also supplies ``istream_iterator`` and -``ostream_iterator`` for reading from and writing to streams, -``insert_iterator``, ``front_insert_iterator`` and -``back_insert_iterator`` for inserting elements into containers, and -``raw_storage_iterator`` for initializing raw memory [7]. - -Despite the many iterators supplied by the Standard Library, obvious -and useful iterators are missing, and creating new iterator types is -still a common task for C++ programmers. The literature documents -several of these, for example line_iterator [3] and Constant_iterator -[9]. The iterator abstraction is so powerful that we expect -programmers will always need to invent new iterator types. - -Although it is easy to create iterators that *almost* conform to the -standard, the iterator requirements contain subtleties which can make -creating an iterator which *actually* conforms quite difficult. -Further, the iterator interface is rich, containing many operators -that are technically redundant and tedious to implement. To automate -the repetitive work of constructing iterators, we propose -``iterator_facade``, an iterator base class template which provides -the rich interface of standard iterators and delegates its -implementation to member functions of the derived class. In addition -to reducing the amount of code necessary to create an iterator, the -``iterator_facade`` also provides compile-time error detection. -Iterator implementation mistakes that often go unnoticed are turned -into compile-time errors because the derived class implementation must -match the expectations of the ``iterator_facade``. - -A common pattern of iterator construction is the adaptation of one -iterator to form a new one. The functionality of an iterator is -composed of four orthogonal aspects: traversal, indirection, equality -comparison and distance measurement. Adapting an old iterator to -create a new one often saves work because one can reuse one aspect of -functionality while redefining the other. For example, the Standard -provides ``reverse_iterator``, which adapts any Bidirectional Iterator -by inverting its direction of traversal. As with plain iterators, -iterator adaptors defined outside the Standard have become commonplace -in the literature: - -* Checked iter[13] adds bounds-checking to an existing iterator. - -* The iterators of the View Template Library[14], which adapts - containers, are themselves adaptors over the underlying iterators. - -* Smart iterators [5] adapt an iterator's dereferencing behavior by - applying a function object to the object being referenced and - returning the result. - -* Custom iterators [4], in which a variety of adaptor types are enumerated. - -* Compound iterators [1], which access a slice out of a container of containers. - -* Several iterator adaptors from the MTL [12]. The MTL contains a - strided iterator, where each call to ``operator++()`` moves the - iterator ahead by some constant factor, and a scaled iterator, which - multiplies the dereferenced value by some constant. - -.. [#concept] We use the term concept to mean a set of requirements - that a type must satisfy to be used with a particular template - parameter. - -.. [#mutable] The term mutable iterator refers to iterators over objects that - can be changed by assigning to the dereferenced iterator, while - constant iterator refers to iterators over objects that cannot be - modified. - -To fulfill the need for constructing adaptors, we propose the -``iterator_adaptor`` class template. Instantiations of -``iterator_adaptor`` serve as a base classes for new iterators, -providing the default behavior of forwarding all operations to the -underlying iterator. The user can selectively replace these features -in the derived iterator class. This proposal also includes a number -of more specialized adaptors, such as the ``transform_iterator`` that -applies some user-specified function during the dereference of the -iterator. - -======================== - Impact on the Standard -======================== - -This proposal is purely an addition to the C++ standard library. -However, note that this proposal relies on the proposal for New -Iterator Concepts. - -======== - Design -======== - -Iterator Concepts -================= - -This proposal is formulated in terms of the new ``iterator concepts`` -as proposed in n1550_, since user-defined and especially adapted -iterators suffer from the well known categorization problems that are -inherent to the current iterator categories. - -.. _n1550: http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/papers/2003/n1550.html - -This proposal does not strictly depend on proposal n1550_, as there -is a direct mapping between new and old categories. This proposal -could be reformulated using this mapping if n1550_ was not accepted. - -Interoperability -================ - -The question of iterator interoperability is poorly addressed in the -current standard. There are currently two defect reports that are -concerned with interoperability issues. - -Issue 179_ concerns the fact that mutable container iterator types -are only required to be convertible to the corresponding constant -iterator types, but objects of these types are not required to -interoperate in comparison or subtraction expressions. This situation -is tedious in practice and out of line with the way built in types -work. This proposal implements the proposed resolution to issue -179_, as most standard library implementations do nowadays. In other -words, if an iterator type A has an implicit or user defined -conversion to an iterator type B, the iterator types are interoperable -and the usual set of operators are available. - -Issue 280_ concerns the current lack of interoperability between -reverse iterator types. The proposed new reverse_iterator template -fixes the issues raised in 280. It provides the desired -interoperability without introducing unwanted overloads. - -.. _179: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html#179 -.. _280: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-active.html#280 - - -Iterator Facade -=============== - -.. include:: iterator_facade_body.rst - -Iterator Adaptor -================ - -.. include:: iterator_adaptor_body.rst - -Specialized Adaptors -==================== - -This proposal also contains several examples of specialized adaptors -which were easily implemented using ``iterator_adaptor``: - -* ``indirect_iterator``, which iterates over iterators, pointers, - or smart pointers and applies an extra level of dereferencing. - -* A new ``reverse_iterator``, which inverts the direction of a Base - iterator's motion, while allowing adapted constant and mutable - iterators to interact in the expected ways (unlike those in most - implementations of C++98). - -* ``transform_iterator``, which applies a user-defined function object - to the underlying values when dereferenced. - -* ``filter_iterator``, which provides a view of an iterator range in - which some elements of the underlying range are skipped. - -.. _counting: - -* ``counting_iterator``, which adapts any incrementable type - (e.g. integers, iterators) so that incrementing/decrementing the - adapted iterator and dereferencing it produces successive values of - the Base type. - -* ``function_output_iterator``, which makes it easier to create custom - output iterators. - -Based on examples in the Boost library, users have generated many new -adaptors, among them a permutation adaptor which applies some -permutation to a random access iterator, and a strided adaptor, which -adapts a random access iterator by multiplying its unit of motion by a -constant factor. In addition, the Boost Graph Library (BGL) uses -iterator adaptors to adapt other graph libraries, such as LEDA [10] -and Stanford GraphBase [8], to the BGL interface (which requires C++ -Standard compliant iterators). - -=============== - Proposed Text -=============== - - -Header ```` synopsis [lib.iterator.helper.synopsis] -======================================================================= - - -:: - - struct use_default; - - struct iterator_core_access { /* implementation detail */ }; - - template < - class Derived - , class Value - , class CategoryOrTraversal - , class Reference = Value& - , class Difference = ptrdiff_t - > - class iterator_facade; - - template < - class Derived - , class Base - , class Value = use_default - , class CategoryOrTraversal = use_default - , class Reference = use_default - , class Difference = use_default - > - class iterator_adaptor; - - template < - class Iterator - , class Value = use_default - , class CategoryOrTraversal = use_default - , class Reference = use_default - , class Difference = use_default - > - class indirect_iterator; - - template - struct pointee; - - template - struct indirect_reference; - - template - class reverse_iterator; - - template < - class UnaryFunction - , class Iterator - , class Reference = use_default - , class Value = use_default - > - class transform_iterator; - - template - class filter_iterator; - - template < - class Incrementable - , class CategoryOrTraversal = use_default - , class Difference = use_default - > - class counting_iterator; - - template - class function_output_iterator; - - - -Iterator facade [lib.iterator.facade] -===================================== - -.. include:: iterator_facade_abstract.rst - -Class template ``iterator_facade`` ----------------------------------- - -.. include:: iterator_facade_ref.rst - -Iterator adaptor [lib.iterator.adaptor] -======================================= - -.. include:: iterator_adaptor_abstract.rst - -Class template ``iterator_adaptor`` ------------------------------------ - -.. include:: iterator_adaptor_ref.rst - - -Specialized adaptors [lib.iterator.special.adaptors] -==================================================== - - -The ``enable_if_convertible::type`` expression used in -this section is for exposition purposes. The converting constructors -for specialized adaptors should be only be in an overload set provided -that an object of type ``X`` is implicitly convertible to an object of -type ``Y``. -The signatures involving ``enable_if_convertible`` should behave -*as-if* ``enable_if_convertible`` were defined to be:: - - template enable_if_convertible_impl - {}; - - template <> enable_if_convertible_impl - { struct type; }; - - template - struct enable_if_convertible - : enable_if_convertible_impl::value> - {}; - -If an expression other than the default argument is used to supply -the value of a function parameter whose type is written in terms -of ``enable_if_convertible``, the program is ill-formed, no -diagnostic required. - -[*Note:* The ``enable_if_convertible`` approach uses SFINAE to -take the constructor out of the overload set when the types are not -implicitly convertible. -] - - -Indirect iterator ------------------ - -.. include:: indirect_iterator_abstract.rst - -Class template ``pointee`` -.................................... - -.. include:: pointee_ref.rst - -Class template ``indirect_reference`` -..................................... - -.. include:: indirect_reference_ref.rst - -Class template ``indirect_iterator`` -.................................... - -.. include:: indirect_iterator_ref.rst - -Reverse iterator ----------------- - -.. include:: reverse_iterator_abstract.rst - -Class template ``reverse_iterator`` -................................... - -.. include:: reverse_iterator_ref.rst - - -Transform iterator ------------------- - -.. include:: transform_iterator_abstract.rst - -Class template ``transform_iterator`` -..................................... - -.. include:: transform_iterator_ref.rst - - -Filter iterator ---------------- - -.. include:: filter_iterator_abstract.rst - - -Class template ``filter_iterator`` -.................................. - -.. include:: filter_iterator_ref.rst - - -Counting iterator ------------------ - -.. include:: counting_iterator_abstract.rst - -Class template ``counting_iterator`` -.................................... - -.. include:: counting_iterator_ref.rst - - -Function output iterator ------------------------- - -.. include:: func_output_iter_abstract.rst - -Class template ``function_output_iterator`` -........................................... - -.. include:: func_output_iter_ref.rst - - - - -.. LocalWords: Abrahams Siek Witt istream ostream iter MTL strided interoperate - LocalWords: CRTP metafunctions inlining lvalue JGS incrementable BGL LEDA cv - LocalWords: GraphBase struct ptrdiff UnaryFunction const int typename bool pp - LocalWords: lhs rhs SFINAE markup iff tmp OtherDerived OtherIterator DWA foo - LocalWords: dereferenceable subobject AdaptableUnaryFunction impl pre ifdef'd - LocalWords: OtherIncrementable Coplien diff --git a/doc/facade_iterator_category.rst b/doc/facade_iterator_category.rst deleted file mode 100755 index 6b60d85..0000000 --- a/doc/facade_iterator_category.rst +++ /dev/null @@ -1,53 +0,0 @@ -.. |iterator-category| replace:: *iterator-category* -.. _iterator-category: - -.. parsed-literal:: - - *iterator-category*\ (C,R,V) := - if (C is convertible to std::input_iterator_tag - || C is convertible to std::output_iterator_tag - ) - return C - - else if (C is not convertible to incrementable_traversal_tag) - *the program is ill-formed* - - else return a type X satisfying the following two constraints: - - 1. X is convertible to X1, and not to any more-derived - type, where X1 is defined by: - - if (R is a reference type - && C is convertible to forward_traversal_tag) - { - if (C is convertible to random_access_traversal_tag) - X1 = random_access_iterator_tag - else if (C is convertible to bidirectional_traversal_tag) - X1 = bidirectional_iterator_tag - else - X1 = forward_iterator_tag - } - else - { - if (C is convertible to single_pass_traversal_tag - && R is convertible to V) - X1 = input_iterator_tag - else - X1 = C - } - - 2. |category-to-traversal|_\ (X) is convertible to the most - derived traversal tag type to which X is also - convertible, and not to any more-derived traversal tag - type. - -.. |category-to-traversal| replace:: *category-to-traversal* -.. _`category-to-traversal`: new-iter-concepts.html#category-to-traversal - -[Note: the intention is to allow ``iterator_category`` to be one of -the five original category tags when convertibility to one of the -traversal tags would add no information] - -.. Copyright David Abrahams 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) diff --git a/doc/filter_iterator.html b/doc/filter_iterator.html deleted file mode 100644 index 9b3eaa9..0000000 --- a/doc/filter_iterator.html +++ /dev/null @@ -1,689 +0,0 @@ - - - - - - -Filter Iterator - - - - - - - -

-

Filter Iterator

- --- - - - - - - - - - - - -
Author:David Abrahams, Jeremy Siek, Thomas Witt
Contact:dave@boost-consulting.com, jsiek@osl.iu.edu, witt@ive.uni-hannover.de
Organization:Boost Consulting, Indiana University Open Systems -Lab, University of Hanover Institute for Transport -Railway Operation and Construction
Date:2004-11-01
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.
- - - - --- - - - -
abstract: - - -The filter iterator adaptor creates a view of an iterator range in -which some elements of the range are skipped. A predicate function -object controls which elements are skipped. When the predicate is -applied to an element, if it returns true then the element is -retained and if it returns false then the element is skipped -over. When skipping over elements, it is necessary for the filter -adaptor to know when to stop so as to avoid going past the end of the -underlying range. A filter iterator is therefore constructed with pair -of iterators indicating the range of elements in the unfiltered -sequence to be traversed.
- -
-

filter_iterator synopsis

- - - - -
-template <class Predicate, class Iterator>
-class filter_iterator
-{
- public:
-    typedef iterator_traits<Iterator>::value_type value_type;
-    typedef iterator_traits<Iterator>::reference reference;
-    typedef iterator_traits<Iterator>::pointer pointer;
-    typedef iterator_traits<Iterator>::difference_type difference_type;
-    typedef /* see below */ iterator_category;
-
-    filter_iterator();
-    filter_iterator(Predicate f, Iterator x, Iterator end = Iterator());
-    filter_iterator(Iterator x, Iterator end = Iterator());
-    template<class OtherIterator>
-    filter_iterator(
-        filter_iterator<Predicate, OtherIterator> const& t
-        , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
-        );
-    Predicate predicate() const;
-    Iterator end() const;
-    Iterator const& base() const;
-    reference operator*() const;
-    filter_iterator& operator++();
-private:
-    Predicate m_pred; // exposition only
-    Iterator m_iter;  // exposition only
-    Iterator m_end;   // exposition only
-};
-
-

If Iterator models Readable Lvalue Iterator and Bidirectional Traversal -Iterator then iterator_category is convertible to -std::bidirectional_iterator_tag. -Otherwise, if Iterator models Readable Lvalue Iterator and Forward Traversal -Iterator then iterator_category is convertible to -std::forward_iterator_tag. -Otherwise iterator_category is -convertible to std::input_iterator_tag.

-
-
-

filter_iterator requirements

-

The Iterator argument shall meet the requirements of Readable -Iterator and Single Pass Iterator or it shall meet the requirements of -Input Iterator.

-

The Predicate argument must be Assignable, Copy Constructible, and -the expression p(x) must be valid where p is an object of type -Predicate, x is an object of type -iterator_traits<Iterator>::value_type, and where the type of -p(x) must be convertible to bool.

-
-
-

filter_iterator models

-

The concepts that filter_iterator models are dependent on which -concepts the Iterator argument models, as specified in the -following tables.

- ---- - - - - - - - - - - - - - - - - -
If Iterator modelsthen filter_iterator models
Single Pass IteratorSingle Pass Iterator
Forward Traversal IteratorForward Traversal Iterator
Bidirectional Traversal IteratorBidirectional Traversal Iterator
- ---- - - - - - - - - - - - - - - - - -
If Iterator modelsthen filter_iterator models
Readable IteratorReadable Iterator
Writable IteratorWritable Iterator
Lvalue IteratorLvalue Iterator
- ---- - - - - - - - - - - - - - - - - - - - -
If Iterator modelsthen filter_iterator models
Readable Iterator, Single Pass IteratorInput Iterator
Readable Lvalue Iterator, Forward Traversal IteratorForward Iterator
Writable Lvalue Iterator, Forward Traversal IteratorMutable Forward Iterator
Writable Lvalue Iterator, Bidirectional IteratorMutable Bidirectional Iterator
-

filter_iterator<P1, X> is interoperable with filter_iterator<P2, Y> -if and only if X is interoperable with Y.

-
-
-

filter_iterator operations

-

In addition to those operations required by the concepts that -filter_iterator models, filter_iterator provides the following -operations.

-

filter_iterator();

- --- - - - - - -
Requires:Predicate and Iterator must be Default Constructible.
Effects:Constructs a filter_iterator whose``m_pred``, m_iter, and m_end -members are a default constructed.
-

filter_iterator(Predicate f, Iterator x, Iterator end = Iterator());

- --- - - - -
Effects:Constructs a filter_iterator where m_iter is either -the first position in the range [x,end) such that f(*m_iter) == true -or else``m_iter == end``. The member m_pred is constructed from -f and m_end from end.
-

filter_iterator(Iterator x, Iterator end = Iterator());

- --- - - - - - -
Requires:Predicate must be Default Constructible and -Predicate is a class type (not a function pointer).
Effects:Constructs a filter_iterator where m_iter is either -the first position in the range [x,end) such that m_pred(*m_iter) == true -or else``m_iter == end``. The member m_pred is default constructed.
-
-template <class OtherIterator>
-filter_iterator(
-    filter_iterator<Predicate, OtherIterator> const& t
-    , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
-    );``
-
- --- - - - - - -
Requires:OtherIterator is implicitly convertible to Iterator.
Effects:Constructs a filter iterator whose members are copied from t.
-

Predicate predicate() const;

- --- - - - -
Returns:m_pred
-

Iterator end() const;

- --- - - - -
Returns:m_end
-

Iterator const& base() const;

- --- - - - -
Returns:m_iterator
-

reference operator*() const;

- --- - - - -
Returns:*m_iter
-

filter_iterator& operator++();

- --- - - - - - -
Effects:Increments m_iter and then continues to -increment m_iter until either m_iter == m_end -or m_pred(*m_iter) == true.
Returns:*this
- - - -
-template <class Predicate, class Iterator>
-filter_iterator<Predicate,Iterator>
-make_filter_iterator(Predicate f, Iterator x, Iterator end = Iterator());
-
- --- - - - -
Returns:filter_iterator<Predicate,Iterator>(f, x, end)
-
-template <class Predicate, class Iterator>
-filter_iterator<Predicate,Iterator>
-make_filter_iterator(Iterator x, Iterator end = Iterator());
-
- --- - - - -
Returns:filter_iterator<Predicate,Iterator>(x, end)
- - - -
-
-

Example

-

This example uses filter_iterator and then -make_filter_iterator to output only the positive integers from an -array of integers. Then make_filter_iterator is is used to output -the integers greater than -2.

-
-struct is_positive_number {
-  bool operator()(int x) { return 0 < x; }
-};
-
-int main()
-{
-  int numbers_[] = { 0, -1, 4, -3, 5, 8, -2 };
-  const int N = sizeof(numbers_)/sizeof(int);
-
-  typedef int* base_iterator;
-  base_iterator numbers(numbers_);
-
-  // Example using filter_iterator
-  typedef boost::filter_iterator<is_positive_number, base_iterator>
-    FilterIter;
-
-  is_positive_number predicate;
-  FilterIter filter_iter_first(predicate, numbers, numbers + N);
-  FilterIter filter_iter_last(predicate, numbers + N, numbers + N);
-
-  std::copy(filter_iter_first, filter_iter_last, std::ostream_iterator<int>(std::cout, " "));
-  std::cout << std::endl;
-
-  // Example using make_filter_iterator()
-  std::copy(boost::make_filter_iterator<is_positive_number>(numbers, numbers + N),
-            boost::make_filter_iterator<is_positive_number>(numbers + N, numbers + N),
-            std::ostream_iterator<int>(std::cout, " "));
-  std::cout << std::endl;
-
-  // Another example using make_filter_iterator()
-  std::copy(
-      boost::make_filter_iterator(
-          std::bind2nd(std::greater<int>(), -2)
-        , numbers, numbers + N)
-
-    , boost::make_filter_iterator(
-          std::bind2nd(std::greater<int>(), -2)
-        , numbers + N, numbers + N)
-
-    , std::ostream_iterator<int>(std::cout, " ")
-  );
-
-  std::cout << std::endl;
-
-  return boost::exit_success;
-}
-
-

The output is:

-
-4 5 8
-4 5 8
-0 -1 4 5 8
-
-

The source code for this example can be found here.

-
-
- - diff --git a/doc/filter_iterator.pdf b/doc/filter_iterator.pdf deleted file mode 100755 index 1d8a804fdc30cb43fc63898603fc0f33cb134b9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69532 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%0Db@=qxI|*Cwcllgz<)44? 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 - FilterIter; - - is_positive_number predicate; - FilterIter filter_iter_first(predicate, numbers, numbers + N); - FilterIter filter_iter_last(predicate, numbers + N, numbers + N); - - std::copy(filter_iter_first, filter_iter_last, std::ostream_iterator(std::cout, " ")); - std::cout << std::endl; - - // Example using make_filter_iterator() - std::copy(boost::make_filter_iterator(numbers, numbers + N), - boost::make_filter_iterator(numbers + N, numbers + N), - std::ostream_iterator(std::cout, " ")); - std::cout << std::endl; - - // Another example using make_filter_iterator() - std::copy( - boost::make_filter_iterator( - std::bind2nd(std::greater(), -2) - , numbers, numbers + N) - - , boost::make_filter_iterator( - std::bind2nd(std::greater(), -2) - , numbers + N, numbers + N) - - , std::ostream_iterator(std::cout, " ") - ); - - std::cout << std::endl; - - return boost::exit_success; - } - - -The output is:: - - 4 5 8 - 4 5 8 - 0 -1 4 5 8 - - -The source code for this example can be found `here`__. - -__ ../example/filter_iterator_example.cpp diff --git a/doc/filter_iterator_ref.rst b/doc/filter_iterator_ref.rst deleted file mode 100644 index 1759788..0000000 --- a/doc/filter_iterator_ref.rst +++ /dev/null @@ -1,177 +0,0 @@ -.. Copyright David Abrahams, Jeremy Siek, and Thomas Witt -.. 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) - -:: - - template - class filter_iterator - { - public: - typedef iterator_traits::value_type value_type; - typedef iterator_traits::reference reference; - typedef iterator_traits::pointer pointer; - typedef iterator_traits::difference_type difference_type; - typedef /* see below */ iterator_category; - - filter_iterator(); - filter_iterator(Predicate f, Iterator x, Iterator end = Iterator()); - filter_iterator(Iterator x, Iterator end = Iterator()); - template - filter_iterator( - filter_iterator const& t - , typename enable_if_convertible::type* = 0 // exposition - ); - Predicate predicate() const; - Iterator end() const; - Iterator const& base() const; - reference operator*() const; - filter_iterator& operator++(); - private: - Predicate m_pred; // exposition only - Iterator m_iter; // exposition only - Iterator m_end; // exposition only - }; - - -If ``Iterator`` models Readable Lvalue Iterator and Bidirectional Traversal -Iterator then ``iterator_category`` is convertible to -``std::bidirectional_iterator_tag``. -Otherwise, if ``Iterator`` models Readable Lvalue Iterator and Forward Traversal -Iterator then ``iterator_category`` is convertible to -``std::forward_iterator_tag``. -Otherwise ``iterator_category`` is -convertible to ``std::input_iterator_tag``. - - -``filter_iterator`` requirements -................................ - -The ``Iterator`` argument shall meet the requirements of Readable -Iterator and Single Pass Iterator or it shall meet the requirements of -Input Iterator. - -The ``Predicate`` argument must be Assignable, Copy Constructible, and -the expression ``p(x)`` must be valid where ``p`` is an object of type -``Predicate``, ``x`` is an object of type -``iterator_traits::value_type``, and where the type of -``p(x)`` must be convertible to ``bool``. - - -``filter_iterator`` models -.......................... - -The concepts that ``filter_iterator`` models are dependent on which -concepts the ``Iterator`` argument models, as specified in the -following tables. - -+---------------------------------+------------------------------------------+ -|If ``Iterator`` models |then ``filter_iterator`` models | -+=================================+==========================================+ -|Single Pass Iterator |Single Pass Iterator | -+---------------------------------+------------------------------------------+ -|Forward Traversal Iterator |Forward Traversal Iterator | -+---------------------------------+------------------------------------------+ -|Bidirectional Traversal Iterator |Bidirectional Traversal Iterator | -+---------------------------------+------------------------------------------+ - -+--------------------------------+----------------------------------------------+ -| If ``Iterator`` models | then ``filter_iterator`` models | -+================================+==============================================+ -| Readable Iterator | Readable Iterator | -+--------------------------------+----------------------------------------------+ -| Writable Iterator | Writable Iterator | -+--------------------------------+----------------------------------------------+ -| Lvalue Iterator | Lvalue Iterator | -+--------------------------------+----------------------------------------------+ - -+-------------------------------------------------------+---------------------------------+ -|If ``Iterator`` models | then ``filter_iterator`` models | -+=======================================================+=================================+ -|Readable Iterator, Single Pass Iterator | Input Iterator | -+-------------------------------------------------------+---------------------------------+ -|Readable Lvalue Iterator, Forward Traversal Iterator | Forward Iterator | -+-------------------------------------------------------+---------------------------------+ -|Writable Lvalue Iterator, Forward Traversal Iterator | Mutable Forward Iterator | -+-------------------------------------------------------+---------------------------------+ -|Writable Lvalue Iterator, Bidirectional Iterator | Mutable Bidirectional Iterator | -+-------------------------------------------------------+---------------------------------+ - - -``filter_iterator`` is interoperable with ``filter_iterator`` -if and only if ``X`` is interoperable with ``Y``. - - -``filter_iterator`` operations -.............................. - -In addition to those operations required by the concepts that -``filter_iterator`` models, ``filter_iterator`` provides the following -operations. - - -``filter_iterator();`` - -:Requires: ``Predicate`` and ``Iterator`` must be Default Constructible. -:Effects: Constructs a ``filter_iterator`` whose``m_pred``, ``m_iter``, and ``m_end`` - members are a default constructed. - - -``filter_iterator(Predicate f, Iterator x, Iterator end = Iterator());`` - -:Effects: Constructs a ``filter_iterator`` where ``m_iter`` is either - the first position in the range ``[x,end)`` such that ``f(*m_iter) == true`` - or else``m_iter == end``. The member ``m_pred`` is constructed from - ``f`` and ``m_end`` from ``end``. - - - -``filter_iterator(Iterator x, Iterator end = Iterator());`` - -:Requires: ``Predicate`` must be Default Constructible and - ``Predicate`` is a class type (not a function pointer). -:Effects: Constructs a ``filter_iterator`` where ``m_iter`` is either - the first position in the range ``[x,end)`` such that ``m_pred(*m_iter) == true`` - or else``m_iter == end``. The member ``m_pred`` is default constructed. - - -:: - - template - filter_iterator( - filter_iterator const& t - , typename enable_if_convertible::type* = 0 // exposition - );`` - -:Requires: ``OtherIterator`` is implicitly convertible to ``Iterator``. -:Effects: Constructs a filter iterator whose members are copied from ``t``. - - -``Predicate predicate() const;`` - -:Returns: ``m_pred`` - - -``Iterator end() const;`` - -:Returns: ``m_end`` - - -``Iterator const& base() const;`` - -:Returns: ``m_iterator`` - - - -``reference operator*() const;`` - -:Returns: ``*m_iter`` - - -``filter_iterator& operator++();`` - -:Effects: Increments ``m_iter`` and then continues to - increment ``m_iter`` until either ``m_iter == m_end`` - or ``m_pred(*m_iter) == true``. -:Returns: ``*this`` diff --git a/doc/func_output_iter_abstract.rst b/doc/func_output_iter_abstract.rst deleted file mode 100644 index d4a700f..0000000 --- a/doc/func_output_iter_abstract.rst +++ /dev/null @@ -1,12 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -The function output iterator adaptor makes it easier to create custom -output iterators. The adaptor takes a unary function and creates a -model of Output Iterator. Each item assigned to the output iterator is -passed as an argument to the unary function. The motivation for this -iterator is that creating a conforming output iterator is non-trivial, -particularly because the proper implementation usually requires a -proxy object. - diff --git a/doc/func_output_iter_ref.rst b/doc/func_output_iter_ref.rst deleted file mode 100644 index e00eab7..0000000 --- a/doc/func_output_iter_ref.rst +++ /dev/null @@ -1,73 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -Header -...... - -:: - - #include - -:: - - template - class function_output_iterator { - public: - typedef std::output_iterator_tag iterator_category; - typedef void value_type; - typedef void difference_type; - typedef void pointer; - typedef void reference; - - explicit function_output_iterator(); - - explicit function_output_iterator(const UnaryFunction& f); - - /* see below */ operator*(); - function_output_iterator& operator++(); - function_output_iterator& operator++(int); - private: - UnaryFunction m_f; // exposition only - }; - - - -``function_output_iterator`` requirements -......................................... - -``UnaryFunction`` must be Assignable and Copy Constructible. - - - -``function_output_iterator`` models -................................... - -``function_output_iterator`` is a model of the Writable and -Incrementable Iterator concepts. - - - -``function_output_iterator`` operations -....................................... - -``explicit function_output_iterator(const UnaryFunction& f = UnaryFunction());`` - -:Effects: Constructs an instance of ``function_output_iterator`` - with ``m_f`` constructed from ``f``. - - -``operator*();`` - -:Returns: An object ``r`` of unspecified type such that ``r = t`` - is equivalent to ``m_f(t)`` for all ``t``. - - -``function_output_iterator& operator++();`` - -:Returns: ``*this`` - - -``function_output_iterator& operator++(int);`` - -:Returns: ``*this`` diff --git a/doc/function_output_iterator.html b/doc/function_output_iterator.html deleted file mode 100644 index bea15ba..0000000 --- a/doc/function_output_iterator.html +++ /dev/null @@ -1,467 +0,0 @@ - - - - - - -Function Output Iterator - - - - - - - -

- - diff --git a/doc/function_output_iterator.pdf b/doc/function_output_iterator.pdf deleted file mode 100755 index cef2274c8785dcb935ad339b2da106d77024be0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57133 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 diff --git a/doc/function_output_iterator.rst b/doc/function_output_iterator.rst deleted file mode 100644 index 8018af5..0000000 --- a/doc/function_output_iterator.rst +++ /dev/null @@ -1,28 +0,0 @@ -.. Distributed under 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) - -++++++++++++++++++++++++++ - Function Output Iterator -++++++++++++++++++++++++++ - -:Author: David Abrahams, Jeremy Siek, Thomas Witt -:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu, witt@ive.uni-hannover.de -:organization: `Boost Consulting`_, Indiana University `Open Systems - Lab`_, University of Hanover `Institute for Transport - Railway Operation and Construction`_ -:date: $Date$ -:copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. - -.. _`Boost Consulting`: http://www.boost-consulting.com -.. _`Open Systems Lab`: http://www.osl.iu.edu -.. _`Institute for Transport Railway Operation and Construction`: http://www.ive.uni-hannover.de - -:abstract: - - .. include:: func_output_iter_abstract.rst - -.. contents:: Table of Contents - -.. include:: func_output_iter_ref.rst -.. include:: function_output_iterator_eg.rst \ No newline at end of file diff --git a/doc/function_output_iterator_eg.rst b/doc/function_output_iterator_eg.rst deleted file mode 100644 index ab09f2d..0000000 --- a/doc/function_output_iterator_eg.rst +++ /dev/null @@ -1,39 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -Example -....... - -:: - - struct string_appender - { - string_appender(std::string& s) - : m_str(&s) - {} - - void operator()(const std::string& x) const - { - *m_str += x; - } - - std::string* m_str; - }; - - int main(int, char*[]) - { - std::vector x; - x.push_back("hello"); - x.push_back(" "); - x.push_back("world"); - x.push_back("!"); - - std::string s = ""; - std::copy(x.begin(), x.end(), - boost::make_function_output_iterator(string_appender(s))); - - std::cout << s << std::endl; - - return 0; - } diff --git a/doc/generate.py b/doc/generate.py deleted file mode 100644 index f5d0de8..0000000 --- a/doc/generate.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/python -# Copyright David Abrahams 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) - -# -# Generate html, TeX, and PDF versions of all the source files -# -import os -import sys - -from syscmd import syscmd -from sources import sources - -if 0: - for s in sources: - syscmd('boosthtml %s' % s) -else: - extensions = ('html', 'pdf') - - if len(sys.argv) > 1: - extensions = sys.argv[1:] - - all = [ '%s.%s' % (os.path.splitext(s)[0],ext) - for ext in extensions - for s in sources - ] - - print 'make %s' % ' '.join(all) - syscmd('make %s' % ' '.join(all)) - - diff --git a/doc/index.html b/doc/index.html deleted file mode 100755 index eef53b1..0000000 --- a/doc/index.html +++ /dev/null @@ -1,521 +0,0 @@ - - - - - - -The Boost.Iterator Library Boost - - - - - - diff --git a/doc/index.rst b/doc/index.rst deleted file mode 100755 index 32db09a..0000000 --- a/doc/index.rst +++ /dev/null @@ -1,323 +0,0 @@ -.. Distributed under 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) - -+++++++++++++++++++++++++++++++++++++++++++++++++ - The Boost.Iterator Library |(logo)|__ -+++++++++++++++++++++++++++++++++++++++++++++++++ - -.. |(logo)| image:: ../../../boost.png - :alt: Boost - -__ ../../../index.htm - - -------------------------------------- - - -:Authors: David Abrahams, Jeremy Siek, Thomas Witt -:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu, witt@styleadvisor.com -:organizations: `Boost Consulting`_, Indiana University `Open Systems - Lab`_, `Zephyr Associates, Inc.`_ -:date: $Date$ - -:copyright: Copyright David Abrahams, Jeremy Siek, Thomas Witt 2003. - -.. _`Boost Consulting`: http://www.boost-consulting.com -.. _`Open Systems Lab`: http://www.osl.iu.edu -.. _`Zephyr Associates, Inc.`: http://www.styleadvisor.com - -:Abstract: The Boost Iterator Library contains two parts. The first - is a system of concepts_ which extend the C++ standard - iterator requirements. The second is a framework of - components for building iterators based on these - extended concepts and includes several useful iterator - adaptors. The extended iterator concepts have been - carefully designed so that old-style iterators - can fit in the new concepts and so that new-style - iterators will be compatible with old-style algorithms, - though algorithms may need to be updated if they want to - take full advantage of the new-style iterator - capabilities. Several components of this library have - been accepted into the C++ standard technical report. - The components of the Boost Iterator Library replace the - older Boost Iterator Adaptor Library. - -.. _concepts: ../../../more/generic_programming.html#concept - -.. contents:: **Table of Contents** - - -------------------------------------- - - -===================== - New-Style Iterators -===================== - -The iterator categories defined in C++98 are extremely limiting -because they bind together two orthogonal concepts: traversal and -element access. For example, because a random access iterator is -required to return a reference (and not a proxy) when dereferenced, -it is impossible to capture the capabilities of -``vector::iterator`` using the C++98 categories. This is the -infamous "``vector`` is not a container, and its iterators -aren't random access iterators", debacle about which Herb Sutter -wrote two papers for the standards comittee (n1185_ and n1211_), -and a `Guru of the Week`__. New-style iterators go well beyond -patching up ``vector``, though: there are lots of other -iterators already in use which can't be adequately represented by -the existing concepts. For details about the new iterator -concepts, see our - -.. _n1185: http://www.gotw.ca/publications/N1185.pdf -.. _n1211: http://www.gotw.ca/publications/N1211.pdf -__ http://www.gotw.ca/gotw/050.htm - - - `Standard Proposal For New-Style Iterators`__ (PDF__) - -__ new-iter-concepts.html -__ new-iter-concepts.pdf - -============================= - Iterator Facade and Adaptor -============================= - -Writing standard-conforming iterators is tricky, but the need comes -up often. In order to ease the implementation of new iterators, -the Boost.Iterator library provides the |facade| class template, -which implements many useful defaults and compile-time checks -designed to help the iterator author ensure that his iterator is -correct. - -It is also common to define a new iterator that is similar to some -underlying iterator or iterator-like type, but that modifies some -aspect of the underlying type's behavior. For that purpose, the -library supplies the |adaptor| class template, which is specially -designed to take advantage of as much of the underlying type's -behavior as possible. - -The documentation for these two classes can be found at the following -web pages: - -* |facade|_ (PDF__) - -* |adaptor|_ (PDF__) - - -.. |facade| replace:: ``iterator_facade`` -.. _facade: iterator_facade.html -__ iterator_facade.pdf - -.. |adaptor| replace:: ``iterator_adaptor`` -.. _adaptor: iterator_adaptor.html -__ iterator_adaptor.pdf - -Both |facade| and |adaptor| as well as many of the `specialized -adaptors`_ mentioned below have been proposed for standardization, -and accepted into the first C++ technical report; see our - - `Standard Proposal For Iterator Facade and Adaptor`__ (PDF__) - -for more details. - -__ facade-and-adaptor.html -__ facade-and-adaptor.pdf - -====================== - Specialized Adaptors -====================== - -The iterator library supplies a useful suite of standard-conforming -iterator templates based on the Boost `iterator facade and adaptor`_. - -* |counting|_ (PDF__): an iterator over a sequence of consecutive values. - Implements a "lazy sequence" - -* |filter|_ (PDF__): an iterator over the subset of elements of some - sequence which satisfy a given predicate - -* |function|_ (PDF__): an output iterator wrapping a unary function - object; each time an element is written into the dereferenced - iterator, it is passed as a parameter to the function object. - -* |indirect|_ (PDF__): an iterator over the objects *pointed-to* by the - elements of some sequence. - -* |permutation|_ (PDF__): an iterator over the elements of some random-access - sequence, rearranged according to some sequence of integer indices. - -* |reverse|_ (PDF__): an iterator which traverses the elements of some - bidirectional sequence in reverse. Corrects many of the - shortcomings of C++98's ``std::reverse_iterator``. - -* |shared|_: an iterator over elements of a container whose - lifetime is maintained by a |shared_ptr|_ stored in the iterator. - -* |transform|_ (PDF__): an iterator over elements which are the result of - applying some functional transformation to the elements of an - underlying sequence. This component also replaces the old - ``projection_iterator_adaptor``. - -* |zip|_ (PDF__): an iterator over tuples of the elements at corresponding - positions of heterogeneous underlying iterators. - -.. |counting| replace:: ``counting_iterator`` -.. _counting: counting_iterator.html -__ counting_iterator.pdf - -.. |filter| replace:: ``filter_iterator`` -.. _filter: filter_iterator.html -__ filter_iterator.pdf - -.. |function| replace:: ``function_output_iterator`` -.. _function: function_output_iterator.html -__ function_output_iterator.pdf - -.. |indirect| replace:: ``indirect_iterator`` -.. _indirect: indirect_iterator.html -__ indirect_iterator.pdf - -.. |permutation| replace:: ``permutation_iterator`` -.. _permutation: permutation_iterator.html -__ permutation_iterator.pdf - -.. |reverse| replace:: ``reverse_iterator`` -.. _reverse: reverse_iterator.html -__ reverse_iterator.pdf - -.. |shared| replace:: ``shared_container_iterator`` -.. _shared: ../../utility/shared_container_iterator.html - -.. |transform| replace:: ``transform_iterator`` -.. _transform: transform_iterator.html -__ transform_iterator.pdf - -.. |zip| replace:: ``zip_iterator`` -.. _zip: zip_iterator.html -__ zip_iterator.pdf - -.. |shared_ptr| replace:: ``shared_ptr`` -.. _shared_ptr: ../../smart_ptr/shared_ptr.htm - -==================== - Iterator Utilities -==================== - -Traits ------- - -* |pointee|_ (PDF__): Provides the capability to deduce the referent types - of pointers, smart pointers and iterators in generic code. Used - in |indirect|. - -* |iterator_traits|_ (PDF__): Provides MPL_\ -compatible metafunctions which - retrieve an iterator's traits. Also corrects for the deficiencies - of broken implementations of ``std::iterator_traits``. - -.. * |interoperable|_ (PDF__): Provides an MPL_\ -compatible metafunction for - testing iterator interoperability - -.. |pointee| replace:: ``pointee.hpp`` -.. _pointee: pointee.html -__ pointee.pdf - -.. |iterator_traits| replace:: ``iterator_traits.hpp`` -.. _iterator_traits: iterator_traits.html -__ iterator_traits.pdf - -.. |interoperable| replace:: ``interoperable.hpp`` -.. _interoperable: interoperable.html -.. comment! __ interoperable.pdf - -.. _MPL: ../../mpl/doc/index.html - -Testing and Concept Checking ----------------------------- - -* |iterator_concepts|_ (PDF__): Concept checking classes for the new iterator concepts. - -* |iterator_archetypes|_ (PDF__): Concept archetype classes for the new iterators concepts. - -.. |iterator_concepts| replace:: ``iterator_concepts.hpp`` -.. _iterator_concepts: iterator_concepts.html -__ iterator_concepts.pdf - -.. |iterator_archetypes| replace:: ``iterator_archetypes.hpp`` -.. _iterator_archetypes: iterator_archetypes.html -__ iterator_archetypes.pdf - -======================================================= - Upgrading from the old Boost Iterator Adaptor Library -======================================================= - -.. _Upgrading: - -If you have been using the old Boost Iterator Adaptor library to -implement iterators, you probably wrote a ``Policies`` class which -captures the core operations of your iterator. In the new library -design, you'll move those same core operations into the body of the -iterator class itself. If you were writing a family of iterators, -you probably wrote a `type generator`_ to build the -``iterator_adaptor`` specialization you needed; in the new library -design you don't need a type generator (though may want to keep it -around as a compatibility aid for older code) because, due to the -use of the Curiously Recurring Template Pattern (CRTP) [Cop95]_, -you can now define the iterator class yourself and acquire -functionality through inheritance from ``iterator_facade`` or -``iterator_adaptor``. As a result, you also get much finer control -over how your iterator works: you can add additional constructors, -or even override the iterator functionality provided by the -library. - -.. _`type generator`: ../../../more/generic_programming.html#type_generator - -If you're looking for the old ``projection_iterator`` component, -its functionality has been merged into ``transform_iterator``: as -long as the function object's ``result_type`` (or the ``Reference`` -template argument, if explicitly specified) is a true reference -type, ``transform_iterator`` will behave like -``projection_iterator`` used to. - -========= - History -========= - -In 2000 Dave Abrahams was writing an iterator for a container of -pointers, which would access the pointed-to elements when -dereferenced. Naturally, being a library writer, he decided to -generalize the idea and the Boost Iterator Adaptor library was born. -Dave was inspired by some writings of Andrei Alexandrescu and chose a -policy based design (though he probably didn't capture Andrei's idea -very well - there was only one policy class for all the iterator's -orthogonal properties). Soon Jeremy Siek realized he would need the -library and they worked together to produce a "Boostified" version, -which was reviewed and accepted into the library. They wrote a paper -and made several important revisions of the code. - -Eventually, several shortcomings of the older library began to make -the need for a rewrite apparent. Dave and Jeremy started working -at the Santa Cruz C++ committee meeting in 2002, and had quickly -generated a working prototype. At the urging of Mat Marcus, they -decided to use the GenVoca/CRTP pattern approach, and moved the -policies into the iterator class itself. Thomas Witt expressed -interest and became the voice of strict compile-time checking for -the project, adding uses of the SFINAE technique to eliminate false -converting constructors and operators from the overload set. He -also recognized the need for a separate ``iterator_facade``, and -factored it out of ``iterator_adaptor``. Finally, after a -near-complete rewrite of the prototype, they came up with the -library you see today. - -.. [Cop95] [Coplien, 1995] Coplien, J., Curiously Recurring Template - Patterns, C++ Report, February 1995, pp. 24-27. - -.. - LocalWords: Abrahams Siek Witt const bool Sutter's WG int UL LI href Lvalue - LocalWords: ReadableIterator WritableIterator SwappableIterator cv pre iter - LocalWords: ConstantLvalueIterator MutableLvalueIterator CopyConstructible TR - LocalWords: ForwardTraversalIterator BidirectionalTraversalIterator lvalue - LocalWords: RandomAccessTraversalIterator dereferenceable Incrementable tmp - LocalWords: incrementable xxx min prev inplace png oldeqnew AccessTag struct - LocalWords: TraversalTag typename lvalues DWA Hmm JGS diff --git a/doc/indirect_iterator.html b/doc/indirect_iterator.html deleted file mode 100644 index 11ea71f..0000000 --- a/doc/indirect_iterator.html +++ /dev/null @@ -1,621 +0,0 @@ - - - - - - -Indirect Iterator - - - - - - - -
-

Indirect Iterator

- --- - - - - - - - - - - - -
Author:David Abrahams, Jeremy Siek, Thomas Witt
Contact:dave@boost-consulting.com, jsiek@osl.iu.edu, witt@ive.uni-hannover.de
Organization:Boost Consulting, Indiana University Open Systems -Lab, University of Hanover Institute for Transport -Railway Operation and Construction
Date:2004-11-01
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.
- - - - --- - - - -
abstract: - - -indirect_iterator adapts an iterator by applying an -extra dereference inside of operator*(). For example, this -iterator adaptor makes it possible to view a container of pointers -(e.g. list<foo*>) as if it were a container of the pointed-to type -(e.g. list<foo>). indirect_iterator depends on two -auxiliary traits, pointee and indirect_reference, to -provide support for underlying iterators whose value_type is -not an iterator.
- -
-

indirect_iterator synopsis

- - - -
-template <
-    class Iterator
-  , class Value = use_default
-  , class CategoryOrTraversal = use_default
-  , class Reference = use_default
-  , class Difference = use_default
->
-class indirect_iterator
-{
- public:
-    typedef /* see below */ value_type;
-    typedef /* see below */ reference;
-    typedef /* see below */ pointer;
-    typedef /* see below */ difference_type;
-    typedef /* see below */ iterator_category;
-
-    indirect_iterator();
-    indirect_iterator(Iterator x);
-
-    template <
-        class Iterator2, class Value2, class Category2
-      , class Reference2, class Difference2
-    >
-    indirect_iterator(
-        indirect_iterator<
-             Iterator2, Value2, Category2, Reference2, Difference2
-        > const& y
-      , typename enable_if_convertible<Iterator2, Iterator>::type* = 0 // exposition
-    );
-
-    Iterator const& base() const;
-    reference operator*() const;
-    indirect_iterator& operator++();
-    indirect_iterator& operator--();
-private:
-   Iterator m_iterator; // exposition
-};
-
-

The member types of indirect_iterator are defined according to -the following pseudo-code, where V is -iterator_traits<Iterator>::value_type

-
-if (Value is use_default) then
-    typedef remove_const<pointee<V>::type>::type value_type;
-else
-    typedef remove_const<Value>::type value_type;
-
-if (Reference is use_default) then
-    if (Value is use_default) then
-        typedef indirect_reference<V>::type reference;
-    else
-        typedef Value& reference;
-else
-    typedef Reference reference;
-
-if (Value is use_default) then
-    typedef pointee<V>::type* pointer;
-else
-    typedef Value* pointer;
-
-if (Difference is use_default)
-    typedef iterator_traits<Iterator>::difference_type difference_type;
-else
-    typedef Difference difference_type;
-
-if (CategoryOrTraversal is use_default)
-    typedef iterator-category (
-        iterator_traversal<Iterator>::type,``reference``,``value_type``
-    ) iterator_category;
-else
-    typedef iterator-category (
-        CategoryOrTraversal,``reference``,``value_type``
-    ) iterator_category;
-
-
-
-

indirect_iterator requirements

-

The expression *v, where v is an object of -iterator_traits<Iterator>::value_type, shall be valid -expression and convertible to reference. Iterator shall -model the traversal concept indicated by iterator_category. -Value, Reference, and Difference shall be chosen so -that value_type, reference, and difference_type meet -the requirements indicated by iterator_category.

-

[Note: there are further requirements on the -iterator_traits<Iterator>::value_type if the Value -parameter is not use_default, as implied by the algorithm for -deducing the default for the value_type member.]

-
-
-

indirect_iterator models

-

In addition to the concepts indicated by iterator_category -and by iterator_traversal<indirect_iterator>::type, a -specialization of indirect_iterator models the following -concepts, Where v is an object of -iterator_traits<Iterator>::value_type:

-
-
    -
  • Readable Iterator if reference(*v) is convertible to -value_type.
  • -
  • Writable Iterator if reference(*v) = t is a valid -expression (where t is an object of type -indirect_iterator::value_type)
  • -
  • Lvalue Iterator if reference is a reference type.
  • -
-
-

indirect_iterator<X,V1,C1,R1,D1> is interoperable with -indirect_iterator<Y,V2,C2,R2,D2> if and only if X is -interoperable with Y.

-
-
-

indirect_iterator operations

-

In addition to the operations required by the concepts described -above, specializations of indirect_iterator provide the -following operations.

-

indirect_iterator();

- --- - - - - - -
Requires:Iterator must be Default Constructible.
Effects:Constructs an instance of indirect_iterator with -a default-constructed m_iterator.
-

indirect_iterator(Iterator x);

- --- - - - -
Effects:Constructs an instance of indirect_iterator with -m_iterator copy constructed from x.
-
-template <
-    class Iterator2, class Value2, unsigned Access, class Traversal
-  , class Reference2, class Difference2
->
-indirect_iterator(
-    indirect_iterator<
-         Iterator2, Value2, Access, Traversal, Reference2, Difference2
-    > const& y
-  , typename enable_if_convertible<Iterator2, Iterator>::type* = 0 // exposition
-);
-
- --- - - - - - -
Requires:Iterator2 is implicitly convertible to Iterator.
Effects:Constructs an instance of indirect_iterator whose -m_iterator subobject is constructed from y.base().
-

Iterator const& base() const;

- --- - - - -
Returns:m_iterator
-

reference operator*() const;

- --- - - - -
Returns:**m_iterator
-

indirect_iterator& operator++();

- --- - - - - - -
Effects:++m_iterator
Returns:*this
-

indirect_iterator& operator--();

- --- - - - - - -
Effects:--m_iterator
Returns:*this
- - - -
-
-

Example

-

This example prints an array of characters, using -indirect_iterator to access the array of characters through an -array of pointers. Next indirect_iterator is used with the -transform algorithm to copy the characters (incremented by one) to -another array. A constant indirect iterator is used for the source and -a mutable indirect iterator is used for the destination. The last part -of the example prints the original array of characters, but this time -using the make_indirect_iterator helper function.

-
-char characters[] = "abcdefg";
-const int N = sizeof(characters)/sizeof(char) - 1; // -1 since characters has a null char
-char* pointers_to_chars[N];                        // at the end.
-for (int i = 0; i < N; ++i)
-  pointers_to_chars[i] = &characters[i];
-
-// Example of using indirect_iterator
-
-boost::indirect_iterator<char**, char>
-  indirect_first(pointers_to_chars), indirect_last(pointers_to_chars + N);
-
-std::copy(indirect_first, indirect_last, std::ostream_iterator<char>(std::cout, ","));
-std::cout << std::endl;
-
-
-// Example of making mutable and constant indirect iterators
-
-char mutable_characters[N];
-char* pointers_to_mutable_chars[N];
-for (int j = 0; j < N; ++j)
-  pointers_to_mutable_chars[j] = &mutable_characters[j];
-
-boost::indirect_iterator<char* const*> mutable_indirect_first(pointers_to_mutable_chars),
-  mutable_indirect_last(pointers_to_mutable_chars + N);
-boost::indirect_iterator<char* const*, char const> const_indirect_first(pointers_to_chars),
-  const_indirect_last(pointers_to_chars + N);
-
-std::transform(const_indirect_first, const_indirect_last,
-               mutable_indirect_first, std::bind1st(std::plus<char>(), 1));
-
-std::copy(mutable_indirect_first, mutable_indirect_last,
-          std::ostream_iterator<char>(std::cout, ","));
-std::cout << std::endl;
-
-
-// Example of using make_indirect_iterator()
-
-std::copy(boost::make_indirect_iterator(pointers_to_chars),
-          boost::make_indirect_iterator(pointers_to_chars + N),
-          std::ostream_iterator<char>(std::cout, ","));
-std::cout << std::endl;
-
-

The output is:

-
-a,b,c,d,e,f,g,
-b,c,d,e,f,g,h,
-a,b,c,d,e,f,g,
-
-

The source code for this example can be found here.

-
-
- - diff --git a/doc/indirect_iterator.pdf b/doc/indirect_iterator.pdf deleted file mode 100755 index 3cdcbd9e7baf329d669f9183b559274aa2880bf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75031 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%0Dd*jNEyAd)S0vuakPSS@{YMJ(!U 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 Jy863u0RWi536lT- diff --git a/doc/indirect_iterator.rst b/doc/indirect_iterator.rst deleted file mode 100644 index 91328e0..0000000 --- a/doc/indirect_iterator.rst +++ /dev/null @@ -1,34 +0,0 @@ -.. Distributed under 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) - -+++++++++++++++++++ - Indirect Iterator -+++++++++++++++++++ - -:Author: David Abrahams, Jeremy Siek, Thomas Witt -:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu, witt@ive.uni-hannover.de -:organization: `Boost Consulting`_, Indiana University `Open Systems - Lab`_, University of Hanover `Institute for Transport - Railway Operation and Construction`_ -:date: $Date$ -:copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. - -.. _`Boost Consulting`: http://www.boost-consulting.com -.. _`Open Systems Lab`: http://www.osl.iu.edu -.. _`Institute for Transport Railway Operation and Construction`: http://www.ive.uni-hannover.de - -:abstract: - - .. include:: indirect_iterator_abstract.rst - -.. contents:: Table of Contents - -``indirect_iterator`` synopsis -.............................. - -.. include:: indirect_iterator_ref.rst -.. include:: indirect_iterator_eg.rst - -.. _iterator-category: iterator_facade.html#iterator-category -.. |iterator-category| replace:: *iterator-category* diff --git a/doc/indirect_iterator_abstract.rst b/doc/indirect_iterator_abstract.rst deleted file mode 100644 index 61fe016..0000000 --- a/doc/indirect_iterator_abstract.rst +++ /dev/null @@ -1,15 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -``indirect_iterator`` adapts an iterator by applying an -*extra* dereference inside of ``operator*()``. For example, this -iterator adaptor makes it possible to view a container of pointers -(e.g. ``list``) as if it were a container of the pointed-to type -(e.g. ``list``). ``indirect_iterator`` depends on two -auxiliary traits, ``pointee`` and ``indirect_reference``, to -provide support for underlying iterators whose ``value_type`` is -not an iterator. - - - diff --git a/doc/indirect_iterator_eg.rst b/doc/indirect_iterator_eg.rst deleted file mode 100644 index 1cb00c0..0000000 --- a/doc/indirect_iterator_eg.rst +++ /dev/null @@ -1,73 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -Example -....... - -This example prints an array of characters, using -``indirect_iterator`` to access the array of characters through an -array of pointers. Next ``indirect_iterator`` is used with the -``transform`` algorithm to copy the characters (incremented by one) to -another array. A constant indirect iterator is used for the source and -a mutable indirect iterator is used for the destination. The last part -of the example prints the original array of characters, but this time -using the ``make_indirect_iterator`` helper function. - - -:: - - char characters[] = "abcdefg"; - const int N = sizeof(characters)/sizeof(char) - 1; // -1 since characters has a null char - char* pointers_to_chars[N]; // at the end. - for (int i = 0; i < N; ++i) - pointers_to_chars[i] = &characters[i]; - - // Example of using indirect_iterator - - boost::indirect_iterator - indirect_first(pointers_to_chars), indirect_last(pointers_to_chars + N); - - std::copy(indirect_first, indirect_last, std::ostream_iterator(std::cout, ",")); - std::cout << std::endl; - - - // Example of making mutable and constant indirect iterators - - char mutable_characters[N]; - char* pointers_to_mutable_chars[N]; - for (int j = 0; j < N; ++j) - pointers_to_mutable_chars[j] = &mutable_characters[j]; - - boost::indirect_iterator mutable_indirect_first(pointers_to_mutable_chars), - mutable_indirect_last(pointers_to_mutable_chars + N); - boost::indirect_iterator const_indirect_first(pointers_to_chars), - const_indirect_last(pointers_to_chars + N); - - std::transform(const_indirect_first, const_indirect_last, - mutable_indirect_first, std::bind1st(std::plus(), 1)); - - std::copy(mutable_indirect_first, mutable_indirect_last, - std::ostream_iterator(std::cout, ",")); - std::cout << std::endl; - - - // Example of using make_indirect_iterator() - - std::copy(boost::make_indirect_iterator(pointers_to_chars), - boost::make_indirect_iterator(pointers_to_chars + N), - std::ostream_iterator(std::cout, ",")); - std::cout << std::endl; - - -The output is:: - - a,b,c,d,e,f,g, - b,c,d,e,f,g,h, - a,b,c,d,e,f,g, - - -The source code for this example can be found `here`__. - -__ ../example/indirect_iterator_example.cpp - diff --git a/doc/indirect_iterator_ref.rst b/doc/indirect_iterator_ref.rst deleted file mode 100644 index d1430e1..0000000 --- a/doc/indirect_iterator_ref.rst +++ /dev/null @@ -1,181 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -:: - - template < - class Iterator - , class Value = use_default - , class CategoryOrTraversal = use_default - , class Reference = use_default - , class Difference = use_default - > - class indirect_iterator - { - public: - typedef /* see below */ value_type; - typedef /* see below */ reference; - typedef /* see below */ pointer; - typedef /* see below */ difference_type; - typedef /* see below */ iterator_category; - - indirect_iterator(); - indirect_iterator(Iterator x); - - template < - class Iterator2, class Value2, class Category2 - , class Reference2, class Difference2 - > - indirect_iterator( - indirect_iterator< - Iterator2, Value2, Category2, Reference2, Difference2 - > const& y - , typename enable_if_convertible::type* = 0 // exposition - ); - - Iterator const& base() const; - reference operator*() const; - indirect_iterator& operator++(); - indirect_iterator& operator--(); - private: - Iterator m_iterator; // exposition - }; - - -The member types of ``indirect_iterator`` are defined according to -the following pseudo-code, where ``V`` is -``iterator_traits::value_type`` - -.. parsed-literal:: - - if (Value is use_default) then - typedef remove_const::type>::type value_type; - else - typedef remove_const::type value_type; - - if (Reference is use_default) then - if (Value is use_default) then - typedef indirect_reference::type reference; - else - typedef Value& reference; - else - typedef Reference reference; - - if (Value is use_default) then - typedef pointee::type\* pointer; - else - typedef Value\* pointer; - - if (Difference is use_default) - typedef iterator_traits::difference_type difference_type; - else - typedef Difference difference_type; - - if (CategoryOrTraversal is use_default) - typedef *iterator-category* ( - iterator_traversal::type,``reference``,``value_type`` - ) iterator_category; - else - typedef *iterator-category* ( - CategoryOrTraversal,``reference``,``value_type`` - ) iterator_category; - - -``indirect_iterator`` requirements -.................................. - -The expression ``*v``, where ``v`` is an object of -``iterator_traits::value_type``, shall be valid -expression and convertible to ``reference``. ``Iterator`` shall -model the traversal concept indicated by ``iterator_category``. -``Value``, ``Reference``, and ``Difference`` shall be chosen so -that ``value_type``, ``reference``, and ``difference_type`` meet -the requirements indicated by ``iterator_category``. - -[Note: there are further requirements on the -``iterator_traits::value_type`` if the ``Value`` -parameter is not ``use_default``, as implied by the algorithm for -deducing the default for the ``value_type`` member.] - -``indirect_iterator`` models -............................ - -In addition to the concepts indicated by ``iterator_category`` -and by ``iterator_traversal::type``, a -specialization of ``indirect_iterator`` models the following -concepts, Where ``v`` is an object of -``iterator_traits::value_type``: - - * Readable Iterator if ``reference(*v)`` is convertible to - ``value_type``. - - * Writable Iterator if ``reference(*v) = t`` is a valid - expression (where ``t`` is an object of type - ``indirect_iterator::value_type``) - - * Lvalue Iterator if ``reference`` is a reference type. - -``indirect_iterator`` is interoperable with -``indirect_iterator`` if and only if ``X`` is -interoperable with ``Y``. - - -``indirect_iterator`` operations -................................ - -In addition to the operations required by the concepts described -above, specializations of ``indirect_iterator`` provide the -following operations. - - -``indirect_iterator();`` - -:Requires: ``Iterator`` must be Default Constructible. -:Effects: Constructs an instance of ``indirect_iterator`` with - a default-constructed ``m_iterator``. - - -``indirect_iterator(Iterator x);`` - -:Effects: Constructs an instance of ``indirect_iterator`` with - ``m_iterator`` copy constructed from ``x``. - -:: - - template < - class Iterator2, class Value2, unsigned Access, class Traversal - , class Reference2, class Difference2 - > - indirect_iterator( - indirect_iterator< - Iterator2, Value2, Access, Traversal, Reference2, Difference2 - > const& y - , typename enable_if_convertible::type* = 0 // exposition - ); - -:Requires: ``Iterator2`` is implicitly convertible to ``Iterator``. -:Effects: Constructs an instance of ``indirect_iterator`` whose - ``m_iterator`` subobject is constructed from ``y.base()``. - - -``Iterator const& base() const;`` - -:Returns: ``m_iterator`` - - -``reference operator*() const;`` - -:Returns: ``**m_iterator`` - - -``indirect_iterator& operator++();`` - -:Effects: ``++m_iterator`` -:Returns: ``*this`` - - -``indirect_iterator& operator--();`` - -:Effects: ``--m_iterator`` -:Returns: ``*this`` diff --git a/doc/indirect_reference_ref.rst b/doc/indirect_reference_ref.rst deleted file mode 100755 index f222d7e..0000000 --- a/doc/indirect_reference_ref.rst +++ /dev/null @@ -1,29 +0,0 @@ -.. Copyright David Abrahams 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) - -:: - - template - struct indirect_reference - { - typedef /* see below */ type; - }; - -:Requires: For an object ``x`` of type ``Dereferenceable``, ``*x`` - is well-formed. If ``++x`` is ill-formed it shall neither be - ambiguous nor shall it violate access control, and - ``pointee::type&`` shall be well-formed. - Otherwise ``iterator_traits::reference`` shall - be well formed. [Note: These requirements need not apply to - explicit or partial specializations of ``indirect_reference``] - -``type`` is determined according to the following algorithm, where -``x`` is an object of type ``Dereferenceable``:: - - if ( ++x is ill-formed ) - return ``pointee::type&`` - else - std::iterator_traits::reference - - \ No newline at end of file diff --git a/doc/interoperability-revisited.rst b/doc/interoperability-revisited.rst deleted file mode 100755 index add3546..0000000 --- a/doc/interoperability-revisited.rst +++ /dev/null @@ -1,235 +0,0 @@ -++++++++++++++++++++++++++++ - Interoperability Revisited -++++++++++++++++++++++++++++ - -:date: $Date$ -:copyright: Copyright Thomas Witt 2004. - -.. Distributed under 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) - -Problem -======= - -The current iterator_facade specification makes it unneccessarily tedious to -implement interoperable iterators. - -In the following text a simplified example of the current iterator_facade specification is used to -illustrate the problem. - -In the current specification binary operators are implemented in the following way: - -template -struct Facade -{ -}; - -template -struct is_interoperable : - or_< - is_convertible - , is_convertible - > -{}; - -template< - class Derived1 - , class Derived2 -> -enable_if, bool> operator==( - Derived1 const& lhs - , Derived2 const& rhs -) -{ - return static_cast(lhs).equal_to(static_cast -{ - bool equal_to(Mutable const&); -}; - -struct Constant : Facade -{ - Constant(); - Constant(Constant const&); - Constant(Mutable const&); - - ... - - bool equal_to(Constant const&); -}; - -Constant c; -Mutable m; - -c == m; // ok, dispatched to Constant::equal_to -m == c; // !! error, dispatched to Mutable::equal_to - -Instead the following "slightly" more complicated implementation is necessary - -struct Mutable : Facade -{ - template - enable_if || is_convertible, bool>::type equal_to(T const&); -}; - -struct Constant : Tag -{ - Constant(); - Constant(Constant const&); - Constant(Mutable const&); - - template - enable_if || is_convertible, bool>::type equal_to(T const&); -}; - -Beside the fact that the code is significantly more complex to understand and to teach there is -a major design problem lurking here. Note that in both types equal_to is a function template with -an unconstrained argument T. This is necessary so that further types can be made interoperable with -Mutable or Constant. Would Mutable be defined as - -struct Mutable : Facade -{ - bool equal_to(Mutable const&); - bool equal_to(Constant const&); -}; - -Constant and Mutable would still be interoperable but no further interoperable could be added -without changing Mutable. Even if this would be considered acceptable the current specification forces -a two way dependency between interoperable types. Note in the templated equal_to case this dependency -is implicitly created when specializing equal_to. - -Solution -======== - -The two way dependency can be avoided by enabling type conversion in the binary operator -implementation. Note that this is the usual way interoperability betwween types is achieved -for binary operators and one reason why binary operators are usually implemented as non-members. - -A simple implementation of this strategy would look like this - -template< - class T1 - , class T2 -> -struct interoperable_base : - if_< - is_convertible< - T2 - , T1 - > - , T1 - , T2> -{}; - - -template< - class Derived1 - , class Derived2 -> -enable_if, bool> operator==( - Derived1 const& lhs - , Derived2 const& rhs -) -{ - typedef interoperable_base< - Derived1 - , Derived2 - >::type Base; - - return static_cast(lhs).equal_to(static_cast -enable_if, bool> operator==( - Derived1 const& lhs - , Derived2 const& rhs -) -{ - return static_cast(lhs).equal_to(static_cast -enable_if, bool> operator==( - Derived1 const& lhs - , Derived2 const& rhs -) -{ - return static_cast(rhs).equal_to(static_cast -{ - Constant(); - Constant(Constant const&); - Constant(Mutable const&); - - ... - - bool equal_to(Constant const&); - bool equal_to(Mutable const&); -}; - -c == m; // ok, dispatched to Constant::equal_to(Mutable const&), no conversion -m == c; // ok, dispatched to Constant::equal_to(Mutable const&), no conversion - -This definition of operator== introduces a possible ambiguity when both types are convertible -to each other. I don't think this is a problem as this behaviour is the same with concrete types. -I.e. - -struct A {}; - -bool operator==(A, A); - -struct B { B(A); }; - -bool operator==(B, B); - -A a; -B b(a); - -a == b; // error, ambiguous overload - -Effect -====== - -Iterator implementations using iterator_facade look exactly as if they were -"hand-implemented" (I am working on better wording). - -a) Less burden for the user - -b) The definition (standardese) of specialized adpters might be easier - (This has to be proved yet) diff --git a/doc/issues.rst b/doc/issues.rst deleted file mode 100755 index 5ddb61f..0000000 --- a/doc/issues.rst +++ /dev/null @@ -1,152 +0,0 @@ -++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - Problem with ``is_writable`` and ``is_swappable`` in N1550_ -++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -.. _N1550: http://www.boost-consulting.com/writing/n1550.html -.. _N1530: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1530.html - -:Author: David Abrahams and Jeremy Siek -:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu -:Organization: `Boost Consulting`_, Indiana University Bloomington -:date: $Date$ -:Copyright: Copyright David Abrahams, Jeremy Siek 2003. 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) - -.. _`Boost Consulting`: http://www.boost-consulting.com - -.. contents:: Table of Contents - -============== - Introduction -============== - -The ``is_writable`` and ``is_swappable`` traits classes in N1550_ -provide a mechanism for determining at compile time if an iterator -type is a model of the new Writable Iterator and Swappable Iterator -concepts, analogous to ``iterator_traits::iterator_category`` -for the old iterator concepts. For backward compatibility, -``is_writable`` and ``is_swappable`` not only work with new -iterators, but they also are intended to work for old -iterators (iterators that meet the requirements for one of the -iterator concepts in the current standard). In the case of old -iterators, the writability and swapability is deduced based on the -``iterator_category`` and also the ``reference`` type. The -specification for this deduction gives false positives for forward -iterators that have non-assignable value types. - -To review, the part of the ``is_writable`` trait definition which -applies to old iterators is:: - - if (cat is convertible to output_iterator_tag) - return true; - else if (cat is convertible to forward_iterator_tag - and iterator_traits::reference is a - mutable reference) - return true; - else - return false; - -Suppose the ``value_type`` of the iterator ``It`` has a private -assignment operator:: - - class B { - public: - ... - private: - B& operator=(const B&); - }; - -and suppose the ``reference`` type of the iterator is ``B&``. In -that case, ``is_writable::value`` will be true when in fact -attempting to write into ``B`` will cause an error. - -The same problem applies to ``is_swappable``. - - -==================== - Proposed Resolution -==================== - -1. Remove the ``is_writable`` and ``is_swappable`` traits, and remove the - requirements in the Writable Iterator and Swappable Iterator concepts - that require their models to support these traits. - -2. Change the ``is_readable`` specification to be: - ``is_readable::type`` is ``true_type`` if the - result type of ``X::operator*`` is convertible to - ``iterator_traits::value_type`` and is ``false_type`` - otherwise. Also, ``is_readable`` is required to satisfy - the requirements for the UnaryTypeTrait concept - (defined in the type traits proposal). - - Remove the requirement for support of the ``is_readable`` trait from - the Readable Iterator concept. - - -3. Remove the ``iterator_tag`` class. - -4. Change the specification of ``traversal_category`` to:: - - traversal-category(Iterator) = - let cat = iterator_traits::iterator_category - if (cat is convertible to incrementable_iterator_tag) - return cat; // Iterator is a new iterator - else if (cat is convertible to random_access_iterator_tag) - return random_access_traversal_tag; - else if (cat is convertible to bidirectional_iterator_tag) - return bidirectional_traversal_tag; - else if (cat is convertible to forward_iterator_tag) - return forward_traversal_tag; - else if (cat is convertible to input_iterator_tag) - return single_pass_iterator_tag; - else if (cat is convertible to output_iterator_tag) - return incrementable_iterator_tag; - else - return null_category_tag; - - -========== - Rationale -========== - -1. There are two reasons for removing ``is_writable`` - and ``is_swappable``. The first is that we do not know of - a way to fix the specification so that it gives the correct - answer for all iterators. Second, there was only a weak - motivation for having ``is_writable`` and ``is_swappable`` - there in the first place. The main motivation was simply - uniformity: we have tags for the old iterator categories - so we should have tags for the new iterator categories. - While having tags and the capability to dispatch based - on the traversal categories is often used, we see - less of a need for dispatching based on writability - and swappability, since typically algorithms - that need these capabilities have no alternative if - they are not provided. - -2. We discovered that the ``is_readable`` trait can be implemented - using only the iterator type itself and its ``value_type``. - Therefore we remove the requirement for ``is_readable`` from the - Readable Iterator concept, and change the definition of - ``is_readable`` so that it works for any iterator type. - -3. The purpose of the ``iterator_tag`` class was to - bundle the traversal and access category tags - into the ``iterator_category`` typedef. - With ``is_writable`` and ``is_swappable`` gone, and - ``is_readable`` no longer in need of special hints, - there is no reason for iterators to provide - information about the access capabilities of an iterator. - Thus there is no need for the ``iterator_tag``. The - traversal tag can be directly used for the - ``iterator_category``. If a new iterator is intended to be backward - compatible with old iterator concepts, a tag type - that is convertible to both one of the new traversal tags - and also to an old iterator tag can be created and use - for the ``iterator_category``. - -4. The changes to the specification of ``traversal_category`` are a - direct result of the removal of ``iterator_tag``. - diff --git a/doc/iterator_adaptor.html b/doc/iterator_adaptor.html deleted file mode 100644 index 1a559d7..0000000 --- a/doc/iterator_adaptor.html +++ /dev/null @@ -1,737 +0,0 @@ - - - - - - -Iterator Adaptor - - - - - - - -
-

Iterator Adaptor

- --- - - - - - - - - - - - -
Author:David Abrahams, Jeremy Siek, Thomas Witt
Contact:dave@boost-consulting.com, jsiek@osl.iu.edu, witt@ive.uni-hannover.de
Organization:Boost Consulting, Indiana University Open Systems -Lab, University of Hanover Institute for Transport -Railway Operation and Construction
Date:2004-11-01
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.
- - - - --- - - - -
abstract:
- - - - - -

Each specialization of the iterator_adaptor class template is derived from -a specialization of iterator_facade. The core interface functions -expected by iterator_facade are implemented in terms of the -iterator_adaptor's Base template parameter. A class derived -from iterator_adaptor typically redefines some of the core -interface functions to adapt the behavior of the Base type. -Whether the derived class models any of the standard iterator concepts -depends on the operations supported by the Base type and which -core interface functions of iterator_facade are redefined in the -Derived class.

- -
-

Overview

- - - - - -

The iterator_adaptor class template adapts some Base [1] -type to create a new iterator. Instantiations of iterator_adaptor -are derived from a corresponding instantiation of iterator_facade -and implement the core behaviors in terms of the Base type. In -essence, iterator_adaptor merely forwards all operations to an -instance of the Base type, which it stores as a member.

- - - - - -
[1](1, 2) The term "Base" here does not refer to a base class and is -not meant to imply the use of derivation. We have followed the lead -of the standard library, which provides a base() function to access -the underlying iterator object of a reverse_iterator adaptor.
-

The user of iterator_adaptor creates a class derived from an -instantiation of iterator_adaptor and then selectively -redefines some of the core member functions described in the -iterator_facade core requirements table. The Base type need -not meet the full requirements for an iterator; it need only -support the operations used by the core interface functions of -iterator_adaptor that have not been redefined in the user's -derived class.

-

Several of the template parameters of iterator_adaptor default -to use_default. This allows the -user to make use of a default parameter even when she wants to -specify a parameter later in the parameter list. Also, the -defaults for the corresponding associated types are somewhat -complicated, so metaprogramming is required to compute them, and -use_default can help to simplify the implementation. Finally, -the identity of the use_default type is not left unspecified -because specification helps to highlight that the Reference -template parameter may not always be identical to the iterator's -reference type, and will keep users from making mistakes based on -that assumption.

-
-
-

Reference

- - - - - -
-template <
-    class Derived
-  , class Base
-  , class Value               = use_default
-  , class CategoryOrTraversal = use_default
-  , class Reference           = use_default
-  , class Difference = use_default
->
-class iterator_adaptor
-  : public iterator_facade<Derived, V', C', R', D'> // see details
-{
-    friend class iterator_core_access;
- public:
-    iterator_adaptor();
-    explicit iterator_adaptor(Base const& iter);
-    typedef Base base_type;
-    Base const& base() const;
- protected:
-    typedef iterator_adaptor iterator_adaptor_;
-    Base const& base_reference() const;
-    Base& base_reference();
- private: // Core iterator interface for iterator_facade.
-    typename iterator_adaptor::reference dereference() const;
-
-    template <
-    class OtherDerived, class OtherIterator, class V, class C, class R, class D
-    >
-    bool equal(iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& x) const;
-
-    void advance(typename iterator_adaptor::difference_type n);
-    void increment();
-    void decrement();
-
-    template <
-        class OtherDerived, class OtherIterator, class V, class C, class R, class D
-    >
-    typename iterator_adaptor::difference_type distance_to(
-        iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& y) const;
-
- private:
-    Base m_iterator; // exposition only
-};
-
-
-

iterator_adaptor requirements

-

static_cast<Derived*>(iterator_adaptor*) shall be well-formed. -The Base argument shall be Assignable and Copy Constructible.

-
-
-

iterator_adaptor base class parameters

-

The V', C', R', and D' parameters of the iterator_facade -used as a base class in the summary of iterator_adaptor -above are defined as follows:

-
-V' = if (Value is use_default)
-          return iterator_traits<Base>::value_type
-      else
-          return Value
-
-C' = if (CategoryOrTraversal is use_default)
-          return iterator_traversal<Base>::type
-      else
-          return CategoryOrTraversal
-
-R' = if (Reference is use_default)
-          if (Value is use_default)
-              return iterator_traits<Base>::reference
-          else
-              return Value&
-      else
-          return Reference
-
-D' = if (Difference is use_default)
-          return iterator_traits<Base>::difference_type
-      else
-          return Difference
-
- - - -
-
-

iterator_adaptor public operations

-

iterator_adaptor();

- --- - - - - - -
Requires:The Base type must be Default Constructible.
Returns:An instance of iterator_adaptor with -m_iterator default constructed.
-

explicit iterator_adaptor(Base const& iter);

- --- - - - -
Returns:An instance of iterator_adaptor with -m_iterator copy constructed from iter.
-

Base const& base() const;

- --- - - - -
Returns:m_iterator
-
-
-

iterator_adaptor protected member functions

-

Base const& base_reference() const;

- --- - - - -
Returns:A const reference to m_iterator.
-

Base& base_reference();

- --- - - - -
Returns:A non-const reference to m_iterator.
-
-
-

iterator_adaptor private member functions

-

typename iterator_adaptor::reference dereference() const;

- --- - - - -
Returns:*m_iterator
-
-template <
-class OtherDerived, class OtherIterator, class V, class C, class R, class D
->
-bool equal(iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& x) const;
-
- --- - - - -
Returns:m_iterator == x.base()
-

void advance(typename iterator_adaptor::difference_type n);

- --- - - - -
Effects:m_iterator += n;
-

void increment();

- --- - - - -
Effects:++m_iterator;
-

void decrement();

- --- - - - -
Effects:--m_iterator;
-
-template <
-    class OtherDerived, class OtherIterator, class V, class C, class R, class D
->
-typename iterator_adaptor::difference_type distance_to(
-    iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& y) const;
-
- --- - - - -
Returns:y.base() - m_iterator
-
-
-
-

Tutorial Example

- - - -

In this section we'll further refine the node_iter class -template we developed in the iterator_facade tutorial. If you haven't already -read that material, you should go back now and check it out because -we're going to pick up right where it left off.

- -

You probably didn't think of it this way, but the node_base* -object that underlies node_iterator is itself an iterator, -just like all other pointers. If we examine that pointer closely -from an iterator perspective, we can see that it has much in common -with the node_iterator we're building. First, they share most -of the same associated types (value_type, reference, -pointer, and difference_type). Second, even some of the -core functionality is the same: operator* and operator== on -the node_iterator return the result of invoking the same -operations on the underlying pointer, via the node_iterator's -dereference and equal member functions). The only real behavioral difference -between node_base* and node_iterator can be observed when -they are incremented: node_iterator follows the -m_next pointer, while node_base* just applies an address offset.

-

It turns out that the pattern of building an iterator on another -iterator-like type (the Base [1] type) while modifying -just a few aspects of the underlying type's behavior is an -extremely common one, and it's the pattern addressed by -iterator_adaptor. Using iterator_adaptor is very much like -using iterator_facade, but because iterator_adaptor tries to -mimic as much of the Base type's behavior as possible, we -neither have to supply a Value argument, nor implement any core -behaviors other than increment. The implementation of -node_iter is thus reduced to:

-
-template <class Value>
-class node_iter
-  : public boost::iterator_adaptor<
-        node_iter<Value>                // Derived
-      , Value*                          // Base
-      , boost::use_default              // Value
-      , boost::forward_traversal_tag    // CategoryOrTraversal
-    >
-{
- private:
-    struct enabler {};  // a private type avoids misuse
-
- public:
-    node_iter()
-      : node_iter::iterator_adaptor_(0) {}
-
-    explicit node_iter(Value* p)
-      : node_iter::iterator_adaptor_(p) {}
-
-    template <class OtherValue>
-    node_iter(
-        node_iter<OtherValue> const& other
-      , typename boost::enable_if<
-            boost::is_convertible<OtherValue*,Value*>
-          , enabler
-        >::type = enabler()
-    )
-      : node_iter::iterator_adaptor_(other.base()) {}
-
- private:
-    friend class boost::iterator_core_access;
-    void increment() { this->base_reference() = this->base()->next(); }
-};
-
-

Note the use of node_iter::iterator_adaptor_ here: because -iterator_adaptor defines a nested iterator_adaptor_ type -that refers to itself, that gives us a convenient way to refer to -the complicated base class type of node_iter<Value>. [Note: -this technique is known not to work with Borland C++ 5.6.4 and -Metrowerks CodeWarrior versions prior to 9.0]

-

You can see an example program that exercises this version of the -node iterators here.

-

In the case of node_iter, it's not very compelling to pass -boost::use_default as iterator_adaptor's Value -argument; we could have just passed node_iter's Value -along to iterator_adaptor, and that'd even be shorter! Most -iterator class templates built with iterator_adaptor are -parameterized on another iterator type, rather than on its -value_type. For example, boost::reverse_iterator takes an -iterator type argument and reverses its direction of traversal, -since the original iterator and the reversed one have all the same -associated types, iterator_adaptor's delegation of default -types to its Base saves the implementor of -boost::reverse_iterator from writing:

-
-std::iterator_traits<Iterator>::some-associated-type
-
-

at least four times.

-

We urge you to review the documentation and implementations of -reverse_iterator and the other Boost specialized iterator -adaptors to get an idea of the sorts of things you can do with -iterator_adaptor. In particular, have a look at -transform_iterator, which is perhaps the most straightforward -adaptor, and also counting_iterator, which demonstrates that -iterator_adaptor's Base type needn't be an iterator.

-
-
- - diff --git a/doc/iterator_adaptor.pdf b/doc/iterator_adaptor.pdf deleted file mode 100755 index 24582c19e011038f781e81e0f17c6742239aa602..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100117 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 diff --git a/doc/iterator_adaptor.rst b/doc/iterator_adaptor.rst deleted file mode 100644 index 4f8ca01..0000000 --- a/doc/iterator_adaptor.rst +++ /dev/null @@ -1,41 +0,0 @@ -.. Distributed under 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) - -+++++++++++++++++ - Iterator Adaptor -+++++++++++++++++ - -:Author: David Abrahams, Jeremy Siek, Thomas Witt -:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu, witt@ive.uni-hannover.de -:organization: `Boost Consulting`_, Indiana University `Open Systems - Lab`_, University of Hanover `Institute for Transport - Railway Operation and Construction`_ -:date: $Date$ -:copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. - -.. _`Boost Consulting`: http://www.boost-consulting.com -.. _`Open Systems Lab`: http://www.osl.iu.edu -.. _`Institute for Transport Railway Operation and Construction`: http://www.ive.uni-hannover.de - -:abstract: - -.. include:: iterator_adaptor_abstract.rst - -.. contents:: Table of Contents - -Overview -======== - -.. include:: iterator_adaptor_body.rst - - -Reference -========= - -.. include:: iterator_adaptor_ref.rst - -Tutorial Example -================ - -.. include:: iterator_adaptor_tutorial.rst diff --git a/doc/iterator_adaptor_abstract.rst b/doc/iterator_adaptor_abstract.rst deleted file mode 100644 index fa887f2..0000000 --- a/doc/iterator_adaptor_abstract.rst +++ /dev/null @@ -1,19 +0,0 @@ -.. Distributed under 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) - -.. Version 1.1 of this ReStructuredText document corresponds to - n1530_, the paper accepted by the LWG. - -.. Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. - -Each specialization of the ``iterator_adaptor`` class template is derived from -a specialization of ``iterator_facade``. The core interface functions -expected by ``iterator_facade`` are implemented in terms of the -``iterator_adaptor``\ 's ``Base`` template parameter. A class derived -from ``iterator_adaptor`` typically redefines some of the core -interface functions to adapt the behavior of the ``Base`` type. -Whether the derived class models any of the standard iterator concepts -depends on the operations supported by the ``Base`` type and which -core interface functions of ``iterator_facade`` are redefined in the -``Derived`` class. diff --git a/doc/iterator_adaptor_body.rst b/doc/iterator_adaptor_body.rst deleted file mode 100644 index ddd7f7b..0000000 --- a/doc/iterator_adaptor_body.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. Distributed under 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) - -.. Version 1.2 of this ReStructuredText document corresponds to - n1530_, the paper accepted by the LWG for TR1. - -.. Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. - -The ``iterator_adaptor`` class template adapts some ``Base`` [#base]_ -type to create a new iterator. Instantiations of ``iterator_adaptor`` -are derived from a corresponding instantiation of ``iterator_facade`` -and implement the core behaviors in terms of the ``Base`` type. In -essence, ``iterator_adaptor`` merely forwards all operations to an -instance of the ``Base`` type, which it stores as a member. - -.. [#base] The term "Base" here does not refer to a base class and is - not meant to imply the use of derivation. We have followed the lead - of the standard library, which provides a base() function to access - the underlying iterator object of a ``reverse_iterator`` adaptor. - -The user of ``iterator_adaptor`` creates a class derived from an -instantiation of ``iterator_adaptor`` and then selectively -redefines some of the core member functions described in the -``iterator_facade`` core requirements table. The ``Base`` type need -not meet the full requirements for an iterator; it need only -support the operations used by the core interface functions of -``iterator_adaptor`` that have not been redefined in the user's -derived class. - -Several of the template parameters of ``iterator_adaptor`` default -to ``use_default``. This allows the -user to make use of a default parameter even when she wants to -specify a parameter later in the parameter list. Also, the -defaults for the corresponding associated types are somewhat -complicated, so metaprogramming is required to compute them, and -``use_default`` can help to simplify the implementation. Finally, -the identity of the ``use_default`` type is not left unspecified -because specification helps to highlight that the ``Reference`` -template parameter may not always be identical to the iterator's -``reference`` type, and will keep users from making mistakes based on -that assumption. - diff --git a/doc/iterator_adaptor_ref.rst b/doc/iterator_adaptor_ref.rst deleted file mode 100644 index 50c00fc..0000000 --- a/doc/iterator_adaptor_ref.rst +++ /dev/null @@ -1,182 +0,0 @@ -.. Distributed under 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) - -.. Version 1.4 of this ReStructuredText document corresponds to - n1530_, the paper accepted by the LWG for TR1. - -.. Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. - -.. parsed-literal:: - - template < - class Derived - , class Base - , class Value = use_default - , class CategoryOrTraversal = use_default - , class Reference = use_default - , class Difference = use_default - > - class iterator_adaptor - : public iterator_facade // see details__ - { - friend class iterator_core_access; - public: - iterator_adaptor(); - explicit iterator_adaptor(Base const& iter); - typedef Base base_type; - Base const& base() const; - protected: - typedef iterator_adaptor iterator_adaptor\_; - Base const& base_reference() const; - Base& base_reference(); - private: // Core iterator interface for iterator_facade. - typename iterator_adaptor::reference dereference() const; - - template < - class OtherDerived, class OtherIterator, class V, class C, class R, class D - > - bool equal(iterator_adaptor const& x) const; - - void advance(typename iterator_adaptor::difference_type n); - void increment(); - void decrement(); - - template < - class OtherDerived, class OtherIterator, class V, class C, class R, class D - > - typename iterator_adaptor::difference_type distance_to( - iterator_adaptor const& y) const; - - private: - Base m_iterator; // exposition only - }; - -__ base_parameters_ - -.. _requirements: - -``iterator_adaptor`` requirements ---------------------------------- - -``static_cast(iterator_adaptor*)`` shall be well-formed. -The ``Base`` argument shall be Assignable and Copy Constructible. - - -.. _base_parameters: - -``iterator_adaptor`` base class parameters ------------------------------------------- - -The *V'*, *C'*, *R'*, and *D'* parameters of the ``iterator_facade`` -used as a base class in the summary of ``iterator_adaptor`` -above are defined as follows: - -.. parsed-literal:: - - *V'* = if (Value is use_default) - return iterator_traits::value_type - else - return Value - - *C'* = if (CategoryOrTraversal is use_default) - return iterator_traversal::type - else - return CategoryOrTraversal - - *R'* = if (Reference is use_default) - if (Value is use_default) - return iterator_traits::reference - else - return Value& - else - return Reference - - *D'* = if (Difference is use_default) - return iterator_traits::difference_type - else - return Difference - -.. ``iterator_adaptor`` models - --------------------------- - - In order for ``Derived`` to model the iterator concepts corresponding - to ``iterator_traits::iterator_category``, the expressions - involving ``m_iterator`` in the specifications of those private member - functions of ``iterator_adaptor`` that may be called by - ``iterator_facade`` in evaluating any valid - expression involving ``Derived`` in those concepts' requirements. - -.. The above is confusing and needs a rewrite. -JGS -.. That's why it's removed. We're embracing inheritance, remember? - -``iterator_adaptor`` public operations --------------------------------------- - -``iterator_adaptor();`` - -:Requires: The ``Base`` type must be Default Constructible. -:Returns: An instance of ``iterator_adaptor`` with - ``m_iterator`` default constructed. - - -``explicit iterator_adaptor(Base const& iter);`` - -:Returns: An instance of ``iterator_adaptor`` with - ``m_iterator`` copy constructed from ``iter``. - -``Base const& base() const;`` - -:Returns: ``m_iterator`` - -``iterator_adaptor`` protected member functions ------------------------------------------------ - -``Base const& base_reference() const;`` - -:Returns: A const reference to ``m_iterator``. - - -``Base& base_reference();`` - -:Returns: A non-const reference to ``m_iterator``. - - -``iterator_adaptor`` private member functions ---------------------------------------------- - -``typename iterator_adaptor::reference dereference() const;`` - -:Returns: ``*m_iterator`` - -:: - - template < - class OtherDerived, class OtherIterator, class V, class C, class R, class D - > - bool equal(iterator_adaptor const& x) const; - -:Returns: ``m_iterator == x.base()`` - - -``void advance(typename iterator_adaptor::difference_type n);`` - -:Effects: ``m_iterator += n;`` - -``void increment();`` - -:Effects: ``++m_iterator;`` - -``void decrement();`` - -:Effects: ``--m_iterator;`` - -:: - - template < - class OtherDerived, class OtherIterator, class V, class C, class R, class D - > - typename iterator_adaptor::difference_type distance_to( - iterator_adaptor const& y) const; - -:Returns: ``y.base() - m_iterator`` diff --git a/doc/iterator_adaptor_tutorial.rst b/doc/iterator_adaptor_tutorial.rst deleted file mode 100755 index 4106846..0000000 --- a/doc/iterator_adaptor_tutorial.rst +++ /dev/null @@ -1,135 +0,0 @@ -.. Copyright David Abrahams 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) - -In this section we'll further refine the ``node_iter`` class -template we developed in the |fac_tut|_. If you haven't already -read that material, you should go back now and check it out because -we're going to pick up right where it left off. - -.. |fac_tut| replace:: ``iterator_facade`` tutorial -.. _fac_tut: iterator_facade.html#tutorial-example - -.. sidebar:: ``node_base*`` really *is* an iterator - - It's not really a very interesting iterator, since ``node_base`` - is an abstract class: a pointer to a ``node_base`` just points - at some base subobject of an instance of some other class, and - incrementing a ``node_base*`` moves it past this base subobject - to who-knows-where? The most we can do with that incremented - position is to compare another ``node_base*`` to it. In other - words, the original iterator traverses a one-element array. - -You probably didn't think of it this way, but the ``node_base*`` -object that underlies ``node_iterator`` is itself an iterator, -just like all other pointers. If we examine that pointer closely -from an iterator perspective, we can see that it has much in common -with the ``node_iterator`` we're building. First, they share most -of the same associated types (``value_type``, ``reference``, -``pointer``, and ``difference_type``). Second, even some of the -core functionality is the same: ``operator*`` and ``operator==`` on -the ``node_iterator`` return the result of invoking the same -operations on the underlying pointer, via the ``node_iterator``\ 's -|dereference_and_equal|_). The only real behavioral difference -between ``node_base*`` and ``node_iterator`` can be observed when -they are incremented: ``node_iterator`` follows the -``m_next`` pointer, while ``node_base*`` just applies an address offset. - -.. |dereference_and_equal| replace:: ``dereference`` and ``equal`` member functions -.. _dereference_and_equal: iterator_facade.html#implementing-the-core-operations - -It turns out that the pattern of building an iterator on another -iterator-like type (the ``Base`` [#base]_ type) while modifying -just a few aspects of the underlying type's behavior is an -extremely common one, and it's the pattern addressed by -``iterator_adaptor``. Using ``iterator_adaptor`` is very much like -using ``iterator_facade``, but because iterator_adaptor tries to -mimic as much of the ``Base`` type's behavior as possible, we -neither have to supply a ``Value`` argument, nor implement any core -behaviors other than ``increment``. The implementation of -``node_iter`` is thus reduced to:: - - template - class node_iter - : public boost::iterator_adaptor< - node_iter // Derived - , Value* // Base - , boost::use_default // Value - , boost::forward_traversal_tag // CategoryOrTraversal - > - { - private: - struct enabler {}; // a private type avoids misuse - - public: - node_iter() - : node_iter::iterator_adaptor_(0) {} - - explicit node_iter(Value* p) - : node_iter::iterator_adaptor_(p) {} - - template - node_iter( - node_iter const& other - , typename boost::enable_if< - boost::is_convertible - , enabler - >::type = enabler() - ) - : node_iter::iterator_adaptor_(other.base()) {} - - private: - friend class boost::iterator_core_access; - void increment() { this->base_reference() = this->base()->next(); } - }; - -Note the use of ``node_iter::iterator_adaptor_`` here: because -``iterator_adaptor`` defines a nested ``iterator_adaptor_`` type -that refers to itself, that gives us a convenient way to refer to -the complicated base class type of ``node_iter``. [Note: -this technique is known not to work with Borland C++ 5.6.4 and -Metrowerks CodeWarrior versions prior to 9.0] - -You can see an example program that exercises this version of the -node iterators `here`__. - -__ ../example/node_iterator3.cpp - -In the case of ``node_iter``, it's not very compelling to pass -``boost::use_default`` as ``iterator_adaptor``\ 's ``Value`` -argument; we could have just passed ``node_iter``\ 's ``Value`` -along to ``iterator_adaptor``, and that'd even be shorter! Most -iterator class templates built with ``iterator_adaptor`` are -parameterized on another iterator type, rather than on its -``value_type``. For example, ``boost::reverse_iterator`` takes an -iterator type argument and reverses its direction of traversal, -since the original iterator and the reversed one have all the same -associated types, ``iterator_adaptor``\ 's delegation of default -types to its ``Base`` saves the implementor of -``boost::reverse_iterator`` from writing: - -.. parsed-literal:: - - std::iterator_traits::*some-associated-type* - -at least four times. - -We urge you to review the documentation and implementations of -|reverse_iterator|_ and the other Boost `specialized iterator -adaptors`__ to get an idea of the sorts of things you can do with -``iterator_adaptor``. In particular, have a look at -|transform_iterator|_, which is perhaps the most straightforward -adaptor, and also |counting_iterator|_, which demonstrates that -``iterator_adaptor``\ 's ``Base`` type needn't be an iterator. - -.. |reverse_iterator| replace:: ``reverse_iterator`` -.. _reverse_iterator: reverse_iterator.html - -.. |counting_iterator| replace:: ``counting_iterator`` -.. _counting_iterator: counting_iterator.html - -.. |transform_iterator| replace:: ``transform_iterator`` -.. _transform_iterator: transform_iterator.html - -__ index.html#specialized-adaptors - diff --git a/doc/iterator_archetypes.html b/doc/iterator_archetypes.html deleted file mode 100755 index 323a214..0000000 --- a/doc/iterator_archetypes.html +++ /dev/null @@ -1,500 +0,0 @@ - - - - - - -Iterator Archetype - - - - - - - -
-

Iterator Archetype

- --- - - - - - - - - - - - -
Author:David Abrahams, Jeremy Siek, Thomas Witt
Contact:dave@boost-consulting.com, jsiek@osl.iu.edu, witt@styleadvisor.com
Organization:Boost Consulting, Indiana University Open Systems -Lab, Zephyr Associates, Inc.
Date:2004-11-01
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004.
- - - - --- - - - -
abstract:The iterator_archetype class constructs a minimal implementation of -one of the iterator access concepts and one of the iterator traversal concepts. -This is used for doing a compile-time check to see if a the type requirements -of a template are really enough to cover the implementation of the template. -For further information see the documentation for the boost::concept_check library.
- -
-

Reference

-
-

iterator_archetype Synopsis

-
-namespace iterator_archetypes
-{
-    // Access categories
-
-    typedef /*implementation  defined*/ readable_iterator_t;
-    typedef /*implementation  defined*/ writable_iterator_t;
-    typedef /*implementation  defined*/ readable_writable_iterator_t;
-    typedef /*implementation  defined*/ readable_lvalue_iterator_t;
-    typedef /*implementation  defined*/ writable_lvalue_iterator_t;
-
-}
-
-template <
-    class Value
-  , class AccessCategory
-  , class TraversalCategory
->
-class iterator_archetype
-{
-    typedef /* see below */ value_type;
-    typedef /* see below */ reference;
-    typedef /* see below */ pointer;
-    typedef /* see below */ difference_type;
-    typedef /* see below */ iterator_category;
-};
-
-
-
-

Access Category Tags

-

The access category types provided correspond to the following -standard iterator access concept combinations:

-
-readable_iterator_t :=
-
-  Readable Iterator
-
-writable_iterator_t :=
-
-  Writeable Iterator
-
-readable_writable_iterator_t :=
-
-  Readable Iterator & Writeable Iterator & Swappable Iterator
-
-readable_lvalue_iterator_t :=
-
-  Readable Iterator & Lvalue Iterator
-
-writeable_lvalue_iterator_t :=
-
-  Readable Iterator & Writeable Iterator & Swappable Iterator & Lvalue Iterator
-
-
-
-

iterator_archetype Requirements

-

The AccessCategory argument must be one of the predefined access -category tags. The TraversalCategory must be one of the standard -traversal tags. The Value type must satisfy the requirements of -the iterator concept specified by AccessCategory and -TraversalCategory as implied by the nested traits types.

-
-
-

iterator_archetype Models

-

iterator_archetype models the iterator concepts specified by the -AccessCategory and TraversalCategory -arguments. iterator_archetype does not model any other access -concepts or any more derived traversal concepts.

-
-
-

Traits

-

The nested trait types are defined as follows:

-
-if (AccessCategory == readable_iterator_t)
-
-  value_type = Value
-  reference  = Value
-  pointer    = Value*
-
-else if (AccessCategory == writable_iterator_t)
-
-  value_type = void
-  reference  = void
-  pointer    = void
-
-else if (AccessCategory == readable_writable_iterator_t)
-
-  value_type = Value
-
-  reference :=
-
-    A type X that is convertible to Value for which the following
-    expression is valid. Given an object x of type X and v of type
-    Value.
-
-    x = v
-
-  pointer    = Value*
-
-else if (AccessCategory == readable_lvalue_iterator_t)
-
-  value_type = Value
-  reference  = Value const&
-  pointer    = Value const*
-
-else if (AccessCategory == writable_lvalue_iterator_t)
-
-  value_type = Value
-  reference  = Value&
-  pointer    = Value*
-
-if ( TraversalCategory is convertible to forward_traversal_tag )
-
-  difference_type := ptrdiff_t
-
-else
-
-  difference_type := unspecified type
-
-
-iterator_category :=
-
-  A type X satisfying the following two constraints:
-
-     1. X is convertible to X1, and not to any more-derived
-        type, where X1 is defined by:
-
-          if (reference is a reference type
-              && TraversalCategory is convertible to forward_traversal_tag)
-          {
-              if (TraversalCategory is convertible to random_access_traversal_tag)
-                  X1 = random_access_iterator_tag
-              else if (TraversalCategory is convertible to bidirectional_traversal_tag)
-                  X1 = bidirectional_iterator_tag
-              else
-                  X1 = forward_iterator_tag
-          }
-          else
-          {
-              if (TraversalCategory is convertible to single_pass_traversal_tag
-                  && reference != void)
-                  X1 = input_iterator_tag
-              else
-                  X1 = output_iterator_tag
-          }
-
-     2. X is convertible to TraversalCategory
-
-
-
-
- - diff --git a/doc/iterator_archetypes.pdf b/doc/iterator_archetypes.pdf deleted file mode 100755 index 8cecde3095478dd62d57cdd95534a8cf43fcfdc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61213 zcmY!laBIOiwLVFj6p32;$QB zFD=Q*%u6j+Fg1k;_$B717Au&WLwF#yzWFJs3i_eNsW7!%`k_Id3Lul65{pw6G&H&F z?6~y9GE>V_ivo&L(^894^O94GK`KBJ{spOdj>#pN`FRS424+xmLtG>D+)8tDk`nXs zQi~KcLNYRo6*7wz3R2QSQX_N}!cvQhK{|}}3{4D8Ep-j`3=NXN7NzE;fIJ3rKZpi7 z1L8rDTZ_5$y)#pa6`~c4K^7^PfbCN-u>|u>L7IXTV!8C4^Gowe6ih%4hnfdck7*v4 zzGGfqehJ7x6NnLD5@ISij1(-uA`lA<4Zs{jQ0NCK7(%Qw1Q{KqU<3rmnE0uqZ- z^GaYb>71WelA2ditY8AR0m*A1i&4D>_7s=CQ+`oOY7x|Y1CWs(3i_U0`p#e>Lj^;S zP*7@ei9)o3p@o5-rIERU8OVBbO9f*CBRxY)Lj^NaBRz9NuzP|_lS;rz%_lQ2n@isj zlmMWK4-)@e`oRjIv;#>%8o7y?IVJg4DT!sN4oUg>#U;AQ`FX{qIVG8S>3Yfex!~xw zv*Uus5Xf5;d&AhkOwY*N6yXhXGd*K7YIq~7I5RcdA-_0BFSArHHKi2I^`Q8s-1Qa) zdL|}jaMzodTk4q^7*in<$}>w!9EwXSb5avi$})@di?BohD6LZL1$a6#vedIQGEp!x zwa_!NG*U1#G0-zNGX|wNQqxgJNlAf~zJ7UmxgHV82$Z`h_Jy&DnVzwMse&2Q7beCA zdPc^ERPqJRL{ zBTGFq3ljx1BMUt<@(LrQL`297pwgXUFBlma=$RQQm>QYt85kNX7#o@E85kKVm>Qeu z85)BNUQ)9`T4qkFm7boyo}PYkeqM5FK}mdaMrv}ler8@uYK2}#Np22WnFOw&NcIWH z`{2p~S~FN$=ouR+n3x;unHiWW7@8RA85x->m{=I;nHn15%+J9J`tJE5`CR%g3L5Y> z1G@V_H7CXHGc*F_O$!ARQ$sy7b5Mz6re|qlqF`cXq-SP8oC`BcQi~Ex@{4p6i;^=^ zLA9K2ab;e9L2+g=x|_+WZPCLN?q*|CJxgOy0yon$GqzALF)`CK!d*xr2Wnz+a%yq0 zZgOHtYI=TArEW=LI)+=xs#0;f6%@_}CJIL87J8NjMhYgzhI)p^#5opA_!gxWmSz^E z=7QQZ=wVD&Ws1|?1}1tYphCpdK+n|3Lczq)RL|7HoT!wG#of92DXBRaAx&1@iOa>t zmIiv3CT0qTrp9`vrp5}!mX>-3My5o$xTGjCvjoF=$d#g7eqIT<>E>o)u3!kNa)P+@ z-As)Xj6g{n#I{f{0%-s-O)V9S!OdJQeK#`$1!IsuLE>hn3ML@u2Z7q5`T<4x$-$|h zW~6?Ai<^ReNNPoiLM%uM+O`8*gPPMp&fwCA7lNQRz9E;sYhH4GN@iZVf)S`q46-S+ zsJO&ABe6)q%#=&tClSgqG&1DU56?^~$tYGZf;dDU)LQ|Ws-Pd>?BN#fqV4P(WN6N% z4-#`pElw`VEGWq@QZRz}2hs2ZTZQU4m@~NaT{6?)9Uf3aUEe)1H#bp1-z7DtBvC;> zBqJ3>`6T8hr6eloM`SAK2V^Sf2WO^(6onQPXXfPRDd-1efFz1D74-dcQ_~X_^wZK5 z^wTmG^wV-cY!Cy)O35$DNi7B`gR-&|^wWzH%Tg8e6O&6zQWf-*6N^CRB^9ND1alLU z!Q3KHi0LP%rex;iBr52qrxxWV=A|U%6f5W_rYh*?gK%+9VsVCozN4#xzCQ><`NgFL z1x2aF#R~eV70Ee?xeEG)rTHbPDM>j+nduoN3i^4axk;eTT6&&>eoB5$PGXUQenDzc zGN@~!pO{;aT2!2vmjcxW)l&fKx#Xm#l_=!=d~i@^ zR2F2U=7CMk%ui9!hq|mPwJ2XfKR+*3LBFItUqQblqbN01K|d|OvDTJq>pID-x z@2H^fq@eGtpzorf@2a5hrl9YxpbzRjDd>AC=zA;Z`zYx9D(L$u==&?^2Po(VD(D9( zfVw{+3i_c6`e6$C;R^Z@3i^=>`cVq{Nkxgt*{LOv5P^j+ga?&^hEQ^5QF3W+T25*O zD6mUFWqe)<$ffxusSx#v3i?S3`pF9VDGK_a&`{7%SJ2N;(9cxR&r;COR?yE;(9c!S z&r{IPSI{p|&@WWbFH+DiR?sg|&@WZcFH_JjSJ1Ce(63a`uTs!Y%}W8Niqu>Pol%;X zo>)|xo0C{tqM%=rnFAUcNXbksN-fSTR?vqh7DFRT1%17|{F0Q^GzCL50|ou!g2d!h z1qySAp}8TFvF65uIlI6^#n93m;b`PS4_q#R%9UsZGfPlY2UMiNurauZh4F}?O-w;$ zwF!8L1wtAqn1Y8Q5V}EXAY#U*pwb*dLgY;>Ks5-oKn53rAh&_WR~(DMx!KIpgiGH! zvA_e8mCP)Rx%5HhCMc)t8d{n{N>b1O5_$>iS(2EOne3RCo|CFzz@;BtlA0T)U~0^z z9|1MX#Mls`+X*t@p=)fcplf7mpkQfYs$gyc9$s+ENlY(R068Heu?SR~Xy`lYd+I0Z zC+nx`XXxka7w8x1m*`h&LQHbY%t=)+0tG9$4ubg$Bmnc5PikIzNrs_L_wI10vwmY~`qGp8iANI~B%C$S{eB{exeB^6YW6_*sHCgyTg+6d$Ko?rbr=XYIk{rcD6_y5~}zBE=pPtvnk+cnnasZNH6;$;y* zFAkFh`B|L~j2x;KE^cn~xsozjxFnmGHfAs^T-eA^^7js7szpP9^Xe6gr-mvTHP{`s zp5RsReF0-Y?N41nt_!M-AxwPUY(5)J_$M4$)p%HlQJbre;S$qShFB%R4R@>_az`}n zQ<%#4XsQASON07@j02Gu<~p<;*v2C{@va8Lt8|I?&;Po2@dedJE@RL*y~O6grjF$k zIvW|}N}3Ox(O9$FVcO*XZ7buurGE)_rbS!|`?*%_Z?u%Rk^u96%>@(o{LN4hHCXz< zQR`>;O4%QmXKQw-|Cm^JR_fvg7bd^yZ~Ryof1DRMczuEZ!=tmDCUe*yw5k4TvVWu? z`F}NM*!{YQhMBMD8*DkO@n_ES{yCP@9F|40SN)GH_5RZ=SZ}!6I>d?L0ZVw(VL=_m z*MA?M{yBX&&j|~zc@Am1EJ3^nf>z#e;K(+PXklp*U})@NXJ#;HNR?RTvg|^HJ42Yi z6N5RI=q6J?Qx%5Gce(y5OyOcM{xvz`b5r7fC0>TM-;)J&%nd%|ui!dh^Uvv;(m{=S z=TwGgf6Y@mSJpe5GPwQbo*J3XT>oHyd8mKCkie1^i&cgO?B&12(6Z*kfbsZ;kpNL^Gj`!#J%*OI62c;*YWWxd((|DE>9Ifwm~oo$oL z?*&WDT7Kmx=bGp5&v@Rn*nC)3U0f-|^0es&-PI2oibO3<|9kH8X{^~AT&dvrV0Mv> z)GoJ|zhpJeNLasnE+n<>R9yVY`7?K3&dwJuDtc+N_s_+OQm@WUb2=XFefrV+BFUcc_b-!o)OSY;jrL_;+e$Q=C=hevE>E^iiN2I^*joB-vEo?efRK0nn`S#X@ z=ilqPxF^1iUKgKjs&r3X<6B{eK+}|8zf+@v53}8l`T1fo8~?^hPtKov^?T*7wbjYz z1&gAmn51u5wg z_fGe4^voGwZXA2iXxTYB$rxF`t_>qjp&abedT3U?HhhC-hXoLa~|uR zzK>I%?UOhIC{+RvRrdMU>^y$Tw)U_{7%oipfHM*UaHFM&* zYnEEKeQ(CyiH;AAak&>Cx0%-^wEpb(nH67U7c-yDT)SWJ-OX1~X|Zb}pIHaSsa`F= z9nko(ir-IP{O*+E+ZP+2*RB7qynFYe=`61}jO1sgJFh=}@}3N%ONOlB-Snp2b9PDH z)jqUdt@6pH&}%p4(?zbxu6k2>U2}cb_T6ub4PG^#J9(7-^OmJ6gZ|F>C+_b*d%=fJ z?_GP39cD8WE#tdlAmrH>owsMn{Q3Dy()eyy8fQj@Tn<=wwo(5A-@F(;L#AsktbZj^ z_ivBts_-_Pcw)lJjHzKCzr9FQdROz2HRRlv2{)QvZL9Wm4f&sbuy zEE|^BUfGbH;8&n?Y5Ae(8|6#ZPb*&)6uop;){e4S6YoxvdwyzbqwF&NwcU5-M9OA*y>gTW7=3hMnIK!*&P02a-dpdLFQYqVKv)qig zN*^;j+M9gv$ge-`r+ET(d-~5g2N?I;-U_^9=k$VCs@nd7NsCIrmwzSIPN!xiPT2Fp z_4}fKS*iSu=3K9Or&g{w@lW&p?Cja|R+y|>pKaVcVe^iI?vtM_yf@|Yt< z7Q5@Kv0HY^KCan(t~K-Z9_Pnve~Rxr{`8m5{Y`1J#U8AW%cyre#iQmL=w6y!GEbj7 z^%#HOlroML@lEgIb{O5?bB*chFOGFmKGyRqezTmO(;#>_ak)~KF-mFz-rOv^TWpijx zT%JYVp9iV?MYFbfTRc&{KKp30(Z&f|*S&q)(;C-WuyNxQ5z(7bE7xysl>V}&`xx`w zbSZt=GhqoQ)}Najx<5u-*W*a4e3eXF|HE@HEL9lmLeAVzo-Og(!rU(DLZ zzIJ&-z@2xegg?hqO%Jm9wrh^L^PAJ{mA!X5{Plb<&9Jc`)tHpG*20djt9GMKU#|SB=}97&XF9#-K5f2r$Iziw_SbFJUQ^TN0$+={O6-gQe1xF z*4J(KwAqL@7yfR!r_yP+DqzQw@M#MgW?gtAa!Y&Lt<&p+YgRbBugdt|oqP60s9;ye zva+wGoNo){e_v=g#C2Bqp`6)A{HJ&pol>=YFn! z-9JN0eb0{4pJp~SPO`uD&%Czbyrj=#=DbfUEY9rKPW!Nb@&hkf9SNa;1>MfN9>JYv z5BL1KI!jHk$=zs;xjVzlB{LVid$%pE+eu$RaALqdDeXTpfnPqoyZxjw%_*wm|D%nk z&Gs0cpO`giM~Qp&5bP`zWX~R zR124S)z8wpAE*D_jq#bzshYV44k^d4)<9(;DX!q?A z-t}8sE@*mCz_ro|c}LQ$IUjCF?YR3-=wPT#=e80#={5Pgqs)yLY?{41aY?}bn#7R! z2eU=oE`BZEpOLipc69nc7x0(h{Cq+vBv3zT6sBgC*8X!JOU3u#y_%F)l$(^1>m*D1o#0MZKs^$%g= zYM@bDl)f0q0FdjVL0u~aNG}vZT9|?QvKGdM3KkZi;W&sWGHGE3@*70N!T>^JBTY>$ z70iq+p*>+!BXb2~Q$qz)b5pRWF?it70BS#29aP3Z!NlA|!Nk-=!NkNItQKOrnSnXj ztXSBzv=PW#AYb6?DVw46luaOE1L-NF1sc|_vZ0{~QeW8wsvq80HZX*AmJJQfOcX!^ z!?9eT?kRe289dUZ@2Kyr@1pOoAEKYAp9JnZr|GBbXXt0@=ji7_d(p-ECHkfMmHJgE zeQC(pF4DLtNC4(@NcY)L!O+kEG!6^ySsN*s8XJR>515DAnKm;pGv?BFBh;Cmo^BHp z`}=+8Jy(`McNhKU7p7TGU+y^_li)erW7r|I=)24Nxi3_`zT8_Rtm@{%8R+El{?JV8 z^Z$3gpYy!3^4#jrmeudYe^;-~{=4q}u4}jS&8%1V+3j!Qy(6`VtK97)Hz$WD;}jE7 z-xd}|C#I&Rt|M>WczJMeu(n!jHwOr4HcVKu#K1u`skic=P0%8xpr)iFZx~c94heH^ z-R#b|W6F;IUP9~|7LF4F3{FTc;B>m_JjXyPL4aogKfAM{hCgEi6A#;k-`Q>24*ZX} z9CtbAuynMxFqj1xa3%0=Y_<|+{{Lyovm9>rj{n*@kK2BHpJ2`MvdfV5!LQuO(hY{0 z%;jyBOgReMjyULAER$k+{Pcg@+W#WqrOgMoIQZ3{{QvGseQ)!e1qSE;pKP#Jyb~ax z;vk&I>}d5reU;&p_-7&yH~iOH+{ScpK>};KwFHa8kM#mqLPdWuB`s!lZG6kPO<{)i zlX96yIiKf?8T9_nWyn~zVCk}D2Y%aE|EdmPXDM})tWf$l?XUK4bMC)~XS`EbsL$}M zX~s9ML?OfP`|r>D>uxBTZg7X~RSvs=m?(3@1dj>ohR?nvc!)gEWofXw?GVSHpl{IE z$aJniB#n#V@}%hu(H4__tmhS-%D`~2Kq5`w@Zo(y!$5|Bhw?(~3{(Fp`fU4jUqz3T zA?v@dkP^d!gZEo*W-GjqKXhjEzjlMq2kIvaq{TX%kk{a0xb?4*pV48ry+H8MfBZ*g zwEkIo zV@GF})ENVl9c_;lSIeb#d3(Ll~-P{o4v&Kilz@Bi5Cx!U_mX}*E_zgt|d zWqRZ#UwX-#bt@_U-g8(%{==rsm40*LgSJ?wm}W1w*}d<{-x+EfCM_&Jn=|vfSLn-D z_sgBEx3h|6KObH7=}>}X^O*v54Fxvc-v?jREc;tEqwoLStgKIsXH62N8D&0AyJMbM zpkSr3_L((9zRmn)H74KO{P!|t#`Z40?S9YZ5W1q*YV@iQ>BFd$>(Y^7O7RbWjn$ z*L*FU>-X!Z*_rF5i)|+{m&?n0Zc?{}j1>oOPwrufHDd_#ojRwEFjs+=UHS z^wtHxaR_|6_GU$`WG?_6SZo|@#*`U9=!jpx~> zq^Nk-m|t+W{o4LRdCTh`>kc$~JY8tL>Z2>;vRT3bacB9&X5G6e-&(l$$*KLf{0lYn zFK>M%JzKtjD|gPWims3yGroG*3xCexkg8d-%TCL=N9}(_(viTmUkm{{dEYmEk`^u-i^@%rj*_Ti^pCfke zjEgn38*6rKPI~+D;f0#;mdL``Ge4)%r}5i;qMq=^k2Cy>)gk$CNV;o{q=2A6wgdKwjux zt)AEYKd1H<-U&b0;PocUH@)Qazm_9WRu|@e_k44P>weP4yT6o_em-p6d+zY@=r3AI zue?sj#|2D^RWJ6KG2zmj3C8PobS3Sq_uGHEH zr8Gl9N~UpkwfD8tfxGqwKJxbtP`B`oS~78VkJazTlAql-Jo&mbPO1H!DGOhqeV_-& zSKBpPzg=hV%;PnmRdd^P<@cu-s;ai{lKryX|Iv(_Sz+E*H{ZPen)a$Gg}wcq(_9O6 z+k3Chzu)rvQPpwp>dFPK3$-5Ycs73}+oHYd#vl79y%1!nykxGXAGvDF553JB86@Mv ze{pK1e7Vcqv+$hvWG&mtPFz>5C*RoYRAu71a>=B-wZ2_i2`)FcxcGm+aoyH#<_^A@ z5;6KOV*aJ3e)F}tVwdM7l4ZqztH7e;a?otgeW4M%XMIq77PQ;$X~M(=x4G*dw!HpT zlByi^VDsx6kM%zup8qjxp5V*V64yVn2XmG6b=+}n>DF0dy?gzI_3yKk`yS0U`@Qb2 zj>)0g>O=B16M{qTEuEgz+4zv}fN|dZvOU#N&X2nJ?eu$VHZ+Afo|^IBC*}XfuiP^w zKD%_q9awRf)7G~6>%^5eHmDwV+*V&Dd4B6u54ZK3ONBmlT5Z*lFyQ&rC%t0Dl9ubO zMNf=>-nn>VmRgKddK*DD>i+C0D`;}}1GlFYH3Qtq_#%04^I-%n)^zid73am(3p+mB+F z_mR(j`5QgI>(J8hb9NcH^uK< z{)6|+lgy_c3;b^GwfDmA*|q6hyAFO_dA0cTj^kSHzK=N>8B0HYp4+>iTI!Y1?~v(p z>X_sFCw$L*^g>9?i+yFYeD1WLYd_qx%T}8Z#{EO|@x$+1KL3-g&s)2^`tRazK3Ok{ zvKST_O$z*#`cyVkpzy(gwXtV;*d`v)S>~ilu3+WL)zcO<{ zN1PnDWAVlM&rNS8z1Gjjb_`K)dT3r2VG~;xSuU99mHYB(F5lMJc==5auQdnzq}`l; z>fNod)9?TB9BIotG3&jr+{IZl-|DNID=*!*Px0juUg^YVD&J=O&I&zVn)vaf-{OPi zFD~|p8{bZ?c>iKk#wXWo3$2G$UtY$s8tnCq*k?Oe%IC5|q*u(7`<+=jKT0E_<^}FD z(+o;G=l|Jda|!gbf#QBbAeSoQaa)4RU0j_$DbalO~3RkApT^pxvyH! zTcw{Tqh~qJ5_^?4k@JXL!ruzc*|jWT=eH>QImfeT&-upee_ND-{?4A9y1w*fNBEno z3aN%0UT?~CKKLzQh1KcrHy7Htw1nxsJXiYh*~ORFYhN@^*&@cFb+tP{uu#xa_fZJ% z!|Aj3&3xRE{@8!|n@QWt`t2rf*`{_TK74mr&x;4D<%LWC$C;mv`7alwG3|fg*RUl<=?``xrm3WnHvagHQl#Df3 zT5Kmzv_B#9bIHRQCzd^0Wmj+7z0S05ncc=;LD%EkE*^jQx}RZL$=+|PA}^>nUxh*17#oUWp{N|DIcC&O6;%=@A$eO7X@z2%Zl*7?I#n!fV?!ViT_*9K@ZC!7@ zf0;OSt=ytK{X=$w$7UTUvh1qJUG(t4kBAEs%eDVFFfPh{7|X(O?wfze`G^ZODdiza z*OWh$y4e`npL+UQEZ`~MtPlH6xH-5V5}stex4gO9nZ4I;{eL5Y?v?i640lQ2e4Jdp z;MJt**-js#5~~DiR(0o3|NX7{4qx~8Wfwlb{3&rhJ}Brf=WMe@!p9~`9`bGqt+y!IrIFFs$84*c{EUoLVI>+4;=xO@Mt?uq5BkOsTa;qtD3gXyJ|Wh@ZK* zwexmf^3u{T+xQore&kgX6fGRSUS)^*8oobkC;zk)d1vOd-^P+f>lbfzmvl1sn!W!c zZYpTFpNZe{XoLBuAGKFp)|Dsjc6qqh+f78&^ms1ovW+XBiAdURn)^iiXyxBSvoxn~ zF)O&TJ(DH;lx>S$mf7{hSN}40CH$Mhduv}ro6qyzzpC!G@z(Z!QrvnmVr{^BuiW7C z6A~FOJTtjt*C!n$VcKvbc4t@Kssq}2hKEfzRHZK5vo1aVT){27M|;$d`s)Nen*3nq zj-tqII>|~q7c81Dy85=$CB`l3t3Fxwl?AIEKHr_jylhUMP<+ps{Xg#&`0upvKKK62 z-LUSN);?L4nH4MzS&p5&`^^_U-nZz^ns0I2A~Qc$=-RWGNzKjscOmY6svW2C`!jR7 z&k9}b;f+wJo)EBenX2y58{_vX;?04$o zl%f-|lfawzi;nG?@FKWe@6f)-+A}`}tgAFH=zSVKVe4a)_8^7# z2ElvlS-0EYWRJPCeIawjZE3etQ!YK7a^{PFRnz2~TQ|g+adds#`AY5jvK0SR@3ZS1 zE@hpn-8?JVf~SPz@9$fclePJOyL>lqOf{NWBV7}IFf6!DT`q8whV!T3&`X^E6|pK6lbo`^lC?ufr--zB*^lF2(@x#%m-$(PjP=fyOioOkHl^^6jiXpY2yf6sl| zcYOPEUdmKR+UDgJdHc+spoL3z>Up=X7SGPkPS24Gp_j!4%P4}xdGEI5Lzgjc%tjx{LG53nsuQF;;RY{yX zJJMC)&Z8?nPi)j@A4yufR(rEtm(RlbzmsQ8Iv+SsFEmX+aG$;0428C;;QIBCedivt zIB%FM7ny$0+tuM>@&!TueJ@u$QMi|N#_#Qe7a4^cw0W+V6xN$QiT)cjZ_$O70n0nu zE^K=rXEyU3>tp3RwO-j8+NW9XZ+)}t$5-L+;-%*0#pkw%GU(0>QGdU7L%eM5VwZL8 z>yDil>)rL+CS=38@+h6i#OgHyHASQLovo_( z^qI)PMR~K%I=oE({QA`z{YtLE?PC|E76qS7y1CTJ~iP%KB(hV#9k=jj=NqEC9= zL+_<;U3TwNsrN>6+wDu1+iZ@t5HbuXESe$J-j-+N(PMFiVXbiZ%kal4e_!pov0(=n z_fj_R*u}B#CYF3zvxCph@+XBOuG~cJrmr8>U5Prt>PMo!+-i z=l;)V#k=RX9J{=c_m0GL%_S8XRdau^Z~Yi?bMDNWA3c@Q#oP8(Efw3d@5X+SEM3LM z43C>`TvN=p@4u_?Y445m3nxu==U8%I&h*=3wcy{^elPjEW=>yyP#oWK_nAVjMlGp7 zxofxzUj)ooh(A9oqx8(~{6gJxAuGI>-g|ugQibE%ewNs?oxE+Xvm^FDEt>dYR^+FR z35hxZtkphM3hYTuCzRWqp0E4#Elwg*cX9gR{cqQ;|FGKXo!o{E^H#0Ptx9h7?G_Q~ zFETF^-}1JF+3m;7t+ty)R^PjFdFlMnzUav3RlE1c?p(}!;Gs{})%NGvc3orO0UnF)iO<8uhK%-;UF`J^gd-qnz{B(=Vo?Vzy+9rEUQ}(7` zw1a4w`9+4Q8z=Pj=xx?1(7d*ofBhe${epiNHU7W&FwDA|WAbg^mQ#lw^*J76IoFsa zv@;-j*8w?8+ve7fm2E4xC`9eQcKOv}Hz>!{dlI{U@8gU-{;( zC9^GKw{=H@_yn=I#IXI6(+%SGWlB3~GR)tSKT9rT{?a{$);BIpRD34f_rjxU&FxPS zO9Zx6P$(3X9I9b{^zU}9nd)&io94a^`8 zH8le}8_YMd0JANOjlt?*`as(vj4h26j4e$Rj4do7az+pb8z_Ke;nQK@a0UgdjSZJR zaSKPG(^-(|Fw{uIIvZwYi8L8zjJ9yp$P_jiW?*2c0NNaeeKIU9Qy;v%TpzN!T)!Z- zC^J7rAGD|(w5A-iq#UxM9K4`hA2N5ASfcN!?*yJebJO?K_tN*#_tp2;57H0T577_R z57&=^PO7Eor|QF|)w1-n^>g%dp_6Nc`bGMX>9sQba@57D#*lpqhzT~Z04yxw6Ktl2 z7O*9$Mhb=o2FAuPF6s=Mp@F3_C?61-Vw;f~G5hYd1%>6B0Xi8UAB5eJ?GkPBE)cr2 zaEEBQ_EGMm-O-vN?T_B^wLZ#A{WLFs-{o^N=Ns>THcKUZ-SfC=+wA-2Z(09#m&h>L zazj;j;j;uwjU&BtyPLfw6xOafd6e_PqX$o>97;%-P{ufW=S?R?qqMw)M26`T1k4@y za`<*P)VBPrX#KgvP=eu7fO@`obhflP!(@}s_MS`(p6(mE*S1QsEXaD6#$48Nb%Q}M zLx!Vn&cVEUG7O&V>--O9y0)`kli};rlqE|; zBmQUm{x@Bgn8sar`CHkq@~ice{vVC0m$)V?9=z%m$YmzxS{2`IoF0*};0{ zl2{V&gJ+M~XYAZDqcZtG8Gp|YhJ7&%(H*KcxEa1RaWY#f1eo8@Wr*X(?9dig-i{3^XiZN+>wy;nCYMPV|n2fyHC$=cwn!`cfnrx^WisV?)+2m@%_Yq zaLtl`6BrmY{7|HKcivH9mTW9oDHCvBM(|GEEvk6$}QD3!L9Nc>kq0d-rK&*hxvNygTVV!Wl!lZP@n#Efw17W z)`{(I!up4I>P#|EIx4KM%9)v}qjErxY3Oq>4a_J=kLx%-Re&T=oF z-0D&6|0g^%kVP)KfoX3`xtEzzfPzCz*(p>vMhYzvuV?*4U`qDQipn{fQs!k|#; zgXcCA33K`ZKN3~0)obQU67-3^C-mEHf`nr$$oteQU+qssC zxciE=vm8B~ynXFF)$Va>`=GDN3n#L>=QiuVwcUA4|B`OtY5OHFEPUoK zx;TH&*=>#4F=FfZj*7hJPAhuYU##llt-y1pc*Z3Y@X2UN3dd`1O zRqdx7dOLqG{`ppPSJr=D72kx9s|EJ$JjEt&?yQij{(`5~;)$PU|9SkHx?1?N-)gz^({)=|{+8$MKFMABldW>$FON2_ z)n{gNPGS~a8gC>tw{QMKqwx7V&i=f_qpPzwv+4f)+yA6KBrfe(S@I$4j^S!Y-~Xp> z*&m5rullfVt;fIM`bV?;{m$I93jaKJm(G>onNPocKU#A?`@!!s_jjyYYgC$iM78Bp zNbBF9_Iq58zFIlet(@WA%`z>cu-Tt2%>O?8HdSNxPmdi}-$?tH`Kxg=&X?{C%DrU2 zwR&Z0Lw3Qp*PDeOEBT6^*P9$Hz%MqtH8i=xA|rFvaRReLTr2P}7~5_WkS zDZA42XW9L0k=d*6zBhe3)MeYEKgHiAm~7rJ3R%|5lli45?oQZWw`H6&_H{n2 z+Qe|MS1Qr|SJI99CpBjCe^^{ubkP>f)Gr zyFA<`-gx~V_ zo3_|K5KDNN)MTD;$Il_6`C-}r1>KDfX0qOTOKN}35lWG|Wq3Mhbwsbj(l+&feVL#2 zUWQEAJxO+XXP9BrmF>k-7d@M_(kDIEOz!C)n4fVgO>1m4XQw`Ap4?o0?$rL-hl=!$$G3j_!m+)>h-vxry5+A; zr(4fbZfx3OXLC|lcLR6K$5eJ}K^FPbp*z+`Yx>naOW3{5`>enxmEwatYSjZ3WW1s# zO4R-0yv4}R!Lzrh%J0RuM{Zk8<HUve$X6j-yINU9NsO;5`|`~#%v*jW?k;`Ed;Nz0zd0P@QY=50 z1#N7$xVe32sha)oZLIMbCdQYU=dRzCw4U|cE%nvw>a8aqoVDoo_wPND%Pvj`{?lH* z&X~RX;I-~}hpieje?5=nX3f?oSS zYkU=1@QwB6?Vccmy%S$Zc#5RV-F`D6y;gXS%A&~< zP)sbjsr(@9x8o{KJ;6N&K9*r~wNm_3lzP^k^6Ph1{P*?Axz*J{B8quCEaE@MrV4KG zd9-z@%JnxBJZ8(U6u8}Z_un(MwP|lpze>KnrQys8m72{}%U(WjUsBZ6>nwF^Ui+*r zp8HNKZT@fFdwZ7k;iprN%;=izzV+3&>Hj{MPnLID^7WVf31-PtSLVyR+uhVKuUq2& zd!OGfxzpjjyW?l)PL0U!R;Vd-y;J0W^^m!zTAQWvRh5dp>lf}{^3Nknr!v}Y&vE}s zeLaI6;z2G-U;HMY*?i=?_s8fXhmS9K`aFl#Us_rx&-j9P$GUBcFL_?#PP%;M`|g7) zZpMiJUMW6h&CXXQNn(F>9oR(mw^p6hd38E1cWIYoC_mfhFU@lMyuGfxS&?3-RE#VO3^&cnZncXL8SLPh<*AE|QYVf^MR_DyC>N^L{xm83~*8=Eh#ea^|j%Hmo9@agU)cA?LsrB8-IB^2hlV;nVcX7@4_I|zM*_1jx zCyNvB>Z+K$t=QQE!{4Q>sl344+r*zI6|&=(A)lr#&zkLzGj42n?yf50e?62trP{Pt zu;h@{gw=X~!oOcs7k<8c_qDg@E03p(uID=UQ|yf7^Q=I>#ic6G?G#T%6v^b05FI6!viaEbdR9UnaF&u8}&< zvoW_{OQI?N#n<9yt_{x<<*qHPNnDnob@ND}^9B3!%{(HHW5QjI=hWLMY&?03wdFUr zB|p>M8s^MBo8E1@Ai$kpaX|XQ1%|2xb0cS!Bwb&7zHYm1byAAyDM<^R&C#308k1{` zytV(${;=nX3&*^o`Qa*aZ#i7qy5mOH`rzxcs^SDHx8!eT>(|+9$ojt~K|z&mYm@Cy zamk90(@tn_?b%hm^y`N#HnZ&~Dl}Ez{^7cHdwQKwV-??&F75^9J?n0-@@qIbrRuth z?veSK9?{0i7E(NG^^Yvk5k6{kD)+6LQ;pclQC+&O zRxipXEb(pd?k}G<(b1!+Sy^F`?eApgfBEXK=Jzbud=mSTvs^qV=XYz(^Ze?ni_ASX z#}^uD#=WWzJbpJfSV!T!bL_OO$K=zbe!0g-PdMiKkzYJz3g=nPwt4PZJzE6@z5LBQ ze<--T|M2t9<+@|Ww>*!X?)utrMNcH`#i5Q|S-HX;?~B@5BxkO+KK)7ZtiT@5X*N4{ ziF`Z$$S=_J-2QdbFZSL0xcKF^kE^omDYm>}+S8wN^ z|M2O{D=!1B-Cr4h_<82c$I4gjvo=3`Qhum+y4|{2!p{>*JD2UMdsQ7SVXPs3>v-+t z6}1VMS8py%5%$`=TjjAC3uEcrJsP|C>+j7Hy#N0p_w|;-!lLNyv*i`5bnU&Yj)kV* zKlf@W!;dvb9T!(BrYqPN{Ji3J+on3gt>Js&i>;?v-dfLc65hPtwL ze`rtjn{n)m1#c(k^N>ENsULz4Uk=({t|FzSo1gJL<8!k{ansf*=W>djEF&)5<5+q@ zN?_0Rtw&lvee#*K;$mmXKbr!Hj{eIxJ^5p}{-1c8xnRFr7mCh#o15|{+rM{x;juoun{wPH((6i?V$7cw->R>1jW5{SJe%o% z#fL*tj=>sffk&=fz8&kkXySj~^3%V0G>_Y^$u)Xk`&?^z`@)oiRd3CIoV~=}RhwvX zY0_KE_SENr{cG~eMDvy?Zn?Vnm99!whV#X(o_j@ES2g5b726TEzwU5oOxofTmyZ`b z((ovqCGaxzkKbd7#6~u0zGE@UQw1y2YT9?NDV=h4cTx`fuP^HrcC+d*h|QJJ?pQ~m5L?W&rv?yC#KcIMsJo~^9?I9GjF|~ul!i=!6c5E zkGFkUxUOOShkf}kcE5Pq^j3S*pLs=UL1+DUNV?e`n$5D@{pRBQgL*+a^I1MScidZ{ z@q_J`OxZT+6@edh0+?3bzVbfH$g+9LZu|SOCm)R)OzXg&bOFByxXyFP2=<%aqcOb9+aQE zJpJ19ElX#x>A#LVa&XT62YX+c7QXJiIy+NmrGjOy0;5IRF~L_#i?>%XUw{5_ZBBli z=(khKm-=*e|A|T1)Ka#?RP;g1`P>lEcUsHELr%;Htraxbxt3RCwOwk(a*>OZ-_6gA zXsAgk<_-}wUF0M?>AU8?ormwQ-q8`d?6jr*J0H>ThyzyNy7Y9)ra$?-L(whs^VIy5 zdED1+>McK3oGbCNRrnL=YOi}wa)tY(&h;}}Ih6w1X2sP{{hoCw`FVDCRxk>i)*N5+gU+Ly;7mg~u?fm1lhYg&s1eLQoU5@emLY|v)5OJ?LyC@W*vK^`}feSz_|yPOg|^^KbPfEtLDN~ zBZtJs>DuW_w|zVMqFmgb=>%_+^q!BbiVuI-L{)e1lQ|zG(baeFQJldX-f!xQLRj^s zpG~bksA5;x>$c4V82S%UI2f$uv`nA;lP=j#8}%CJC9{nhJRY;5mmHR}ax?vCEJ@%Hc6zfQ|C zT{tKb)l(e5s{YAkE2W6Nk+M_mvLb~W=XIT^*m>Z_{f?Ipl$zU{UM!w^^}(dLEiO#L zT+2SU-{1^3Qoqgc{t^Eo2Y#pd0q+?#9X6qCq6r(khiaB z>lw+XRkq8M5-%JmefIZ?U$|3d)fcD@F?!aN z1oNjCx2oyN`U+p?OqNIvp4iEmQTwlN)qz=2dYtXsCmqxbD*f>LOSQFc?0@&t!-~uP z$;uVI_1wj!FXhr5%CunFqiF3ZI_(C^nYNc+*q%Ge<5K@z?%}%23!g8%%Bvb4mAon7 z+=R)$_D+3bn&OkP&%L{C(gdrMdD9QPdKtPmO7iysPi>oot^1|*r?sqTD(I1HXYves zQCg_Dz^{VEZmttk5=X5-uebK6`{crNkPa$>|Z0RAPZ=M>geh~28Sa+LLp7Xo& z^35$1*-rWH5!tME@5`woJ!R9$xkXy9Z{9oc^PIjmn|G&u+l*U2M@1v@ctxUWCp_BK z`+kN&=%F`rS1Z02dh?*yBIw&>!>gI)+q@hZzy6z|-RBssTltms)a+OI>*4;!#uSvxJDdl}=-De*qO zwi^T3r+?Y_IGo!(#zCo#ai5~{!n!5z(>NTTv6;+0{wlup^2DO z@A&E`Tc4CpbD3nxub-eDXQ0UFXx_GVMUS8J(dq_ezKC}J1wVFO6YDiMdbe+LMt0}N z@9%p$Y~2pWPrkRYa?;PO0dJMuz7@_nxHUf)X|D)9fUOUN|C;z^QvOc)H`2NP$wlD9lGB6oi{Hdp$S8ox2dcxN4ltgUY;`ctq)s3MWSNb%5dU^b;&|e$j z;o`mZ02TP!Bi9ld3P@1xAgg2(cAu$B0kg>6cB?4N$^w}GLQ%qrol7f!@pHpQ(bxqQ-FF!1P>|I`W zXj$isXQ|m=92L{@>QWWwFZTR(Wk$!P?~~q%ev8%pbJo&a?ET_t8!QyAUi>s;&G)qv zUQK@gsWm2j*}oVols&AEFnlDN%d#$M*uREip%bP!`x_*1j7HidQ zb+Wf@%9CZ4{l*+^!?@I{l6~GX6J6787j3|O*HVfOnkOJa_mX8EDTKSgu)V%55@ z6Q*&Veco%2!N>g2xT=jTSBxYu;0yZ7@G?yCB2TYT7GEGsj# zYkjO8{O$r*hJml~HNp6wM{6}zqz?VqRjPVsQ}#nk;Y0H;KWMi4xA<9&Z^m8CjU`+3 zjVDd#nS89ergrKtwa1EcwUjs~Wv`5}J!95w6s~8Ib9IrZu!F1hm-F%~HI#2mur>0S zCgi>8>%~LMrAK2nbFHQd09AHmT-ReEz5bQ=c{KVd@r*rkNUO9pR)OS_g?#(IT1_F2pXQ4Qqyz%m*d3Bzp?>O+nC}6Pj9ph z>YLFY{)3s#^NPlf?R6C^m5ofyPX2nI{PXe#|K-VcQE@CK$_jVO=M{GB)i;s7{ao3n z`}^vXhQ5~Fd+Iws-paSnX4|f{HGJ6uOD@;O(RiFyPk?vzP>u=yd2 zL1eF-&J)qMN7{BySn&C~lf?`!Y0upgTvTW5=?)WdUBU8_XXZhUwJi_U--MK>)%9%Ldvc$jbiv;F zcWP(f>9{8O;U$y4n@y$my)4hj?{bwtPOLn&_w1eJu9pno>v0GgJ)2S#w_Lj;lvU

&`E5Erb=@kjr5{cn5!;@=qHgxA8?v5@ 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 - class iterator_archetype - { - typedef /* see below */ value_type; - typedef /* see below */ reference; - typedef /* see below */ pointer; - typedef /* see below */ difference_type; - typedef /* see below */ iterator_category; - }; - -``Access Category Tags`` -........................ - -The access category types provided correspond to the following -standard iterator access concept combinations: - -:: - - readable_iterator_t := - - Readable Iterator - - writable_iterator_t := - - Writeable Iterator - - readable_writable_iterator_t := - - Readable Iterator & Writeable Iterator & Swappable Iterator - - readable_lvalue_iterator_t := - - Readable Iterator & Lvalue Iterator - - writeable_lvalue_iterator_t := - - Readable Iterator & Writeable Iterator & Swappable Iterator & Lvalue Iterator - -``iterator_archetype`` Requirements -................................... - -The ``AccessCategory`` argument must be one of the predefined access -category tags. The ``TraversalCategory`` must be one of the standard -traversal tags. The ``Value`` type must satisfy the requirements of -the iterator concept specified by ``AccessCategory`` and -``TraversalCategory`` as implied by the nested traits types. - -``iterator_archetype`` Models -............................. - -``iterator_archetype`` models the iterator concepts specified by the -``AccessCategory`` and ``TraversalCategory`` -arguments. ``iterator_archetype`` does not model any other access -concepts or any more derived traversal concepts. - -``Traits`` -.......... - -The nested trait types are defined as follows: - -:: - - if (AccessCategory == readable_iterator_t) - - value_type = Value - reference = Value - pointer = Value* - - else if (AccessCategory == writable_iterator_t) - - value_type = void - reference = void - pointer = void - - else if (AccessCategory == readable_writable_iterator_t) - - value_type = Value - - reference := - - A type X that is convertible to Value for which the following - expression is valid. Given an object x of type X and v of type - Value. - - x = v - - pointer = Value* - - else if (AccessCategory == readable_lvalue_iterator_t) - - value_type = Value - reference = Value const& - pointer = Value const* - - else if (AccessCategory == writable_lvalue_iterator_t) - - value_type = Value - reference = Value& - pointer = Value* - - if ( TraversalCategory is convertible to forward_traversal_tag ) - - difference_type := ptrdiff_t - - else - - difference_type := unspecified type - - - iterator_category := - - A type X satisfying the following two constraints: - - 1. X is convertible to X1, and not to any more-derived - type, where X1 is defined by: - - if (reference is a reference type - && TraversalCategory is convertible to forward_traversal_tag) - { - if (TraversalCategory is convertible to random_access_traversal_tag) - X1 = random_access_iterator_tag - else if (TraversalCategory is convertible to bidirectional_traversal_tag) - X1 = bidirectional_iterator_tag - else - X1 = forward_iterator_tag - } - else - { - if (TraversalCategory is convertible to single_pass_traversal_tag - && reference != void) - X1 = input_iterator_tag - else - X1 = output_iterator_tag - } - - 2. X is convertible to TraversalCategory - - diff --git a/doc/iterator_concepts.html b/doc/iterator_concepts.html deleted file mode 100644 index 2bcb2e7..0000000 --- a/doc/iterator_concepts.html +++ /dev/null @@ -1,403 +0,0 @@ - - - - - - -Iterator Concepts - - - - - - - -

-

Iterator Concepts

- --- - - - - - - - - - - - -
Author:David Abrahams, Jeremy Siek, Thomas Witt
Contact:dave@boost-consulting.com, jsiek@osl.iu.edu, witt@styleadvisor.com
Organization:Boost Consulting, Indiana University Open Systems -Lab, Zephyr Associates, Inc.
Date:2004-11-01
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004.
- - - - --- - - - -
abstract:The iterator concept checking classes provide a mechanism for -a template to report better error messages when a user instantiates -the template with a type that does not meet the requirements of -the template.
-

For an introduction to using concept checking classes, see -the documentation for the boost::concept_check library.

-
-

Reference

- - -
-

iterator_concepts.hpp Synopsis

-
-namespace boost_concepts {
-
-    // Iterator Access Concepts
-
-    template <typename Iterator>
-    class ReadableIteratorConcept;
-
-    template <
-        typename Iterator
-      , typename ValueType = std::iterator_traits<Iterator>::value_type
-    >
-    class WritableIteratorConcept;
-
-    template <typename Iterator>
-    class SwappableIteratorConcept;
-
-    template <typename Iterator>
-    class LvalueIteratorConcept;
-
-    // Iterator Traversal Concepts
-
-    template <typename Iterator>
-    class IncrementableIteratorConcept;
-
-    template <typename Iterator>
-    class SinglePassIteratorConcept;
-
-    template <typename Iterator>
-    class ForwardTraversalConcept;
-
-    template <typename Iterator>
-    class BidirectionalTraversalConcept;
-
-    template <typename Iterator>
-    class RandomAccessTraversalConcept;
-
-    // Interoperability
-
-    template <typename Iterator, typename ConstIterator>
-    class InteroperableIteratorConcept;
-
-}
-
-
-
-
- - diff --git a/doc/iterator_concepts.pdf b/doc/iterator_concepts.pdf deleted file mode 100755 index 98e43020541281aae5ddbedb3facecc2042f0c8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66710 zcmY!laBIOiwLVFj6p32;$QB zFD=Q*%u6j+FoO#CCFZ6UE0~)?q(N$Z^HWk4^h1kNVQRVbLxVgOKqfmS7N;s`XmZ)v zap{L;rk1A`1r(*Gr52^;C8rjHRDdM>3sUnOlS?x5^As$Np~i-|M(DYf=Hw(L=H;ap zDQJXbWELxA7Aq8_q=lqL=qQAx78Qdu80#6D7@At@8tNGuB!TTo%}W9K3*=f54RQs< ze;}t8bLo3$rW7kgD}XIhFtr5Prx44f@0?$nSE679aw*gVkP1u_xbz+K^72bSMwo#0 zf&)Uq49qqMlNMkSVzQwDm}3YE?jQw2kgI|e3_(T*DHuWwFoc+32rP$t4QW3WgR2dX`4!3T7bd%`Fv-4UF^*Ee#dSOpWx+4Z-dSE=?){Cpe$XylgIg zM^G|=CP7Fl;L;CP0Hq*EGSbLR%*-jtw@OJYOLa)f&o3^~P0r6NF3l;)%uClx&d&wM zx}6;tG}=I+NwGJK4b1e6%uNyAFgMdPHlv0&vWhcPvmNq_bM!Jx^-@zx(OeHo1eCkp z!a&c�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�<+EP8g&#i_Y2 zoP9ZRPtUt4EbLgP;^Xsc=f~rUuLWPNTAg*_O|wg7`99~h)%~mYR{s^-num8P6#j?NJ&OI;*nVNn6 z!ZP_~HrJG_zchNtU;cAs4a4k&MHMrTFsu|jw$bCL%i=~$hG$J2AH)7!35d1e_>z3| zP*>BIwqp;Uq+Dscn7nM-vdte=LSLU1-Eo_B`j*^JWc!7C?cS^ep$v3^rnufbz@ z>)pAZO6^-RIr86LoHKV%SNcBT^Jn~?=1hFf5PA5s%3Gg###_B?)U*C}7^#<>yWgC} zW}+vN`qk8JUGlAW^=FD)*iT3;Q_oB{n!7SI$tv*m+vo2-UUdI@lV>&?i~dcfjcYir zn;5JSlYGWjb~@mdm_*+MQ6A;Y=Z14uhbCBrzGk;yUe2E(@>8m8s>+=is?M)EW@^qX z>2WX+pJej5Exq*ij-9KbtX0eE^8cRP|CRl|>n;hW`0L&lZ{(&#yi?^UHqv8C@r{`i z_mTUtQt)aK@y@9A%-T1;+VO46Xu3H!{zsJWl)&ygK@y5HuC3ORZc6t#c2 zT{`#JI(+qk@>OCvkGIHu|2KcP!y@bblWvKMRofT+=2Sh%m@AwkJNNsyX&#$1WVXn8 zt_XXr5#A-SSK^W2rnXO>w`NXB&zh>?f2FFEZN=^1Yc6<*eRn^;BleA4(vJC$c>-9? zR&a+o?-X2TyH=7}B1a*5p;)b;LUxUzr}bs=nNh0oDp{>-owx7ay8mV6wDo_to_*1? zl0D_=bDnyG7k{R#RK5JVW9ICm&zqUEqnt8rKKc8(eQeuq;*=8o)ik;~U&1l^_wgT5 zxA=n3b*6kfAMZ5vdwSOH55Wf;j2?ZFaEhLhQfXM`ef<9B4c{xG88-t?1TsZ7=aN>FU1>OEHCdy?_-1)LQBjMw(a`oo*rY$Ewy_ejm z<~QNy`O~^3mJ*+s4t;jueja~qvzMsY@8d`RGoJ1}VuIOtu~a}mQ$HXvJ(Wv80JKZD zL;nv$95lwY9`tpE}+wKUZ;GB;DOFfr7#umqiQ z;hdjWlA2ditYBscK3N}eQa;!Sc!McFuS5Yf2=8WQpkNG|MF4H>woovJ>(UP>%1;hX zEm4S8&<}8NQ_v4dtte551?`wi%}W891GWLg0GorS1!ih)2+{^`fW3`~_CI7GQG0*= z3uTpcYf`ss%~}!I{L!)SB71TVla!E1Y1hYt|MPM+Wi+N6UT`sKS(d#&`uxv*>t0Vj z+@W6I<6`&K)^Sn91p^+BzxO_#nEOZmi)xMik~)Et|7LiaKalG^JYh#dqI#j%?}hFx zqKPwAw)0JP@;RcyCE2Sq$z%?9&Jz$E z-{2F^r>Z^7k9QkP=_-~}w96}JaviJkc8LGJ;Oe$NW@i^^*#^gN zI4Wd+Yz0S?V)grkm7Eu2o9FM_yHjkf&F(Xc_t`(HJbUA`;2}w$ms9sQB^jMt5O&98 z?iH5PyvJW(*!JwnSFU4$LT@wrr^ZxnPIbL8w~OJJaTBwE(Jb!h<~h<*^CQik3ux*6 z+&=xR3eWT)d6^Su*?+IBs$p()&)CmdlgBih_n%gB{gj1V(X-G-=uv12h0l5HJZORHEE0YP4miUEwdtaY5R8FGmjQHKbQ6EM~knn zS+mZ2AJj75kpHkH-_UlEf2!rT#h#u2>l1D?9?5r*|Gvb^A~(`N>4fCUhmtFPer649 zUdjGoIdfnxb5w_9o`3OF?)W*ASF-chEKOvP?PlWn!4|Zh_pe>;eqBwmpBJ{y^gQU@ zcmBlDe#4(X{@hINS^duHM?qiB7q#z`F0R%P43;~RtUtR-=$(U0tm)C_*=l-Br~aIf zxVUe}+tV@8H_!Ra@n3ObcMe8AG6Q84SQ3QH)cKc|?1ZTgfw⪙RJClsAm)eFH2wn;0MaTW}t!xd7jD)qzz<}hG$7?QDRAc zk%D7#GU)gL=ls0n)Pj;?gd;)bf|Q~=G83v(7qmCNxL7wCs#DJp#mykAVcH>XHV2hq zU^kmX${kqw2Xk{kQEHij8OXCiT>4-SKm!<2tbxq{8H?~hNKqp6P%{iafb9XP#_5L= zm}VT_06PF?0@NFzv;*-5D2_3M9^ws<|B-{<9Hb3ok_IdQcA#~b19Na%t+T%umD95vg0uofz1L%N|1s^L1KC;m=6kH7~e=!0eqf7 z5K>OoRIq>qB}(R2umI(*AO($L$nk4hV6&j10~a&WRIr4G23*WoQ^6AIbGVp^rh+BJ zkFi|(KAE|hCFoIuu*XCbHBv$DfJLf{LbL)T81y3|qZG_d^gw46n425wnHw7^+ zpy~y=7r$N;a}zyFGc!!R;8-SCFUbG+^%@zQ=~-HsV6hhzPUPwZg$;ha#^y$P7M7M+ z>;z_ z$j?nIRtV25DbeK8hg4*UDil$1>Iau5Wu+#UC}?PM={pytf}02$K8Ycz5ens*B^e4C zl?ACqMX6~D1&PVoiRr1DT%fK)N@;Rxk%C4+N?J&2gs!2Up+S;DYDGzEUP@|;LQd znP+Kafo`6mp%I21hQ>yQ80t(7FzhfiH^9_uVToafk)eSBx_L%Mpu!*3eMTl0CK&3> zKs7j;Itx&X5LL|B0Mryl6EiZ!aEq}C=-@6ib!MO=716{jK)0!(iCJ2jqr1<<5VR5x zRh_93s5yuxW@3Qh7E?1L4F6hKf^LgL)oW>h8RwQppnQ*}4wRxmLI&_SH#9XiMt8HJ zsR<}6f)paDGY54bP{qs)Fyh0=%*fCPEewpzj6n@t6um~~rWoO3WNv}sUn2`cP&*n$ zuQBM595g$O%?&^|;i0NC2OU!c5<>Xb*xUqEE`bE$elsyL#K;RKMn;yVXm*&G7#gC7 zm5GTVMtqo<7=upjMzzD#)B?jiQ_%5EAY};mnV4CaV%TAB0J??_q!8g|b0ds=WNK;v zYN(;8Gc`5BNT;TzCdTM-WNK=LktR(o4KUJ>nV~U88DVA!x-k%BEy5pWhNed7{xvf) zG(%70W=2LP=x#AHG6vn(2r>}vUo#_PEP72q2U(%1GXd3=Xkw-q<)oRBsihfO{F)h= zf!fPxdO?R~frOC!W@L_$Hq4AHK;2T1LL@g^8e;m_64Y`=RcCB~QO24X8-RM~XzENs zLtE%#m~mum209`PO`W+RdYNrzY!2#5qN%gMVuuA5J1jBnFfqWi!^8m8*+jLJF> znVA@3l=o&PMxX=3(DWK(lrLr`##rpYOyg!ICZO&W%)FAK#LS%3A}(-8G_xudRR8J+ s<>!|ufLh`~T>74QY55AEl28HM<1GgD2f - class ReadableIteratorConcept; - - template < - typename Iterator - , typename ValueType = std::iterator_traits::value_type - > - class WritableIteratorConcept; - - template - class SwappableIteratorConcept; - - template - class LvalueIteratorConcept; - - // Iterator Traversal Concepts - - template - class IncrementableIteratorConcept; - - template - class SinglePassIteratorConcept; - - template - class ForwardTraversalConcept; - - template - class BidirectionalTraversalConcept; - - template - class RandomAccessTraversalConcept; - - // Interoperability - - template - class InteroperableIteratorConcept; - - } diff --git a/doc/iterator_facade.html b/doc/iterator_facade.html deleted file mode 100644 index 10fdc34..0000000 --- a/doc/iterator_facade.html +++ /dev/null @@ -1,1624 +0,0 @@ - - - - - - -Iterator Facade - - - - - - - -
-

Iterator Facade

- --- - - - - - - - - - - - -
Author:David Abrahams, Jeremy Siek, Thomas Witt
Contact:dave@boost-consulting.com, jsiek@osl.iu.edu, witt@ive.uni-hannover.de
Organization:Boost Consulting, Indiana University Open Systems -Lab, University of Hanover Institute for Transport -Railway Operation and Construction
Date:2004-11-01
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.
- - - - --- - - - -
abstract: - - -iterator_facade is a base class template that implements the -interface of standard iterators in terms of a few core functions -and associated types, to be supplied by a derived iterator class.
-
-
-

Overview

- - - - - -

While the iterator interface is rich, there is a core subset of the -interface that is necessary for all the functionality. We have -identified the following core behaviors for iterators:

-
    -
  • dereferencing
  • -
  • incrementing
  • -
  • decrementing
  • -
  • equality comparison
  • -
  • random-access motion
  • -
  • distance measurement
  • -
-

In addition to the behaviors listed above, the core interface elements -include the associated types exposed through iterator traits: -value_type, reference, difference_type, and -iterator_category.

-

Iterator facade uses the Curiously Recurring Template -Pattern (CRTP) [Cop95] so that the user can specify the behavior -of iterator_facade in a derived class. Former designs used -policy objects to specify the behavior, but that approach was -discarded for several reasons:

-
-
    -
  1. the creation and eventual copying of the policy object may create -overhead that can be avoided with the current approach.
  2. -
  3. The policy object approach does not allow for custom constructors -on the created iterator types, an essential feature if -iterator_facade should be used in other library -implementations.
  4. -
  5. Without the use of CRTP, the standard requirement that an -iterator's operator++ returns the iterator type itself -would mean that all iterators built with the library would -have to be specializations of iterator_facade<...>, rather -than something more descriptive like -indirect_iterator<T*>. Cumbersome type generator -metafunctions would be needed to build new parameterized -iterators, and a separate iterator_adaptor layer would be -impossible.
  6. -
-
-
-

Usage

-

The user of iterator_facade derives his iterator class from a -specialization of iterator_facade and passes the derived -iterator class as iterator_facade's first template parameter. -The order of the other template parameters have been carefully -chosen to take advantage of useful defaults. For example, when -defining a constant lvalue iterator, the user can pass a -const-qualified version of the iterator's value_type as -iterator_facade's Value parameter and omit the -Reference parameter which follows.

-

The derived iterator class must define member functions implementing -the iterator's core behaviors. The following table describes -expressions which are required to be valid depending on the category -of the derived iterator type. These member functions are described -briefly below and in more detail in the iterator facade -requirements.

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - -
ExpressionEffects
i.dereference()Access the value referred to
i.equal(j)Compare for equality with j
i.increment()Advance by one position
i.decrement()Retreat by one position
i.advance(n)Advance by n positions
i.distance_to(j)Measure the distance to j
-
- -

In addition to implementing the core interface functions, an iterator -derived from iterator_facade typically defines several -constructors. To model any of the standard iterator concepts, the -iterator must at least have a copy constructor. Also, if the iterator -type X is meant to be automatically interoperate with another -iterator type Y (as with constant and mutable iterators) then -there must be an implicit conversion from X to Y or from Y -to X (but not both), typically implemented as a conversion -constructor. Finally, if the iterator is to model Forward Traversal -Iterator or a more-refined iterator concept, a default constructor is -required.

-
-
-

Iterator Core Access

-

iterator_facade and the operator implementations need to be able -to access the core member functions in the derived class. Making the -core member functions public would expose an implementation detail to -the user. The design used here ensures that implementation details do -not appear in the public interface of the derived iterator type.

-

Preventing direct access to the core member functions has two -advantages. First, there is no possibility for the user to accidently -use a member function of the iterator when a member of the value_type -was intended. This has been an issue with smart pointer -implementations in the past. The second and main advantage is that -library implementers can freely exchange a hand-rolled iterator -implementation for one based on iterator_facade without fear of -breaking code that was accessing the public core member functions -directly.

-

In a naive implementation, keeping the derived class' core member -functions private would require it to grant friendship to -iterator_facade and each of the seven operators. In order to -reduce the burden of limiting access, iterator_core_access is -provided, a class that acts as a gateway to the core member functions -in the derived iterator class. The author of the derived class only -needs to grant friendship to iterator_core_access to make his core -member functions available to the library.

- - -

iterator_core_access will be typically implemented as an empty -class containing only private static member functions which invoke the -iterator core member functions. There is, however, no need to -standardize the gateway protocol. Note that even if -iterator_core_access used public member functions it would not -open a safety loophole, as every core member function preserves the -invariants of the iterator.

-
-
-

operator[]

-

The indexing operator for a generalized iterator presents special -challenges. A random access iterator's operator[] is only -required to return something convertible to its value_type. -Requiring that it return an lvalue would rule out currently-legal -random-access iterators which hold the referenced value in a data -member (e.g. counting_iterator), because *(p+n) is a reference -into the temporary iterator p+n, which is destroyed when -operator[] returns.

-

Writable iterators built with iterator_facade implement the -semantics required by the preferred resolution to issue 299 and -adopted by proposal n1550: the result of p[n] is an object -convertible to the iterator's value_type, and p[n] = x is -equivalent to *(p + n) = x (Note: This result object may be -implemented as a proxy containing a copy of p+n). This approach -will work properly for any random-access iterator regardless of the -other details of its implementation. A user who knows more about -the implementation of her iterator is free to implement an -operator[] that returns an lvalue in the derived iterator -class; it will hide the one supplied by iterator_facade from -clients of her iterator.

-
-
-

operator->

-

The reference type of a readable iterator (and today's input -iterator) need not in fact be a reference, so long as it is -convertible to the iterator's value_type. When the value_type -is a class, however, it must still be possible to access members -through operator->. Therefore, an iterator whose reference -type is not in fact a reference must return a proxy containing a copy -of the referenced value from its operator->.

-

The return types for iterator_facade's operator-> and -operator[] are not explicitly specified. Instead, those types -are described in terms of a set of requirements, which must be -satisfied by the iterator_facade implementation.

- - - - - -
[Cop95](1, 2) [Coplien, 1995] Coplien, J., Curiously Recurring Template -Patterns, C++ Report, February 1995, pp. 24-27.
-
-
-
-

Reference

- - - - - -
-template <
-    class Derived
-  , class Value
-  , class CategoryOrTraversal
-  , class Reference  = Value&
-  , class Difference = ptrdiff_t
->
-class iterator_facade {
- public:
-    typedef remove_const<Value>::type value_type;
-    typedef Reference reference;
-    typedef Value* pointer;
-    typedef Difference difference_type;
-    typedef /* see below */ iterator_category;
-
-    reference operator*() const;
-    /* see below */ operator->() const;
-    /* see below */ operator[](difference_type n) const;
-    Derived& operator++();
-    Derived operator++(int);
-    Derived& operator--();
-    Derived operator--(int);
-    Derived& operator+=(difference_type n);
-    Derived& operator-=(difference_type n);
-    Derived operator-(difference_type n) const;
- protected:
-    typedef iterator_facade iterator_facade_;
-};
-
-// Comparison operators
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type // exposition
-operator ==(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-            iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator !=(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-            iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator <(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-           iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator <=(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-            iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator >(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-           iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator >=(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-            iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
-// Iterator difference
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-/* see below */
-operator-(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-          iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
-// Iterator addition
-template <class Dr, class V, class TC, class R, class D>
-Derived operator+ (iterator_facade<Dr,V,TC,R,D> const&,
-                   typename Derived::difference_type n);
-
-template <class Dr, class V, class TC, class R, class D>
-Derived operator+ (typename Derived::difference_type n,
-                   iterator_facade<Dr,V,TC,R,D> const&);
-
-

The iterator_category member of iterator_facade is

-
-iterator-category(CategoryOrTraversal, value_type, reference)
-
-

where iterator-category is defined as follows:

-
-iterator-category(C,R,V) :=
-   if (C is convertible to std::input_iterator_tag
-       || C is convertible to std::output_iterator_tag
-   )
-       return C
-
-   else if (C is not convertible to incrementable_traversal_tag)
-       the program is ill-formed
-
-   else return a type X satisfying the following two constraints:
-
-      1. X is convertible to X1, and not to any more-derived
-         type, where X1 is defined by:
-
-           if (R is a reference type
-               && C is convertible to forward_traversal_tag)
-           {
-               if (C is convertible to random_access_traversal_tag)
-                   X1 = random_access_iterator_tag
-               else if (C is convertible to bidirectional_traversal_tag)
-                   X1 = bidirectional_iterator_tag
-               else
-                   X1 = forward_iterator_tag
-           }
-           else
-           {
-               if (C is convertible to single_pass_traversal_tag
-                   && R is convertible to V)
-                   X1 = input_iterator_tag
-               else
-                   X1 = C
-           }
-
-      2. category-to-traversal(X) is convertible to the most
-         derived traversal tag type to which X is also
-         convertible, and not to any more-derived traversal tag
-         type.
-
-

[Note: the intention is to allow iterator_category to be one of -the five original category tags when convertibility to one of the -traversal tags would add no information]

- - - -

The enable_if_interoperable template used above is for exposition -purposes. The member operators should only be in an overload set -provided the derived types Dr1 and Dr2 are interoperable, -meaning that at least one of the types is convertible to the other. The -enable_if_interoperable approach uses SFINAE to take the operators -out of the overload set when the types are not interoperable. -The operators should behave as-if enable_if_interoperable -were defined to be:

-
-template <bool, typename> enable_if_interoperable_impl
-{};
-
-template <typename T> enable_if_interoperable_impl<true,T>
-{ typedef T type; };
-
-template<typename Dr1, typename Dr2, typename T>
-struct enable_if_interoperable
-  : enable_if_interoperable_impl<
-        is_convertible<Dr1,Dr2>::value || is_convertible<Dr2,Dr1>::value
-      , T
-    >
-{};
-
-
-

iterator_facade Requirements

-

The following table describes the typical valid expressions on -iterator_facade's Derived parameter, depending on the -iterator concept(s) it will model. The operations in the first -column must be made accessible to member functions of class -iterator_core_access. In addition, -static_cast<Derived*>(iterator_facade*) shall be well-formed.

-

In the table below, F is iterator_facade<X,V,C,R,D>, a is an -object of type X, b and c are objects of type const X, -n is an object of F::difference_type, y is a constant -object of a single pass iterator type interoperable with X, and z -is a constant object of a random access traversal iterator type -interoperable with X.

-
-

iterator_facade Core Operations

- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ExpressionReturn TypeAssertion/NoteUsed to implement Iterator -Concept(s)
c.dereference()F::reference Readable Iterator, Writable -Iterator
c.equal(y)convertible to booltrue iff c and y -refer to the same -position.Single Pass Iterator
a.increment()unused Incrementable Iterator
a.decrement()unused Bidirectional Traversal -Iterator
a.advance(n)unused Random Access Traversal -Iterator
c.distance_to(z)convertible to -F::difference_typeequivalent to -distance(c, X(z)).Random Access Traversal -Iterator
-
-
-
-

iterator_facade operations

-

The operations in this section are described in terms of operations on -the core interface of Derived which may be inaccessible -(i.e. private). The implementation should access these operations -through member functions of class iterator_core_access.

-

reference operator*() const;

- --- - - - -
Returns:static_cast<Derived const*>(this)->dereference()
-

operator->() const; (see below)

- --- - - - -
Returns:

If reference is a reference type, an object -of type pointer equal to:

-
-&static_cast<Derived const*>(this)->dereference()
-
-

Otherwise returns an object of unspecified type such that, -(*static_cast<Derived const*>(this))->m is equivalent to (w = **static_cast<Derived const*>(this), -w.m) for some temporary object w of type value_type.

-
-

unspecified operator[](difference_type n) const;

- --- - - - -
Returns:an object convertible to value_type. For constant -objects v of type value_type, and n of type -difference_type, (*this)[n] = v is equivalent to -*(*this + n) = v, and static_cast<value_type -const&>((*this)[n]) is equivalent to -static_cast<value_type const&>(*(*this + n))
-

Derived& operator++();

- --- - - - -
Effects:
-static_cast<Derived*>(this)->increment();
-return *static_cast<Derived*>(this);
-
-
-

Derived operator++(int);

- --- - - - -
Effects:
-Derived tmp(static_cast<Derived const*>(this));
-++*this;
-return tmp;
-
-
-

Derived& operator--();

- --- - - - -
Effects:
-static_cast<Derived*>(this)->decrement();
-return *static_cast<Derived*>(this);
-
-
-

Derived operator--(int);

- --- - - - -
Effects:
-Derived tmp(static_cast<Derived const*>(this));
---*this;
-return tmp;
-
-
-

Derived& operator+=(difference_type n);

- --- - - - -
Effects:
-static_cast<Derived*>(this)->advance(n);
-return *static_cast<Derived*>(this);
-
-
-

Derived& operator-=(difference_type n);

- --- - - - -
Effects:
-static_cast<Derived*>(this)->advance(-n);
-return *static_cast<Derived*>(this);
-
-
-

Derived operator-(difference_type n) const;

- --- - - - -
Effects:
-Derived tmp(static_cast<Derived const*>(this));
-return tmp -= n;
-
-
-
-template <class Dr, class V, class TC, class R, class D>
-Derived operator+ (iterator_facade<Dr,V,TC,R,D> const&,
-                   typename Derived::difference_type n);
-
-template <class Dr, class V, class TC, class R, class D>
-Derived operator+ (typename Derived::difference_type n,
-                   iterator_facade<Dr,V,TC,R,D> const&);
-
- --- - - - -
Effects:
-Derived tmp(static_cast<Derived const*>(this));
-return tmp += n;
-
-
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator ==(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-            iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
- --- - - - -
Returns:

if is_convertible<Dr2,Dr1>::value

-
-
then
-

((Dr1 const&)lhs).equal((Dr2 const&)rhs).

-
-
Otherwise,
-

((Dr2 const&)rhs).equal((Dr1 const&)lhs).

-
-
-
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator !=(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-            iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
- --- - - - -
Returns:

if is_convertible<Dr2,Dr1>::value

-
-
then
-

!((Dr1 const&)lhs).equal((Dr2 const&)rhs).

-
-
Otherwise,
-

!((Dr2 const&)rhs).equal((Dr1 const&)lhs).

-
-
-
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator <(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-           iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
- --- - - - -
Returns:

if is_convertible<Dr2,Dr1>::value

-
-
then
-

((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) < 0.

-
-
Otherwise,
-

((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) > 0.

-
-
-
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator <=(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-            iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
- --- - - - -
Returns:

if is_convertible<Dr2,Dr1>::value

-
-
then
-

((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) <= 0.

-
-
Otherwise,
-

((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) >= 0.

-
-
-
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator >(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-           iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
- --- - - - -
Returns:

if is_convertible<Dr2,Dr1>::value

-
-
then
-

((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) > 0.

-
-
Otherwise,
-

((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) < 0.

-
-
-
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator >=(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-            iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
- --- - - - -
Returns:

if is_convertible<Dr2,Dr1>::value

-
-
then
-

((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) >= 0.

-
-
Otherwise,
-

((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) <= 0.

-
-
-
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,difference>::type
-operator -(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-           iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
- --- - - - - - -
Return Type:

if is_convertible<Dr2,Dr1>::value

-
-
-
then
-

difference shall be -iterator_traits<Dr1>::difference_type.

-
-
Otherwise
-

difference shall be iterator_traits<Dr2>::difference_type

-
-
-
-
Returns:

if is_convertible<Dr2,Dr1>::value

-
-
then
-

-((Dr1 const&)lhs).distance_to((Dr2 const&)rhs).

-
-
Otherwise,
-

((Dr2 const&)rhs).distance_to((Dr1 const&)lhs).

-
-
-
-
-
-
-

Tutorial Example

- - - -

In this section we'll walk through the implementation of a few -iterators using iterator_facade, based around the simple -example of a linked list of polymorphic objects. This example was -inspired by a posting by Keith Macdonald on the Boost-Users -mailing list.

-
-

The Problem

-

Say we've written a polymorphic linked list node base class:

-
-# include <iostream>
-
-struct node_base
-{
-    node_base() : m_next(0) {}
-
-    // Each node manages all of its tail nodes
-    virtual ~node_base() { delete m_next; }
-
-    // Access the rest of the list
-    node_base* next() const { return m_next; }
-
-    // print to the stream
-    virtual void print(std::ostream& s) const = 0;
-
-    // double the value
-    virtual void double_me() = 0;
-
-    void append(node_base* p)
-    {
-        if (m_next)
-            m_next->append(p);
-        else
-            m_next = p;
-    }
-
- private:
-    node_base* m_next;
-};
-
-

Lists can hold objects of different types by linking together -specializations of the following template:

-
-template <class T>
-struct node : node_base
-{
-    node(T x)
-      : m_value(x)
-    {}
-
-    void print(std::ostream& s) const { s << this->m_value; }
-    void double_me() { m_value += m_value; }
-
- private:
-    T m_value;
-};
-
-

And we can print any node using the following streaming operator:

-
-inline std::ostream& operator<<(std::ostream& s, node_base const& n)
-{
-    n.print(s);
-    return s;
-}
-
-

Our first challenge is to build an appropriate iterator over these -lists.

-
-
-

A Basic Iterator Using iterator_facade

-

We will construct a node_iterator class using inheritance from -iterator_facade to implement most of the iterator's operations.

-
-# include "node.hpp"
-# include <boost/iterator/iterator_facade.hpp>
-
-class node_iterator
-  : public boost::iterator_facade<...>
-{
-   ...
-};
-
-
-

Template Arguments for iterator_facade

-

iterator_facade has several template parameters, so we must decide -what types to use for the arguments. The parameters are Derived, -Value, CategoryOrTraversal, Reference, and Difference.

-
-

Derived

-

Because iterator_facade is meant to be used with the CRTP -[Cop95] the first parameter is the iterator class name itself, -node_iterator.

-
-
-

Value

-

The Value parameter determines the node_iterator's -value_type. In this case, we are iterating over node_base -objects, so Value will be node_base.

-
-
-

CategoryOrTraversal

-

Now we have to determine which iterator traversal concept our -node_iterator is going to model. Singly-linked lists only have -forward links, so our iterator can't can't be a bidirectional -traversal iterator. Our iterator should be able to make multiple -passes over the same linked list (unlike, say, an -istream_iterator which consumes the stream it traverses), so it -must be a forward traversal iterator. Therefore, we'll pass -boost::forward_traversal_tag in this position [1].

- - - - - -
[1]iterator_facade also supports old-style category -tags, so we could have passed std::forward_iterator_tag here; -either way, the resulting iterator's iterator_category will -end up being std::forward_iterator_tag.
-
-
-

Reference

-

The Reference argument becomes the type returned by -node_iterator's dereference operation, and will also be the -same as std::iterator_traits<node_iterator>::reference. The -library's default for this parameter is Value&; since -node_base& is a good choice for the iterator's reference -type, we can omit this argument, or pass use_default.

-
-
-

Difference

-

The Difference argument determines how the distance between -two node_iterators will be measured and will also be the -same as std::iterator_traits<node_iterator>::difference_type. -The library's default for Difference is std::ptrdiff_t, an -appropriate type for measuring the distance between any two -addresses in memory, and one that works for almost any iterator, -so we can omit this argument, too.

-

The declaration of node_iterator will therefore look something -like:

-
-# include "node.hpp"
-# include <boost/iterator/iterator_facade.hpp>
-
-class node_iterator
-  : public boost::iterator_facade<
-        node_iterator
-      , node_base
-      , boost::forward_traversal_tag
-    >
-{
-   ...
-};
-
-
-
-
-

Constructors and Data Members

-

Next we need to decide how to represent the iterator's position. -This representation will take the form of data members, so we'll -also need to write constructors to initialize them. The -node_iterator's position is quite naturally represented using -a pointer to a node_base. We'll need a constructor to build an -iterator from a node_base*, and a default constructor to -satisfy the forward traversal iterator requirements [2]. -Our node_iterator then becomes:

-
-# include "node.hpp"
-# include <boost/iterator/iterator_facade.hpp>
-
-class node_iterator
-  : public boost::iterator_facade<
-        node_iterator
-      , node_base
-      , boost::forward_traversal_tag
-    >
-{
- public:
-    node_iterator()
-      : m_node(0)
-    {}
-
-    explicit node_iterator(node_base* p)
-      : m_node(p)
-    {}
-
- private:
-    ...
-    node_base* m_node;
-};
-
- - - - - -
[2]Technically, the C++ standard places almost no -requirements on a default-constructed iterator, so if we were -really concerned with efficiency, we could've written the -default constructor to leave m_node uninitialized.
-
-
-

Implementing the Core Operations

-

The last step is to implement the core operations required by -the concepts we want our iterator to model. Referring to the -table, we can see that the first three rows are applicable -because node_iterator needs to satisfy the requirements for -readable iterator, single pass iterator, and incrementable -iterator.

-

We therefore need to supply dereference, -equal, and increment members. We don't want these members -to become part of node_iterator's public interface, so we can -make them private and grant friendship to -boost::iterator_core_access, a "back-door" that -iterator_facade uses to get access to the core operations:

-
-# include "node.hpp"
-# include <boost/iterator/iterator_facade.hpp>
-
-class node_iterator
-  : public boost::iterator_facade<
-        node_iterator
-      , node_base
-      , boost::forward_traversal_tag
-    >
-{
- public:
-    node_iterator()
-      : m_node(0) {}
-
-    explicit node_iterator(node_base* p)
-      : m_node(p) {}
-
- private:
-    friend class boost::iterator_core_access;
-
-    void increment() { m_node = m_node->next(); }
-
-    bool equal(node_iterator const& other) const
-    {
-        return this->m_node == other.m_node;
-    }
-
-    node_base& dereference() const { return *m_node; }
-
-    node_base* m_node;
-};
-
-

Voilà; a complete and conforming readable, forward-traversal -iterator! For a working example of its use, see this program.

-
-
-
-

A constant node_iterator

- -

Now, our node_iterator gives clients access to both node's print(std::ostream&) const member function, but also its -mutating double_me() member. If we wanted to build a -constant node_iterator, we'd only have to make three -changes:

-
-class const_node_iterator
-  : public boost::iterator_facade<
-        const_node_iterator
-      , node_base const
-      , boost::forward_traversal_tag
-    >
-{
- public:
-    const_node_iterator()
-      : m_node(0) {}
-
-    explicit const_node_iterator(node_base* p)
-      : m_node(p) {}
-
- private:
-    friend class boost::iterator_core_access;
-
-    void increment() { m_node = m_node->next(); }
-
-    bool equal(const_node_iterator const& other) const
-    {
-        return this->m_node == other.m_node;
-    }
-
-    node_base const& dereference() const { return *m_node; }
-
-    node_base const* m_node;
-};
-
- -

As a matter of fact, node_iterator and const_node_iterator -are so similar that it makes sense to factor the common code out -into a template as follows:

-
-template <class Value>
-class node_iter
-  : public boost::iterator_facade<
-        node_iter<Value>
-      , Value
-      , boost::forward_traversal_tag
-    >
-{
- public:
-    node_iter()
-      : m_node(0) {}
-
-    explicit node_iter(Value* p)
-      : m_node(p) {}
-
- private:
-    friend class boost::iterator_core_access;
-
-    bool equal(node_iter<Value> const& other) const
-    {
-        return this->m_node == other.m_node;
-    }
-
-    void increment()
-    { m_node = m_node->next(); }
-
-    Value& dereference() const
-    { return *m_node; }
-
-    Value* m_node;
-};
-typedef node_iter<node_base> node_iterator;
-typedef node_iter<node_base const> node_const_iterator;
-
-
-
-

Interoperability

-

Our const_node_iterator works perfectly well on its own, but -taken together with node_iterator it doesn't quite meet -expectations. For example, we'd like to be able to pass a -node_iterator where a node_const_iterator was expected, -just as you can with std::list<int>'s iterator and -const_iterator. Furthermore, given a node_iterator and a -node_const_iterator into the same list, we should be able to -compare them for equality.

-

This expected ability to use two different iterator types together -is known as interoperability. Achieving interoperability in -our case is as simple as templatizing the equal function and -adding a templatized converting constructor [3] [4]:

-
-template <class Value>
-class node_iter
-  : public boost::iterator_facade<
-        node_iter<Value>
-      , Value
-      , boost::forward_traversal_tag
-    >
-{
- public:
-    node_iter()
-      : m_node(0) {}
-
-    explicit node_iter(Value* p)
-      : m_node(p) {}
-
-    template <class OtherValue>
-    node_iter(node_iter<OtherValue> const& other)
-      : m_node(other.m_node) {}
-
- private:
-    friend class boost::iterator_core_access;
-    template <class> friend class node_iter;
-
-    template <class OtherValue>
-    bool equal(node_iter<OtherValue> const& other) const
-    {
-        return this->m_node == other.m_node;
-    }
-
-    void increment()
-    { m_node = m_node->next(); }
-
-    Value& dereference() const
-    { return *m_node; }
-
-    Value* m_node;
-};
-typedef impl::node_iterator<node_base> node_iterator;
-typedef impl::node_iterator<node_base const> node_const_iterator;
-
- - - - - -
[3]If you're using an older compiler and it can't handle -this example, see the example code for workarounds.
- - - - - -
[4]If node_iterator had been a random access -traversal iterator, we'd have had to templatize its -distance_to function as well.
-

You can see an example program which exercises our interoperable -iterators here.

-
-
-

Telling the Truth

-

Now node_iterator and node_const_iterator behave exactly as -you'd expect... almost. We can compare them and we can convert in -one direction: from node_iterator to node_const_iterator. -If we try to convert from node_const_iterator to -node_iterator, we'll get an error when the converting -constructor tries to initialize node_iterator's m_node, a -node* with a node const*. So what's the problem?

-

The problem is that -boost::is_convertible<node_const_iterator,node_iterator>::value -will be true, but it should be false. is_convertible -lies because it can only see as far as the declaration of -node_iter's converting constructor, but can't look inside at -the definition to make sure it will compile. A perfect solution -would make node_iter's converting constructor disappear when -the m_node conversion would fail.

-

In fact, that sort of magic is possible using -boost::enable_if. By rewriting the converting constructor as -follows, we can remove it from the overload set when it's not -appropriate:

-
-#include <boost/type_traits/is_convertible.hpp>
-#include <boost/utility/enable_if.hpp>
-
-  ...
-
-private:
-  struct enabler {};
-
-public:
-  template <class OtherValue>
-  node_iter(
-      node_iter<OtherValue> const& other
-    , typename boost::enable_if<
-          boost::is_convertible<OtherValue*,Value*>
-        , enabler
-      >::type = enabler()
-  )
-    : m_node(other.m_node) {}
-
-
-
-

Wrap Up

-

This concludes our iterator_facade tutorial, but before you -stop reading we urge you to take a look at iterator_adaptor. -There's another way to approach writing these iterators which might -even be superior.

-
-
-
- - diff --git a/doc/iterator_facade.pdf b/doc/iterator_facade.pdf deleted file mode 100755 index 30d46d2633f11ec123ef3fa2cfc74e263596ff85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167634 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

Mn%BrE^@n)_^$>a*UP;#+T6W@mQj{L@^y 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 T@O-bKDX447rK;-c@5TiHW%YjH diff --git a/doc/iterator_facade.rst b/doc/iterator_facade.rst deleted file mode 100644 index 4cbafe6..0000000 --- a/doc/iterator_facade.rst +++ /dev/null @@ -1,44 +0,0 @@ -.. Distributed under 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) - -++++++++++++++++ - Iterator Facade -++++++++++++++++ - -:Author: David Abrahams, Jeremy Siek, Thomas Witt -:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu, witt@ive.uni-hannover.de -:organization: `Boost Consulting`_, Indiana University `Open Systems - Lab`_, University of Hanover `Institute for Transport - Railway Operation and Construction`_ -:date: $Date$ -:copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. - -.. _`Boost Consulting`: http://www.boost-consulting.com -.. _`Open Systems Lab`: http://www.osl.iu.edu -.. _`Institute for Transport Railway Operation and Construction`: http://www.ive.uni-hannover.de - -:abstract: - - .. include:: iterator_facade_abstract.rst - -.. contents:: Table of Contents - -Overview -======== - -.. include:: iterator_facade_body.rst - - -Reference -========= - -.. include:: iterator_facade_ref.rst - -.. _counting: counting_iterator.html - -Tutorial Example -================ - -.. include:: iterator_facade_tutorial.rst - diff --git a/doc/iterator_facade_abstract.rst b/doc/iterator_facade_abstract.rst deleted file mode 100644 index 519cda7..0000000 --- a/doc/iterator_facade_abstract.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -``iterator_facade`` is a base class template that implements the -interface of standard iterators in terms of a few core functions -and associated types, to be supplied by a derived iterator class. - diff --git a/doc/iterator_facade_body.rst b/doc/iterator_facade_body.rst deleted file mode 100644 index 4b3059d..0000000 --- a/doc/iterator_facade_body.rst +++ /dev/null @@ -1,195 +0,0 @@ -.. Distributed under 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) - -.. Version 1.1 of this ReStructuredText document corresponds to - n1530_, the paper accepted by the LWG for TR1. - -.. Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. - - -While the iterator interface is rich, there is a core subset of the -interface that is necessary for all the functionality. We have -identified the following core behaviors for iterators: - -* dereferencing -* incrementing -* decrementing -* equality comparison -* random-access motion -* distance measurement - -In addition to the behaviors listed above, the core interface elements -include the associated types exposed through iterator traits: -``value_type``, ``reference``, ``difference_type``, and -``iterator_category``. - -Iterator facade uses the Curiously Recurring Template -Pattern (CRTP) [Cop95]_ so that the user can specify the behavior -of ``iterator_facade`` in a derived class. Former designs used -policy objects to specify the behavior, but that approach was -discarded for several reasons: - - 1. the creation and eventual copying of the policy object may create - overhead that can be avoided with the current approach. - - 2. The policy object approach does not allow for custom constructors - on the created iterator types, an essential feature if - ``iterator_facade`` should be used in other library - implementations. - - 3. Without the use of CRTP, the standard requirement that an - iterator's ``operator++`` returns the iterator type itself - would mean that all iterators built with the library would - have to be specializations of ``iterator_facade<...>``, rather - than something more descriptive like - ``indirect_iterator``. Cumbersome type generator - metafunctions would be needed to build new parameterized - iterators, and a separate ``iterator_adaptor`` layer would be - impossible. - -Usage ------ - -The user of ``iterator_facade`` derives his iterator class from a -specialization of ``iterator_facade`` and passes the derived -iterator class as ``iterator_facade``\ 's first template parameter. -The order of the other template parameters have been carefully -chosen to take advantage of useful defaults. For example, when -defining a constant lvalue iterator, the user can pass a -const-qualified version of the iterator's ``value_type`` as -``iterator_facade``\ 's ``Value`` parameter and omit the -``Reference`` parameter which follows. - -The derived iterator class must define member functions implementing -the iterator's core behaviors. The following table describes -expressions which are required to be valid depending on the category -of the derived iterator type. These member functions are described -briefly below and in more detail in the iterator facade -requirements. - - +------------------------+-------------------------------+ - |Expression |Effects | - +========================+===============================+ - |``i.dereference()`` |Access the value referred to | - +------------------------+-------------------------------+ - |``i.equal(j)`` |Compare for equality with ``j``| - +------------------------+-------------------------------+ - |``i.increment()`` |Advance by one position | - +------------------------+-------------------------------+ - |``i.decrement()`` |Retreat by one position | - +------------------------+-------------------------------+ - |``i.advance(n)`` |Advance by ``n`` positions | - +------------------------+-------------------------------+ - |``i.distance_to(j)`` |Measure the distance to ``j`` | - +------------------------+-------------------------------+ - -.. Should we add a comment that a zero overhead implementation of iterator_facade - is possible with proper inlining? - -In addition to implementing the core interface functions, an iterator -derived from ``iterator_facade`` typically defines several -constructors. To model any of the standard iterator concepts, the -iterator must at least have a copy constructor. Also, if the iterator -type ``X`` is meant to be automatically interoperate with another -iterator type ``Y`` (as with constant and mutable iterators) then -there must be an implicit conversion from ``X`` to ``Y`` or from ``Y`` -to ``X`` (but not both), typically implemented as a conversion -constructor. Finally, if the iterator is to model Forward Traversal -Iterator or a more-refined iterator concept, a default constructor is -required. - - - -Iterator Core Access --------------------- - -``iterator_facade`` and the operator implementations need to be able -to access the core member functions in the derived class. Making the -core member functions public would expose an implementation detail to -the user. The design used here ensures that implementation details do -not appear in the public interface of the derived iterator type. - -Preventing direct access to the core member functions has two -advantages. First, there is no possibility for the user to accidently -use a member function of the iterator when a member of the value_type -was intended. This has been an issue with smart pointer -implementations in the past. The second and main advantage is that -library implementers can freely exchange a hand-rolled iterator -implementation for one based on ``iterator_facade`` without fear of -breaking code that was accessing the public core member functions -directly. - -In a naive implementation, keeping the derived class' core member -functions private would require it to grant friendship to -``iterator_facade`` and each of the seven operators. In order to -reduce the burden of limiting access, ``iterator_core_access`` is -provided, a class that acts as a gateway to the core member functions -in the derived iterator class. The author of the derived class only -needs to grant friendship to ``iterator_core_access`` to make his core -member functions available to the library. - -.. This is no long uptodate -thw -.. Yes it is; I made sure of it! -DWA - -``iterator_core_access`` will be typically implemented as an empty -class containing only private static member functions which invoke the -iterator core member functions. There is, however, no need to -standardize the gateway protocol. Note that even if -``iterator_core_access`` used public member functions it would not -open a safety loophole, as every core member function preserves the -invariants of the iterator. - -``operator[]`` --------------- - -The indexing operator for a generalized iterator presents special -challenges. A random access iterator's ``operator[]`` is only -required to return something convertible to its ``value_type``. -Requiring that it return an lvalue would rule out currently-legal -random-access iterators which hold the referenced value in a data -member (e.g. |counting|_), because ``*(p+n)`` is a reference -into the temporary iterator ``p+n``, which is destroyed when -``operator[]`` returns. - -.. |counting| replace:: ``counting_iterator`` - -Writable iterators built with ``iterator_facade`` implement the -semantics required by the preferred resolution to `issue 299`_ and -adopted by proposal n1550_: the result of ``p[n]`` is an object -convertible to the iterator's ``value_type``, and ``p[n] = x`` is -equivalent to ``*(p + n) = x`` (Note: This result object may be -implemented as a proxy containing a copy of ``p+n``). This approach -will work properly for any random-access iterator regardless of the -other details of its implementation. A user who knows more about -the implementation of her iterator is free to implement an -``operator[]`` that returns an lvalue in the derived iterator -class; it will hide the one supplied by ``iterator_facade`` from -clients of her iterator. - -.. _n1550: http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/papers/2003/n1550.html - -.. _`issue 299`: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-active.html#299 - -.. _`operator arrow`: - - -``operator->`` --------------- - -The ``reference`` type of a readable iterator (and today's input -iterator) need not in fact be a reference, so long as it is -convertible to the iterator's ``value_type``. When the ``value_type`` -is a class, however, it must still be possible to access members -through ``operator->``. Therefore, an iterator whose ``reference`` -type is not in fact a reference must return a proxy containing a copy -of the referenced value from its ``operator->``. - -The return types for ``iterator_facade``\ 's ``operator->`` and -``operator[]`` are not explicitly specified. Instead, those types -are described in terms of a set of requirements, which must be -satisfied by the ``iterator_facade`` implementation. - -.. [Cop95] [Coplien, 1995] Coplien, J., Curiously Recurring Template - Patterns, C++ Report, February 1995, pp. 24-27. - diff --git a/doc/iterator_facade_ref.rst b/doc/iterator_facade_ref.rst deleted file mode 100644 index c1baf9b..0000000 --- a/doc/iterator_facade_ref.rst +++ /dev/null @@ -1,441 +0,0 @@ -.. Distributed under 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) - -.. Version 1.3 of this ReStructuredText document corresponds to - n1530_, the paper accepted by the LWG for TR1. - -.. Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. - - -.. parsed-literal:: - - template < - class Derived - , class Value - , class CategoryOrTraversal - , class Reference = Value& - , class Difference = ptrdiff_t - > - class iterator_facade { - public: - typedef remove_const::type value_type; - typedef Reference reference; - typedef Value\* pointer; - typedef Difference difference_type; - typedef /* see below__ \*/ iterator_category; - - reference operator\*() const; - /* see below__ \*/ operator->() const; - /* see below__ \*/ operator[](difference_type n) const; - Derived& operator++(); - Derived operator++(int); - Derived& operator--(); - Derived operator--(int); - Derived& operator+=(difference_type n); - Derived& operator-=(difference_type n); - Derived operator-(difference_type n) const; - protected: - typedef iterator_facade iterator_facade\_; - }; - - // Comparison operators - template - typename enable_if_interoperable::type // exposition - operator ==(iterator_facade const& lhs, - iterator_facade const& rhs); - - template - typename enable_if_interoperable::type - operator !=(iterator_facade const& lhs, - iterator_facade const& rhs); - - template - typename enable_if_interoperable::type - operator <(iterator_facade const& lhs, - iterator_facade const& rhs); - - template - typename enable_if_interoperable::type - operator <=(iterator_facade const& lhs, - iterator_facade const& rhs); - - template - typename enable_if_interoperable::type - operator >(iterator_facade const& lhs, - iterator_facade const& rhs); - - template - typename enable_if_interoperable::type - operator >=(iterator_facade const& lhs, - iterator_facade const& rhs); - - // Iterator difference - template - /* see below__ \*/ - operator-(iterator_facade const& lhs, - iterator_facade const& rhs); - - // Iterator addition - template - Derived operator+ (iterator_facade const&, - typename Derived::difference_type n); - - template - Derived operator+ (typename Derived::difference_type n, - iterator_facade const&); - -__ `iterator category`_ - -__ `operator arrow`_ - -__ brackets_ - -__ minus_ - -.. _`iterator category`: - -The ``iterator_category`` member of ``iterator_facade`` is - -.. parsed-literal:: - - *iterator-category*\ (CategoryOrTraversal, value_type, reference) - -where *iterator-category* is defined as follows: - -.. include:: facade_iterator_category.rst - -The ``enable_if_interoperable`` template used above is for exposition -purposes. The member operators should only be in an overload set -provided the derived types ``Dr1`` and ``Dr2`` are interoperable, -meaning that at least one of the types is convertible to the other. The -``enable_if_interoperable`` approach uses SFINAE to take the operators -out of the overload set when the types are not interoperable. -The operators should behave *as-if* ``enable_if_interoperable`` -were defined to be:: - - template enable_if_interoperable_impl - {}; - - template enable_if_interoperable_impl - { typedef T type; }; - - template - struct enable_if_interoperable - : enable_if_interoperable_impl< - is_convertible::value || is_convertible::value - , T - > - {}; - - -``iterator_facade`` Requirements --------------------------------- - -The following table describes the typical valid expressions on -``iterator_facade``\ 's ``Derived`` parameter, depending on the -iterator concept(s) it will model. The operations in the first -column must be made accessible to member functions of class -``iterator_core_access``. In addition, -``static_cast(iterator_facade*)`` shall be well-formed. - -In the table below, ``F`` is ``iterator_facade``, ``a`` is an -object of type ``X``, ``b`` and ``c`` are objects of type ``const X``, -``n`` is an object of ``F::difference_type``, ``y`` is a constant -object of a single pass iterator type interoperable with ``X``, and ``z`` -is a constant object of a random access traversal iterator type -interoperable with ``X``. - -.. _`core operations`: - -.. topic:: ``iterator_facade`` Core Operations - - +--------------------+----------------------+-------------------------+---------------------------+ - |Expression |Return Type |Assertion/Note |Used to implement Iterator | - | | | |Concept(s) | - +====================+======================+=========================+===========================+ - |``c.dereference()`` |``F::reference`` | |Readable Iterator, Writable| - | | | |Iterator | - +--------------------+----------------------+-------------------------+---------------------------+ - |``c.equal(y)`` |convertible to bool |true iff ``c`` and ``y`` |Single Pass Iterator | - | | |refer to the same | | - | | |position. | | - +--------------------+----------------------+-------------------------+---------------------------+ - |``a.increment()`` |unused | |Incrementable Iterator | - +--------------------+----------------------+-------------------------+---------------------------+ - |``a.decrement()`` |unused | |Bidirectional Traversal | - | | | |Iterator | - +--------------------+----------------------+-------------------------+---------------------------+ - |``a.advance(n)`` |unused | |Random Access Traversal | - | | | |Iterator | - +--------------------+----------------------+-------------------------+---------------------------+ - |``c.distance_to(z)``|convertible to |equivalent to |Random Access Traversal | - | |``F::difference_type``|``distance(c, X(z))``. |Iterator | - +--------------------+----------------------+-------------------------+---------------------------+ - - - -``iterator_facade`` operations ------------------------------- - -The operations in this section are described in terms of operations on -the core interface of ``Derived`` which may be inaccessible -(i.e. private). The implementation should access these operations -through member functions of class ``iterator_core_access``. - -``reference operator*() const;`` - -:Returns: ``static_cast(this)->dereference()`` - -``operator->() const;`` (see below__) - -__ `operator arrow`_ - -:Returns: If ``reference`` is a reference type, an object - of type ``pointer`` equal to:: - - &static_cast(this)->dereference() - - Otherwise returns an object of unspecified type such that, - ``(*static_cast(this))->m`` is equivalent to ``(w = **static_cast(this), - w.m)`` for some temporary object ``w`` of type ``value_type``. - -.. _brackets: - -*unspecified* ``operator[](difference_type n) const;`` - -:Returns: an object convertible to ``value_type``. For constant - objects ``v`` of type ``value_type``, and ``n`` of type - ``difference_type``, ``(*this)[n] = v`` is equivalent to - ``*(*this + n) = v``, and ``static_cast((*this)[n])`` is equivalent to - ``static_cast(*(*this + n))`` - - - -``Derived& operator++();`` - -:Effects: - - :: - - static_cast(this)->increment(); - return *static_cast(this); - -``Derived operator++(int);`` - -:Effects: - - :: - - Derived tmp(static_cast(this)); - ++*this; - return tmp; - - -``Derived& operator--();`` - -:Effects: - - :: - - static_cast(this)->decrement(); - return *static_cast(this); - - -``Derived operator--(int);`` - -:Effects: - - :: - - Derived tmp(static_cast(this)); - --*this; - return tmp; - - -``Derived& operator+=(difference_type n);`` - -:Effects: - - :: - - static_cast(this)->advance(n); - return *static_cast(this); - - -``Derived& operator-=(difference_type n);`` - -:Effects: - - :: - - static_cast(this)->advance(-n); - return *static_cast(this); - - -``Derived operator-(difference_type n) const;`` - -:Effects: - - :: - - Derived tmp(static_cast(this)); - return tmp -= n; - -:: - - template - Derived operator+ (iterator_facade const&, - typename Derived::difference_type n); - - template - Derived operator+ (typename Derived::difference_type n, - iterator_facade const&); - -:Effects: - - :: - - Derived tmp(static_cast(this)); - return tmp += n; - - -:: - - template - typename enable_if_interoperable::type - operator ==(iterator_facade const& lhs, - iterator_facade const& rhs); - -:Returns: - if ``is_convertible::value`` - - then - ``((Dr1 const&)lhs).equal((Dr2 const&)rhs)``. - - Otherwise, - ``((Dr2 const&)rhs).equal((Dr1 const&)lhs)``. - -:: - - template - typename enable_if_interoperable::type - operator !=(iterator_facade const& lhs, - iterator_facade const& rhs); - -:Returns: - if ``is_convertible::value`` - - then - ``!((Dr1 const&)lhs).equal((Dr2 const&)rhs)``. - - Otherwise, - ``!((Dr2 const&)rhs).equal((Dr1 const&)lhs)``. - -:: - - template - typename enable_if_interoperable::type - operator <(iterator_facade const& lhs, - iterator_facade const& rhs); - -:Returns: - if ``is_convertible::value`` - - then - ``((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) < 0``. - - Otherwise, - ``((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) > 0``. - -:: - - template - typename enable_if_interoperable::type - operator <=(iterator_facade const& lhs, - iterator_facade const& rhs); - -:Returns: - if ``is_convertible::value`` - - then - ``((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) <= 0``. - - Otherwise, - ``((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) >= 0``. - -:: - - template - typename enable_if_interoperable::type - operator >(iterator_facade const& lhs, - iterator_facade const& rhs); - -:Returns: - if ``is_convertible::value`` - - then - ``((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) > 0``. - - Otherwise, - ``((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) < 0``. - - -:: - - template - typename enable_if_interoperable::type - operator >=(iterator_facade const& lhs, - iterator_facade const& rhs); - -:Returns: - if ``is_convertible::value`` - - then - ``((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) >= 0``. - - Otherwise, - ``((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) <= 0``. - -.. _minus: - -:: - - template - typename enable_if_interoperable::type - operator -(iterator_facade const& lhs, - iterator_facade const& rhs); - -:Return Type: - if ``is_convertible::value`` - - then - ``difference`` shall be - ``iterator_traits::difference_type``. - - Otherwise - ``difference`` shall be ``iterator_traits::difference_type`` - -:Returns: - if ``is_convertible::value`` - - then - ``-((Dr1 const&)lhs).distance_to((Dr2 const&)rhs)``. - - Otherwise, - ``((Dr2 const&)rhs).distance_to((Dr1 const&)lhs)``. diff --git a/doc/iterator_facade_tutorial.rst b/doc/iterator_facade_tutorial.rst deleted file mode 100755 index c133b48..0000000 --- a/doc/iterator_facade_tutorial.rst +++ /dev/null @@ -1,523 +0,0 @@ -.. Copyright David Abrahams 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) - -In this section we'll walk through the implementation of a few -iterators using ``iterator_facade``, based around the simple -example of a linked list of polymorphic objects. This example was -inspired by a `posting`__ by Keith Macdonald on the `Boost-Users`_ -mailing list. - -.. _`Boost-Users`: ../../../more/mailing_lists.htm#users - -__ http://thread.gmane.org/gmane.comp.lib.boost.user/5100 - -The Problem ------------ - -Say we've written a polymorphic linked list node base class:: - - # include - - struct node_base - { - node_base() : m_next(0) {} - - // Each node manages all of its tail nodes - virtual ~node_base() { delete m_next; } - - // Access the rest of the list - node_base* next() const { return m_next; } - - // print to the stream - virtual void print(std::ostream& s) const = 0; - - // double the value - virtual void double_me() = 0; - - void append(node_base* p) - { - if (m_next) - m_next->append(p); - else - m_next = p; - } - - private: - node_base* m_next; - }; - -Lists can hold objects of different types by linking together -specializations of the following template:: - - template - struct node : node_base - { - node(T x) - : m_value(x) - {} - - void print(std::ostream& s) const { s << this->m_value; } - void double_me() { m_value += m_value; } - - private: - T m_value; - }; - -And we can print any node using the following streaming operator:: - - inline std::ostream& operator<<(std::ostream& s, node_base const& n) - { - n.print(s); - return s; - } - -Our first challenge is to build an appropriate iterator over these -lists. - -A Basic Iterator Using ``iterator_facade`` ------------------------------------------- - -We will construct a ``node_iterator`` class using inheritance from -``iterator_facade`` to implement most of the iterator's operations. - -:: - - # include "node.hpp" - # include - - class node_iterator - : public boost::iterator_facade<...> - { - ... - }; - - - -Template Arguments for ``iterator_facade`` -.......................................... - -``iterator_facade`` has several template parameters, so we must decide -what types to use for the arguments. The parameters are ``Derived``, -``Value``, ``CategoryOrTraversal``, ``Reference``, and ``Difference``. - - -``Derived`` -''''''''''' - -Because ``iterator_facade`` is meant to be used with the CRTP -[Cop95]_ the first parameter is the iterator class name itself, -``node_iterator``. - -``Value`` -''''''''' - -The ``Value`` parameter determines the ``node_iterator``\ 's -``value_type``. In this case, we are iterating over ``node_base`` -objects, so ``Value`` will be ``node_base``. - - -``CategoryOrTraversal`` -''''''''''''''''''''''' - -Now we have to determine which `iterator traversal concept`_ our -``node_iterator`` is going to model. Singly-linked lists only have -forward links, so our iterator can't can't be a `bidirectional -traversal iterator`_. Our iterator should be able to make multiple -passes over the same linked list (unlike, say, an -``istream_iterator`` which consumes the stream it traverses), so it -must be a `forward traversal iterator`_. Therefore, we'll pass -``boost::forward_traversal_tag`` in this position [#category]_. - -.. [#category] ``iterator_facade`` also supports old-style category - tags, so we could have passed ``std::forward_iterator_tag`` here; - either way, the resulting iterator's ``iterator_category`` will - end up being ``std::forward_iterator_tag``. - -``Reference`` -''''''''''''' - -The ``Reference`` argument becomes the type returned by -``node_iterator``\ 's dereference operation, and will also be the -same as ``std::iterator_traits::reference``. The -library's default for this parameter is ``Value&``; since -``node_base&`` is a good choice for the iterator's ``reference`` -type, we can omit this argument, or pass ``use_default``. - -``Difference`` -'''''''''''''' - -The ``Difference`` argument determines how the distance between -two ``node_iterator``\ s will be measured and will also be the -same as ``std::iterator_traits::difference_type``. -The library's default for ``Difference`` is ``std::ptrdiff_t``, an -appropriate type for measuring the distance between any two -addresses in memory, and one that works for almost any iterator, -so we can omit this argument, too. - -The declaration of ``node_iterator`` will therefore look something -like:: - - # include "node.hpp" - # include - - class node_iterator - : public boost::iterator_facade< - node_iterator - , node_base - , boost::forward_traversal_tag - > - { - ... - }; - -Constructors and Data Members -............................. - -Next we need to decide how to represent the iterator's position. -This representation will take the form of data members, so we'll -also need to write constructors to initialize them. The -``node_iterator``\ 's position is quite naturally represented using -a pointer to a ``node_base``. We'll need a constructor to build an -iterator from a ``node_base*``, and a default constructor to -satisfy the `forward traversal iterator`_ requirements [#default]_. -Our ``node_iterator`` then becomes:: - - # include "node.hpp" - # include - - class node_iterator - : public boost::iterator_facade< - node_iterator - , node_base - , boost::forward_traversal_tag - > - { - public: - node_iterator() - : m_node(0) - {} - - explicit node_iterator(node_base* p) - : m_node(p) - {} - - private: - ... - node_base* m_node; - }; - -.. [#default] Technically, the C++ standard places almost no - requirements on a default-constructed iterator, so if we were - really concerned with efficiency, we could've written the - default constructor to leave ``m_node`` uninitialized. - -Implementing the Core Operations -................................ - -The last step is to implement the `core operations`_ required by -the concepts we want our iterator to model. Referring to the -table__, we can see that the first three rows are applicable -because ``node_iterator`` needs to satisfy the requirements for -`readable iterator`_, `single pass iterator`_, and `incrementable -iterator`_. - -__ `core operations`_ - -We therefore need to supply ``dereference``, -``equal``, and ``increment`` members. We don't want these members -to become part of ``node_iterator``\ 's public interface, so we can -make them private and grant friendship to -``boost::iterator_core_access``, a "back-door" that -``iterator_facade`` uses to get access to the core operations:: - - # include "node.hpp" - # include - - class node_iterator - : public boost::iterator_facade< - node_iterator - , node_base - , boost::forward_traversal_tag - > - { - public: - node_iterator() - : m_node(0) {} - - explicit node_iterator(node_base* p) - : m_node(p) {} - - private: - friend class boost::iterator_core_access; - - void increment() { m_node = m_node->next(); } - - bool equal(node_iterator const& other) const - { - return this->m_node == other.m_node; - } - - node_base& dereference() const { return *m_node; } - - node_base* m_node; - }; - -Voilà; a complete and conforming readable, forward-traversal -iterator! For a working example of its use, see `this program`__. - -__ ../example/node_iterator1.cpp - -A constant ``node_iterator`` ----------------------------- - -.. Sidebar:: Constant and Mutable iterators - - The term **mutable iterator** means an iterator through which - the object it references (its "referent") can be modified. A - **constant iterator** is one which doesn't allow modification of - its referent. - - The words *constant* and *mutable* don't refer to the ability to - modify the iterator itself. For example, an ``int const*`` is a - non-\ ``const`` *constant iterator*, which can be incremented - but doesn't allow modification of its referent, and ``int* - const`` is a ``const`` *mutable iterator*, which cannot be - modified but which allows modification of its referent. - - Confusing? We agree, but those are the standard terms. It - probably doesn't help much that a container's constant iterator - is called ``const_iterator``. - -Now, our ``node_iterator`` gives clients access to both ``node``\ -'s ``print(std::ostream&) const`` member function, but also its -mutating ``double_me()`` member. If we wanted to build a -*constant* ``node_iterator``, we'd only have to make three -changes: - -.. parsed-literal:: - - class const_node_iterator - : public boost::iterator_facade< - const_node_iterator - , node_base **const** - , boost::forward_traversal_tag - > - { - public: - const_node_iterator() - : m_node(0) {} - - explicit const_node_iterator(node_base* p) - : m_node(p) {} - - private: - friend class boost::iterator_core_access; - - void increment() { m_node = m_node->next(); } - - bool equal(const_node_iterator const& other) const - { - return this->m_node == other.m_node; - } - - node_base **const**\ & dereference() const { return \*m_node; } - - node_base **const**\ * m_node; - }; - -.. Sidebar:: ``const`` and an iterator's ``value_type`` - - The C++ standard requires an iterator's ``value_type`` *not* be - ``const``\ -qualified, so ``iterator_facade`` strips the - ``const`` from its ``Value`` parameter in order to produce the - iterator's ``value_type``. Making the ``Value`` argument - ``const`` provides a useful hint to ``iterator_facade`` that the - iterator is a *constant iterator*, and the default ``Reference`` - argument will be correct for all lvalue iterators. - -As a matter of fact, ``node_iterator`` and ``const_node_iterator`` -are so similar that it makes sense to factor the common code out -into a template as follows:: - - template - class node_iter - : public boost::iterator_facade< - node_iter - , Value - , boost::forward_traversal_tag - > - { - public: - node_iter() - : m_node(0) {} - - explicit node_iter(Value* p) - : m_node(p) {} - - private: - friend class boost::iterator_core_access; - - bool equal(node_iter const& other) const - { - return this->m_node == other.m_node; - } - - void increment() - { m_node = m_node->next(); } - - Value& dereference() const - { return *m_node; } - - Value* m_node; - }; - typedef node_iter node_iterator; - typedef node_iter node_const_iterator; - - -Interoperability ----------------- - -Our ``const_node_iterator`` works perfectly well on its own, but -taken together with ``node_iterator`` it doesn't quite meet -expectations. For example, we'd like to be able to pass a -``node_iterator`` where a ``node_const_iterator`` was expected, -just as you can with ``std::list``\ 's ``iterator`` and -``const_iterator``. Furthermore, given a ``node_iterator`` and a -``node_const_iterator`` into the same list, we should be able to -compare them for equality. - -This expected ability to use two different iterator types together -is known as |interoperability|_. Achieving interoperability in -our case is as simple as templatizing the ``equal`` function and -adding a templatized converting constructor [#broken]_ [#random]_:: - - template - class node_iter - : public boost::iterator_facade< - node_iter - , Value - , boost::forward_traversal_tag - > - { - public: - node_iter() - : m_node(0) {} - - explicit node_iter(Value* p) - : m_node(p) {} - - template - node_iter(node_iter const& other) - : m_node(other.m_node) {} - - private: - friend class boost::iterator_core_access; - template friend class node_iter; - - template - bool equal(node_iter const& other) const - { - return this->m_node == other.m_node; - } - - void increment() - { m_node = m_node->next(); } - - Value& dereference() const - { return *m_node; } - - Value* m_node; - }; - typedef impl::node_iterator node_iterator; - typedef impl::node_iterator node_const_iterator; - -.. |interoperability| replace:: **interoperability** -.. _interoperability: new-iter-concepts.html#interoperable-iterators-lib-interoperable-iterators - -.. [#broken] If you're using an older compiler and it can't handle - this example, see the `example code`__ for workarounds. - -.. [#random] If ``node_iterator`` had been a `random access - traversal iterator`_, we'd have had to templatize its - ``distance_to`` function as well. - - -__ ../example/node_iterator2.hpp - -You can see an example program which exercises our interoperable -iterators `here`__. - -__ ../example/node_iterator2.cpp - -Telling the Truth ------------------ - -Now ``node_iterator`` and ``node_const_iterator`` behave exactly as -you'd expect... almost. We can compare them and we can convert in -one direction: from ``node_iterator`` to ``node_const_iterator``. -If we try to convert from ``node_const_iterator`` to -``node_iterator``, we'll get an error when the converting -constructor tries to initialize ``node_iterator``\ 's ``m_node``, a -``node*`` with a ``node const*``. So what's the problem? - -The problem is that -``boost::``\ |is_convertible|_\ ``::value`` -will be ``true``, but it should be ``false``. |is_convertible|_ -lies because it can only see as far as the *declaration* of -``node_iter``\ 's converting constructor, but can't look inside at -the *definition* to make sure it will compile. A perfect solution -would make ``node_iter``\ 's converting constructor disappear when -the ``m_node`` conversion would fail. - -.. |is_convertible| replace:: ``is_convertible`` -.. _is_convertible: ../../type_traits/index.html#relationships - -In fact, that sort of magic is possible using -|enable_if|__. By rewriting the converting constructor as -follows, we can remove it from the overload set when it's not -appropriate:: - - #include - #include - - ... - - private: - struct enabler {}; - - public: - template - node_iter( - node_iter const& other - , typename boost::enable_if< - boost::is_convertible - , enabler - >::type = enabler() - ) - : m_node(other.m_node) {} - -.. |enable_if| replace:: ``boost::enable_if`` -__ ../../utility/enable_if.html - - -Wrap Up -------- - -This concludes our ``iterator_facade`` tutorial, but before you -stop reading we urge you to take a look at |iterator_adaptor|__. -There's another way to approach writing these iterators which might -even be superior. - -.. |iterator_adaptor| replace:: ``iterator_adaptor`` -__ iterator_adaptor.html - -.. _`iterator traversal concept`: new-iter-concepts.html#iterator-traversal-concepts-lib-iterator-traversal -.. _`readable iterator`: new-iter-concepts.html#readable-iterators-lib-readable-iterators -.. _`lvalue iterator`: new-iter-concepts.html#lvalue-iterators-lib-lvalue-iterators -.. _`single pass iterator`: new-iter-concepts.html#single-pass-iterators-lib-single-pass-iterators -.. _`incrementable iterator`: new-iter-concepts.html#incrementable-iterators-lib-incrementable-iterators -.. _`forward traversal iterator`: new-iter-concepts.html#forward-traversal-iterators-lib-forward-traversal-iterators -.. _`bidirectional traversal iterator`: new-iter-concepts.html#bidirectional-traversal-iterators-lib-bidirectional-traversal-iterators -.. _`random access traversal iterator`: new-iter-concepts.html#random-access-traversal-iterators-lib-random-access-traversal-iterators - diff --git a/doc/iterator_traits.html b/doc/iterator_traits.html deleted file mode 100755 index 35c743b..0000000 --- a/doc/iterator_traits.html +++ /dev/null @@ -1,400 +0,0 @@ - - - - - - -Iterator Traits - - - - - - - -

-

Iterator Traits

- --- - - - - - - - - - - - -
Author:David Abrahams
Contact:dave@boost-consulting.com
Organization:Boost Consulting
Date:2004-11-01
Copyright:Copyright David Abrahams 2004.
- - - - --- - - - -
abstract:Header <boost/iterator/iterator_traits.hpp> provides -the ability to access an iterator's associated types using -MPL-compatible metafunctions.
-
-

Overview

-

std::iterator_traits provides access to five associated types -of any iterator: its value_type, reference, pointer, -iterator_category, and difference_type. Unfortunately, -such a "multi-valued" traits template can be difficult to use in a -metaprogramming context. <boost/iterator/iterator_traits.hpp> -provides access to these types using a standard metafunctions.

-
-
-

Summary

-

Header <boost/iterator/iterator_traits.hpp>:

-
-template <class Iterator>
-struct iterator_value
-{
-    typedef typename
-      std::iterator_traits<Iterator>::value_type
-    type;
-};
-
-template <class Iterator>
-struct iterator_reference
-{
-    typedef typename
-      std::iterator_traits<Iterator>::reference
-    type;
-};
-
-
-template <class Iterator>
-struct iterator_pointer
-{
-    typedef typename
-      std::iterator_traits<Iterator>::pointer
-    type;
-};
-
-template <class Iterator>
-struct iterator_difference
-{
-    typedef typename
-      detail::iterator_traits<Iterator>::difference_type
-    type;
-};
-
-template <class Iterator>
-struct iterator_category
-{
-    typedef typename
-      detail::iterator_traits<Iterator>::iterator_category
-    type;
-};
-
-
-
-

Broken Compiler Notes

-

Because of workarounds in Boost, you may find that these -metafunctions actually work better than the facilities provided by -your compiler's standard library.

-

On compilers that don't support partial specialization, such as -Microsoft Visual C++ 6.0 or 7.0, you may need to manually invoke -BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION on the -value_type of pointers that are passed to these metafunctions.

-

Because of bugs in the implementation of GCC-2.9x, the name of -iterator_category is changed to iterator_category_ on that -compiler. A macro, BOOST_ITERATOR_CATEGORY, that expands to -either iterator_category or iterator_category_, as -appropriate to the platform, is provided for portability.

-
-
- - diff --git a/doc/iterator_traits.pdf b/doc/iterator_traits.pdf deleted file mode 100755 index b5c765a81e404eefe815b9d4dc1ac051af3ba470..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49650 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 diff --git a/doc/iterator_traits.rst b/doc/iterator_traits.rst deleted file mode 100755 index 2000d47..0000000 --- a/doc/iterator_traits.rst +++ /dev/null @@ -1,98 +0,0 @@ -.. Distributed under 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) - -+++++++++++++++++ - Iterator Traits -+++++++++++++++++ - -:Author: David Abrahams -:Contact: dave@boost-consulting.com -:organization: `Boost Consulting`_ -:date: $Date$ -:copyright: Copyright David Abrahams 2004. - -.. _`Boost Consulting`: http://www.boost-consulting.com - -:abstract: Header ```` provides - the ability to access an iterator's associated types using - MPL-compatible metafunctions_. - -.. _metafunctions: ../../mpl/doc/index.html#metafunctions - -Overview -======== - -``std::iterator_traits`` provides access to five associated types -of any iterator: its ``value_type``, ``reference``, ``pointer``, -``iterator_category``, and ``difference_type``. Unfortunately, -such a "multi-valued" traits template can be difficult to use in a -metaprogramming context. ```` -provides access to these types using a standard metafunctions_. - -Summary -======= - -Header ````:: - - template - struct iterator_value - { - typedef typename - std::iterator_traits::value_type - type; - }; - - template - struct iterator_reference - { - typedef typename - std::iterator_traits::reference - type; - }; - - - template - struct iterator_pointer - { - typedef typename - std::iterator_traits::pointer - type; - }; - - template - struct iterator_difference - { - typedef typename - detail::iterator_traits::difference_type - type; - }; - - template - struct iterator_category - { - typedef typename - detail::iterator_traits::iterator_category - type; - }; - -Broken Compiler Notes -===================== - -Because of workarounds in Boost, you may find that these -metafunctions_ actually work better than the facilities provided by -your compiler's standard library. - -On compilers that don't support partial specialization, such as -Microsoft Visual C++ 6.0 or 7.0, you may need to manually invoke -BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION_ on the -``value_type`` of pointers that are passed to these metafunctions. - -Because of bugs in the implementation of GCC-2.9x, the name of -``iterator_category`` is changed to ``iterator_category_`` on that -compiler. A macro, ``BOOST_ITERATOR_CATEGORY``, that expands to -either ``iterator_category`` or ``iterator_category_``, as -appropriate to the platform, is provided for portability. - -.. _BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION: ../../type_traits/index.html#transformations - diff --git a/doc/make_counting_iterator.rst b/doc/make_counting_iterator.rst deleted file mode 100755 index 8477093..0000000 --- a/doc/make_counting_iterator.rst +++ /dev/null @@ -1,12 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -:: - - template - counting_iterator make_counting_iterator(Incrementable x); - -:Returns: An instance of ``counting_iterator`` - with ``current`` constructed from ``x``. - diff --git a/doc/make_filter_iterator.rst b/doc/make_filter_iterator.rst deleted file mode 100755 index 4374b60..0000000 --- a/doc/make_filter_iterator.rst +++ /dev/null @@ -1,19 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -:: - - template - filter_iterator - make_filter_iterator(Predicate f, Iterator x, Iterator end = Iterator()); - -:Returns: filter_iterator(f, x, end) - -:: - - template - filter_iterator - make_filter_iterator(Iterator x, Iterator end = Iterator()); - -:Returns: filter_iterator(x, end) diff --git a/doc/make_reverse_iterator.rst b/doc/make_reverse_iterator.rst deleted file mode 100644 index dea1364..0000000 --- a/doc/make_reverse_iterator.rst +++ /dev/null @@ -1,13 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -:: - - template - reverse_iteratorn - make_reverse_iterator(BidirectionalIterator x); - -:Returns: An instance of ``reverse_iterator`` - with a ``current`` constructed from ``x``. - diff --git a/doc/make_transform_iterator.rst b/doc/make_transform_iterator.rst deleted file mode 100755 index 6ac566b..0000000 --- a/doc/make_transform_iterator.rst +++ /dev/null @@ -1,23 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -:: - - template - transform_iterator - make_transform_iterator(Iterator it, UnaryFunction fun); - -:Returns: An instance of ``transform_iterator`` with ``m_f`` - initialized to ``f`` and ``m_iterator`` initialized to ``x``. - - - -:: - - template - transform_iterator - make_transform_iterator(Iterator it); - -:Returns: An instance of ``transform_iterator`` with ``m_f`` - default constructed and ``m_iterator`` initialized to ``x``. diff --git a/doc/make_zip_iterator.rst b/doc/make_zip_iterator.rst deleted file mode 100755 index e74b895..0000000 --- a/doc/make_zip_iterator.rst +++ /dev/null @@ -1,12 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -:: - - template - zip_iterator - make_zip_iterator(IteratorTuple t); - -:Returns: An instance of ``zip_iterator`` with ``m_iterator_tuple`` - initialized to ``t``. diff --git a/doc/new-iter-concepts.html b/doc/new-iter-concepts.html deleted file mode 100755 index 2013fba..0000000 --- a/doc/new-iter-concepts.html +++ /dev/null @@ -1,1303 +0,0 @@ - - - - - - -New Iterator Concepts - - - - - - - -
-

New Iterator Concepts

- --- - - - - - - - - - - - - - -
Author:David Abrahams, Jeremy Siek, Thomas Witt
Contact:dave@boost-consulting.com, jsiek@osl.iu.edu, witt@styleadvisor.com
Organization:Boost Consulting, Indiana University Open Systems -Lab, Zephyr Associates, Inc.
Date:2006-04-30
Number:This is a revised version of n1550=03-0133, which was -accepted for Technical Report 1 by the C++ standard -committee's library working group. This proposal is a -revision of paper n1297, n1477, and n1531.
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt -2003.
- - - - - --- - - - -
Abstract:We propose a new system of iterator concepts that treat -access and positioning independently. This allows the -concepts to more closely match the requirements -of algorithms and provides better categorizations -of iterators that are used in practice.
- -
-

Motivation

-

The standard iterator categories and requirements are flawed because -they use a single hierarchy of concepts to address two orthogonal -issues: iterator traversal and value access. As a result, many -algorithms with requirements expressed in terms of the iterator -categories are too strict. Also, many real-world iterators can not be -accurately categorized. A proxy-based iterator with random-access -traversal, for example, may only legally have a category of "input -iterator", so generic algorithms are unable to take advantage of its -random-access capabilities. The current iterator concept hierarchy is -geared towards iterator traversal (hence the category names), while -requirements that address value access sneak in at various places. The -following table gives a summary of the current value access -requirements in the iterator categories.

- ---- - - - - - - - - - - - - - - - - - - -
Value Access Requirements in Existing Iterator Categories
Output Iterator*i = a
Input Iterator*i is convertible to T
Forward Iterator*i is T& (or const T& once issue 200 -is resolved)
Random Access Iteratori[n] is convertible to T (also i[n] = t -is required for mutable iterators once issue 299 -is resolved)
-

Because iterator traversal and value access are mixed together in a -single hierarchy, many useful iterators can not be appropriately -categorized. For example, vector<bool>::iterator is almost a -random access iterator, but the return type is not bool& (see -issue 96 and Herb Sutter's paper J16/99-0008 = WG21 -N1185). Therefore, the iterators of vector<bool> only meet the -requirements of input iterator and output iterator. This is so -nonintuitive that the C++ standard contradicts itself on this point. -In paragraph 23.2.4/1 it says that a vector is a sequence that -supports random access iterators.

-

Another difficult-to-categorize iterator is the transform iterator, an -adaptor which applies a unary function object to the dereferenced -value of the some underlying iterator (see transform_iterator). -For unary functions such as times, the return type of -operator* clearly needs to be the result_type of the function -object, which is typically not a reference. Because random access -iterators are required to return lvalues from operator*, if you -wrap int* with a transform iterator, you do not get a random -access iterator as might be expected, but an input iterator.

-

A third example is found in the vertex and edge iterators of the -Boost Graph Library. These iterators return vertex and edge -descriptors, which are lightweight handles created on-the-fly. They -must be returned by-value. As a result, their current standard -iterator category is input_iterator_tag, which means that, -strictly speaking, you could not use these iterators with algorithms -like min_element(). As a temporary solution, the concept -Multi-Pass Input Iterator was introduced to describe the vertex and -edge descriptors, but as the design notes for the concept suggest, a -better solution is needed.

-

In short, there are many useful iterators that do not fit into the -current standard iterator categories. As a result, the following bad -things happen:

-
    -
  • Iterators are often mis-categorized.
  • -
  • Algorithm requirements are more strict than necessary, because they -cannot separate the need for random access or bidirectional -traversal from the need for a true reference return type.
  • -
-
-
-

Impact on the Standard

-

This proposal for TR1 is a pure extension. Further, the new iterator -concepts are backward-compatible with the old iterator requirements, -and old iterators are forward-compatible with the new iterator -concepts. That is to say, iterators that satisfy the old requirements -also satisfy appropriate concepts in the new system, and iterators -modeling the new concepts will automatically satisfy the appropriate -old requirements.

- - -
-

Possible (but not proposed) Changes to the Working Paper

-

The extensions in this paper suggest several changes we might make -to the working paper for the next standard. These changes are not -a formal part of this proposal for TR1.

-
-

Changes to Algorithm Requirements

-

The algorithms in the standard library could benefit from the new -iterator concepts because the new concepts provide a more accurate way -to express their type requirements. The result is algorithms that are -usable in more situations and have fewer type requirements.

-

For the next working paper (but not for TR1), the committee should -consider the following changes to the type requirements of algorithms. -These changes are phrased as textual substitutions, listing the -algorithms to which each textual substitution applies.

-

Forward Iterator -> Forward Traversal Iterator and Readable Iterator

-
-find_end, adjacent_find, search, search_n, rotate_copy, -lower_bound, upper_bound, equal_range, binary_search, -min_element, max_element
-

Forward Iterator (1) -> Single Pass Iterator and Readable Iterator, -Forward Iterator (2) -> Forward Traversal Iterator and Readable Iterator

-
-find_first_of
-

Forward Iterator -> Readable Iterator and Writable Iterator

-
-iter_swap
-

Forward Iterator -> Single Pass Iterator and Writable Iterator

-
-fill, generate
-

Forward Iterator -> Forward Traversal Iterator and Swappable Iterator

-
-rotate
-

Forward Iterator (1) -> Swappable Iterator and Single Pass Iterator, -Forward Iterator (2) -> Swappable Iterator and Incrementable Iterator

-
-swap_ranges
-
-
Forward Iterator -> Forward Traversal Iterator and Readable Iterator and Writable Iterator
-
remove, remove_if, unique
-
-

Forward Iterator -> Single Pass Iterator and Readable Iterator and Writable Iterator

-
-replace, replace_if
-
-
Bidirectional Iterator -> Bidirectional Traversal Iterator and Swappable Iterator
-
reverse
-
Bidirectional Iterator -> Bidirectional Traversal Iterator and Readable and Swappable Iterator
-
partition
-
-

Bidirectional Iterator (1) -> Bidirectional Traversal Iterator and Readable Iterator, -Bidirectional Iterator (2) -> Bidirectional Traversal Iterator and Writable Iterator

-
-copy_backwards
-
-
Bidirectional Iterator -> Bidirectional Traversal Iterator and Swappable Iterator and Readable Iterator
-
next_permutation, prev_permutation
-
Bidirectional Iterator -> Bidirectional Traversal Iterator and Readable Iterator and Writable Iterator
-
stable_partition, inplace_merge
-
Bidirectional Iterator -> Bidirectional Traversal Iterator and Readable Iterator
-
reverse_copy
-
Random Access Iterator -> Random Access Traversal Iterator and Readable and Writable Iterator
-
random_shuffle, sort, stable_sort, partial_sort, nth_element, push_heap, pop_heap -make_heap, sort_heap
-
Input Iterator (2) -> Incrementable Iterator and Readable Iterator
-
equal, mismatch
-
Input Iterator (2) -> Incrementable Iterator and Readable Iterator
-
transform
-
-
-
-

Deprecations

-

For the next working paper (but not for TR1), the committee should -consider deprecating the old iterator tags, and -std::iterator_traits, since it will be superceded by individual -traits metafunctions.

-
-
-

vector<bool>

-

For the next working paper (but not for TR1), the committee should -consider reclassifying vector<bool>::iterator as a Random -Access Traversal Iterator and Readable Iterator and Writable -Iterator.

-
-
-
-
-

Design

-

The iterator requirements are to be separated into two groups. One set -of concepts handles the syntax and semantics of value access:

-
    -
  • Readable Iterator
  • -
  • Writable Iterator
  • -
  • Swappable Iterator
  • -
  • Lvalue Iterator
  • -
-

The access concepts describe requirements related to operator* and -operator->, including the value_type, reference, and -pointer associated types.

-

The other set of concepts handles traversal:

-
    -
  • Incrementable Iterator
  • -
  • Single Pass Iterator
  • -
  • Forward Traversal Iterator
  • -
  • Bidirectional Traversal Iterator
  • -
  • Random Access Traversal Iterator
  • -
-

The refinement relationships for the traversal concepts are in the -following diagram.

-
traversal.png
-

In addition to the iterator movement operators, such as -operator++, the traversal concepts also include requirements on -position comparison such as operator== and operator<. The -reason for the fine grain slicing of the concepts into the -Incrementable and Single Pass is to provide concepts that are exact -matches with the original input and output iterator requirements.

-

This proposal also includes a concept for specifying when an iterator -is interoperable with another iterator, in the sense that int* is -interoperable with int const*.

-
    -
  • Interoperable Iterators
  • -
-

The relationship between the new iterator concepts and the old are -given in the following diagram.

-
oldeqnew.png
-

Like the old iterator requirements, we provide tags for purposes of -dispatching based on the traversal concepts. The tags are related via -inheritance so that a tag is convertible to another tag if the concept -associated with the first tag is a refinement of the second tag.

-

Our design reuses iterator_traits<Iter>::iterator_category to -indicate an iterator's traversal capability. To specify -capabilities not captured by any old-style iterator category, an -iterator designer can use an iterator_category type that is -convertible to both the the most-derived old iterator category tag -which fits, and the appropriate new iterator traversal tag.

- -

We do not provide tags for the purposes of dispatching based on the -access concepts, in part because we could not find a way to -automatically infer the right access tags for old-style iterators. -An iterator's writability may be dependent on the assignability of -its value_type and there's no known way to detect whether an -arbitrary type is assignable. Fortunately, the need for -dispatching based on access capability is not as great as the need -for dispatching based on traversal capability.

-

A difficult design decision concerned the operator[]. The direct -approach for specifying operator[] would have a return type of -reference; the same as operator*. However, going in this -direction would mean that an iterator satisfying the old Random Access -Iterator requirements would not necessarily be a model of Readable or -Writable Lvalue Iterator. Instead we have chosen a design that -matches the preferred resolution of issue 299: operator[] is -only required to return something convertible to the value_type -(for a Readable Iterator), and is required to support assignment -i[n] = t (for a Writable Iterator).

-
-
-

Proposed Text

-
-

Addition to [lib.iterator.requirements]

-
-

Iterator Value Access Concepts [lib.iterator.value.access]

-

In the tables below, X is an iterator type, a is a constant -object of type X, R is -std::iterator_traits<X>::reference, T is -std::iterator_traits<X>::value_type, and v is a constant -object of type T.

-
-

Readable Iterators [lib.readable.iterators]

-

A class or built-in type X models the Readable Iterator concept -for value type T if, in addition to X being Assignable and -Copy Constructible, the following expressions are valid and respect -the stated semantics. U is the type of any specified member of -type T.

- ----- - - - - - - - - - - - - - - - - - - - - - - -
Readable Iterator Requirements (in addition to Assignable and Copy Constructible)
ExpressionReturn TypeNote/Precondition
iterator_traits<X>::value_typeTAny non-reference, -non-cv-qualified type
*aConvertible to T
-
pre: a is dereferenceable. If a == b then *a
-
is equivalent to *b.
-
-
a->mU&pre: pre: (*a).m is well-defined. Equivalent to (*a).m.
- -
-
-

Writable Iterators [lib.writable.iterators]

-

A class or built-in type X models the Writable Iterator concept -if, in addition to X being Copy Constructible, the following -expressions are valid and respect the stated semantics. Writable -Iterators have an associated set of value types.

- ----- - - - - - - - - - - - - - - -
Writable Iterator Requirements (in addition to Copy Constructible)
ExpressionReturn TypePrecondition
*a = o pre: The type of o -is in the set of -value types of X
-
-
-

Swappable Iterators [lib.swappable.iterators]

-

A class or built-in type X models the Swappable Iterator concept -if, in addition to X being Copy Constructible, the following -expressions are valid and respect the stated semantics.

- ----- - - - - - - - - - - - - - - -
Swappable Iterator Requirements (in addition to Copy Constructible)
ExpressionReturn TypePostcondition
iter_swap(a, b)voidthe pointed to values are -exchanged
-

[Note: An iterator that is a model of the Readable Iterator and -Writable Iterator concepts is also a model of Swappable -Iterator. --end note]

-
-
-

Lvalue Iterators [lib.lvalue.iterators]

-

The Lvalue Iterator concept adds the requirement that the return -type of operator* type be a reference to the value type of the -iterator.

- ----- - - - - - - - - - - - - - - -
Lvalue Iterator Requirements
ExpressionReturn TypeNote/Assertion
*aT&T is cv -iterator_traits<X>::value_type -where cv is an optional -cv-qualification. pre: a is -dereferenceable.
-

If X is a Writable Iterator then a == b if and only if -*a is the same object as *b. If X is a Readable -Iterator then a == b implies *a is the same object as -*b.

-
-
-
-

Iterator Traversal Concepts [lib.iterator.traversal]

-

In the tables below, X is an iterator type, a and b are -constant objects of type X, r and s are mutable objects of -type X, T is std::iterator_traits<X>::value_type, and -v is a constant object of type T.

-
-

Incrementable Iterators [lib.incrementable.iterators]

-

A class or built-in type X models the Incrementable Iterator -concept if, in addition to X being Assignable and Copy -Constructible, the following expressions are valid and respect the -stated semantics.

- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Incrementable Iterator Requirements (in addition to Assignable, Copy Constructible)
ExpressionReturn TypeAssertion
++rX&&r == &++r
r++  
*r++  
iterator_traversal<X>::typeConvertible to -incrementable_traversal_tag 
-

If X is a Writable Iterator then X a(r++); is equivalent -to X a(r); ++r; and *r++ = o is equivalent -to *r = o; ++r. -If X is a Readable Iterator then T z(*r++); is equivalent -to T z(*r); ++r;.

- -
-
-

Single Pass Iterators [lib.single.pass.iterators]

-

A class or built-in type X models the Single Pass Iterator -concept if the following expressions are valid and respect the stated -semantics.

- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Single Pass Iterator Requirements (in addition to Incrementable Iterator and Equality -Comparable)
ExpressionReturn TypeOperational -SemanticsAssertion/ -Pre-/Post-condition
++rX& pre: r is -dereferenceable; post: -r is dereferenceable or -r is past-the-end
a == bconvertible to bool == is an equivalence -relation over its domain
a != bconvertible to bool!(a == b) 
iterator_traversal<X>::typeConvertible to -single_pass_traversal_tag  
- -
-
-

Forward Traversal Iterators [lib.forward.traversal.iterators]

-

A class or built-in type X models the Forward Traversal Iterator -concept if, in addition to X meeting the requirements of Default -Constructible and Single Pass Iterator, the following expressions are -valid and respect the stated semantics.

- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Forward Traversal Iterator Requirements (in addition to Default Constructible and Single Pass Iterator)
ExpressionReturn TypeAssertion/Note
X u;X&note: u may have a -singular value.
++rX&r == s and r is -dereferenceable implies -++r == ++s.
iterator_traits<X>::difference_typeA signed integral type representing -the distance between iterators 
iterator_traversal<X>::typeConvertible to -forward_traversal_tag 
- -
-
-

Bidirectional Traversal Iterators [lib.bidirectional.traversal.iterators]

-

A class or built-in type X models the Bidirectional Traversal -Iterator concept if, in addition to X meeting the requirements of -Forward Traversal Iterator, the following expressions are valid and -respect the stated semantics.

- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - -
Bidirectional Traversal Iterator Requirements (in addition to Forward Traversal -Iterator)
ExpressionReturn TypeOperational -SemanticsAssertion/ -Pre-/Post-condition
--rX& 

pre: there exists -s such that r -== ++s. post: -s is -dereferenceable.

-

++(--r) == r. ---r == --s -implies r == -s. &r == &--r.

-
r--convertible to const X&
-{
-  X tmp = r;
-  --r;
-  return tmp;
-}
-
-
 
iterator_traversal<X>::typeConvertible to -bidirectional_traversal_tag  
- -
-
-

Random Access Traversal Iterators [lib.random.access.traversal.iterators]

-

A class or built-in type X models the Random Access Traversal -Iterator concept if the following expressions are valid and respect -the stated semantics. In the table below, Distance is -iterator_traits<X>::difference_type and n represents a -constant object of type Distance.

- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Random Access Traversal Iterator Requirements (in addition to Bidirectional Traversal Iterator)
ExpressionReturn TypeOperational SemanticsAssertion/ -Precondition
r += nX&
-{
-  Distance m = n;
-  if (m >= 0)
-    while (m--)
-      ++r;
-  else
-    while (m++)
-      --r;
-  return r;
-}
-
-
 
a + n, n + aX{ X tmp = a; return tmp -+= n; } 
r -= nX&return r += -n 
a - nX{ X tmp = a; return tmp --= n; } 
b - aDistancea < b ?  distance(a,b) -: -distance(b,a)pre: there exists a -value n of -Distance such that -a + n == b. b -== a + (b - a).
a[n]convertible to T*(a + n)pre: a is a Readable -Iterator
a[n] = vconvertible to T*(a + n) = vpre: a is a Writable -Iterator
a < bconvertible to boolb - a > 0< is a total -ordering relation
a > bconvertible to boolb < a> is a total -ordering relation
a >= bconvertible to bool!(a < b) 
a <= bconvertible to bool!(a > b) 
iterator_traversal<X>::typeConvertible to -random_access_traversal_tag  
- -
-
-

Interoperable Iterators [lib.interoperable.iterators]

-

A class or built-in type X that models Single Pass Iterator is -interoperable with a class or built-in type Y that also models -Single Pass Iterator if the following expressions are valid and -respect the stated semantics. In the tables below, x is an object -of type X, y is an object of type Y, Distance is -iterator_traits<Y>::difference_type, and n represents a -constant object of type Distance.

- ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ExpressionReturn TypeAssertion/Precondition/Postcondition
y = xYpost: y == x
Y(x)Ypost: Y(x) == x
x == yconvertible to bool== is an equivalence relation over its domain.
y == xconvertible to bool== is an equivalence relation over its domain.
x != yconvertible to boolbool(a==b) != bool(a!=b) over its domain.
y != xconvertible to boolbool(a==b) != bool(a!=b) over its domain.
-

If X and Y both model Random Access Traversal Iterator then -the following additional requirements must be met.

- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ExpressionReturn TypeOperational SemanticsAssertion/ Precondition
x < yconvertible to booly - x > 0< is a total ordering relation
y < xconvertible to boolx - y > 0< is a total ordering relation
x > yconvertible to booly < x> is a total ordering relation
y > xconvertible to boolx < y> is a total ordering relation
x >= yconvertible to bool!(x < y) 
y >= xconvertible to bool!(y < x) 
x <= yconvertible to bool!(x > y) 
y <= xconvertible to bool!(y > x) 
y - xDistancedistance(Y(x),y)pre: there exists a value n of -Distance such that x + n == y. -y == x + (y - x).
x - yDistancedistance(y,Y(x))pre: there exists a value n of -Distance such that y + n == x. -x == y + (x - y).
-
-
-
-
-

Addition to [lib.iterator.synopsis]

-
-// lib.iterator.traits, traits and tags
-template <class Iterator> struct is_readable_iterator;
-template <class Iterator> struct iterator_traversal;
-
-struct incrementable_traversal_tag { };
-struct single_pass_traversal_tag : incrementable_traversal_tag { };
-struct forward_traversal_tag : single_pass_traversal_tag { };
-struct bidirectional_traversal_tag : forward_traversal_tag { };
-struct random_access_traversal_tag : bidirectional_traversal_tag { };
-
-
-
-

Addition to [lib.iterator.traits]

-

The is_readable_iterator class -template satisfies the UnaryTypeTrait requirements.

-

Given an iterator type X, is_readable_iterator<X>::value -yields true if, for an object a of type X, *a is -convertible to iterator_traits<X>::value_type, and false -otherwise.

-

iterator_traversal<X>::type is

-
-category-to-traversal(iterator_traits<X>::iterator_category) 
-
-

where category-to-traversal is defined as follows

-
-category-to-traversal(C) =
-    if (C is convertible to incrementable_traversal_tag)
-        return C;
-    else if (C is convertible to random_access_iterator_tag)
-        return random_access_traversal_tag;
-    else if (C is convertible to bidirectional_iterator_tag)
-        return bidirectional_traversal_tag;
-    else if (C is convertible to forward_iterator_tag)
-        return forward_traversal_tag;
-    else if (C is convertible to input_iterator_tag)
-        return single_pass_traversal_tag;
-    else if (C is convertible to output_iterator_tag)
-        return incrementable_traversal_tag;
-    else
-        the program is ill-formed
-
-
-
-
-

Footnotes

-

The UnaryTypeTrait concept is defined in n1519; the LWG is -considering adding the requirement that specializations are derived -from their nested ::type.

- -
-
- - diff --git a/doc/new-iter-concepts.pdf b/doc/new-iter-concepts.pdf deleted file mode 100755 index aa680ec96e1fffcee99b52be9ac8c528d8d1c72c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175676 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%0ABuzI>O*t5|_8({rV? z{$GqU$z1Z{X1=_`3xywQp&|BJ!iNOIdgNEkyt+!l{o2w3C&56c>91XUYfkRy`k1-h zW$L`?8BF2JYa1GFK0Ec7t?1`!`4>yK{RF?BVVoaRD!yCWwZq)rcIbpyXf!x=tm(wR4KvwT6jR-xUSDO@Tg(y3Av_&FD1Hy`HWJO8JjcP z7w+}rJ^1{-@b!D564^CbM#to4y3bvddRCQ3C1r`~k*N+r0hf=o?lXL#`|-5mcF$+_ zyMpgpoKv_OV&IWAQ*(lE7kiD={23E&9nmhziq30PoOexY`PJxu%lJBe`91Ym5<1zb z=7ptVQi;&z`+7A;Ui7iuW_j*=bOw9edR{r8B&8(moxt@l2#+S_yY zUYW_*<`DyT#0Lu;Qc1nFt^=OfNzL3G9EJ)v~$mr)q)6>T$vU}#q z?DYLC*Jq=+wNsftNZNL%@0(cv;L_+XVQC6w{(L2-jhTWB3W?Vjryt>P4(WQv5L0a7 zk{oMyODs0pvBs-Jy;k0C`}1F}8@&Se=TA_Zv^saD{EeMc6L^=-EKDob1P=2oP^vuX~8SBwJ!) z(wcYf2a9zA558SzwJW2qwsoVV!X0%jkJGo*-=B6VnHS(YrD58X74b)Z$9LJ>((`%n z@nIa-WiEzE?J;j}{@N6JKCR1%jmQijCfB*bP9QPN`KcpD6(D&0voy50BVQ*XY<8RCVQ#h{| zGJozf%^5cwd&RQWzS`i%y}3Oj_40ZR)2KNYKD%+Z8stpVOq=iKec=JagQQ*!?^*WD zTG>sz_e$wzt-0uASs$>twJ6X$N+W&UsvK$mh1JhCA78TI4O?T{+H80CGv^p?&)gfP z>zkY_sO8CT&c4O<&JWw$N_~%)=sueFHnY2;Zn9R9*0VLdkJ`i}Uv6_e^>$kO7FPx4 z_O};#!e-5mZPD(vc*y?V?&)*C7|}F=qughY7R1iD>CC1jckK6x=$pr1bk#IX<~ut5 z7^~}?rs+$nEO#Btx!
43tkl(d?zC0yUkTy&fGXB%>O2p?6?$`5GlNZI5iZf|vx zb8_DX7sbXjrw?5d}_CwEk8ktYB?~~?} zY~a;f_QdXt&_r6yf-r)$X(7&TrdhE%h86UQOXb79!^}2B3)HIK*${Wk1 z=e=~*md=+lieX$d!H%nAU-sIwwVQ-%cFXt7+S$L<{NN(RCPk_57X#f2|64y4OjcVg z>ax1k>WfJR|NY*>X*t{fPhf6sf0%Zx^q-rB#eAX2Gq;W$6}n@5pX|Hs5yeajdw96P_XRWW(#N$=>|)}L#NVixoYFG;x+>@2v( z!06ZqnYG_)0%d)sN|`E&KaJPb-}B<+$;S07o!t^L9{Nw+;?=RjCtF?Jb7|OqziB(G zW%a~T3>c3k z9pK2W(p90){l8g$bt(tX{=2m>Lj3!6v!m)Y z*4r6dQYCygIX51>alHH|r|LBop~F^bUW#Ws&bfYjKg*{{@cE9*9i8dLdph!xZwc

5(ku7Lccz|@ReERt*YbQx)u#2D0!~jGA4Wtz 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ΜhI+6U=mFW{Tc!H#9Xf#msMJ zpsS2P)*|`W%p9YPH8r!qsHaWMEHUHF45LkGXlibN8Gh!581;gwxe-QvZfb6X-u5vx zH8)0YzZjaDn_&9a+|h;wrb^nSOYsktR+r9GND zOU$%uVSt%0EetT~JW~rp%&@XBMDI@YZPW@w2KR%V8l7-`MS z$N-~!F*CwUyJkj)81|YO8DYecnGtxEJ*r!bjM4j{py^PIGQ!Nr6r+AKGcv`<=VnG` z=xuL9Gb1yM_%JiV%+qE@7N9X!H1}Dc_dg8Hj4=AshGxbF7;P0ZV*`x#nwha7Mww`4 z4BlIfYOgWI_?4lVu`%doJ2Z8mHO(L)ME*51HbL)~8Jc0K%gl^TF~h~!478gKWFS1< zn;Dy9M^kQO&Q8${IfX@a)b)N}FKg!U| z#0b5gY-na;j2SK_plMf-aY*53VuH~IHZw8B$d_g&W*B9dnTZ+t_=cgG31-{T%micn zz|hRZ0yDjsSb|P;1vwBAAEpKvZ8I}djPV>pGgI)Ta%g(NhlikxffjC|iD9<0%}k9! zv&m@cOfc#^GgHhqrkN?m*sGzLsTpXyC7OBWn0e6D9HY-?Kqh2*LGrbg3wsI%AAF+05Jovuwgr$D5g(VwO$j7-Oo2X66{JO6g(+tKwJ-y1YJ=GUIt(HwwFrEac5r4@DtLlMKPW%HL;*CT7{sOTnU|KY0GTNR z@jx@wHYP?!hK4E0iAhN*rY0t4rfDfgMo9(+28M=7X-VcLiFOJ^C;{)bDh8d+0iGK& RG_$ZYH{nuMb@g}S0ssh4uI2y$ diff --git a/doc/new-iter-concepts.rst b/doc/new-iter-concepts.rst deleted file mode 100644 index 4648183..0000000 --- a/doc/new-iter-concepts.rst +++ /dev/null @@ -1,803 +0,0 @@ -.. Distributed under 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) - -++++++++++++++++++++++ - New Iterator Concepts -++++++++++++++++++++++ - -.. Version 1.25 of this ReStructuredText document is the same as - n1550_, the paper accepted by the LWG. - -:Author: David Abrahams, Jeremy Siek, Thomas Witt -:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu, witt@styleadvisor.com -:organization: `Boost Consulting`_, Indiana University `Open Systems - Lab`_, `Zephyr Associates, Inc.`_ -:date: $Date$ - -:Number: This is a revised version of n1550_\ =03-0133, which was - accepted for Technical Report 1 by the C++ standard - committee's library working group. This proposal is a - revision of paper n1297_, n1477_, and n1531_. - -:copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt - 2003. - -.. _`Boost Consulting`: http://www.boost-consulting.com -.. _`Open Systems Lab`: http://www.osl.iu.edu -.. _`Zephyr Associates, Inc.`: http://www.styleadvisor.com - -.. _`Institute for Transport Railway Operation and Construction`: - http://www.ive.uni-hannover.de - -:Abstract: We propose a new system of iterator concepts that treat - access and positioning independently. This allows the - concepts to more closely match the requirements - of algorithms and provides better categorizations - of iterators that are used in practice. - -.. contents:: Table of Contents - -.. _n1297: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2001/n1297.html -.. _n1477: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1477.html -.. _n1531: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1531.html -.. _n1550: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1550.html - -============ - Motivation -============ - -The standard iterator categories and requirements are flawed because -they use a single hierarchy of concepts to address two orthogonal -issues: *iterator traversal* and *value access*. As a result, many -algorithms with requirements expressed in terms of the iterator -categories are too strict. Also, many real-world iterators can not be -accurately categorized. A proxy-based iterator with random-access -traversal, for example, may only legally have a category of "input -iterator", so generic algorithms are unable to take advantage of its -random-access capabilities. The current iterator concept hierarchy is -geared towards iterator traversal (hence the category names), while -requirements that address value access sneak in at various places. The -following table gives a summary of the current value access -requirements in the iterator categories. - -+------------------------------------------------------------------------------+ -|Value Access Requirements in Existing Iterator Categories | -+========================+=====================================================+ -|Output Iterator |``*i = a`` | -+------------------------+-----------------------------------------------------+ -|Input Iterator |``*i`` is convertible to ``T`` | -+------------------------+-----------------------------------------------------+ -|Forward Iterator |``*i`` is ``T&`` (or ``const T&`` once `issue 200`_ | -| |is resolved) | -+------------------------+-----------------------------------------------------+ -|Random Access Iterator |``i[n]`` is convertible to ``T`` (also ``i[n] = t`` | -| |is required for mutable iterators once `issue 299`_ | -| |is resolved) | -+------------------------+-----------------------------------------------------+ - -.. _issue 200: http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/lwg-active.html#200 -.. _issue 299: http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/lwg-active.html#299 - - -Because iterator traversal and value access are mixed together in a -single hierarchy, many useful iterators can not be appropriately -categorized. For example, ``vector::iterator`` is almost a -random access iterator, but the return type is not ``bool&`` (see -`issue 96`_ and Herb Sutter's paper J16/99-0008 = WG21 -N1185). Therefore, the iterators of ``vector`` only meet the -requirements of input iterator and output iterator. This is so -nonintuitive that the C++ standard contradicts itself on this point. -In paragraph 23.2.4/1 it says that a ``vector`` is a sequence that -supports random access iterators. - -.. _issue 96: http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/lwg-active.html#96 - -Another difficult-to-categorize iterator is the transform iterator, an -adaptor which applies a unary function object to the dereferenced -value of the some underlying iterator (see `transform_iterator`_). -For unary functions such as ``times``, the return type of -``operator*`` clearly needs to be the ``result_type`` of the function -object, which is typically not a reference. Because random access -iterators are required to return lvalues from ``operator*``, if you -wrap ``int*`` with a transform iterator, you do not get a random -access iterator as might be expected, but an input iterator. - -.. _`transform_iterator`: http://www.boost.org/libs/utility/transform_iterator.htm - -A third example is found in the vertex and edge iterators of the -`Boost Graph Library`_. These iterators return vertex and edge -descriptors, which are lightweight handles created on-the-fly. They -must be returned by-value. As a result, their current standard -iterator category is ``input_iterator_tag``, which means that, -strictly speaking, you could not use these iterators with algorithms -like ``min_element()``. As a temporary solution, the concept -`Multi-Pass Input Iterator`_ was introduced to describe the vertex and -edge descriptors, but as the design notes for the concept suggest, a -better solution is needed. - -.. _Boost Graph Library: http://www.boost.org/libs/graph/doc/table_of_contents.html -.. _Multi-Pass Input Iterator: http://www.boost.org/libs/utility/MultiPassInputIterator.html - -In short, there are many useful iterators that do not fit into the -current standard iterator categories. As a result, the following bad -things happen: - -- Iterators are often mis-categorized. - -- Algorithm requirements are more strict than necessary, because they - cannot separate the need for random access or bidirectional - traversal from the need for a true reference return type. - - -======================== - Impact on the Standard -======================== - -This proposal for TR1 is a pure extension. Further, the new iterator -concepts are backward-compatible with the old iterator requirements, -and old iterators are forward-compatible with the new iterator -concepts. That is to say, iterators that satisfy the old requirements -also satisfy appropriate concepts in the new system, and iterators -modeling the new concepts will automatically satisfy the appropriate -old requirements. - -.. I think we need to say something about the resolution to allow - convertibility to any of the old-style tags as a TR issue (hope it - made it). -DWA - -.. Hmm, not sure I understand. Are you talking about whether a - standards conforming input iterator is allowed to have - a tag that is not input_iterator_tag but that - is convertible to input_iterator_tag? -JGS - -Possible (but not proposed) Changes to the Working Paper -======================================================== - -The extensions in this paper suggest several changes we might make -to the working paper for the next standard. These changes are not -a formal part of this proposal for TR1. - -Changes to Algorithm Requirements -+++++++++++++++++++++++++++++++++ - -The algorithms in the standard library could benefit from the new -iterator concepts because the new concepts provide a more accurate way -to express their type requirements. The result is algorithms that are -usable in more situations and have fewer type requirements. - -For the next working paper (but not for TR1), the committee should -consider the following changes to the type requirements of algorithms. -These changes are phrased as textual substitutions, listing the -algorithms to which each textual substitution applies. - -Forward Iterator -> Forward Traversal Iterator and Readable Iterator - - ``find_end, adjacent_find, search, search_n, rotate_copy, - lower_bound, upper_bound, equal_range, binary_search, - min_element, max_element`` - -Forward Iterator (1) -> Single Pass Iterator and Readable Iterator, -Forward Iterator (2) -> Forward Traversal Iterator and Readable Iterator - - ``find_first_of`` - -Forward Iterator -> Readable Iterator and Writable Iterator - - ``iter_swap`` - -Forward Iterator -> Single Pass Iterator and Writable Iterator - - ``fill, generate`` - -Forward Iterator -> Forward Traversal Iterator and Swappable Iterator - - ``rotate`` - -Forward Iterator (1) -> Swappable Iterator and Single Pass Iterator, -Forward Iterator (2) -> Swappable Iterator and Incrementable Iterator - - ``swap_ranges`` - -Forward Iterator -> Forward Traversal Iterator and Readable Iterator and Writable Iterator - ``remove, remove_if, unique`` - -Forward Iterator -> Single Pass Iterator and Readable Iterator and Writable Iterator - - ``replace, replace_if`` - -Bidirectional Iterator -> Bidirectional Traversal Iterator and Swappable Iterator - ``reverse`` - -Bidirectional Iterator -> Bidirectional Traversal Iterator and Readable and Swappable Iterator - ``partition`` - -Bidirectional Iterator (1) -> Bidirectional Traversal Iterator and Readable Iterator, -Bidirectional Iterator (2) -> Bidirectional Traversal Iterator and Writable Iterator - - ``copy_backwards`` - -Bidirectional Iterator -> Bidirectional Traversal Iterator and Swappable Iterator and Readable Iterator - ``next_permutation, prev_permutation`` - -Bidirectional Iterator -> Bidirectional Traversal Iterator and Readable Iterator and Writable Iterator - ``stable_partition, inplace_merge`` - -Bidirectional Iterator -> Bidirectional Traversal Iterator and Readable Iterator - ``reverse_copy`` - -Random Access Iterator -> Random Access Traversal Iterator and Readable and Writable Iterator - ``random_shuffle, sort, stable_sort, partial_sort, nth_element, push_heap, pop_heap - make_heap, sort_heap`` - -Input Iterator (2) -> Incrementable Iterator and Readable Iterator - ``equal, mismatch`` - -Input Iterator (2) -> Incrementable Iterator and Readable Iterator - ``transform`` - -Deprecations -++++++++++++ - -For the next working paper (but not for TR1), the committee should -consider deprecating the old iterator tags, and -std::iterator_traits, since it will be superceded by individual -traits metafunctions. - -``vector`` -++++++++++++++++ - -For the next working paper (but not for TR1), the committee should -consider reclassifying ``vector::iterator`` as a Random -Access Traversal Iterator and Readable Iterator and Writable -Iterator. - -======== - Design -======== - -The iterator requirements are to be separated into two groups. One set -of concepts handles the syntax and semantics of value access: - -- Readable Iterator -- Writable Iterator -- Swappable Iterator -- Lvalue Iterator - -The access concepts describe requirements related to ``operator*`` and -``operator->``, including the ``value_type``, ``reference``, and -``pointer`` associated types. - -The other set of concepts handles traversal: - -- Incrementable Iterator -- Single Pass Iterator -- Forward Traversal Iterator -- Bidirectional Traversal Iterator -- Random Access Traversal Iterator - -The refinement relationships for the traversal concepts are in the -following diagram. - -.. image:: traversal.png - -In addition to the iterator movement operators, such as -``operator++``, the traversal concepts also include requirements on -position comparison such as ``operator==`` and ``operator<``. The -reason for the fine grain slicing of the concepts into the -Incrementable and Single Pass is to provide concepts that are exact -matches with the original input and output iterator requirements. - -This proposal also includes a concept for specifying when an iterator -is interoperable with another iterator, in the sense that ``int*`` is -interoperable with ``int const*``. - -- Interoperable Iterators - - -The relationship between the new iterator concepts and the old are -given in the following diagram. - -.. image:: oldeqnew.png - -Like the old iterator requirements, we provide tags for purposes of -dispatching based on the traversal concepts. The tags are related via -inheritance so that a tag is convertible to another tag if the concept -associated with the first tag is a refinement of the second tag. - -Our design reuses ``iterator_traits::iterator_category`` to -indicate an iterator's traversal capability. To specify -capabilities not captured by any old-style iterator category, an -iterator designer can use an ``iterator_category`` type that is -convertible to both the the most-derived old iterator category tag -which fits, and the appropriate new iterator traversal tag. - -.. dwa2003/1/2: Note that we are not *requiring* convertibility to - a new-style traversal tag in order to meet new concepts. - Old-style iterators still fit, after all. - -We do not provide tags for the purposes of dispatching based on the -access concepts, in part because we could not find a way to -automatically infer the right access tags for old-style iterators. -An iterator's writability may be dependent on the assignability of -its ``value_type`` and there's no known way to detect whether an -arbitrary type is assignable. Fortunately, the need for -dispatching based on access capability is not as great as the need -for dispatching based on traversal capability. - -A difficult design decision concerned the ``operator[]``. The direct -approach for specifying ``operator[]`` would have a return type of -``reference``; the same as ``operator*``. However, going in this -direction would mean that an iterator satisfying the old Random Access -Iterator requirements would not necessarily be a model of Readable or -Writable Lvalue Iterator. Instead we have chosen a design that -matches the preferred resolution of `issue 299`_: ``operator[]`` is -only required to return something convertible to the ``value_type`` -(for a Readable Iterator), and is required to support assignment -``i[n] = t`` (for a Writable Iterator). - - -=============== - Proposed Text -=============== - -Addition to [lib.iterator.requirements] -======================================= - -Iterator Value Access Concepts [lib.iterator.value.access] -++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -In the tables below, ``X`` is an iterator type, ``a`` is a constant -object of type ``X``, ``R`` is -``std::iterator_traits::reference``, ``T`` is -``std::iterator_traits::value_type``, and ``v`` is a constant -object of type ``T``. - -.. _Readable Iterator: - -Readable Iterators [lib.readable.iterators] -------------------------------------------- - -A class or built-in type ``X`` models the *Readable Iterator* concept -for value type ``T`` if, in addition to ``X`` being Assignable and -Copy Constructible, the following expressions are valid and respect -the stated semantics. ``U`` is the type of any specified member of -type ``T``. - -+-----------------------------------------------------------------------------------------------------------------------------+ -|Readable Iterator Requirements (in addition to Assignable and Copy Constructible) | -+-----------------------------------+------------------------+----------------------------------------------------------------+ -|Expression |Return Type |Note/Precondition | -+===================================+========================+================================================================+ -|``iterator_traits::value_type`` |``T`` |Any non-reference, | -| | |non-cv-qualified type | -+-----------------------------------+------------------------+----------------------------------------------------------------+ -|``*a`` | Convertible to ``T`` |pre: ``a`` is dereferenceable. If ``a == b`` then ``*a`` | -| | | is equivalent to ``*b``. | -+-----------------------------------+------------------------+----------------------------------------------------------------+ -|``a->m`` |``U&`` |pre: ``pre: (*a).m`` is well-defined. Equivalent to ``(*a).m``. | -+-----------------------------------+------------------------+----------------------------------------------------------------+ - -.. We won't say anything about iterator_traits::reference until the DR is resolved. -JGS - -.. _Writable Iterator: - -Writable Iterators [lib.writable.iterators] -------------------------------------------- - -A class or built-in type ``X`` models the *Writable Iterator* concept -if, in addition to ``X`` being Copy Constructible, the following -expressions are valid and respect the stated semantics. Writable -Iterators have an associated *set of value types*. - -+---------------------------------------------------------------------+ -|Writable Iterator Requirements (in addition to Copy Constructible) | -+-------------------------+--------------+----------------------------+ -|Expression |Return Type |Precondition | -+=========================+==============+============================+ -|``*a = o`` | | pre: The type of ``o`` | -| | | is in the set of | -| | | value types of ``X`` | -+-------------------------+--------------+----------------------------+ - -Swappable Iterators [lib.swappable.iterators] ---------------------------------------------- - -A class or built-in type ``X`` models the *Swappable Iterator* concept -if, in addition to ``X`` being Copy Constructible, the following -expressions are valid and respect the stated semantics. - -+---------------------------------------------------------------------+ -|Swappable Iterator Requirements (in addition to Copy Constructible) | -+-------------------------+-------------+-----------------------------+ -|Expression |Return Type |Postcondition | -+=========================+=============+=============================+ -|``iter_swap(a, b)`` |``void`` |the pointed to values are | -| | |exchanged | -+-------------------------+-------------+-----------------------------+ - -[*Note:* An iterator that is a model of the `Readable Iterator`_ and -`Writable Iterator`_ concepts is also a model of *Swappable -Iterator*. *--end note*] - - -Lvalue Iterators [lib.lvalue.iterators] ---------------------------------------- - -The *Lvalue Iterator* concept adds the requirement that the return -type of ``operator*`` type be a reference to the value type of the -iterator. - -+-------------------------------------------------------------+ -| Lvalue Iterator Requirements | -+-------------+-----------+-----------------------------------+ -|Expression |Return Type|Note/Assertion | -+=============+===========+===================================+ -|``*a`` | ``T&`` |``T`` is *cv* | -| | |``iterator_traits::value_type`` | -| | |where *cv* is an optional | -| | |cv-qualification. pre: ``a`` is | -| | |dereferenceable. | -+-------------+-----------+-----------------------------------+ - -If ``X`` is a `Writable Iterator`_ then ``a == b`` if and only if -``*a`` is the same object as ``*b``. If ``X`` is a `Readable -Iterator`_ then ``a == b`` implies ``*a`` is the same object as -``*b``. - - -Iterator Traversal Concepts [lib.iterator.traversal] -++++++++++++++++++++++++++++++++++++++++++++++++++++ - -In the tables below, ``X`` is an iterator type, ``a`` and ``b`` are -constant objects of type ``X``, ``r`` and ``s`` are mutable objects of -type ``X``, ``T`` is ``std::iterator_traits::value_type``, and -``v`` is a constant object of type ``T``. - -Incrementable Iterators [lib.incrementable.iterators] ------------------------------------------------------ - -A class or built-in type ``X`` models the *Incrementable Iterator* -concept if, in addition to ``X`` being Assignable and Copy -Constructible, the following expressions are valid and respect the -stated semantics. - -+------------------------------------------------------------------------------------+ -|Incrementable Iterator Requirements (in addition to Assignable, Copy Constructible) | -| | -+--------------------------------+-------------------------------+-------------------+ -|Expression |Return Type |Assertion | -+================================+===============================+===================+ -|``++r`` |``X&`` |``&r == &++r`` | -+--------------------------------+-------------------------------+-------------------+ -|``r++`` | | | -+--------------------------------+-------------------------------+-------------------+ -|``*r++`` | | | -+--------------------------------+-------------------------------+-------------------+ -|``iterator_traversal::type`` |Convertible to | | -| |``incrementable_traversal_tag``| | -+--------------------------------+-------------------------------+-------------------+ - - -If ``X`` is a `Writable Iterator`_ then ``X a(r++);`` is equivalent -to ``X a(r); ++r;`` and ``*r++ = o`` is equivalent -to ``*r = o; ++r``. -If ``X`` is a `Readable Iterator`_ then ``T z(*r++);`` is equivalent -to ``T z(*r); ++r;``. - -.. TR1: incrementable_iterator_tag changed to - incrementable_traversal_tag for consistency. - -Single Pass Iterators [lib.single.pass.iterators] -------------------------------------------------- - -A class or built-in type ``X`` models the *Single Pass Iterator* -concept if the following expressions are valid and respect the stated -semantics. - - -+--------------------------------------------------------------------------------------------------------+ -|Single Pass Iterator Requirements (in addition to Incrementable Iterator and Equality | -|Comparable) | -+--------------------------------+-----------------------------+-------------+---------------------------+ -|Expression |Return Type | Operational |Assertion/ | -| | | Semantics |Pre-/Post-condition | -+================================+=============================+=============+===========================+ -|``++r`` |``X&`` | |pre: ``r`` is | -| | | |dereferenceable; post: | -| | | |``r`` is dereferenceable or| -| | | |``r`` is past-the-end | -+--------------------------------+-----------------------------+-------------+---------------------------+ -|``a == b`` |convertible to ``bool`` | |``==`` is an equivalence | -| | | |relation over its domain | -+--------------------------------+-----------------------------+-------------+---------------------------+ -|``a != b`` |convertible to ``bool`` |``!(a == b)``| | -+--------------------------------+-----------------------------+-------------+---------------------------+ -|``iterator_traversal::type`` |Convertible to | | | -| |``single_pass_traversal_tag``| | | -+--------------------------------+-----------------------------+-------------+---------------------------+ - -.. TR1: single_pass_iterator_tag changed to - single_pass_traversal_tag for consistency - - -Forward Traversal Iterators [lib.forward.traversal.iterators] -------------------------------------------------------------- - -A class or built-in type ``X`` models the *Forward Traversal Iterator* -concept if, in addition to ``X`` meeting the requirements of Default -Constructible and Single Pass Iterator, the following expressions are -valid and respect the stated semantics. - -+--------------------------------------------------------------------------------------------------------+ -|Forward Traversal Iterator Requirements (in addition to Default Constructible and Single Pass Iterator) | -+---------------------------------------+-----------------------------------+----------------------------+ -|Expression |Return Type |Assertion/Note | -+=======================================+===================================+============================+ -|``X u;`` |``X&`` |note: ``u`` may have a | -| | |singular value. | -+---------------------------------------+-----------------------------------+----------------------------+ -|``++r`` |``X&`` |``r == s`` and ``r`` is | -| | |dereferenceable implies | -| | |``++r == ++s.`` | -+---------------------------------------+-----------------------------------+----------------------------+ -|``iterator_traits::difference_type``|A signed integral type representing| | -| |the distance between iterators | | -| | | | -+---------------------------------------+-----------------------------------+----------------------------+ -|``iterator_traversal::type`` |Convertible to | | -| |``forward_traversal_tag`` | | -+---------------------------------------+-----------------------------------+----------------------------+ - - - -.. TR1: forward_traversal_iterator_tag changed to - forward_traversal_tag for consistency - - -Bidirectional Traversal Iterators [lib.bidirectional.traversal.iterators] -------------------------------------------------------------------------- - -A class or built-in type ``X`` models the *Bidirectional Traversal -Iterator* concept if, in addition to ``X`` meeting the requirements of -Forward Traversal Iterator, the following expressions are valid and -respect the stated semantics. - -+-----------------------------------------------------------------------------------------------------+ -|Bidirectional Traversal Iterator Requirements (in addition to Forward Traversal | -|Iterator) | -+--------------------------------+-------------------------------+--------------+---------------------+ -|Expression |Return Type | Operational |Assertion/ | -| | | Semantics |Pre-/Post-condition | -+================================+===============================+==============+=====================+ -|``--r`` |``X&`` | |pre: there exists | -| | | |``s`` such that ``r | -| | | |== ++s``. post: | -| | | |``s`` is | -| | | |dereferenceable. | -| | | | | -| | | |``++(--r) == r``. | -| | | |``--r == --s`` | -| | | |implies ``r == | -| | | |s``. ``&r == &--r``. | -+--------------------------------+-------------------------------+--------------+---------------------+ -|``r--`` |convertible to ``const X&`` |:: | | -| | | | | -| | | { | | -| | | X tmp = r; | | -| | | --r; | | -| | | return tmp;| | -| | | } | | -+--------------------------------+-------------------------------+--------------+---------------------+ -|``iterator_traversal::type`` |Convertible to | | | -| |``bidirectional_traversal_tag``| | | -| | | | | -+--------------------------------+-------------------------------+--------------+---------------------+ - -.. TR1: bidirectional_traversal_iterator_tag changed to - bidirectional_traversal_tag for consistency - -Random Access Traversal Iterators [lib.random.access.traversal.iterators] -------------------------------------------------------------------------- - -A class or built-in type ``X`` models the *Random Access Traversal -Iterator* concept if the following expressions are valid and respect -the stated semantics. In the table below, ``Distance`` is -``iterator_traits::difference_type`` and ``n`` represents a -constant object of type ``Distance``. - -+------------------------------------------------------------------------------------------------------------------+ -|Random Access Traversal Iterator Requirements (in addition to Bidirectional Traversal Iterator) | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|Expression |Return Type |Operational Semantics |Assertion/ | -| | | |Precondition | -+===============================+=================================+=========================+======================+ -|``r += n`` |``X&`` |:: | | -| | | | | -| | | { | | -| | | Distance m = n; | | -| | | if (m >= 0) | | -| | | while (m--) | | -| | | ++r; | | -| | | else | | -| | | while (m++) | | -| | | --r; | | -| | | return r; | | -| | | } | | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``a + n``, ``n + a`` |``X`` |``{ X tmp = a; return tmp| | -| | |+= n; }`` | | -| | | | | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``r -= n`` |``X&`` |``return r += -n`` | | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``a - n`` |``X`` |``{ X tmp = a; return tmp| | -| | |-= n; }`` | | -| | | | | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``b - a`` |``Distance`` |``a < b ? distance(a,b) |pre: there exists a | -| | |: -distance(b,a)`` |value ``n`` of | -| | | |``Distance`` such that| -| | | |``a + n == b``. ``b | -| | | |== a + (b - a)``. | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``a[n]`` |convertible to T |``*(a + n)`` |pre: a is a `Readable | -| | | |Iterator`_ | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``a[n] = v`` |convertible to T |``*(a + n) = v`` |pre: a is a `Writable | -| | | |Iterator`_ | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``a < b`` |convertible to ``bool`` |``b - a > 0`` |``<`` is a total | -| | | |ordering relation | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``a > b`` |convertible to ``bool`` |``b < a`` |``>`` is a total | -| | | |ordering relation | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``a >= b`` |convertible to ``bool`` |``!(a < b)`` | | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``a <= b`` |convertible to ``bool`` |``!(a > b)`` | | -+-------------------------------+---------------------------------+-------------------------+----------------------+ -|``iterator_traversal::type``|Convertible to | | | -| |``random_access_traversal_tag`` | | | -+-------------------------------+---------------------------------+-------------------------+----------------------+ - -.. TR1: random_access_traversal_iterator_tag changed to - random_access_traversal_tag for consistency - - -Interoperable Iterators [lib.interoperable.iterators] ------------------------------------------------------ - -A class or built-in type ``X`` that models Single Pass Iterator is -*interoperable with* a class or built-in type ``Y`` that also models -Single Pass Iterator if the following expressions are valid and -respect the stated semantics. In the tables below, ``x`` is an object -of type ``X``, ``y`` is an object of type ``Y``, ``Distance`` is -``iterator_traits::difference_type``, and ``n`` represents a -constant object of type ``Distance``. - -+-----------+-----------------------+---------------------------------------------------+ -|Expression |Return Type |Assertion/Precondition/Postcondition | -+===========+=======================+===================================================+ -|``y = x`` |``Y`` |post: ``y == x`` | -+-----------+-----------------------+---------------------------------------------------+ -|``Y(x)`` |``Y`` |post: ``Y(x) == x`` | -+-----------+-----------------------+---------------------------------------------------+ -|``x == y`` |convertible to ``bool``|``==`` is an equivalence relation over its domain. | -+-----------+-----------------------+---------------------------------------------------+ -|``y == x`` |convertible to ``bool``|``==`` is an equivalence relation over its domain. | -+-----------+-----------------------+---------------------------------------------------+ -|``x != y`` |convertible to ``bool``|``bool(a==b) != bool(a!=b)`` over its domain. | -+-----------+-----------------------+---------------------------------------------------+ -|``y != x`` |convertible to ``bool``|``bool(a==b) != bool(a!=b)`` over its domain. | -+-----------+-----------------------+---------------------------------------------------+ - -If ``X`` and ``Y`` both model Random Access Traversal Iterator then -the following additional requirements must be met. - -+-----------+-----------------------+---------------------+--------------------------------------+ -|Expression |Return Type |Operational Semantics|Assertion/ Precondition | -+===========+=======================+=====================+======================================+ -|``x < y`` |convertible to ``bool``|``y - x > 0`` |``<`` is a total ordering relation | -+-----------+-----------------------+---------------------+--------------------------------------+ -|``y < x`` |convertible to ``bool``|``x - y > 0`` |``<`` is a total ordering relation | -+-----------+-----------------------+---------------------+--------------------------------------+ -|``x > y`` |convertible to ``bool``|``y < x`` |``>`` is a total ordering relation | -+-----------+-----------------------+---------------------+--------------------------------------+ -|``y > x`` |convertible to ``bool``|``x < y`` |``>`` is a total ordering relation | -+-----------+-----------------------+---------------------+--------------------------------------+ -|``x >= y`` |convertible to ``bool``|``!(x < y)`` | | -+-----------+-----------------------+---------------------+--------------------------------------+ -|``y >= x`` |convertible to ``bool``|``!(y < x)`` | | -+-----------+-----------------------+---------------------+--------------------------------------+ -|``x <= y`` |convertible to ``bool``|``!(x > y)`` | | -+-----------+-----------------------+---------------------+--------------------------------------+ -|``y <= x`` |convertible to ``bool``|``!(y > x)`` | | -+-----------+-----------------------+---------------------+--------------------------------------+ -|``y - x`` |``Distance`` |``distance(Y(x),y)`` |pre: there exists a value ``n`` of | -| | | |``Distance`` such that ``x + n == y``.| -| | | |``y == x + (y - x)``. | -+-----------+-----------------------+---------------------+--------------------------------------+ -|``x - y`` |``Distance`` |``distance(y,Y(x))`` |pre: there exists a value ``n`` of | -| | | |``Distance`` such that ``y + n == x``.| -| | | |``x == y + (x - y)``. | -+-----------+-----------------------+---------------------+--------------------------------------+ - - - -Addition to [lib.iterator.synopsis] -=================================== - - -:: - - // lib.iterator.traits, traits and tags - template struct is_readable_iterator; - template struct iterator_traversal; - - struct incrementable_traversal_tag { }; - struct single_pass_traversal_tag : incrementable_traversal_tag { }; - struct forward_traversal_tag : single_pass_traversal_tag { }; - struct bidirectional_traversal_tag : forward_traversal_tag { }; - struct random_access_traversal_tag : bidirectional_traversal_tag { }; - -Addition to [lib.iterator.traits] -================================= - -The ``is_readable_iterator`` class -template satisfies the UnaryTypeTrait_ requirements. - -Given an iterator type ``X``, ``is_readable_iterator::value`` -yields ``true`` if, for an object ``a`` of type ``X``, ``*a`` is -convertible to ``iterator_traits::value_type``, and ``false`` -otherwise. - -``iterator_traversal::type`` is - -.. parsed-literal:: - - *category-to-traversal*\ (iterator_traits::iterator_category) - -where *category-to-traversal* is defined as follows - -.. _`category-to-traversal`: - -.. parsed-literal:: - - *category-to-traversal*\ (C) = - if (C is convertible to incrementable_traversal_tag) - return C; - else if (C is convertible to random_access_iterator_tag) - return random_access_traversal_tag; - else if (C is convertible to bidirectional_iterator_tag) - return bidirectional_traversal_tag; - else if (C is convertible to forward_iterator_tag) - return forward_traversal_tag; - else if (C is convertible to input_iterator_tag) - return single_pass_traversal_tag; - else if (C is convertible to output_iterator_tag) - return incrementable_traversal_tag; - else - *the program is ill-formed* - - -=========== - Footnotes -=========== - -.. _UnaryTypeTrait: n1519_ - -The UnaryTypeTrait concept is defined in n1519_; the LWG is -considering adding the requirement that specializations are derived -from their nested ``::type``. - -.. _n1519: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1519.htm - -.. - LocalWords: Abrahams Siek Witt const bool Sutter's WG int UL LI href Lvalue - LocalWords: ReadableIterator WritableIterator SwappableIterator cv pre iter - LocalWords: ConstantLvalueIterator MutableLvalueIterator CopyConstructible TR - LocalWords: ForwardTraversalIterator BidirectionalTraversalIterator lvalue - LocalWords: RandomAccessTraversalIterator dereferenceable Incrementable tmp - LocalWords: incrementable xxx min prev inplace png oldeqnew AccessTag struct - LocalWords: TraversalTag typename lvalues DWA Hmm JGS mis enum diff --git a/doc/oldeqnew.png b/doc/oldeqnew.png deleted file mode 100644 index 30cd1598cb0b5f4cc54a8c600b7d55de7de270d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33786 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 - - - - - -Permutation Iterator - - - - - - - -

-

Permutation Iterator

- --- - - - - - - - - - - - -
Author:Toon Knapen, David Abrahams, Roland Richter, Jeremy Siek
Contact:dave@boost-consulting.com, jsiek@osl.iu.edu
Organization:Boost Consulting, Indiana University Open Systems -Lab
Date:2004-11-01
Copyright:Copyright Toon Knapen, David Abrahams, Roland Richter, and Jeremy Siek 2003.
- - - - --- - - - -
abstract: - - -The permutation iterator adaptor provides a permuted view of a given -range. That is, the view includes every element of the given range but -in a potentially different order.
- -
-

Introduction

- - - -

The adaptor takes two arguments:

-
-
    -
  • an iterator to the range V on which the permutation -will be applied
  • -
  • the reindexing scheme that defines how the -elements of V will be permuted.
  • -
-
-

Note that the permutation iterator is not limited to strict -permutations of the given range V. The distance between begin and end -of the reindexing iterators is allowed to be smaller compared to the -size of the range V, in which case the permutation iterator only -provides a permutation of a subrange of V. The indexes neither need -to be unique. In this same context, it must be noted that the past the -end permutation iterator is completely defined by means of the -past-the-end iterator to the indices.

-
-
-

Reference

- - - -
-template< class ElementIterator
-        , class IndexIterator
-        , class ValueT        = use_default
-        , class CategoryT     = use_default
-        , class ReferenceT    = use_default
-        , class DifferenceT   = use_default >
-class permutation_iterator
-{
-public:
-  permutation_iterator();
-  explicit permutation_iterator(ElementIterator x, IndexIterator y);
-
-  template< class OEIter, class OIIter, class V, class C, class R, class D >
-  permutation_iterator(
-      permutation_iterator<OEIter, OIIter, V, C, R, D> const& r
-      , typename enable_if_convertible<OEIter, ElementIterator>::type* = 0
-      , typename enable_if_convertible<OIIter, IndexIterator>::type* = 0
-      );
-  reference operator*() const;
-  permutation_iterator& operator++();
-  ElementIterator const& base() const;
-private:
-  ElementIterator m_elt;      // exposition only
-  IndexIterator m_order;      // exposition only
-};
-
-template <class ElementIterator, class IndexIterator>
-permutation_iterator<ElementIterator, IndexIterator>
-make_permutation_iterator( ElementIterator e, IndexIterator i);
-
-
-

permutation_iterator requirements

-

ElementIterator shall model Random Access Traversal Iterator. -IndexIterator shall model Readable Iterator. The value type of -the IndexIterator must be convertible to the difference type of -ElementIterator.

-
-
-

permutation_iterator models

-

permutation_iterator models the same iterator traversal concepts -as IndexIterator and the same iterator access concepts as -ElementIterator.

-

If IndexIterator models Single Pass Iterator and -ElementIterator models Readable Iterator then -permutation_iterator models Input Iterator.

-

If IndexIterator models Forward Traversal Iterator and -ElementIterator models Readable Lvalue Iterator then -permutation_iterator models Forward Iterator.

-

If IndexIterator models Bidirectional Traversal Iterator and -ElementIterator models Readable Lvalue Iterator then -permutation_iterator models Bidirectional Iterator.

-

If IndexIterator models Random Access Traversal Iterator and -ElementIterator models Readable Lvalue Iterator then -permutation_iterator models Random Access Iterator.

-

permutation_iterator<E1, X, V1, C2, R1, D1> is interoperable -with permutation_iterator<E2, Y, V2, C2, R2, D2> if and only if -X is interoperable with Y and E1 is convertible -to E2.

-
-
-

permutation_iterator operations

-

In addition to those operations required by the concepts that -permutation_iterator models, permutation_iterator provides the -following operations.

-

permutation_iterator();

- --- - - - -
Effects:Default constructs m_elt and m_order.
-

explicit permutation_iterator(ElementIterator x, IndexIterator y);

- --- - - - -
Effects:Constructs m_elt from x and m_order from y.
-
-template< class OEIter, class OIIter, class V, class C, class R, class D >
-permutation_iterator(
-    permutation_iterator<OEIter, OIIter, V, C, R, D> const& r
-    , typename enable_if_convertible<OEIter, ElementIterator>::type* = 0
-    , typename enable_if_convertible<OIIter, IndexIterator>::type* = 0
-    );
-
- --- - - - -
Effects:Constructs m_elt from r.m_elt and -m_order from y.m_order.
-

reference operator*() const;

- --- - - - -
Returns:*(m_elt + *m_order)
-

permutation_iterator& operator++();

- --- - - - - - -
Effects:++m_order
Returns:*this
-

ElementIterator const& base() const;

- --- - - - -
Returns:m_order
-
-template <class ElementIterator, class IndexIterator>
-permutation_iterator<ElementIterator, IndexIterator>
-make_permutation_iterator(ElementIterator e, IndexIterator i);
-
- --- - - - -
Returns:permutation_iterator<ElementIterator, IndexIterator>(e, i)
-
-
-
-

Example

- - - -
-using namespace boost;
-int i = 0;
-
-typedef std::vector< int > element_range_type;
-typedef std::list< int > index_type;
-
-static const int element_range_size = 10;
-static const int index_size = 4;
-
-element_range_type elements( element_range_size );
-for(element_range_type::iterator el_it = elements.begin() ; el_it != elements.end() ; ++el_it)
-  *el_it = std::distance(elements.begin(), el_it);
-
-index_type indices( index_size );
-for(index_type::iterator i_it = indices.begin() ; i_it != indices.end() ; ++i_it )
-  *i_it = element_range_size - index_size + std::distance(indices.begin(), i_it);
-std::reverse( indices.begin(), indices.end() );
-
-typedef permutation_iterator< element_range_type::iterator, index_type::iterator > permutation_type;
-permutation_type begin = make_permutation_iterator( elements.begin(), indices.begin() );
-permutation_type it = begin;
-permutation_type end = make_permutation_iterator( elements.begin(), indices.end() );
-
-std::cout << "The original range is : ";
-std::copy( elements.begin(), elements.end(), std::ostream_iterator< int >( std::cout, " " ) );
-std::cout << "\n";
-
-std::cout << "The reindexing scheme is : ";
-std::copy( indices.begin(), indices.end(), std::ostream_iterator< int >( std::cout, " " ) );
-std::cout << "\n";
-
-std::cout << "The permutated range is : ";
-std::copy( begin, end, std::ostream_iterator< int >( std::cout, " " ) );
-std::cout << "\n";
-
-std::cout << "Elements at even indices in the permutation : ";
-it = begin;
-for(i = 0; i < index_size / 2 ; ++i, it+=2 ) std::cout << *it << " ";
-std::cout << "\n";
-
-std::cout << "Permutation backwards : ";
-it = begin + (index_size);
-assert( it != begin );
-for( ; it-- != begin ; ) std::cout << *it << " ";
-std::cout << "\n";
-
-std::cout << "Iterate backward with stride 2 : ";
-it = begin + (index_size - 1);
-for(i = 0 ; i < index_size / 2 ; ++i, it-=2 ) std::cout << *it << " ";
-std::cout << "\n";
-
-

The output is:

-
-The original range is : 0 1 2 3 4 5 6 7 8 9
-The reindexing scheme is : 9 8 7 6
-The permutated range is : 9 8 7 6
-Elements at even indices in the permutation : 9 7
-Permutation backwards : 6 7 8 9
-Iterate backward with stride 2 : 6 8
-
-

The source code for this example can be found here.

-
-
- - diff --git a/doc/permutation_iterator.pdf b/doc/permutation_iterator.pdf deleted file mode 100755 index 3f69d1d34a2af5a77e0dbe0364aac291ce3e764b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66744 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

=WK!?_T#a$?D@2HvXvxV;|St=1^b9 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 diff --git a/doc/permutation_iterator.rst b/doc/permutation_iterator.rst deleted file mode 100644 index 0c8070c..0000000 --- a/doc/permutation_iterator.rst +++ /dev/null @@ -1,41 +0,0 @@ -.. Distributed under 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) - -++++++++++++++++++++++ - Permutation Iterator -++++++++++++++++++++++ - -:Author: Toon Knapen, David Abrahams, Roland Richter, Jeremy Siek -:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu -:organization: `Boost Consulting`_, Indiana University `Open Systems - Lab`_ -:date: $Date$ -:copyright: Copyright Toon Knapen, David Abrahams, Roland Richter, and Jeremy Siek 2003. - -.. _`Boost Consulting`: http://www.boost-consulting.com -.. _`Open Systems Lab`: http://www.osl.iu.edu - -:abstract: - - .. include:: permutation_iter_abstract.rst - -.. contents:: Table of Contents - - -Introduction -============ - -.. include:: permutation_iterator_body.rst - - -Reference -========= - -.. include:: permutation_iterator_ref.rst - - -Example -======= - -.. include:: permutation_iterator_eg.rst diff --git a/doc/permutation_iterator_body.rst b/doc/permutation_iterator_body.rst deleted file mode 100644 index 8b1333c..0000000 --- a/doc/permutation_iterator_body.rst +++ /dev/null @@ -1,19 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -The adaptor takes two arguments: - - * an iterator to the range V on which the permutation - will be applied - * the reindexing scheme that defines how the - elements of V will be permuted. - -Note that the permutation iterator is not limited to strict -permutations of the given range V. The distance between begin and end -of the reindexing iterators is allowed to be smaller compared to the -size of the range V, in which case the permutation iterator only -provides a permutation of a subrange of V. The indexes neither need -to be unique. In this same context, it must be noted that the past the -end permutation iterator is completely defined by means of the -past-the-end iterator to the indices. diff --git a/doc/permutation_iterator_eg.rst b/doc/permutation_iterator_eg.rst deleted file mode 100644 index eddf0a1..0000000 --- a/doc/permutation_iterator_eg.rst +++ /dev/null @@ -1,71 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -:: - - using namespace boost; - int i = 0; - - typedef std::vector< int > element_range_type; - typedef std::list< int > index_type; - - static const int element_range_size = 10; - static const int index_size = 4; - - element_range_type elements( element_range_size ); - for(element_range_type::iterator el_it = elements.begin() ; el_it != elements.end() ; ++el_it) - *el_it = std::distance(elements.begin(), el_it); - - index_type indices( index_size ); - for(index_type::iterator i_it = indices.begin() ; i_it != indices.end() ; ++i_it ) - *i_it = element_range_size - index_size + std::distance(indices.begin(), i_it); - std::reverse( indices.begin(), indices.end() ); - - typedef permutation_iterator< element_range_type::iterator, index_type::iterator > permutation_type; - permutation_type begin = make_permutation_iterator( elements.begin(), indices.begin() ); - permutation_type it = begin; - permutation_type end = make_permutation_iterator( elements.begin(), indices.end() ); - - std::cout << "The original range is : "; - std::copy( elements.begin(), elements.end(), std::ostream_iterator< int >( std::cout, " " ) ); - std::cout << "\n"; - - std::cout << "The reindexing scheme is : "; - std::copy( indices.begin(), indices.end(), std::ostream_iterator< int >( std::cout, " " ) ); - std::cout << "\n"; - - std::cout << "The permutated range is : "; - std::copy( begin, end, std::ostream_iterator< int >( std::cout, " " ) ); - std::cout << "\n"; - - std::cout << "Elements at even indices in the permutation : "; - it = begin; - for(i = 0; i < index_size / 2 ; ++i, it+=2 ) std::cout << *it << " "; - std::cout << "\n"; - - std::cout << "Permutation backwards : "; - it = begin + (index_size); - assert( it != begin ); - for( ; it-- != begin ; ) std::cout << *it << " "; - std::cout << "\n"; - - std::cout << "Iterate backward with stride 2 : "; - it = begin + (index_size - 1); - for(i = 0 ; i < index_size / 2 ; ++i, it-=2 ) std::cout << *it << " "; - std::cout << "\n"; - - -The output is:: - - The original range is : 0 1 2 3 4 5 6 7 8 9 - The reindexing scheme is : 9 8 7 6 - The permutated range is : 9 8 7 6 - Elements at even indices in the permutation : 9 7 - Permutation backwards : 6 7 8 9 - Iterate backward with stride 2 : 6 8 - - -The source code for this example can be found `here`__. - -__ ../example/permutation_iter_example.cpp diff --git a/doc/permutation_iterator_ref.rst b/doc/permutation_iterator_ref.rst deleted file mode 100644 index d51864f..0000000 --- a/doc/permutation_iterator_ref.rst +++ /dev/null @@ -1,130 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -.. parsed-literal:: - - template< class ElementIterator - , class IndexIterator - , class ValueT = use_default - , class CategoryT = use_default - , class ReferenceT = use_default - , class DifferenceT = use_default > - class permutation_iterator - { - public: - permutation_iterator(); - explicit permutation_iterator(ElementIterator x, IndexIterator y); - - template< class OEIter, class OIIter, class V, class C, class R, class D > - permutation_iterator( - permutation_iterator const& r - , typename enable_if_convertible::type* = 0 - , typename enable_if_convertible::type* = 0 - ); - reference operator*() const; - permutation_iterator& operator++(); - ElementIterator const& base() const; - private: - ElementIterator m_elt; // exposition only - IndexIterator m_order; // exposition only - }; - - template - permutation_iterator - make_permutation_iterator( ElementIterator e, IndexIterator i); - - - -``permutation_iterator`` requirements -------------------------------------- - -``ElementIterator`` shall model Random Access Traversal Iterator. -``IndexIterator`` shall model Readable Iterator. The value type of -the ``IndexIterator`` must be convertible to the difference type of -``ElementIterator``. - - -``permutation_iterator`` models -------------------------------- - -``permutation_iterator`` models the same iterator traversal concepts -as ``IndexIterator`` and the same iterator access concepts as -``ElementIterator``. - -If ``IndexIterator`` models Single Pass Iterator and -``ElementIterator`` models Readable Iterator then -``permutation_iterator`` models Input Iterator. - -If ``IndexIterator`` models Forward Traversal Iterator and -``ElementIterator`` models Readable Lvalue Iterator then -``permutation_iterator`` models Forward Iterator. - -If ``IndexIterator`` models Bidirectional Traversal Iterator and -``ElementIterator`` models Readable Lvalue Iterator then -``permutation_iterator`` models Bidirectional Iterator. - -If ``IndexIterator`` models Random Access Traversal Iterator and -``ElementIterator`` models Readable Lvalue Iterator then -``permutation_iterator`` models Random Access Iterator. - -``permutation_iterator`` is interoperable -with ``permutation_iterator`` if and only if -``X`` is interoperable with ``Y`` and ``E1`` is convertible -to ``E2``. - - -``permutation_iterator`` operations ------------------------------------ - -In addition to those operations required by the concepts that -``permutation_iterator`` models, ``permutation_iterator`` provides the -following operations. - -``permutation_iterator();`` - -:Effects: Default constructs ``m_elt`` and ``m_order``. - - -``explicit permutation_iterator(ElementIterator x, IndexIterator y);`` - -:Effects: Constructs ``m_elt`` from ``x`` and ``m_order`` from ``y``. - - -:: - - template< class OEIter, class OIIter, class V, class C, class R, class D > - permutation_iterator( - permutation_iterator const& r - , typename enable_if_convertible::type* = 0 - , typename enable_if_convertible::type* = 0 - ); - -:Effects: Constructs ``m_elt`` from ``r.m_elt`` and - ``m_order`` from ``y.m_order``. - - -``reference operator*() const;`` - -:Returns: ``*(m_elt + *m_order)`` - - -``permutation_iterator& operator++();`` - -:Effects: ``++m_order`` -:Returns: ``*this`` - - -``ElementIterator const& base() const;`` - -:Returns: ``m_order`` - - -:: - - template - permutation_iterator - make_permutation_iterator(ElementIterator e, IndexIterator i); - -:Returns: ``permutation_iterator(e, i)`` - diff --git a/doc/pointee.html b/doc/pointee.html deleted file mode 100755 index d7ca6e3..0000000 --- a/doc/pointee.html +++ /dev/null @@ -1,459 +0,0 @@ - - - - - - -pointee and indirect_reference - - - - - - - -

-

pointee and indirect_reference

- --- - - - - - - - - - - - -
Author:David Abrahams
Contact:dave@boost-consulting.com
Organization:Boost Consulting
Date:2005-02-27
Copyright:Copyright David Abrahams 2004.
- - - - --- - - - -
abstract:Provides the capability to deduce the referent types of -pointers, smart pointers and iterators in generic code.
-
-

Overview

-

Have you ever wanted to write a generic function that can operate -on any kind of dereferenceable object? If you have, you've -probably run into the problem of how to determine the type that the -object "points at":

-
-template <class Dereferenceable>
-void f(Dereferenceable p)
-{
-    what-goes-here? value = *p;
-    ...
-}
-
-
-

pointee

-

It turns out to be impossible to come up with a fully-general -algorithm to do determine what-goes-here directly, but it is -possible to require that pointee<Dereferenceable>::type is -correct. Naturally, pointee has the same difficulty: it can't -determine the appropriate ::type reliably for all -Dereferenceables, but it makes very good guesses (it works -for all pointers, standard and boost smart pointers, and -iterators), and when it guesses wrongly, it can be specialized as -necessary:

-
-namespace boost
-{
-  template <class T>
-  struct pointee<third_party_lib::smart_pointer<T> >
-  {
-      typedef T type;
-  };
-}
-
-
-
-

indirect_reference

-

indirect_reference<T>::type is rather more specialized than -pointee, and is meant to be used to forward the result of -dereferencing an object of its argument type. Most dereferenceable -types just return a reference to their pointee, but some return -proxy references or return the pointee by value. When that -information is needed, call on indirect_reference.

-

Both of these templates are essential to the correct functioning of -indirect_iterator.

-
-
-
-

Reference

-
-

pointee

- - - -
-template <class Dereferenceable>
-struct pointee
-{
-    typedef /* see below */ type;
-};
-
- --- - - - -
Requires:For an object x of type Dereferenceable, *x -is well-formed. If ++x is ill-formed it shall neither be -ambiguous nor shall it violate access control, and -Dereferenceable::element_type shall be an accessible type. -Otherwise iterator_traits<Dereferenceable>::value_type shall -be well formed. [Note: These requirements need not apply to -explicit or partial specializations of pointee]
-

type is determined according to the following algorithm, where -x is an object of type Dereferenceable:

-
-if ( ++x is ill-formed )
-{
-    return ``Dereferenceable::element_type``
-}
-else if (``*x`` is a mutable reference to
-         std::iterator_traits<Dereferenceable>::value_type)
-{
-    return iterator_traits<Dereferenceable>::value_type
-}
-else
-{
-    return iterator_traits<Dereferenceable>::value_type const
-}
-
-
-
-

indirect_reference

- - - -
-template <class Dereferenceable>
-struct indirect_reference
-{
-    typedef /* see below */ type;
-};
-
- --- - - - -
Requires:For an object x of type Dereferenceable, *x -is well-formed. If ++x is ill-formed it shall neither be -ambiguous nor shall it violate access control, and -pointee<Dereferenceable>::type& shall be well-formed. -Otherwise iterator_traits<Dereferenceable>::reference shall -be well formed. [Note: These requirements need not apply to -explicit or partial specializations of indirect_reference]
-

type is determined according to the following algorithm, where -x is an object of type Dereferenceable:

-
-if ( ++x is ill-formed )
-    return ``pointee<Dereferenceable>::type&``
-else
-    std::iterator_traits<Dereferenceable>::reference
-
-
-
-
- - diff --git a/doc/pointee.pdf b/doc/pointee.pdf deleted file mode 100755 index 53f9f6db8b403253bb39f3d4ddf488a3ac7a6b1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62356 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�iza*n56|@>RzqCj}KP|H?Rl(Fm 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 u - void f(Dereferenceable p) - { - *what-goes-here?* value = \*p; - ... - } - - -``pointee`` ------------ - -It turns out to be impossible to come up with a fully-general -algorithm to do determine *what-goes-here* directly, but it is -possible to require that ``pointee::type`` is -correct. Naturally, ``pointee`` has the same difficulty: it can't -determine the appropriate ``::type`` reliably for all -``Dereferenceable``\ s, but it makes very good guesses (it works -for all pointers, standard and boost smart pointers, and -iterators), and when it guesses wrongly, it can be specialized as -necessary:: - - namespace boost - { - template - struct pointee > - { - typedef T type; - }; - } - -``indirect_reference`` ----------------------- - -``indirect_reference::type`` is rather more specialized than -``pointee``, and is meant to be used to forward the result of -dereferencing an object of its argument type. Most dereferenceable -types just return a reference to their pointee, but some return -proxy references or return the pointee by value. When that -information is needed, call on ``indirect_reference``. - -Both of these templates are essential to the correct functioning of -|indirect_iterator|_. - -.. |indirect_iterator| replace:: ``indirect_iterator`` -.. _indirect_iterator: indirect_iterator.html - -Reference -========= - -``pointee`` ------------ - -.. include:: pointee_ref.rst - -``indirect_reference`` ----------------------- - -.. include:: indirect_reference_ref.rst - diff --git a/doc/pointee_ref.rst b/doc/pointee_ref.rst deleted file mode 100755 index 19aed24..0000000 --- a/doc/pointee_ref.rst +++ /dev/null @@ -1,38 +0,0 @@ -.. Copyright David Abrahams 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) - -:: - - template - struct pointee - { - typedef /* see below */ type; - }; - -:Requires: For an object ``x`` of type ``Dereferenceable``, ``*x`` - is well-formed. If ``++x`` is ill-formed it shall neither be - ambiguous nor shall it violate access control, and - ``Dereferenceable::element_type`` shall be an accessible type. - Otherwise ``iterator_traits::value_type`` shall - be well formed. [Note: These requirements need not apply to - explicit or partial specializations of ``pointee``] - -``type`` is determined according to the following algorithm, where -``x`` is an object of type ``Dereferenceable``:: - - if ( ++x is ill-formed ) - { - return ``Dereferenceable::element_type`` - } - else if (``*x`` is a mutable reference to - std::iterator_traits::value_type) - { - return iterator_traits::value_type - } - else - { - return iterator_traits::value_type const - } - - \ No newline at end of file diff --git a/doc/ref_problem.rst b/doc/ref_problem.rst deleted file mode 100644 index 2f2908a..0000000 --- a/doc/ref_problem.rst +++ /dev/null @@ -1,63 +0,0 @@ -++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - Problem with ``reference`` and old/new iterator category correspondance -++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -.. _N1550: http://www.boost-consulting.com/writing/n1550.html -.. _N1530: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1530.html - -:Author: David Abrahams and Jeremy Siek -:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu -:Organization: `Boost Consulting`_, Indiana University Bloomington -:date: $Date$ -:Copyright: Copyright David Abrahams, Jeremy Siek 2003. 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) - -.. _`Boost Consulting`: http://www.boost-consulting.com - -============== - Introduction -============== - -The new iterator categories are intended to correspond to the old -iterator categories, as specified in a diagram in N1550_. For example, -an iterator categorized as a mutable Forward Iterator under the old -scheme is now a Writable, Lvalue, and Foward Traversal iterator. -However, there is a problem with this correspondance, the new iterator -categories place requirements on the ``iterator_traits::reference`` -type whereas the standard iterator requirements say nothing about the -``reference`` type . In particular, the new Readable Iterator -requirements say that the return type of ``*a`` must be -``iterator_traits::reference`` and the Lvalue Iterator requirements -says that ``iterator_traits::reference`` must be ``T&`` or ``const -T&``. - - -==================== - Proposed Resolution -==================== - -Change the standard requirements to match the requirements of the new -iterators. (more details to come) - - -========== - Rationale -========== - -The lack of specification in the standard of the ``reference`` type is -certainly a defect. Without specification, it is entirely useless in a -generic function. The current practice in the community is generally -to assume there are requirements on the ``reference`` type, such as -those proposed in the new iterator categories. - -There is some danger in *adding* requirements to existing concepts. -This will mean that some existing iterator types will no longer meet -the iterator requirements. However, we feel that the impact of this is -small enough to warrant going ahead with this change. - -An alternative solution would be to leave the standard requirements as -is, and to remove the requirements for the ``reference`` type in the -new iterator concepts. We are not in favor of this approach because it -extends what we see as a defect further into the future. diff --git a/doc/reverse_iterator.html b/doc/reverse_iterator.html deleted file mode 100644 index aab1215..0000000 --- a/doc/reverse_iterator.html +++ /dev/null @@ -1,573 +0,0 @@ - - - - - - -Reverse Iterator - - - - - - - -
-

Reverse Iterator

- --- - - - - - - - - - - - -
Author:David Abrahams, Jeremy Siek, Thomas Witt
Contact:dave@boost-consulting.com, jsiek@osl.iu.edu, witt@ive.uni-hannover.de
Organization:Boost Consulting, Indiana University Open Systems -Lab, University of Hanover Institute for Transport -Railway Operation and Construction
Date:2004-11-01
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.
- - - - --- - - - -
abstract: - - -The reverse iterator adaptor iterates through the adapted iterator -range in the opposite direction.
- -
-

reverse_iterator synopsis

- - - -
-template <class Iterator>
-class reverse_iterator
-{
-public:
-  typedef iterator_traits<Iterator>::value_type value_type;
-  typedef iterator_traits<Iterator>::reference reference;
-  typedef iterator_traits<Iterator>::pointer pointer;
-  typedef iterator_traits<Iterator>::difference_type difference_type;
-  typedef /* see below */ iterator_category;
-
-  reverse_iterator() {}
-  explicit reverse_iterator(Iterator x) ;
-
-  template<class OtherIterator>
-  reverse_iterator(
-      reverse_iterator<OtherIterator> const& r
-    , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
-  );
-  Iterator const& base() const;
-  reference operator*() const;
-  reverse_iterator& operator++();
-  reverse_iterator& operator--();
-private:
-  Iterator m_iterator; // exposition
-};
-
-

If Iterator models Random Access Traversal Iterator and Readable -Lvalue Iterator, then iterator_category is convertible to -random_access_iterator_tag. Otherwise, if -Iterator models Bidirectional Traversal Iterator and Readable -Lvalue Iterator, then iterator_category is convertible to -bidirectional_iterator_tag. Otherwise, iterator_category is -convertible to input_iterator_tag.

-
-
-

reverse_iterator requirements

-

Iterator must be a model of Bidirectional Traversal Iterator. The -type iterator_traits<Iterator>::reference must be the type of -*i, where i is an object of type Iterator.

-
-
-

reverse_iterator models

-

A specialization of reverse_iterator models the same iterator -traversal and iterator access concepts modeled by its Iterator -argument. In addition, it may model old iterator concepts -specified in the following table:

- ---- - - - - - - - - - - - - - - - - - - - -
If I modelsthen reverse_iterator<I> models
Readable Lvalue Iterator, -Bidirectional Traversal IteratorBidirectional Iterator
Writable Lvalue Iterator, -Bidirectional Traversal IteratorMutable Bidirectional Iterator
Readable Lvalue Iterator, -Random Access Traversal IteratorRandom Access Iterator
Writable Lvalue Iterator, -Random Access Traversal IteratorMutable Random Access Iterator
-

reverse_iterator<X> is interoperable with -reverse_iterator<Y> if and only if X is interoperable with -Y.

-
-
-

reverse_iterator operations

-

In addition to the operations required by the concepts modeled by -reverse_iterator, reverse_iterator provides the following -operations.

-

reverse_iterator();

- --- - - - - - -
Requires:Iterator must be Default Constructible.
Effects:Constructs an instance of reverse_iterator with m_iterator -default constructed.
-

explicit reverse_iterator(Iterator x);

- --- - - - -
Effects:Constructs an instance of reverse_iterator with -m_iterator copy constructed from x.
-
-template<class OtherIterator>
-reverse_iterator(
-    reverse_iterator<OtherIterator> const& r
-  , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
-);
-
- --- - - - - - -
Requires:OtherIterator is implicitly convertible to Iterator.
Effects:Constructs instance of reverse_iterator whose -m_iterator subobject is constructed from y.base().
-

Iterator const& base() const;

- --- - - - -
Returns:m_iterator
-

reference operator*() const;

- --- - - - -
Effects:
-
-Iterator tmp = m_iterator;
-return *--tmp;
-
-

reverse_iterator& operator++();

- --- - - - - - -
Effects:--m_iterator
Returns:*this
-

reverse_iterator& operator--();

- --- - - - - - -
Effects:++m_iterator
Returns:*this
- - - -
-template <class BidirectionalIterator>
-reverse_iterator<BidirectionalIterator>n
-make_reverse_iterator(BidirectionalIterator x);
-
- --- - - - -
Returns:An instance of reverse_iterator<BidirectionalIterator> -with a current constructed from x.
- - - -
-
-

Example

-

The following example prints an array of characters in reverse order -using reverse_iterator.

-
-char letters_[] = "hello world!";
-const int N = sizeof(letters_)/sizeof(char) - 1;
-typedef char* base_iterator;
-base_iterator letters(letters_);
-std::cout << "original sequence of letters:\t\t\t" << letters_ << std::endl;
-
-boost::reverse_iterator<base_iterator>
-  reverse_letters_first(letters + N),
-  reverse_letters_last(letters);
-
-std::cout << "sequence in reverse order:\t\t\t";
-std::copy(reverse_letters_first, reverse_letters_last,
-          std::ostream_iterator<char>(std::cout));
-std::cout << std::endl;
-
-std::cout << "sequence in double-reversed (normal) order:\t";
-std::copy(boost::make_reverse_iterator(reverse_letters_last),
-          boost::make_reverse_iterator(reverse_letters_first),
-          std::ostream_iterator<char>(std::cout));
-std::cout << std::endl;
-
-

The output is:

-
-original sequence of letters:                   hello world!
-sequence in reverse order:                      !dlrow olleh
-sequence in double-reversed (normal) order:     hello world!
-
-

The source code for this example can be found here.

-
-
- - diff --git a/doc/reverse_iterator.pdf b/doc/reverse_iterator.pdf deleted file mode 100755 index 8cfd92566619f5008db054ac29244e11a4630c3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61924 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 Y|L>fmeN^OLf;Kno~|TVD-2 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 diff --git a/doc/reverse_iterator.rst b/doc/reverse_iterator.rst deleted file mode 100644 index e6034b6..0000000 --- a/doc/reverse_iterator.rst +++ /dev/null @@ -1,33 +0,0 @@ -.. Distributed under 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) - -++++++++++++++++++ - Reverse Iterator -++++++++++++++++++ - -:Author: David Abrahams, Jeremy Siek, Thomas Witt -:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu, witt@ive.uni-hannover.de -:organization: `Boost Consulting`_, Indiana University `Open Systems - Lab`_, University of Hanover `Institute for Transport - Railway Operation and Construction`_ -:date: $Date$ -:copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. - -.. _`Boost Consulting`: http://www.boost-consulting.com -.. _`Open Systems Lab`: http://www.osl.iu.edu -.. _`Institute for Transport Railway Operation and Construction`: http://www.ive.uni-hannover.de - -:abstract: - - .. include:: reverse_iterator_abstract.rst - -.. contents:: Table of Contents - -``reverse_iterator`` synopsis -............................. - -.. include:: reverse_iterator_ref.rst -.. include:: make_reverse_iterator.rst - -.. include:: reverse_iterator_eg.rst diff --git a/doc/reverse_iterator_abstract.rst b/doc/reverse_iterator_abstract.rst deleted file mode 100644 index 911257f..0000000 --- a/doc/reverse_iterator_abstract.rst +++ /dev/null @@ -1,12 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -The reverse iterator adaptor iterates through the adapted iterator -range in the opposite direction. - - - - - - diff --git a/doc/reverse_iterator_eg.rst b/doc/reverse_iterator_eg.rst deleted file mode 100644 index b17347e..0000000 --- a/doc/reverse_iterator_eg.rst +++ /dev/null @@ -1,45 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -Example -....... - -The following example prints an array of characters in reverse order -using ``reverse_iterator``. - -:: - - char letters_[] = "hello world!"; - const int N = sizeof(letters_)/sizeof(char) - 1; - typedef char* base_iterator; - base_iterator letters(letters_); - std::cout << "original sequence of letters:\t\t\t" << letters_ << std::endl; - - boost::reverse_iterator - reverse_letters_first(letters + N), - reverse_letters_last(letters); - - std::cout << "sequence in reverse order:\t\t\t"; - std::copy(reverse_letters_first, reverse_letters_last, - std::ostream_iterator(std::cout)); - std::cout << std::endl; - - std::cout << "sequence in double-reversed (normal) order:\t"; - std::copy(boost::make_reverse_iterator(reverse_letters_last), - boost::make_reverse_iterator(reverse_letters_first), - std::ostream_iterator(std::cout)); - std::cout << std::endl; - - - -The output is:: - - original sequence of letters: hello world! - sequence in reverse order: !dlrow olleh - sequence in double-reversed (normal) order: hello world! - - -The source code for this example can be found `here`__. - -__ ../example/reverse_iterator_example.cpp diff --git a/doc/reverse_iterator_ref.rst b/doc/reverse_iterator_ref.rst deleted file mode 100644 index b239b26..0000000 --- a/doc/reverse_iterator_ref.rst +++ /dev/null @@ -1,141 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -:: - - template - class reverse_iterator - { - public: - typedef iterator_traits::value_type value_type; - typedef iterator_traits::reference reference; - typedef iterator_traits::pointer pointer; - typedef iterator_traits::difference_type difference_type; - typedef /* see below */ iterator_category; - - reverse_iterator() {} - explicit reverse_iterator(Iterator x) ; - - template - reverse_iterator( - reverse_iterator const& r - , typename enable_if_convertible::type* = 0 // exposition - ); - Iterator const& base() const; - reference operator*() const; - reverse_iterator& operator++(); - reverse_iterator& operator--(); - private: - Iterator m_iterator; // exposition - }; - - -If ``Iterator`` models Random Access Traversal Iterator and Readable -Lvalue Iterator, then ``iterator_category`` is convertible to -``random_access_iterator_tag``. Otherwise, if -``Iterator`` models Bidirectional Traversal Iterator and Readable -Lvalue Iterator, then ``iterator_category`` is convertible to -``bidirectional_iterator_tag``. Otherwise, ``iterator_category`` is -convertible to ``input_iterator_tag``. - - - -``reverse_iterator`` requirements -................................. - -``Iterator`` must be a model of Bidirectional Traversal Iterator. The -type ``iterator_traits::reference`` must be the type of -``*i``, where ``i`` is an object of type ``Iterator``. - - - -``reverse_iterator`` models -........................... - -A specialization of ``reverse_iterator`` models the same iterator -traversal and iterator access concepts modeled by its ``Iterator`` -argument. In addition, it may model old iterator concepts -specified in the following table: - -+---------------------------------------+-----------------------------------+ -| If ``I`` models |then ``reverse_iterator`` models| -+=======================================+===================================+ -| Readable Lvalue Iterator, | Bidirectional Iterator | -| Bidirectional Traversal Iterator | | -+---------------------------------------+-----------------------------------+ -| Writable Lvalue Iterator, | Mutable Bidirectional Iterator | -| Bidirectional Traversal Iterator | | -+---------------------------------------+-----------------------------------+ -| Readable Lvalue Iterator, | Random Access Iterator | -| Random Access Traversal Iterator | | -+---------------------------------------+-----------------------------------+ -| Writable Lvalue Iterator, | Mutable Random Access Iterator | -| Random Access Traversal Iterator | | -+---------------------------------------+-----------------------------------+ - - -``reverse_iterator`` is interoperable with -``reverse_iterator`` if and only if ``X`` is interoperable with -``Y``. - -``reverse_iterator`` operations -............................... - -In addition to the operations required by the concepts modeled by -``reverse_iterator``, ``reverse_iterator`` provides the following -operations. - - - -``reverse_iterator();`` - -:Requires: ``Iterator`` must be Default Constructible. -:Effects: Constructs an instance of ``reverse_iterator`` with ``m_iterator`` - default constructed. - -``explicit reverse_iterator(Iterator x);`` - -:Effects: Constructs an instance of ``reverse_iterator`` with - ``m_iterator`` copy constructed from ``x``. - - -:: - - template - reverse_iterator( - reverse_iterator const& r - , typename enable_if_convertible::type* = 0 // exposition - ); - -:Requires: ``OtherIterator`` is implicitly convertible to ``Iterator``. -:Effects: Constructs instance of ``reverse_iterator`` whose - ``m_iterator`` subobject is constructed from ``y.base()``. - - - -``Iterator const& base() const;`` - -:Returns: ``m_iterator`` - - -``reference operator*() const;`` - -:Effects: - -:: - - Iterator tmp = m_iterator; - return *--tmp; - - -``reverse_iterator& operator++();`` - -:Effects: ``--m_iterator`` -:Returns: ``*this`` - - -``reverse_iterator& operator--();`` - -:Effects: ``++m_iterator`` -:Returns: ``*this`` diff --git a/doc/rst2html b/doc/rst2html deleted file mode 100755 index 82a7f1e..0000000 --- a/doc/rst2html +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# Copyright David Abrahams 2006. Distributed under 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) -PYTHONPATH="c:/src/docutils;c:/src/docutils/extras" -export PYTHONPATH -python rst2html.py -gs $1 `echo $1 | sed 's/\(.*\)\..*/\1.html/'` - - - diff --git a/doc/rst2latex b/doc/rst2latex deleted file mode 100755 index f3c1d0e..0000000 --- a/doc/rst2latex +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -# Copyright David Abrahams 2006. Distributed under 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) -PYTHONPATH="c:/src/docutils;c:/src/docutils/extras" -export PYTHONPATH -python c:/src/docutils/tools/rst2latex.py --documentoptions pdftex --stylesheet=docutils.sty $1 `echo $1 | sed 's/\(.*\)\..*/\1.tex/'` diff --git a/doc/scanrst.py b/doc/scanrst.py deleted file mode 100644 index 484d879..0000000 --- a/doc/scanrst.py +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright David Abrahams 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) - -# This script accepts a list of .rst files to be processed and -# generates Makefile dependencies for .html and .rst files to stdout. -import os,sys -import re - -include = re.compile(r' *\.\. +(include|image):: +(.*)', re.MULTILINE) - -def deps(path, found): - dir = os.path.split(path)[0] - for m in re.findall(include, open(path).read()): - - dependency = os.path.normpath(os.path.join(dir,m[1])) - if dependency not in found: - found[dependency] = 1 - - if m[0] == 'include': - deps(dependency, found) - - return found - -for file in sys.argv[1:]: - found = deps(file, {}) - if found: - base = os.path.splitext(os.path.basename(file))[0] - print '%s.tex %s.html: %s' % (base, base, ' '.join(found.keys())) diff --git a/doc/sources.py b/doc/sources.py deleted file mode 100644 index 5f954a5..0000000 --- a/doc/sources.py +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright David Abrahams 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) - -sources = [ -'counting_iterator.rst', -'facade-and-adaptor.rst', -'filter_iterator.rst', -'function_output_iterator.rst', -'index.rst', -'indirect_iterator.rst', -'pointee.rst', -'iterator_adaptor.rst', -'iterator_facade.rst', -'new-iter-concepts.rst', -'permutation_iterator.rst', -'reverse_iterator.rst', -'transform_iterator.rst', -'zip_iterator.rst', -'iterator_archetypes.rst', -'iterator_concepts.rst', -'iterator_traits.rst' - ] - diff --git a/doc/syscmd.py b/doc/syscmd.py deleted file mode 100644 index e6a8dca..0000000 --- a/doc/syscmd.py +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright David Abrahams 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) - -import os -import sys - -def syscmd(s): - print 'executing: ', repr(s) - sys.stdout.flush() - err = os.system(s) - if err: - raise SystemError, 'command: %s returned %s' % ( - repr(s), err) diff --git a/doc/transform_iterator.html b/doc/transform_iterator.html deleted file mode 100644 index 7b8ceb1..0000000 --- a/doc/transform_iterator.html +++ /dev/null @@ -1,622 +0,0 @@ - - - - - - -Transform Iterator - - - - - - - -
-

Transform Iterator

- --- - - - - - - - - - - - -
Author:David Abrahams, Jeremy Siek, Thomas Witt
Contact:dave@boost-consulting.com, jsiek@osl.iu.edu, witt@ive.uni-hannover.de
Organization:Boost Consulting, Indiana University Open Systems -Lab, University of Hanover Institute for Transport -Railway Operation and Construction
Date:2004-11-01
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.
- - - - --- - - - -
abstract: - - -The transform iterator adapts an iterator by modifying the -operator* to apply a function object to the result of -dereferencing the iterator and returning the result.
- -
-

transform_iterator synopsis

- - - - -
-template <class UnaryFunction,
-          class Iterator,
-          class Reference = use_default,
-          class Value = use_default>
-class transform_iterator
-{
-public:
-  typedef /* see below */ value_type;
-  typedef /* see below */ reference;
-  typedef /* see below */ pointer;
-  typedef iterator_traits<Iterator>::difference_type difference_type;
-  typedef /* see below */ iterator_category;
-
-  transform_iterator();
-  transform_iterator(Iterator const& x, UnaryFunction f);
-
-  template<class F2, class I2, class R2, class V2>
-  transform_iterator(
-        transform_iterator<F2, I2, R2, V2> const& t
-      , typename enable_if_convertible<I2, Iterator>::type* = 0      // exposition only
-      , typename enable_if_convertible<F2, UnaryFunction>::type* = 0 // exposition only
-  );
-  UnaryFunction functor() const;
-  Iterator const& base() const;
-  reference operator*() const;
-  transform_iterator& operator++();
-  transform_iterator& operator--();
-private:
-  Iterator m_iterator; // exposition only
-  UnaryFunction m_f;   // exposition only
-};
-
-

If Reference is use_default then the reference member of -transform_iterator is -result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type. -Otherwise, reference is Reference.

-

If Value is use_default then the value_type member is -remove_cv<remove_reference<reference> >::type. Otherwise, -value_type is Value.

-

If Iterator models Readable Lvalue Iterator and if Iterator -models Random Access Traversal Iterator, then iterator_category is -convertible to random_access_iterator_tag. Otherwise, if -Iterator models Bidirectional Traversal Iterator, then -iterator_category is convertible to -bidirectional_iterator_tag. Otherwise iterator_category is -convertible to forward_iterator_tag. If Iterator does not -model Readable Lvalue Iterator then iterator_category is -convertible to input_iterator_tag.

-
-
-

transform_iterator requirements

-

The type UnaryFunction must be Assignable, Copy Constructible, and -the expression f(*i) must be valid where f is an object of -type UnaryFunction, i is an object of type Iterator, and -where the type of f(*i) must be -result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type.

-

The argument Iterator shall model Readable Iterator.

-
-
-

transform_iterator models

-

The resulting transform_iterator models the most refined of the -following that is also modeled by Iterator.

-
-
    -
  • Writable Lvalue Iterator if transform_iterator::reference is a non-const reference.
  • -
  • Readable Lvalue Iterator if transform_iterator::reference is a const reference.
  • -
  • Readable Iterator otherwise.
  • -
-
-

The transform_iterator models the most refined standard traversal -concept that is modeled by the Iterator argument.

-

If transform_iterator is a model of Readable Lvalue Iterator then -it models the following original iterator concepts depending on what -the Iterator argument models.

- ---- - - - - - - - - - - - - - - - - - - - -
If Iterator modelsthen transform_iterator models
Single Pass IteratorInput Iterator
Forward Traversal IteratorForward Iterator
Bidirectional Traversal IteratorBidirectional Iterator
Random Access Traversal IteratorRandom Access Iterator
-

If transform_iterator models Writable Lvalue Iterator then it is a -mutable iterator (as defined in the old iterator requirements).

-

transform_iterator<F1, X, R1, V1> is interoperable with -transform_iterator<F2, Y, R2, V2> if and only if X is -interoperable with Y.

-
-
-

transform_iterator operations

-

In addition to the operations required by the concepts modeled by -transform_iterator, transform_iterator provides the following -operations.

-

transform_iterator();

- --- - - - -
Returns:An instance of transform_iterator with m_f -and m_iterator default constructed.
-

transform_iterator(Iterator const& x, UnaryFunction f);

- --- - - - -
Returns:An instance of transform_iterator with m_f -initialized to f and m_iterator initialized to x.
-
-template<class F2, class I2, class R2, class V2>
-transform_iterator(
-      transform_iterator<F2, I2, R2, V2> const& t
-    , typename enable_if_convertible<I2, Iterator>::type* = 0      // exposition only
-    , typename enable_if_convertible<F2, UnaryFunction>::type* = 0 // exposition only
-);
-
- --- - - - - - -
Returns:An instance of transform_iterator with m_f -initialized to t.functor() and m_iterator initialized to -t.base().
Requires:OtherIterator is implicitly convertible to Iterator.
-

UnaryFunction functor() const;

- --- - - - -
Returns:m_f
-

Iterator const& base() const;

- --- - - - -
Returns:m_iterator
-

reference operator*() const;

- --- - - - -
Returns:m_f(*m_iterator)
-

transform_iterator& operator++();

- --- - - - - - -
Effects:++m_iterator
Returns:*this
-

transform_iterator& operator--();

- --- - - - - - -
Effects:--m_iterator
Returns:*this
- - - -
-template <class UnaryFunction, class Iterator>
-transform_iterator<UnaryFunction, Iterator>
-make_transform_iterator(Iterator it, UnaryFunction fun);
-
- --- - - - -
Returns:An instance of transform_iterator<UnaryFunction, Iterator> with m_f -initialized to f and m_iterator initialized to x.
-
-template <class UnaryFunction, class Iterator>
-transform_iterator<UnaryFunction, Iterator>
-make_transform_iterator(Iterator it);
-
- --- - - - -
Returns:An instance of transform_iterator<UnaryFunction, Iterator> with m_f -default constructed and m_iterator initialized to x.
- - - -
-
-

Example

-

This is a simple example of using the transform_iterators class to -generate iterators that multiply (or add to) the value returned by -dereferencing the iterator. It would be cooler to use lambda library -in this example.

-
-int x[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
-const int N = sizeof(x)/sizeof(int);
-
-typedef boost::binder1st< std::multiplies<int> > Function;
-typedef boost::transform_iterator<Function, int*> doubling_iterator;
-
-doubling_iterator i(x, boost::bind1st(std::multiplies<int>(), 2)),
-  i_end(x + N, boost::bind1st(std::multiplies<int>(), 2));
-
-std::cout << "multiplying the array by 2:" << std::endl;
-while (i != i_end)
-  std::cout << *i++ << " ";
-std::cout << std::endl;
-
-std::cout << "adding 4 to each element in the array:" << std::endl;
-std::copy(boost::make_transform_iterator(x, boost::bind1st(std::plus<int>(), 4)),
-          boost::make_transform_iterator(x + N, boost::bind1st(std::plus<int>(), 4)),
-          std::ostream_iterator<int>(std::cout, " "));
-std::cout << std::endl;
-
-

The output is:

-
-multiplying the array by 2:
-2 4 6 8 10 12 14 16
-adding 4 to each element in the array:
-5 6 7 8 9 10 11 12
-
-

The source code for this example can be found here.

-
-
- - diff --git a/doc/transform_iterator.pdf b/doc/transform_iterator.pdf deleted file mode 100755 index 2af10ab194957cb7230202e014295c1ca9c20e0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67596 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 Xia~uvaJ$RQ)X>zFOI6j?-;E0Zu|Sml diff --git a/doc/transform_iterator.rst b/doc/transform_iterator.rst deleted file mode 100644 index 4f81cca..0000000 --- a/doc/transform_iterator.rst +++ /dev/null @@ -1,32 +0,0 @@ -.. Distributed under 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) - -++++++++++++++++++++ - Transform Iterator -++++++++++++++++++++ - -:Author: David Abrahams, Jeremy Siek, Thomas Witt -:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu, witt@ive.uni-hannover.de -:organization: `Boost Consulting`_, Indiana University `Open Systems - Lab`_, University of Hanover `Institute for Transport - Railway Operation and Construction`_ -:date: $Date$ -:copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. - -.. _`Boost Consulting`: http://www.boost-consulting.com -.. _`Open Systems Lab`: http://www.osl.iu.edu -.. _`Institute for Transport Railway Operation and Construction`: http://www.ive.uni-hannover.de - -:abstract: - - .. include:: transform_iterator_abstract.rst - -.. contents:: Table of Contents - -``transform_iterator`` synopsis -............................... - -.. include:: transform_iterator_ref.rst -.. include:: make_transform_iterator.rst -.. include:: transform_iterator_eg.rst diff --git a/doc/transform_iterator_abstract.rst b/doc/transform_iterator_abstract.rst deleted file mode 100644 index 5fdcf53..0000000 --- a/doc/transform_iterator_abstract.rst +++ /dev/null @@ -1,7 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -The transform iterator adapts an iterator by modifying the -``operator*`` to apply a function object to the result of -dereferencing the iterator and returning the result. diff --git a/doc/transform_iterator_eg.rst b/doc/transform_iterator_eg.rst deleted file mode 100755 index 1406d2b..0000000 --- a/doc/transform_iterator_eg.rst +++ /dev/null @@ -1,46 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -Example -....... - -This is a simple example of using the transform_iterators class to -generate iterators that multiply (or add to) the value returned by -dereferencing the iterator. It would be cooler to use lambda library -in this example. - -:: - - int x[] = { 1, 2, 3, 4, 5, 6, 7, 8 }; - const int N = sizeof(x)/sizeof(int); - - typedef boost::binder1st< std::multiplies > Function; - typedef boost::transform_iterator doubling_iterator; - - doubling_iterator i(x, boost::bind1st(std::multiplies(), 2)), - i_end(x + N, boost::bind1st(std::multiplies(), 2)); - - std::cout << "multiplying the array by 2:" << std::endl; - while (i != i_end) - std::cout << *i++ << " "; - std::cout << std::endl; - - std::cout << "adding 4 to each element in the array:" << std::endl; - std::copy(boost::make_transform_iterator(x, boost::bind1st(std::plus(), 4)), - boost::make_transform_iterator(x + N, boost::bind1st(std::plus(), 4)), - std::ostream_iterator(std::cout, " ")); - std::cout << std::endl; - - -The output is:: - - multiplying the array by 2: - 2 4 6 8 10 12 14 16 - adding 4 to each element in the array: - 5 6 7 8 9 10 11 12 - - -The source code for this example can be found `here`__. - -__ ../example/transform_iterator_example.cpp diff --git a/doc/transform_iterator_ref.rst b/doc/transform_iterator_ref.rst deleted file mode 100644 index 74347a0..0000000 --- a/doc/transform_iterator_ref.rst +++ /dev/null @@ -1,175 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -.. Version 1.3 of this document was accepted for TR1 - -:: - - template - class transform_iterator - { - public: - typedef /* see below */ value_type; - typedef /* see below */ reference; - typedef /* see below */ pointer; - typedef iterator_traits::difference_type difference_type; - typedef /* see below */ iterator_category; - - transform_iterator(); - transform_iterator(Iterator const& x, UnaryFunction f); - - template - transform_iterator( - transform_iterator const& t - , typename enable_if_convertible::type* = 0 // exposition only - , typename enable_if_convertible::type* = 0 // exposition only - ); - UnaryFunction functor() const; - Iterator const& base() const; - reference operator*() const; - transform_iterator& operator++(); - transform_iterator& operator--(); - private: - Iterator m_iterator; // exposition only - UnaryFunction m_f; // exposition only - }; - - -If ``Reference`` is ``use_default`` then the ``reference`` member of -``transform_iterator`` is -``result_of::reference)>::type``. -Otherwise, ``reference`` is ``Reference``. - -If ``Value`` is ``use_default`` then the ``value_type`` member is -``remove_cv >::type``. Otherwise, -``value_type`` is ``Value``. - - -If ``Iterator`` models Readable Lvalue Iterator and if ``Iterator`` -models Random Access Traversal Iterator, then ``iterator_category`` is -convertible to ``random_access_iterator_tag``. Otherwise, if -``Iterator`` models Bidirectional Traversal Iterator, then -``iterator_category`` is convertible to -``bidirectional_iterator_tag``. Otherwise ``iterator_category`` is -convertible to ``forward_iterator_tag``. If ``Iterator`` does not -model Readable Lvalue Iterator then ``iterator_category`` is -convertible to ``input_iterator_tag``. - - -``transform_iterator`` requirements -................................... - -The type ``UnaryFunction`` must be Assignable, Copy Constructible, and -the expression ``f(*i)`` must be valid where ``f`` is an object of -type ``UnaryFunction``, ``i`` is an object of type ``Iterator``, and -where the type of ``f(*i)`` must be -``result_of::reference)>::type``. - -The argument ``Iterator`` shall model Readable Iterator. - - -``transform_iterator`` models -............................. - -The resulting ``transform_iterator`` models the most refined of the -following that is also modeled by ``Iterator``. - - * Writable Lvalue Iterator if ``transform_iterator::reference`` is a non-const reference. - - * Readable Lvalue Iterator if ``transform_iterator::reference`` is a const reference. - - * Readable Iterator otherwise. - -The ``transform_iterator`` models the most refined standard traversal -concept that is modeled by the ``Iterator`` argument. - -If ``transform_iterator`` is a model of Readable Lvalue Iterator then -it models the following original iterator concepts depending on what -the ``Iterator`` argument models. - -+-----------------------------------+---------------------------------------+ -| If ``Iterator`` models | then ``transform_iterator`` models | -+===================================+=======================================+ -| Single Pass Iterator | Input Iterator | -+-----------------------------------+---------------------------------------+ -| Forward Traversal Iterator | Forward Iterator | -+-----------------------------------+---------------------------------------+ -| Bidirectional Traversal Iterator | Bidirectional Iterator | -+-----------------------------------+---------------------------------------+ -| Random Access Traversal Iterator | Random Access Iterator | -+-----------------------------------+---------------------------------------+ - -If ``transform_iterator`` models Writable Lvalue Iterator then it is a -mutable iterator (as defined in the old iterator requirements). - -``transform_iterator`` is interoperable with -``transform_iterator`` if and only if ``X`` is -interoperable with ``Y``. - - - -``transform_iterator`` operations -................................. - -In addition to the operations required by the concepts modeled by -``transform_iterator``, ``transform_iterator`` provides the following -operations. - - -``transform_iterator();`` - -:Returns: An instance of ``transform_iterator`` with ``m_f`` - and ``m_iterator`` default constructed. - - -``transform_iterator(Iterator const& x, UnaryFunction f);`` - -:Returns: An instance of ``transform_iterator`` with ``m_f`` - initialized to ``f`` and ``m_iterator`` initialized to ``x``. - - -:: - - template - transform_iterator( - transform_iterator const& t - , typename enable_if_convertible::type* = 0 // exposition only - , typename enable_if_convertible::type* = 0 // exposition only - ); - -:Returns: An instance of ``transform_iterator`` with ``m_f`` - initialized to ``t.functor()`` and ``m_iterator`` initialized to - ``t.base()``. -:Requires: ``OtherIterator`` is implicitly convertible to ``Iterator``. - - -``UnaryFunction functor() const;`` - -:Returns: ``m_f`` - - -``Iterator const& base() const;`` - -:Returns: ``m_iterator`` - - -``reference operator*() const;`` - -:Returns: ``m_f(*m_iterator)`` - - -``transform_iterator& operator++();`` - -:Effects: ``++m_iterator`` -:Returns: ``*this`` - - -``transform_iterator& operator--();`` - -:Effects: ``--m_iterator`` -:Returns: ``*this`` - diff --git a/doc/traversal.png b/doc/traversal.png deleted file mode 100644 index a9bbe981a1c3b6492afdbb0786018aec326433c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9112 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 - - - - - -Zip Iterator - - - - - - - -
-

Zip Iterator

- --- - - - - - - - - - - - -
Author:David Abrahams, Thomas Becker
Contact:dave@boost-consulting.com, thomas@styleadvisor.com
Organization:Boost Consulting, Zephyr Associates, Inc.
Date:2004-11-01
Copyright:Copyright David Abrahams and Thomas Becker 2003.
- - - - --- - - - -
abstract: - - -The zip iterator provides the ability to parallel-iterate -over several controlled sequences simultaneously. A zip -iterator is constructed from a tuple of iterators. Moving -the zip iterator moves all the iterators in parallel. -Dereferencing the zip iterator returns a tuple that contains -the results of dereferencing the individual iterators.
-
-
-

zip_iterator synopsis

- - - -
-template<typename IteratorTuple>
-class zip_iterator
-{
-
-public:
-  typedef /* see below */ reference;
-  typedef reference value_type;
-  typedef value_type* pointer;
-  typedef /* see below */ difference_type;
-  typedef /* see below */ iterator_category;
-
-  zip_iterator();
-  zip_iterator(IteratorTuple iterator_tuple);
-
-  template<typename OtherIteratorTuple>
-  zip_iterator(
-        const zip_iterator<OtherIteratorTuple>& other
-      , typename enable_if_convertible<
-              OtherIteratorTuple
-            , IteratorTuple>::type* = 0     // exposition only
-  );
-
-  const IteratorTuple& get_iterator_tuple() const;
-
-private:
-  IteratorTuple m_iterator_tuple;     // exposition only
-};
-
-template<typename IteratorTuple>
-zip_iterator<IteratorTuple>
-make_zip_iterator(IteratorTuple t);
-
-

The reference member of zip_iterator is the type of the tuple -made of the reference types of the iterator types in the IteratorTuple -argument.

-

The difference_type member of zip_iterator is the difference_type -of the first of the iterator types in the IteratorTuple argument.

-

The iterator_category member of zip_iterator is convertible to the -minimum of the traversal categories of the iterator types in the IteratorTuple -argument. For example, if the zip_iterator holds only vector -iterators, then iterator_category is convertible to -boost::random_access_traversal_tag. If you add a list iterator, then -iterator_category will be convertible to boost::bidirectional_traversal_tag, -but no longer to boost::random_access_traversal_tag.

-
-
-

zip_iterator requirements

-

All iterator types in the argument IteratorTuple shall model Readable Iterator.

-
-
-

zip_iterator models

-

The resulting zip_iterator models Readable Iterator.

-

The fact that the zip_iterator models only Readable Iterator does not -prevent you from modifying the values that the individual iterators point -to. The tuple returned by the zip_iterator's operator* is a tuple -constructed from the reference types of the individual iterators, not -their value types. For example, if zip_it is a zip_iterator whose -first member iterator is an std::vector<double>::iterator, then the -following line will modify the value which the first member iterator of -zip_it currently points to:

-
-zip_it->get<0>() = 42.0;
-
-

Consider the set of standard traversal concepts obtained by taking -the most refined standard traversal concept modeled by each individual -iterator type in the IteratorTuple argument.The zip_iterator -models the least refined standard traversal concept in this set.

-

zip_iterator<IteratorTuple1> is interoperable with -zip_iterator<IteratorTuple2> if and only if IteratorTuple1 -is interoperable with IteratorTuple2.

-
-
-

zip_iterator operations

-

In addition to the operations required by the concepts modeled by -zip_iterator, zip_iterator provides the following -operations.

-

zip_iterator();

- --- - - - -
Returns:An instance of zip_iterator with m_iterator_tuple -default constructed.
-

zip_iterator(IteratorTuple iterator_tuple);

- --- - - - -
Returns:An instance of zip_iterator with m_iterator_tuple -initialized to iterator_tuple.
-
-template<typename OtherIteratorTuple>
-zip_iterator(
-      const zip_iterator<OtherIteratorTuple>& other
-    , typename enable_if_convertible<
-            OtherIteratorTuple
-          , IteratorTuple>::type* = 0     // exposition only
-);
-
- --- - - - - - -
Returns:An instance of zip_iterator that is a copy of other.
Requires:OtherIteratorTuple is implicitly convertible to IteratorTuple.
-

const IteratorTuple& get_iterator_tuple() const;

- --- - - - -
Returns:m_iterator_tuple
-

reference operator*() const;

- --- - - - -
Returns:A tuple consisting of the results of dereferencing all iterators in -m_iterator_tuple.
-

zip_iterator& operator++();

- --- - - - - - -
Effects:Increments each iterator in m_iterator_tuple.
Returns:*this
-

zip_iterator& operator--();

- --- - - - - - -
Effects:Decrements each iterator in m_iterator_tuple.
Returns:*this
-
-template<typename IteratorTuple>
-zip_iterator<IteratorTuple>
-make_zip_iterator(IteratorTuple t);
-
- --- - - - -
Returns:An instance of zip_iterator<IteratorTuple> with m_iterator_tuple -initialized to t.
- - - -
-template<typename IteratorTuple>
-zip_iterator<IteratorTuple>
-make_zip_iterator(IteratorTuple t);
-
- --- - - - -
Returns:An instance of zip_iterator<IteratorTuple> with m_iterator_tuple -initialized to t.
- - - -
-
-

Examples

-

There are two main types of applications of the zip_iterator. The first -one concerns runtime efficiency: If one has several controlled sequences -of the same length that must be somehow processed, e.g., with the -for_each algorithm, then it is more efficient to perform just -one parallel-iteration rather than several individual iterations. For an -example, assume that vect_of_doubles and vect_of_ints -are two vectors of equal length containing doubles and ints, respectively, -and consider the following two iterations:

-
-std::vector<double>::const_iterator beg1 = vect_of_doubles.begin();
-std::vector<double>::const_iterator end1 = vect_of_doubles.end();
-std::vector<int>::const_iterator beg2 = vect_of_ints.begin();
-std::vector<int>::const_iterator end2 = vect_of_ints.end();
-
-std::for_each(beg1, end1, func_0());
-std::for_each(beg2, end2, func_1());
-
-

These two iterations can now be replaced with a single one as follows:

-
-std::for_each(
-  boost::make_zip_iterator(
-    boost::make_tuple(beg1, beg2)
-    ),
-  boost::make_zip_iterator(
-    boost::make_tuple(end1, end2)
-    ),
-  zip_func()
-  );
-
-

A non-generic implementation of zip_func could look as follows:

-
-struct zip_func :
-  public std::unary_function<const boost::tuple<const double&, const int&>&, void>
-{
-  void operator()(const boost::tuple<const double&, const int&>& t) const
-  {
-    m_f0(t.get<0>());
-    m_f1(t.get<1>());
-  }
-
-private:
-  func_0 m_f0;
-  func_1 m_f1;
-};
-
-

The second important application of the zip_iterator is as a building block -to make combining iterators. A combining iterator is an iterator -that parallel-iterates over several controlled sequences and, upon -dereferencing, returns the result of applying a functor to the values of the -sequences at the respective positions. This can now be achieved by using the -zip_iterator in conjunction with the transform_iterator.

-

Suppose, for example, that you have two vectors of doubles, say -vect_1 and vect_2, and you need to expose to a client -a controlled sequence containing the products of the elements of -vect_1 and vect_2. Rather than placing these products -in a third vector, you can use a combining iterator that calculates the -products on the fly. Let us assume that tuple_multiplies is a -functor that works like std::multiplies, except that it takes -its two arguments packaged in a tuple. Then the two iterators -it_begin and it_end defined below delimit a controlled -sequence containing the products of the elements of vect_1 and -vect_2:

-
-typedef boost::tuple<
-  std::vector<double>::const_iterator,
-  std::vector<double>::const_iterator
-  > the_iterator_tuple;
-
-typedef boost::zip_iterator<
-  the_iterator_tuple
-  > the_zip_iterator;
-
-typedef boost::transform_iterator<
-  tuple_multiplies<double>,
-  the_zip_iterator
-  > the_transform_iterator;
-
-the_transform_iterator it_begin(
-  the_zip_iterator(
-    the_iterator_tuple(
-      vect_1.begin(),
-      vect_2.begin()
-      )
-    ),
-  tuple_multiplies<double>()
-  );
-
-the_transform_iterator it_end(
-  the_zip_iterator(
-    the_iterator_tuple(
-      vect_1.end(),
-      vect_2.end()
-      )
-    ),
-  tuple_multiplies<double>()
-  );
-
-
-
- - diff --git a/doc/zip_iterator.pdf b/doc/zip_iterator.pdf deleted file mode 100755 index c5a6f21cfe23aeb2ce534098232cdeaa2a6a2561..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62372 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 bCE)RbV$diRxD8`wU}$K_rK;-c@5TiH?}-I$ diff --git a/doc/zip_iterator.rst b/doc/zip_iterator.rst deleted file mode 100755 index 4e360c3..0000000 --- a/doc/zip_iterator.rst +++ /dev/null @@ -1,29 +0,0 @@ -.. Distributed under 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) - -+++++++++++++ - Zip Iterator -+++++++++++++ - -:Author: David Abrahams, Thomas Becker -:Contact: dave@boost-consulting.com, thomas@styleadvisor.com -:organization: `Boost Consulting`_, `Zephyr Associates, Inc.`_ -:date: $Date$ -:copyright: Copyright David Abrahams and Thomas Becker 2003. - -.. _`Boost Consulting`: http://www.boost-consulting.com -.. _`Zephyr Associates, Inc.`: http://www.styleadvisor.com - -:abstract: - - .. include:: zip_iterator_abstract.rst - -.. contents:: Table of Contents - -``zip_iterator`` synopsis -............................... - -.. include:: zip_iterator_ref.rst -.. include:: make_zip_iterator.rst -.. include:: zip_iterator_eg.rst diff --git a/doc/zip_iterator_abstract.rst b/doc/zip_iterator_abstract.rst deleted file mode 100755 index 2f4aecf..0000000 --- a/doc/zip_iterator_abstract.rst +++ /dev/null @@ -1,10 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -The zip iterator provides the ability to parallel-iterate -over several controlled sequences simultaneously. A zip -iterator is constructed from a tuple of iterators. Moving -the zip iterator moves all the iterators in parallel. -Dereferencing the zip iterator returns a tuple that contains -the results of dereferencing the individual iterators. diff --git a/doc/zip_iterator_eg.rst b/doc/zip_iterator_eg.rst deleted file mode 100755 index e999f15..0000000 --- a/doc/zip_iterator_eg.rst +++ /dev/null @@ -1,116 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -Examples -........ - -There are two main types of applications of the ``zip_iterator``. The first -one concerns runtime efficiency: If one has several controlled sequences -of the same length that must be somehow processed, e.g., with the -``for_each`` algorithm, then it is more efficient to perform just -one parallel-iteration rather than several individual iterations. For an -example, assume that ``vect_of_doubles`` and ``vect_of_ints`` -are two vectors of equal length containing doubles and ints, respectively, -and consider the following two iterations: - -:: - - - std::vector::const_iterator beg1 = vect_of_doubles.begin(); - std::vector::const_iterator end1 = vect_of_doubles.end(); - std::vector::const_iterator beg2 = vect_of_ints.begin(); - std::vector::const_iterator end2 = vect_of_ints.end(); - - std::for_each(beg1, end1, func_0()); - std::for_each(beg2, end2, func_1()); - -These two iterations can now be replaced with a single one as follows: - -:: - - - std::for_each( - boost::make_zip_iterator( - boost::make_tuple(beg1, beg2) - ), - boost::make_zip_iterator( - boost::make_tuple(end1, end2) - ), - zip_func() - ); - -A non-generic implementation of ``zip_func`` could look as follows: - -:: - - - struct zip_func : - public std::unary_function&, void> - { - void operator()(const boost::tuple& t) const - { - m_f0(t.get<0>()); - m_f1(t.get<1>()); - } - - private: - func_0 m_f0; - func_1 m_f1; - }; - -The second important application of the ``zip_iterator`` is as a building block -to make combining iterators. A combining iterator is an iterator -that parallel-iterates over several controlled sequences and, upon -dereferencing, returns the result of applying a functor to the values of the -sequences at the respective positions. This can now be achieved by using the -``zip_iterator`` in conjunction with the ``transform_iterator``. - -Suppose, for example, that you have two vectors of doubles, say -``vect_1`` and ``vect_2``, and you need to expose to a client -a controlled sequence containing the products of the elements of -``vect_1`` and ``vect_2``. Rather than placing these products -in a third vector, you can use a combining iterator that calculates the -products on the fly. Let us assume that ``tuple_multiplies`` is a -functor that works like ``std::multiplies``, except that it takes -its two arguments packaged in a tuple. Then the two iterators -``it_begin`` and ``it_end`` defined below delimit a controlled -sequence containing the products of the elements of ``vect_1`` and -``vect_2``: - -:: - - - typedef boost::tuple< - std::vector::const_iterator, - std::vector::const_iterator - > the_iterator_tuple; - - typedef boost::zip_iterator< - the_iterator_tuple - > the_zip_iterator; - - typedef boost::transform_iterator< - tuple_multiplies, - the_zip_iterator - > the_transform_iterator; - - the_transform_iterator it_begin( - the_zip_iterator( - the_iterator_tuple( - vect_1.begin(), - vect_2.begin() - ) - ), - tuple_multiplies() - ); - - the_transform_iterator it_end( - the_zip_iterator( - the_iterator_tuple( - vect_1.end(), - vect_2.end() - ) - ), - tuple_multiplies() - ); diff --git a/doc/zip_iterator_ref.rst b/doc/zip_iterator_ref.rst deleted file mode 100755 index f81ccd2..0000000 --- a/doc/zip_iterator_ref.rst +++ /dev/null @@ -1,155 +0,0 @@ -.. Copyright David Abrahams 2006. Distributed under 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) - -:: - - template - class zip_iterator - { - - public: - typedef /* see below */ reference; - typedef reference value_type; - typedef value_type* pointer; - typedef /* see below */ difference_type; - typedef /* see below */ iterator_category; - - zip_iterator(); - zip_iterator(IteratorTuple iterator_tuple); - - template - zip_iterator( - const zip_iterator& other - , typename enable_if_convertible< - OtherIteratorTuple - , IteratorTuple>::type* = 0 // exposition only - ); - - const IteratorTuple& get_iterator_tuple() const; - - private: - IteratorTuple m_iterator_tuple; // exposition only - }; - - template - zip_iterator - make_zip_iterator(IteratorTuple t); - - -The ``reference`` member of ``zip_iterator`` is the type of the tuple -made of the reference types of the iterator types in the ``IteratorTuple`` -argument. - -The ``difference_type`` member of ``zip_iterator`` is the ``difference_type`` -of the first of the iterator types in the ``IteratorTuple`` argument. - -The ``iterator_category`` member of ``zip_iterator`` is convertible to the -minimum of the traversal categories of the iterator types in the ``IteratorTuple`` -argument. For example, if the ``zip_iterator`` holds only vector -iterators, then ``iterator_category`` is convertible to -``boost::random_access_traversal_tag``. If you add a list iterator, then -``iterator_category`` will be convertible to ``boost::bidirectional_traversal_tag``, -but no longer to ``boost::random_access_traversal_tag``. - - -``zip_iterator`` requirements -................................... - -All iterator types in the argument ``IteratorTuple`` shall model Readable Iterator. - - -``zip_iterator`` models -............................. - -The resulting ``zip_iterator`` models Readable Iterator. - -The fact that the ``zip_iterator`` models only Readable Iterator does not -prevent you from modifying the values that the individual iterators point -to. The tuple returned by the ``zip_iterator``'s ``operator*`` is a tuple -constructed from the reference types of the individual iterators, not -their value types. For example, if ``zip_it`` is a ``zip_iterator`` whose -first member iterator is an ``std::vector::iterator``, then the -following line will modify the value which the first member iterator of -``zip_it`` currently points to: - -:: - - zip_it->get<0>() = 42.0; - - -Consider the set of standard traversal concepts obtained by taking -the most refined standard traversal concept modeled by each individual -iterator type in the ``IteratorTuple`` argument.The ``zip_iterator`` -models the least refined standard traversal concept in this set. - -``zip_iterator`` is interoperable with -``zip_iterator`` if and only if ``IteratorTuple1`` -is interoperable with ``IteratorTuple2``. - - - -``zip_iterator`` operations -................................. - -In addition to the operations required by the concepts modeled by -``zip_iterator``, ``zip_iterator`` provides the following -operations. - - -``zip_iterator();`` - -:Returns: An instance of ``zip_iterator`` with ``m_iterator_tuple`` - default constructed. - - -``zip_iterator(IteratorTuple iterator_tuple);`` - -:Returns: An instance of ``zip_iterator`` with ``m_iterator_tuple`` - initialized to ``iterator_tuple``. - - -:: - - template - zip_iterator( - const zip_iterator& other - , typename enable_if_convertible< - OtherIteratorTuple - , IteratorTuple>::type* = 0 // exposition only - ); - -:Returns: An instance of ``zip_iterator`` that is a copy of ``other``. -:Requires: ``OtherIteratorTuple`` is implicitly convertible to ``IteratorTuple``. - - -``const IteratorTuple& get_iterator_tuple() const;`` - -:Returns: ``m_iterator_tuple`` - - -``reference operator*() const;`` - -:Returns: A tuple consisting of the results of dereferencing all iterators in - ``m_iterator_tuple``. - - -``zip_iterator& operator++();`` - -:Effects: Increments each iterator in ``m_iterator_tuple``. -:Returns: ``*this`` - - -``zip_iterator& operator--();`` - -:Effects: Decrements each iterator in ``m_iterator_tuple``. -:Returns: ``*this`` - -:: - - template - zip_iterator - make_zip_iterator(IteratorTuple t); - -:Returns: An instance of ``zip_iterator`` with ``m_iterator_tuple`` - initialized to ``t``. diff --git a/example/counting_iterator_example.cpp b/example/counting_iterator_example.cpp deleted file mode 100644 index c7d8add..0000000 --- a/example/counting_iterator_example.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// (C) Copyright Jeremy Siek 2000-2004. -// Distributed under 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) - - -#include -#include -#include -#include -#include -#include -#include -#include - -int main(int, char*[]) -{ - // Example of using counting_iterator - std::cout << "counting from 0 to 4:" << std::endl; - boost::counting_iterator first(0), last(4); - std::copy(first, last, std::ostream_iterator(std::cout, " ")); - std::cout << std::endl; - - // Example of using counting iterator to create an array of pointers. - int N = 7; - std::vector numbers; - typedef std::vector::iterator n_iter; - // Fill "numbers" array with [0,N) - std::copy( - boost::counting_iterator(0) - , boost::counting_iterator(N) - , std::back_inserter(numbers)); - - std::vector::iterator> pointers; - - // Use counting iterator to fill in the array of pointers. - // causes an ICE with MSVC6 - std::copy(boost::make_counting_iterator(numbers.begin()), - boost::make_counting_iterator(numbers.end()), - std::back_inserter(pointers)); - - // Use indirect iterator to print out numbers by accessing - // them through the array of pointers. - std::cout << "indirectly printing out the numbers from 0 to " - << N << std::endl; - std::copy(boost::make_indirect_iterator(pointers.begin()), - boost::make_indirect_iterator(pointers.end()), - std::ostream_iterator(std::cout, " ")); - std::cout << std::endl; - - return boost::exit_success; -} diff --git a/example/filter_iterator_example.cpp b/example/filter_iterator_example.cpp deleted file mode 100644 index 8880c8d..0000000 --- a/example/filter_iterator_example.cpp +++ /dev/null @@ -1,58 +0,0 @@ -// (C) Copyright Jeremy Siek 1999-2004. -// Distributed under 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) - -#include -#include -#include -#include -#include -#include // for exit_success - -struct is_positive_number { - bool operator()(int x) { return 0 < x; } -}; - -int main() -{ - int numbers_[] = { 0, -1, 4, -3, 5, 8, -2 }; - const int N = sizeof(numbers_)/sizeof(int); - - typedef int* base_iterator; - base_iterator numbers(numbers_); - - // Example using make_filter_iterator() - std::copy(boost::make_filter_iterator(numbers, numbers + N), - boost::make_filter_iterator(numbers + N, numbers + N), - std::ostream_iterator(std::cout, " ")); - std::cout << std::endl; - - // Example using filter_iterator - typedef boost::filter_iterator - FilterIter; - - is_positive_number predicate; - FilterIter filter_iter_first(predicate, numbers, numbers + N); - FilterIter filter_iter_last(predicate, numbers + N, numbers + N); - - std::copy(filter_iter_first, filter_iter_last, std::ostream_iterator(std::cout, " ")); - std::cout << std::endl; - - // Another example using make_filter_iterator() - std::copy( - boost::make_filter_iterator( - std::bind2nd(std::greater(), -2) - , numbers, numbers + N) - - , boost::make_filter_iterator( - std::bind2nd(std::greater(), -2) - , numbers + N, numbers + N) - - , std::ostream_iterator(std::cout, " ") - ); - - std::cout << std::endl; - - return boost::exit_success; -} diff --git a/example/func_output_iter_example.cpp b/example/func_output_iter_example.cpp deleted file mode 100644 index 9c06319..0000000 --- a/example/func_output_iter_example.cpp +++ /dev/null @@ -1,46 +0,0 @@ -// (C) Copyright Jeremy Siek 2001-2004. -// Distributed under 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) - -// Revision History: - -// 27 Feb 2001 Jeremy Siek -// Initial checkin. - -#include -#include -#include - -#include - -struct string_appender -{ - string_appender(std::string& s) - : m_str(&s) - {} - - void operator()(const std::string& x) const - { - *m_str += x; - } - - std::string* m_str; -}; - -int main(int, char*[]) -{ - std::vector x; - x.push_back("hello"); - x.push_back(" "); - x.push_back("world"); - x.push_back("!"); - - std::string s = ""; - std::copy(x.begin(), x.end(), - boost::make_function_output_iterator(string_appender(s))); - - std::cout << s << std::endl; - - return 0; -} diff --git a/example/indirect_iterator_example.cpp b/example/indirect_iterator_example.cpp deleted file mode 100644 index abbf46c..0000000 --- a/example/indirect_iterator_example.cpp +++ /dev/null @@ -1,59 +0,0 @@ -// (C) Copyright Jeremy Siek 2000-2004. -// Distributed under 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) - -#include -#include -#include -#include -#include -#include -#include - -int main(int, char*[]) -{ - char characters[] = "abcdefg"; - const int N = sizeof(characters)/sizeof(char) - 1; // -1 since characters has a null char - char* pointers_to_chars[N]; // at the end. - for (int i = 0; i < N; ++i) - pointers_to_chars[i] = &characters[i]; - - // Example of using indirect_iterator - - boost::indirect_iterator - indirect_first(pointers_to_chars), indirect_last(pointers_to_chars + N); - - std::copy(indirect_first, indirect_last, std::ostream_iterator(std::cout, ",")); - std::cout << std::endl; - - - // Example of making mutable and constant indirect iterators - - char mutable_characters[N]; - char* pointers_to_mutable_chars[N]; - for (int j = 0; j < N; ++j) - pointers_to_mutable_chars[j] = &mutable_characters[j]; - - boost::indirect_iterator mutable_indirect_first(pointers_to_mutable_chars), - mutable_indirect_last(pointers_to_mutable_chars + N); - boost::indirect_iterator const_indirect_first(pointers_to_chars), - const_indirect_last(pointers_to_chars + N); - - std::transform(const_indirect_first, const_indirect_last, - mutable_indirect_first, std::bind1st(std::plus(), 1)); - - std::copy(mutable_indirect_first, mutable_indirect_last, - std::ostream_iterator(std::cout, ",")); - std::cout << std::endl; - - - // Example of using make_indirect_iterator() - - std::copy(boost::make_indirect_iterator(pointers_to_chars), - boost::make_indirect_iterator(pointers_to_chars + N), - std::ostream_iterator(std::cout, ",")); - std::cout << std::endl; - - return 0; -} diff --git a/example/node.hpp b/example/node.hpp deleted file mode 100755 index c3ed315..0000000 --- a/example/node.hpp +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright David Abrahams 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) -#ifndef NODE_DWA2004110_HPP -# define NODE_DWA2004110_HPP - -# include - -// Polymorphic list node base class - -struct node_base -{ - node_base() : m_next(0) {} - - virtual ~node_base() - { - delete m_next; - } - - node_base* next() const - { - return m_next; - } - - virtual void print(std::ostream& s) const = 0; - virtual void double_me() = 0; - - void append(node_base* p) - { - if (m_next) - m_next->append(p); - else - m_next = p; - } - - private: - node_base* m_next; -}; - -inline std::ostream& operator<<(std::ostream& s, node_base const& n) -{ - n.print(s); - return s; -} - -template -struct node : node_base -{ - node(T x) - : m_value(x) - {} - - void print(std::ostream& s) const { s << this->m_value; } - void double_me() { m_value += m_value; } - - private: - T m_value; -}; - -#endif // NODE_DWA2004110_HPP diff --git a/example/node_iterator1.cpp b/example/node_iterator1.cpp deleted file mode 100755 index 6411b03..0000000 --- a/example/node_iterator1.cpp +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright David Abrahams 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) - -#include "node_iterator1.hpp" -#include -#include -#include -#include -#include - -int main() -{ - std::auto_ptr > nodes(new node(42)); - nodes->append(new node(" is greater than ")); - nodes->append(new node(13)); - - std::copy( - node_iterator(nodes.get()), node_iterator() - , std::ostream_iterator(std::cout, " ") - ); - std::cout << std::endl; - - std::for_each( - node_iterator(nodes.get()), node_iterator() - , std::mem_fun_ref(&node_base::double_me) - ); - - std::copy( - node_iterator(nodes.get()), node_iterator() - , std::ostream_iterator(std::cout, "/") - ); - std::cout << std::endl; -} diff --git a/example/node_iterator1.hpp b/example/node_iterator1.hpp deleted file mode 100755 index 5e068b4..0000000 --- a/example/node_iterator1.hpp +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright David Abrahams 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) -#ifndef NODE_ITERATOR1_DWA2004110_HPP -# define NODE_ITERATOR1_DWA2004110_HPP - -# include "node.hpp" -# include - -class node_iterator - : public boost::iterator_facade< - node_iterator - , node_base - , boost::forward_traversal_tag - > -{ - public: - node_iterator() - : m_node(0) - {} - - explicit node_iterator(node_base* p) - : m_node(p) - {} - - private: - friend class boost::iterator_core_access; - - void increment() - { m_node = m_node->next(); } - - bool equal(node_iterator const& other) const - { return this->m_node == other.m_node; } - - node_base& dereference() const - { return *m_node; } - - node_base* m_node; -}; - - -#endif // NODE_ITERATOR1_DWA2004110_HPP diff --git a/example/node_iterator2.cpp b/example/node_iterator2.cpp deleted file mode 100755 index 62211b2..0000000 --- a/example/node_iterator2.cpp +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright David Abrahams 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) - -#include "node_iterator2.hpp" -#include -#include -#include -#include -#include -#include - -int main() -{ - std::auto_ptr > nodes(new node(42)); - nodes->append(new node(" is greater than ")); - nodes->append(new node(13)); - - // Check interoperability - assert(node_iterator(nodes.get()) == node_const_iterator(nodes.get())); - assert(node_const_iterator(nodes.get()) == node_iterator(nodes.get())); - - assert(node_iterator(nodes.get()) != node_const_iterator()); - assert(node_const_iterator(nodes.get()) != node_iterator()); - - std::copy( - node_iterator(nodes.get()), node_iterator() - , std::ostream_iterator(std::cout, " ") - ); - std::cout << std::endl; - - std::for_each( - node_iterator(nodes.get()), node_iterator() - , boost::mem_fn(&node_base::double_me) - ); - - std::copy( - node_const_iterator(nodes.get()), node_const_iterator() - , std::ostream_iterator(std::cout, "/") - ); - std::cout << std::endl; - return 0; -} diff --git a/example/node_iterator2.hpp b/example/node_iterator2.hpp deleted file mode 100755 index 6aa0a4c..0000000 --- a/example/node_iterator2.hpp +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright David Abrahams 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) -#ifndef NODE_ITERATOR2_DWA2004110_HPP -# define NODE_ITERATOR2_DWA2004110_HPP - -# include "node.hpp" -# include - -# ifndef BOOST_NO_SFINAE -# include -# include -# endif - -template -class node_iter - : public boost::iterator_facade< - node_iter - , Value - , boost::forward_traversal_tag - > -{ - private: - struct enabler {}; // a private type avoids misuse - - public: - node_iter() - : m_node(0) {} - - explicit node_iter(Value* p) - : m_node(p) {} - - template - node_iter( - node_iter const& other -# ifndef BOOST_NO_SFINAE - , typename boost::enable_if< - boost::is_convertible - , enabler - >::type = enabler() -# endif - ) - : m_node(other.m_node) {} - - -# if !BOOST_WORKAROUND(__GNUC__, == 2) - private: // GCC2 can't grant friendship to template member functions - friend class boost::iterator_core_access; -# endif - - template - bool equal(node_iter const& other) const - { - return this->m_node == other.m_node; - } - - void increment() { m_node = m_node->next(); } - - Value& dereference() const { return *m_node; } - -# ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS - public: -# else - private: - template friend class node_iter; -# endif - Value* m_node; -}; - -typedef node_iter node_iterator; -typedef node_iter node_const_iterator; - -#endif // NODE_ITERATOR2_DWA2004110_HPP diff --git a/example/node_iterator3.cpp b/example/node_iterator3.cpp deleted file mode 100755 index 331cc93..0000000 --- a/example/node_iterator3.cpp +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright David Abrahams 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) - -#include "node_iterator3.hpp" -#include -#include -#include -#include -#include -#include - -int main() -{ - std::auto_ptr > nodes(new node(42)); - nodes->append(new node(" is greater than ")); - nodes->append(new node(13)); - - // Check interoperability - assert(node_iterator(nodes.get()) == node_const_iterator(nodes.get())); - assert(node_const_iterator(nodes.get()) == node_iterator(nodes.get())); - - assert(node_iterator(nodes.get()) != node_const_iterator()); - assert(node_const_iterator(nodes.get()) != node_iterator()); - - std::copy( - node_iterator(nodes.get()), node_iterator() - , std::ostream_iterator(std::cout, " ") - ); - std::cout << std::endl; - - std::for_each( - node_iterator(nodes.get()), node_iterator() - , boost::mem_fn(&node_base::double_me) - ); - - std::copy( - node_const_iterator(nodes.get()), node_const_iterator() - , std::ostream_iterator(std::cout, "/") - ); - std::cout << std::endl; - return 0; -} diff --git a/example/node_iterator3.hpp b/example/node_iterator3.hpp deleted file mode 100755 index 85127e1..0000000 --- a/example/node_iterator3.hpp +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright David Abrahams 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) -#ifndef NODE_ITERATOR3_DWA2004110_HPP -# define NODE_ITERATOR3_DWA2004110_HPP - -# include "node.hpp" -# include - -# ifndef BOOST_NO_SFINAE -# include -# include -# endif - -template -class node_iter - : public boost::iterator_adaptor< - node_iter // Derived - , Value* // Base - , boost::use_default // Value - , boost::forward_traversal_tag // CategoryOrTraversal - > -{ - private: - struct enabler {}; // a private type avoids misuse - - typedef boost::iterator_adaptor< - node_iter, Value*, boost::use_default, boost::forward_traversal_tag - > super_t; - - public: - node_iter() - : super_t(0) {} - - explicit node_iter(Value* p) - : super_t(p) {} - - template - node_iter( - node_iter const& other -# ifndef BOOST_NO_SFINAE - , typename boost::enable_if< - boost::is_convertible - , enabler - >::type = enabler() -# endif - ) - : super_t(other.base()) {} - -# if !BOOST_WORKAROUND(__GNUC__, == 2) - private: // GCC2 can't grant friendship to template member functions - friend class boost::iterator_core_access; -# endif - void increment() { this->base_reference() = this->base()->next(); } -}; - -typedef node_iter node_iterator; -typedef node_iter node_const_iterator; - -#endif // NODE_ITERATOR3_DWA2004110_HPP diff --git a/example/permutation_iter_example.cpp b/example/permutation_iter_example.cpp deleted file mode 100644 index e6ff889..0000000 --- a/example/permutation_iter_example.cpp +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (C) 2004 Jeremy Siek -// Distributed under 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) - -#include -#include -#include -#include -#include -#include - - -int main() { - using namespace boost; - int i = 0; - - typedef std::vector< int > element_range_type; - typedef std::deque< int > index_type; - - static const int element_range_size = 10; - static const int index_size = 4; - - element_range_type elements( element_range_size ); - for(element_range_type::iterator el_it = elements.begin() ; el_it != elements.end() ; ++el_it) - *el_it = std::distance(elements.begin(), el_it); - - index_type indices( index_size ); - for(index_type::iterator i_it = indices.begin() ; i_it != indices.end() ; ++i_it ) - *i_it = element_range_size - index_size + std::distance(indices.begin(), i_it); - std::reverse( indices.begin(), indices.end() ); - - typedef permutation_iterator< element_range_type::iterator, index_type::iterator > permutation_type; - permutation_type begin = make_permutation_iterator( elements.begin(), indices.begin() ); - permutation_type it = begin; - permutation_type end = make_permutation_iterator( elements.begin(), indices.end() ); - - std::cout << "The original range is : "; - std::copy( elements.begin(), elements.end(), std::ostream_iterator< int >( std::cout, " " ) ); - std::cout << "\n"; - - std::cout << "The reindexing scheme is : "; - std::copy( indices.begin(), indices.end(), std::ostream_iterator< int >( std::cout, " " ) ); - std::cout << "\n"; - - std::cout << "The permutated range is : "; - std::copy( begin, end, std::ostream_iterator< int >( std::cout, " " ) ); - std::cout << "\n"; - - std::cout << "Elements at even indices in the permutation : "; - it = begin; - for(i = 0; i < index_size / 2 ; ++i, it+=2 ) std::cout << *it << " "; - std::cout << "\n"; - - std::cout << "Permutation backwards : "; - it = begin + (index_size); - assert( it != begin ); - for( ; it-- != begin ; ) std::cout << *it << " "; - std::cout << "\n"; - - std::cout << "Iterate backward with stride 2 : "; - it = begin + (index_size - 1); - for(i = 0 ; i < index_size / 2 ; ++i, it-=2 ) std::cout << *it << " "; - std::cout << "\n"; - - return boost::exit_success; -} diff --git a/example/reverse_iterator.cpp b/example/reverse_iterator.cpp deleted file mode 100644 index b5f10f7..0000000 --- a/example/reverse_iterator.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (C) 2004 Jeremy Siek -// Distributed under 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) - -#include -#include -#include -#include -#include - -int main() -{ - int x[] = { 1, 2, 3, 4 }; - boost::reverse_iterator first(x + 4), last(x); - std::copy(first, last, std::ostream_iterator(std::cout, " ")); - std::cout << std::endl; - return 0; -} diff --git a/example/reverse_iterator_example.cpp b/example/reverse_iterator_example.cpp deleted file mode 100644 index 61b8c4f..0000000 --- a/example/reverse_iterator_example.cpp +++ /dev/null @@ -1,41 +0,0 @@ -// (C) Copyright Jeremy Siek 2000-2004. -// Distributed under 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) - -#include -#include -#include -#include -#include - -int main(int, char*[]) -{ - char letters_[] = "hello world!"; - const int N = sizeof(letters_)/sizeof(char) - 1; - typedef char* base_iterator; - base_iterator letters(letters_); - - std::cout << "original sequence of letters:\t\t\t" - << letters_ << std::endl; - - // Use reverse_iterator to print a sequence of letters in reverse - // order. - - boost::reverse_iterator - reverse_letters_first(letters + N), - reverse_letters_last(letters); - - std::cout << "sequence in reverse order:\t\t\t"; - std::copy(reverse_letters_first, reverse_letters_last, - std::ostream_iterator(std::cout)); - std::cout << std::endl; - - std::cout << "sequence in double-reversed (normal) order:\t"; - std::copy(boost::make_reverse_iterator(reverse_letters_last), - boost::make_reverse_iterator(reverse_letters_first), - std::ostream_iterator(std::cout)); - std::cout << std::endl; - - return boost::exit_success; -} diff --git a/example/transform_iterator_example.cpp b/example/transform_iterator_example.cpp deleted file mode 100644 index 6f51f01..0000000 --- a/example/transform_iterator_example.cpp +++ /dev/null @@ -1,76 +0,0 @@ -// (C) Copyright Jeremy Siek 2000-2004. -// Distributed under 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) - - -#include -#include -#include -#include - -// What a bummer. We can't use std::binder1st with transform iterator -// because it does not have a default constructor. Here's a version -// that does. - -namespace boost { - - template - class binder1st - : public std::unary_function { - protected: - Operation op; - typename Operation::first_argument_type value; - public: - binder1st() { } // this had to be added! - binder1st(const Operation& x, - const typename Operation::first_argument_type& y) - : op(x), value(y) {} - typename Operation::result_type - operator()(const typename Operation::second_argument_type& x) const { - return op(value, x); - } - }; - - template - inline binder1st bind1st(const Operation& op, const T& x) { - typedef typename Operation::first_argument_type arg1_type; - return binder1st(op, arg1_type(x)); - } - -} // namespace boost - -int -main(int, char*[]) -{ - // This is a simple example of using the transform_iterators class to - // generate iterators that multiply the value returned by dereferencing - // the iterator. In this case we are multiplying by 2. - // Would be cooler to use lambda library in this example. - - int x[] = { 1, 2, 3, 4, 5, 6, 7, 8 }; - const int N = sizeof(x)/sizeof(int); - - typedef boost::binder1st< std::multiplies > Function; - typedef boost::transform_iterator doubling_iterator; - - doubling_iterator i(x, boost::bind1st(std::multiplies(), 2)), - i_end(x + N, boost::bind1st(std::multiplies(), 2)); - - std::cout << "multiplying the array by 2:" << std::endl; - while (i != i_end) - std::cout << *i++ << " "; - std::cout << std::endl; - - std::cout << "adding 4 to each element in the array:" << std::endl; - - std::copy(boost::make_transform_iterator(x, boost::bind1st(std::plus(), 4)), - boost::make_transform_iterator(x + N, boost::bind1st(std::plus(), 4)), - std::ostream_iterator(std::cout, " ")); - std::cout << std::endl; - - return 0; -} - - diff --git a/include/boost/function_output_iterator.hpp b/include/boost/function_output_iterator.hpp deleted file mode 100644 index 9720f3f..0000000 --- a/include/boost/function_output_iterator.hpp +++ /dev/null @@ -1,56 +0,0 @@ -// (C) Copyright Jeremy Siek 2001. -// Distributed under 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) - -// Revision History: - -// 27 Feb 2001 Jeremy Siek -// Initial checkin. - -#ifndef BOOST_FUNCTION_OUTPUT_ITERATOR_HPP -#define BOOST_FUNCTION_OUTPUT_ITERATOR_HPP - -#include - -namespace boost { - - template - class function_output_iterator { - typedef function_output_iterator self; - public: - typedef std::output_iterator_tag iterator_category; - typedef void value_type; - typedef void difference_type; - typedef void pointer; - typedef void reference; - - explicit function_output_iterator() {} - - explicit function_output_iterator(const UnaryFunction& f) - : m_f(f) {} - - struct output_proxy { - output_proxy(UnaryFunction& f) : m_f(f) { } - template output_proxy& operator=(const T& value) { - m_f(value); - return *this; - } - UnaryFunction& m_f; - }; - output_proxy operator*() { return output_proxy(m_f); } - self& operator++() { return *this; } - self& operator++(int) { return *this; } - private: - UnaryFunction m_f; - }; - - template - inline function_output_iterator - make_function_output_iterator(const UnaryFunction& f = UnaryFunction()) { - return function_output_iterator(f); - } - -} // namespace boost - -#endif // BOOST_FUNCTION_OUTPUT_ITERATOR_HPP diff --git a/include/boost/pending/detail/int_iterator.hpp b/include/boost/pending/detail/int_iterator.hpp deleted file mode 100644 index e3bae34..0000000 --- a/include/boost/pending/detail/int_iterator.hpp +++ /dev/null @@ -1,74 +0,0 @@ -// (C) Copyright Jeremy Siek 1999. -// Distributed under 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) - -#ifndef BOOST_INT_ITERATOR_H -#define BOOST_INT_ITERATOR_H - -#include -#if !defined BOOST_MSVC -#include -#endif -#include -//using namespace std; - -#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE -namespace boost { -#endif - -// this should use random_access_iterator_helper but I've had -// VC++ portablility problems with that. -JGS -template -class int_iterator -{ - typedef int_iterator self; -public: - typedef std::random_access_iterator_tag iterator_category; - typedef IntT value_type; - typedef IntT& reference; - typedef IntT* pointer; - typedef std::ptrdiff_t difference_type; - - inline int_iterator() : _i(0) { } - inline int_iterator(IntT i) : _i(i) { } - inline int_iterator(const self& x) : _i(x._i) { } - inline self& operator=(const self& x) { _i = x._i; return *this; } - inline IntT operator*() { return _i; } - inline IntT operator[](IntT n) { return _i + n; } - inline self& operator++() { ++_i; return *this; } - inline self operator++(int) { self t = *this; ++_i; return t; } - inline self& operator+=(IntT n) { _i += n; return *this; } - inline self operator+(IntT n) { self t = *this; t += n; return t; } - inline self& operator--() { --_i; return *this; } - inline self operator--(int) { self t = *this; --_i; return t; } - inline self& operator-=(IntT n) { _i -= n; return *this; } - inline IntT operator-(const self& x) const { return _i - x._i; } - inline bool operator==(const self& x) const { return _i == x._i; } - // vc++ had a problem finding != in random_access_iterator_helper - // need to look into this... for now implementing everything here -JGS - inline bool operator!=(const self& x) const { return _i != x._i; } - inline bool operator<(const self& x) const { return _i < x._i; } - inline bool operator<=(const self& x) const { return _i <= x._i; } - inline bool operator>(const self& x) const { return _i > x._i; } - inline bool operator>=(const self& x) const { return _i >= x._i; } -protected: - IntT _i; -}; - -template -inline int_iterator -operator+(IntT n, int_iterator t) { t += n; return t; } - -#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE -} /* namespace boost */ -#endif - -#ifdef BOOST_NO_OPERATORS_IN_NAMESPACE -namespace boost { - using ::int_iterator; -} -#endif - - -#endif /* BOOST_INT_ITERATOR_H */ diff --git a/include/boost/pending/integer_range.hpp b/include/boost/pending/integer_range.hpp deleted file mode 100644 index 229cbd8..0000000 --- a/include/boost/pending/integer_range.hpp +++ /dev/null @@ -1,59 +0,0 @@ -// (C) Copyright David Abrahams and Jeremy Siek 2000-2001. -// Distributed under 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) -// -// Revision History: -// 04 Jan 2001 Factored counting_iterator stuff into -// boost/counting_iterator.hpp (David Abrahams) - -#ifndef BOOST_INTEGER_RANGE_HPP_ -#define BOOST_INTEGER_RANGE_HPP_ - -#include -#include -#include - -namespace boost { - -//============================================================================= -// Counting Iterator and Integer Range Class - -template -struct integer_range { - typedef counting_iterator iterator; - - typedef iterator const_iterator; - typedef IntegerType value_type; - typedef std::ptrdiff_t difference_type; - typedef IntegerType reference; - typedef IntegerType const_reference; - typedef const IntegerType* pointer; - typedef const IntegerType* const_pointer; - typedef IntegerType size_type; - - integer_range(IntegerType start, IntegerType finish) - : m_start(start), m_finish(finish) { } - - iterator begin() const { return iterator(m_start); } - iterator end() const { return iterator(m_finish); } - size_type size() const { return m_finish - m_start; } - bool empty() const { return m_finish == m_start; } - void swap(integer_range& x) { - std::swap(m_start, x.m_start); - std::swap(m_finish, x.m_finish); - } -protected: - IntegerType m_start, m_finish; -}; - -template -inline integer_range -make_integer_range(IntegerType first, IntegerType last) -{ - return integer_range(first, last); -} - -} // namespace boost - -#endif // BOOST_INTEGER_RANGE_HPP_ diff --git a/include/boost/pending/iterator_adaptors.hpp b/include/boost/pending/iterator_adaptors.hpp deleted file mode 100644 index 2256e81..0000000 --- a/include/boost/pending/iterator_adaptors.hpp +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright David Abrahams 2003. -// Distributed under 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) - -#include diff --git a/include/boost/pending/iterator_tests.hpp b/include/boost/pending/iterator_tests.hpp deleted file mode 100644 index dd5fe2d..0000000 --- a/include/boost/pending/iterator_tests.hpp +++ /dev/null @@ -1,268 +0,0 @@ -// Copyright David Abrahams and Jeremy Siek 2003. -// Distributed under 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) -#ifndef BOOST_ITERATOR_TESTS_HPP -# define BOOST_ITERATOR_TESTS_HPP - -// This is meant to be the beginnings of a comprehensive, generic -// test suite for STL concepts such as iterators and containers. -// -// Revision History: -// 28 Apr 2002 Fixed input iterator requirements. -// For a == b a++ == b++ is no longer required. -// See 24.1.1/3 for details. -// (Thomas Witt) -// 08 Feb 2001 Fixed bidirectional iterator test so that -// --i is no longer a precondition. -// (Jeremy Siek) -// 04 Feb 2001 Added lvalue test, corrected preconditions -// (David Abrahams) - -# include -# include -# include -# include -# include // for detail::dummy_constructor -# include -# include - -namespace boost { - - // use this for the value type -struct dummyT { - dummyT() { } - dummyT(detail::dummy_constructor) { } - dummyT(int x) : m_x(x) { } - int foo() const { return m_x; } - bool operator==(const dummyT& d) const { return m_x == d.m_x; } - int m_x; -}; - -} - -BOOST_TT_BROKEN_COMPILER_SPEC(boost::dummyT) - -namespace boost { - -// Tests whether type Iterator satisfies the requirements for a -// TrivialIterator. -// Preconditions: i != j, *i == val -template -void trivial_iterator_test(const Iterator i, const Iterator j, T val) -{ - Iterator k; - assert(i == i); - assert(j == j); - assert(i != j); -#ifdef BOOST_NO_STD_ITERATOR_TRAITS - T v = *i; -#else - typename std::iterator_traits::value_type v = *i; -#endif - assert(v == val); -#if 0 - // hmm, this will give a warning for transform_iterator... perhaps - // this should be separated out into a stand-alone test since there - // are several situations where it can't be used, like for - // integer_range::iterator. - assert(v == i->foo()); -#endif - k = i; - assert(k == k); - assert(k == i); - assert(k != j); - assert(*k == val); -} - - -// Preconditions: i != j -template -void mutable_trivial_iterator_test(const Iterator i, const Iterator j, T val) -{ - *i = val; - trivial_iterator_test(i, j, val); -} - - -// Preconditions: *i == v1, *++i == v2 -template -void input_iterator_test(Iterator i, T v1, T v2) -{ - Iterator i1(i); - - assert(i == i1); - assert(!(i != i1)); - - // I can see no generic way to create an input iterator - // that is in the domain of== of i and != i. - // The following works for istream_iterator but is not - // guaranteed to work for arbitrary input iterators. - // - // Iterator i2; - // - // assert(i != i2); - // assert(!(i == i2)); - - assert(*i1 == v1); - assert(*i == v1); - - // we cannot test for equivalence of (void)++i & (void)i++ - // as i is only guaranteed to be single pass. - assert(*i++ == v1); - - i1 = i; - - assert(i == i1); - assert(!(i != i1)); - - assert(*i1 == v2); - assert(*i == v2); - - // i is dereferencable, so it must be incrementable. - ++i; - - // how to test for operator-> ? -} - -// how to test output iterator? - - -template struct lvalue_test -{ - template static void check(Iterator) - { -# ifndef BOOST_NO_STD_ITERATOR_TRAITS - typedef typename std::iterator_traits::reference reference; - typedef typename std::iterator_traits::value_type value_type; -# else - typedef typename Iterator::reference reference; - typedef typename Iterator::value_type value_type; -# endif - BOOST_STATIC_ASSERT(boost::is_reference::value); - BOOST_STATIC_ASSERT((boost::is_same::value - || boost::is_same::value - )); - } -}; - -# ifdef BOOST_NO_STD_ITERATOR_TRAITS -template <> struct lvalue_test { - template static void check(T) {} -}; -#endif - -template -void forward_iterator_test(Iterator i, T v1, T v2) -{ - input_iterator_test(i, v1, v2); - - Iterator i1 = i, i2 = i; - - assert(i == i1++); - assert(i != ++i2); - - trivial_iterator_test(i, i1, v1); - trivial_iterator_test(i, i2, v1); - - ++i; - assert(i == i1); - assert(i == i2); - ++i1; - ++i2; - - trivial_iterator_test(i, i1, v2); - trivial_iterator_test(i, i2, v2); - - // borland doesn't allow non-type template parameters -# if !defined(__BORLANDC__) || (__BORLANDC__ > 0x551) - lvalue_test<(boost::is_pointer::value)>::check(i); -#endif -} - -// Preconditions: *i == v1, *++i == v2 -template -void bidirectional_iterator_test(Iterator i, T v1, T v2) -{ - forward_iterator_test(i, v1, v2); - ++i; - - Iterator i1 = i, i2 = i; - - assert(i == i1--); - assert(i != --i2); - - trivial_iterator_test(i, i1, v2); - trivial_iterator_test(i, i2, v2); - - --i; - assert(i == i1); - assert(i == i2); - ++i1; - ++i2; - - trivial_iterator_test(i, i1, v1); - trivial_iterator_test(i, i2, v1); -} - -// mutable_bidirectional_iterator_test - -template struct undefined; - -// Preconditions: [i,i+N) is a valid range -template -void random_access_iterator_test(Iterator i, int N, TrueVals vals) -{ - bidirectional_iterator_test(i, vals[0], vals[1]); - const Iterator j = i; - int c; - - typedef typename boost::detail::iterator_traits::value_type value_type; - - for (c = 0; c < N-1; ++c) { - assert(i == j + c); - assert(*i == vals[c]); - assert(*i == boost::implicit_cast(j[c])); - assert(*i == *(j + c)); - assert(*i == *(c + j)); - ++i; - assert(i > j); - assert(i >= j); - assert(j <= i); - assert(j < i); - } - - Iterator k = j + N - 1; - for (c = 0; c < N-1; ++c) { - assert(i == k - c); - assert(*i == vals[N - 1 - c]); - assert(*i == boost::implicit_cast(j[N - 1 - c])); - Iterator q = k - c; - assert(*i == *q); - assert(i > j); - assert(i >= j); - assert(j <= i); - assert(j < i); - --i; - } -} - -// Precondition: i != j -template -void const_nonconst_iterator_test(Iterator i, ConstIterator j) -{ - assert(i != j); - assert(j != i); - - ConstIterator k(i); - assert(k == i); - assert(i == k); - - k = i; - assert(k == i); - assert(i == k); -} - -} // namespace boost - -#endif // BOOST_ITERATOR_TESTS_HPP diff --git a/include/boost/pointee.hpp b/include/boost/pointee.hpp deleted file mode 100755 index 9794b8e..0000000 --- a/include/boost/pointee.hpp +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef POINTEE_DWA200415_HPP -# define POINTEE_DWA200415_HPP - -// -// Copyright David Abrahams 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) -// -// typename pointee

::type provides the pointee type of P. -// -// For example, it is T for T* and X for shared_ptr. -// -// http://www.boost.org/libs/iterator/doc/pointee.html -// - -# include -# include -# include -# include -# include -# include - -namespace boost { - -namespace detail -{ - template - struct smart_ptr_pointee - { - typedef typename P::element_type type; - }; - - template - struct iterator_pointee - { - typedef typename iterator_traits::value_type value_type; - - struct impl - { - template - static char test(T const&); - - static char (& test(value_type&) )[2]; - - static Iterator& x; - }; - - BOOST_STATIC_CONSTANT(bool, is_constant = sizeof(impl::test(*impl::x)) == 1); - - typedef typename mpl::if_c< -# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) - ::boost::detail::iterator_pointee::is_constant -# else - is_constant -# endif - , typename add_const::type - , value_type - >::type type; - }; -} - -template -struct pointee - : mpl::eval_if< - detail::is_incrementable

- , detail::iterator_pointee

- , detail::smart_ptr_pointee

- > -{ -}; - -} // namespace boost - -#endif // POINTEE_DWA200415_HPP diff --git a/include/boost/shared_container_iterator.hpp b/include/boost/shared_container_iterator.hpp deleted file mode 100644 index 7d8ecd3..0000000 --- a/include/boost/shared_container_iterator.hpp +++ /dev/null @@ -1,62 +0,0 @@ -// (C) Copyright Ronald Garcia 2002. Permission to copy, use, modify, sell and -// distribute this software is granted provided this copyright notice appears -// in all copies. This software is provided "as is" without express or implied -// warranty, and with no claim as to its suitability for any purpose. - -// See http://www.boost.org/libs/utility/shared_container_iterator.html for documentation. - -#ifndef SHARED_CONTAINER_ITERATOR_RG08102002_HPP -#define SHARED_CONTAINER_ITERATOR_RG08102002_HPP - -#include "boost/iterator_adaptors.hpp" -#include "boost/shared_ptr.hpp" -#include - -namespace boost { - -template -class shared_container_iterator : public iterator_adaptor< - shared_container_iterator, - typename Container::iterator> { - - typedef iterator_adaptor< - shared_container_iterator, - typename Container::iterator> super_t; - - typedef typename Container::iterator iterator_t; - typedef boost::shared_ptr container_ref_t; - - container_ref_t container_ref; -public: - shared_container_iterator() { } - - shared_container_iterator(iterator_t const& x,container_ref_t const& c) : - super_t(x), container_ref(c) { } - - -}; - -template -shared_container_iterator -make_shared_container_iterator(typename Container::iterator iter, - boost::shared_ptr const& container) { - typedef shared_container_iterator iterator; - return iterator(iter,container); -} - - - -template -std::pair< - shared_container_iterator, - shared_container_iterator > -make_shared_container_range(boost::shared_ptr const& container) { - return - std::make_pair( - make_shared_container_iterator(container->begin(),container), - make_shared_container_iterator(container->end(),container)); -} - - -} // namespace boost -#endif // SHARED_CONTAINER_ITERATOR_RG08102002_HPP diff --git a/index.html b/index.html deleted file mode 100755 index 71517c4..0000000 --- a/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - -Automatically loading index page... if nothing happens, please go to -doc/index.html. - - - - - diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 deleted file mode 100644 index 8503b2b..0000000 --- a/test/Jamfile.v2 +++ /dev/null @@ -1,47 +0,0 @@ -# Copyright David Abrahams 2003. Distributed under 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) - -test-suite iterator - : - # These first two tests will run last, and are expected to fail - # for many less-capable compilers. - - [ compile-fail interoperable_fail.cpp ] - # test uses expected success, so that we catch unrelated - # compilation problems. - [ run is_convertible_fail.cpp ] - - [ run zip_iterator_test.cpp - : : : - - # stlport's debug mode generates long symbols which overwhelm - # vc6 - #<*>release - ] - - # These tests should work for just about everything. - [ compile is_lvalue_iterator.cpp ] - [ compile is_readable_iterator.cpp ] - [ compile pointee.cpp ] - - [ run unit_tests.cpp ] - [ run concept_tests.cpp ] - [ run iterator_adaptor_cc.cpp ] - [ run iterator_adaptor_test.cpp ] - [ compile iterator_archetype_cc.cpp ] - [ compile-fail iter_archetype_default_ctor.cpp ] - [ compile-fail lvalue_concept_fail.cpp ] - [ run transform_iterator_test.cpp ] - [ run indirect_iterator_test.cpp ] - [ compile indirect_iter_member_types.cpp ] - [ run filter_iterator_test.cpp ] - [ run iterator_facade.cpp ] - [ run reverse_iterator_test.cpp ] - [ run counting_iterator_test.cpp ] - [ run interoperable.cpp ] - [ run iterator_traits_test.cpp ] - [ run permutation_iterator_test.cpp : : : # on - ] - -; diff --git a/test/concept_tests.cpp b/test/concept_tests.cpp deleted file mode 100644 index f3d518a..0000000 --- a/test/concept_tests.cpp +++ /dev/null @@ -1,94 +0,0 @@ -// (C) Copyright Jeremy Siek 2002. -// Distributed under 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) - -#include -#include -#include - -struct new_random_access - : std::random_access_iterator_tag - , boost::random_access_traversal_tag -{}; - -struct new_iterator - : public boost::iterator< new_random_access, int > -{ - int& operator*() const { return *m_x; } - new_iterator& operator++() { return *this; } - new_iterator operator++(int) { return *this; } - new_iterator& operator--() { return *this; } - new_iterator operator--(int) { return *this; } - new_iterator& operator+=(std::ptrdiff_t) { return *this; } - new_iterator operator+(std::ptrdiff_t) { return *this; } - new_iterator& operator-=(std::ptrdiff_t) { return *this; } - std::ptrdiff_t operator-(const new_iterator&) const { return 0; } - new_iterator operator-(std::ptrdiff_t) const { return *this; } - bool operator==(const new_iterator&) const { return false; } - bool operator!=(const new_iterator&) const { return false; } - bool operator<(const new_iterator&) const { return false; } - int* m_x; -}; -new_iterator operator+(std::ptrdiff_t, new_iterator x) { return x; } - -struct old_iterator - : public boost::iterator -{ - int& operator*() const { return *m_x; } - old_iterator& operator++() { return *this; } - old_iterator operator++(int) { return *this; } - old_iterator& operator--() { return *this; } - old_iterator operator--(int) { return *this; } - old_iterator& operator+=(std::ptrdiff_t) { return *this; } - old_iterator operator+(std::ptrdiff_t) { return *this; } - old_iterator& operator-=(std::ptrdiff_t) { return *this; } - old_iterator operator-(std::ptrdiff_t) const { return *this; } - std::ptrdiff_t operator-(const old_iterator&) const { return 0; } - bool operator==(const old_iterator&) const { return false; } - bool operator!=(const old_iterator&) const { return false; } - bool operator<(const old_iterator&) const { return false; } - int* m_x; -}; -old_iterator operator+(std::ptrdiff_t, old_iterator x) { return x; } - -int -main() -{ - boost::iterator_traversal::type tc; - boost::random_access_traversal_tag derived = tc; - (void)derived; - - boost::function_requires< - boost_concepts::WritableIteratorConcept >(); - boost::function_requires< - boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< - boost_concepts::RandomAccessTraversalConcept >(); - - boost::function_requires< - boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< - boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< - boost_concepts::RandomAccessTraversalConcept >(); - - boost::function_requires< - boost_concepts::WritableIteratorConcept >(); - boost::function_requires< - boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< - boost_concepts::RandomAccessTraversalConcept >(); - - boost::function_requires< - boost_concepts::WritableIteratorConcept >(); - boost::function_requires< - boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< - boost_concepts::RandomAccessTraversalConcept >(); - - boost::function_requires< - boost_concepts::InteroperableIteratorConcept >(); - - return 0; -} diff --git a/test/constant_iter_arrow.cpp b/test/constant_iter_arrow.cpp deleted file mode 100755 index 3579c53..0000000 --- a/test/constant_iter_arrow.cpp +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright David Abrahams 2004. Distributed under 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) - -#include -#include - -struct my_iter : boost::iterator_adaptor const*> -{ - my_iter(std::pair const*); - my_iter(); -}; - -std::pair const x(1,1); -my_iter p(&x); -int y = p->first; // operator-> attempts to return an non-const pointer diff --git a/test/constant_iter_arrow_fail.cpp b/test/constant_iter_arrow_fail.cpp deleted file mode 100755 index 05f551a..0000000 --- a/test/constant_iter_arrow_fail.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright David Abrahams 2004. Distributed under 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) - -#include -#include - -struct my_iter : boost::iterator_adaptor const*> -{ - my_iter(std::pair const*); - my_iter(); -}; - -std::pair const x(1,1); -my_iter p(&x); - -void test() -{ - p->first = 3; -} diff --git a/test/counting_iterator_test.cpp b/test/counting_iterator_test.cpp deleted file mode 100644 index 7770af5..0000000 --- a/test/counting_iterator_test.cpp +++ /dev/null @@ -1,300 +0,0 @@ -// (C) Copyright David Abrahams 2001. -// Distributed under 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) -// -// See http://www.boost.org for most recent version including documentation. -// -// Revision History -// 16 Feb 2001 Added a missing const. Made the tests run (somewhat) with -// plain MSVC again. (David Abrahams) -// 11 Feb 2001 #if 0'd out use of counting_iterator on non-numeric types in -// MSVC without STLport, so that the other tests may proceed -// (David Abrahams) -// 04 Feb 2001 Added use of iterator_tests.hpp (David Abrahams) -// 28 Jan 2001 Removed not_an_iterator detritus (David Abrahams) -// 24 Jan 2001 Initial revision (David Abrahams) - -#include - -#ifdef __BORLANDC__ // Borland mis-detects our custom iterators -# pragma warn -8091 // template argument ForwardIterator passed to '...' is a output iterator -# pragma warn -8071 // Conversion may lose significant digits (due to counting_iterator += n). -#endif - -#ifdef BOOST_MSVC -# pragma warning(disable:4786) // identifier truncated in debug info -#endif - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#ifndef __BORLANDC__ -# include -#endif -#include -#include -#include -#ifndef BOOST_NO_SLIST -# ifdef BOOST_SLIST_HEADER -# include BOOST_SLIST_HEADER -# else -# include -# endif -#endif - - -#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS -template -struct signed_assert_nonnegative -{ - static void test(T x) { BOOST_TEST(x >= 0); } -}; - -template -struct unsigned_assert_nonnegative -{ - static void test(T x) {} -}; - -template -struct assert_nonnegative - : boost::mpl::if_c< - std::numeric_limits::is_signed - , signed_assert_nonnegative - , unsigned_assert_nonnegative - >::type -{ -}; -#endif - -// Special tests for RandomAccess CountingIterators. -template -void category_test( - CountingIterator start, - CountingIterator finish, - Value, - std::random_access_iterator_tag) -{ - typedef typename - boost::detail::iterator_traits::difference_type - difference_type; - difference_type distance = boost::detail::distance(start, finish); - - // Pick a random position internal to the range - difference_type offset = (unsigned)rand() % distance; - -#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS - BOOST_TEST(offset >= 0); -#else - assert_nonnegative::test(offset); -#endif - - CountingIterator internal = start; - std::advance(internal, offset); - - // Try some binary searches on the range to show that it's ordered - BOOST_TEST(std::binary_search(start, finish, *internal)); - - // #including tuple crashed borland, so I had to give up on tie(). - std::pair xy( - std::equal_range(start, finish, *internal)); - CountingIterator x = xy.first, y = xy.second; - - BOOST_TEST(boost::detail::distance(x, y) == 1); - - // Show that values outside the range can't be found - BOOST_TEST(!std::binary_search(start, boost::prior(finish), *finish)); - - // Do the generic random_access_iterator_test - typedef typename CountingIterator::value_type value_type; - std::vector v; - for (value_type z = *start; !(z == *finish); ++z) - v.push_back(z); - - // Note that this test requires a that the first argument is - // dereferenceable /and/ a valid iterator prior to the first argument - boost::random_access_iterator_test(start, v.size(), v.begin()); -} - -// Special tests for bidirectional CountingIterators -template -void category_test(CountingIterator start, Value v1, std::bidirectional_iterator_tag) -{ - Value v2 = v1; - ++v2; - - // Note that this test requires a that the first argument is - // dereferenceable /and/ a valid iterator prior to the first argument - boost::bidirectional_iterator_test(start, v1, v2); -} - -template -void category_test(CountingIterator start, CountingIterator finish, Value v1, std::forward_iterator_tag) -{ - Value v2 = v1; - ++v2; - if (finish != start && finish != boost::next(start)) - boost::forward_readable_iterator_test(start, finish, v1, v2); -} - -template -void test_aux(CountingIterator start, CountingIterator finish, Value v1) -{ - typedef typename CountingIterator::iterator_category category; - typedef typename CountingIterator::value_type value_type; - - // If it's a RandomAccessIterator we can do a few delicate tests - category_test(start, finish, v1, category()); - - // Okay, brute force... - for (CountingIterator p = start - ; p != finish && boost::next(p) != finish - ; ++p) - { - BOOST_TEST(boost::next(*p) == *boost::next(p)); - } - - // prove that a reference can be formed to these values - typedef typename CountingIterator::value_type value; - const value* q = &*start; - (void)q; // suppress unused variable warning -} - -template -void test(Incrementable start, Incrementable finish) -{ - test_aux(boost::make_counting_iterator(start), boost::make_counting_iterator(finish), start); -} - -template -void test_integer(Integer* = 0) // default arg works around MSVC bug -{ - Integer start = 0; - Integer finish = 120; - test(start, finish); -} - -template -void test_integer3(Integer* = 0, Category* = 0, Difference* = 0) // default arg works around MSVC bug -{ - Integer start = 0; - Integer finish = 120; - typedef boost::counting_iterator iterator; - test_aux(iterator(start), iterator(finish), start); -} - -template -void test_container(Container* = 0) // default arg works around MSVC bug -{ - Container c(1 + (unsigned)rand() % 1673); - - const typename Container::iterator start = c.begin(); - - // back off by 1 to leave room for dereferenceable value at the end - typename Container::iterator finish = start; - std::advance(finish, c.size() - 1); - - test(start, finish); - - typedef typename Container::const_iterator const_iterator; - test(const_iterator(start), const_iterator(finish)); -} - -class my_int1 { -public: - my_int1() { } - my_int1(int x) : m_int(x) { } - my_int1& operator++() { ++m_int; return *this; } - bool operator==(const my_int1& x) const { return m_int == x.m_int; } -private: - int m_int; -}; - -class my_int2 { -public: - typedef void value_type; - typedef void pointer; - typedef void reference; - typedef std::ptrdiff_t difference_type; - typedef std::bidirectional_iterator_tag iterator_category; - - my_int2() { } - my_int2(int x) : m_int(x) { } - my_int2& operator++() { ++m_int; return *this; } - my_int2& operator--() { --m_int; return *this; } - bool operator==(const my_int2& x) const { return m_int == x.m_int; } -private: - int m_int; -}; - -class my_int3 { -public: - typedef void value_type; - typedef void pointer; - typedef void reference; - typedef std::ptrdiff_t difference_type; - typedef std::random_access_iterator_tag iterator_category; - - my_int3() { } - my_int3(int x) : m_int(x) { } - my_int3& operator++() { ++m_int; return *this; } - my_int3& operator+=(std::ptrdiff_t n) { m_int += n; return *this; } - std::ptrdiff_t operator-(const my_int3& x) const { return m_int - x.m_int; } - my_int3& operator--() { --m_int; return *this; } - bool operator==(const my_int3& x) const { return m_int == x.m_int; } - bool operator!=(const my_int3& x) const { return m_int != x.m_int; } - bool operator<(const my_int3& x) const { return m_int < x.m_int; } -private: - int m_int; -}; - -int main() -{ - // Test the built-in integer types. - test_integer(); - test_integer(); - test_integer(); - test_integer(); - test_integer(); - test_integer(); - test_integer(); - test_integer(); - test_integer(); - test_integer(); -#if defined(BOOST_HAS_LONG_LONG) - test_integer< ::boost::long_long_type>(); - test_integer< ::boost::ulong_long_type>(); -#endif - - // Test user-defined type. - - test_integer3(); - test_integer3(); - test_integer(); - test_integer(); - - // Some tests on container iterators, to prove we handle a few different categories - test_container >(); - test_container >(); -# ifndef BOOST_NO_SLIST - test_container >(); -# endif - - // Also prove that we can handle raw pointers. - int array[2000]; - test(boost::make_counting_iterator(array), boost::make_counting_iterator(array+2000-1)); - - return boost::report_errors(); -} diff --git a/test/filter_iterator_test.cpp b/test/filter_iterator_test.cpp deleted file mode 100644 index beaab4d..0000000 --- a/test/filter_iterator_test.cpp +++ /dev/null @@ -1,272 +0,0 @@ -// Copyright David Abrahams 2003, Jeremy Siek 2004. - -// Distributed under 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) - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -using boost::dummyT; - -struct one_or_four -{ - bool operator()(dummyT x) const - { - return x.foo() == 1 || x.foo() == 4; - } -}; - -template struct undefined; - -template struct see_type; - -// Test filter iterator -int main() -{ - // Concept checks - // Adapting old-style iterators - { - typedef boost::filter_iterator > Iter; - boost::function_requires< boost::InputIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::SinglePassIteratorConcept >(); - } - { - typedef boost::filter_iterator > Iter; - boost::function_requires< boost::InputIteratorConcept >(); - boost::function_requires< boost::OutputIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::SinglePassIteratorConcept >(); - } - { - typedef boost::filter_iterator > Iter; - boost::function_requires< boost::ForwardIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::ForwardTraversalConcept >(); - } - { - typedef boost::filter_iterator > Iter; - boost::function_requires< boost::Mutable_ForwardIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::ForwardTraversalConcept >(); - } - { - typedef boost::filter_iterator > Iter; - boost::function_requires< boost::BidirectionalIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } - { - typedef boost::filter_iterator > Iter; - boost::function_requires< boost::Mutable_BidirectionalIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } - { - typedef boost::filter_iterator > Iter; - boost::function_requires< boost::BidirectionalIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } - { - typedef boost::filter_iterator > Iter; - boost::function_requires< boost::Mutable_BidirectionalIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } - // Adapting new-style iterators - { - typedef boost::iterator_archetype< - const dummyT - , boost::iterator_archetypes::readable_iterator_t - , boost::single_pass_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - boost::function_requires< boost::InputIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::SinglePassIteratorConcept >(); - } -#if !BOOST_WORKAROUND(BOOST_MSVC, == 1200) // Causes Internal Error in linker. - { - typedef boost::iterator_archetype< - dummyT - , boost::iterator_archetypes::readable_writable_iterator_t - , boost::single_pass_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - - boost::function_requires< boost::InputIteratorConcept >(); - boost::function_requires< boost::OutputIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::SinglePassIteratorConcept >(); - } -#endif - { - typedef boost::iterator_archetype< - const dummyT - , boost::iterator_archetypes::readable_iterator_t - , boost::forward_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - boost::function_requires< boost::InputIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::ForwardTraversalConcept >(); - } - -#if !BOOST_WORKAROUND(BOOST_MSVC, == 1200) // Causes Internal Error in linker. - { - typedef boost::iterator_archetype< - dummyT - , boost::iterator_archetypes::readable_writable_iterator_t - , boost::forward_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::ForwardTraversalConcept >(); - } - { - typedef boost::iterator_archetype< - const dummyT - , boost::iterator_archetypes::readable_lvalue_iterator_t - , boost::forward_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - boost::function_requires< boost::ForwardIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< boost_concepts::ForwardTraversalConcept >(); - } - { - typedef boost::iterator_archetype< - dummyT - , boost::iterator_archetypes::writable_lvalue_iterator_t - , boost::forward_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - boost::function_requires< boost::Mutable_ForwardIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< boost_concepts::ForwardTraversalConcept >(); - } -#endif - - { - typedef boost::iterator_archetype< - const dummyT - , boost::iterator_archetypes::readable_iterator_t - , boost::random_access_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - boost::function_requires< boost::InputIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } - -#if !BOOST_WORKAROUND(BOOST_MSVC, == 1200) // Causes Internal Error in linker. - { - typedef boost::iterator_archetype< - dummyT - , boost::iterator_archetypes::readable_writable_iterator_t - , boost::random_access_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } - { - typedef boost::iterator_archetype< - const dummyT - , boost::iterator_archetypes::readable_lvalue_iterator_t - , boost::random_access_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - boost::function_requires< boost::BidirectionalIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } - { - typedef boost::iterator_archetype< - dummyT - , boost::iterator_archetypes::writable_lvalue_iterator_t - , boost::random_access_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - boost::function_requires< boost::Mutable_BidirectionalIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } -#endif - - // Run-time tests - - dummyT array[] = { dummyT(0), dummyT(1), dummyT(2), - dummyT(3), dummyT(4), dummyT(5) }; - const int N = sizeof(array)/sizeof(dummyT); - - typedef boost::filter_iterator filter_iter; - - boost::bidirectional_readable_iterator_test( - filter_iter(one_or_four(), array, array+N) - , dummyT(1), dummyT(4)); - - BOOST_STATIC_ASSERT( - (!boost::is_convertible< - boost::iterator_traversal::type - , boost::random_access_traversal_tag - >::value - )); - - //# endif - - // On compilers not supporting partial specialization, we can do more type - // deduction with deque iterators than with pointers... unless the library - // is broken ;-( - std::deque array2; - std::copy(array+0, array+N, std::back_inserter(array2)); - boost::bidirectional_readable_iterator_test( - boost::make_filter_iterator(one_or_four(), array2.begin(), array2.end()), - dummyT(1), dummyT(4)); - - boost::bidirectional_readable_iterator_test( - boost::make_filter_iterator(one_or_four(), array2.begin(), array2.end()), - dummyT(1), dummyT(4)); - - boost::bidirectional_readable_iterator_test( - boost::make_filter_iterator( - one_or_four() - , boost::make_reverse_iterator(array2.end()) - , boost::make_reverse_iterator(array2.begin()) - ), - dummyT(4), dummyT(1)); - - boost::bidirectional_readable_iterator_test( - filter_iter(array+0, array+N), - dummyT(1), dummyT(4)); - - boost::bidirectional_readable_iterator_test( - filter_iter(one_or_four(), array, array + N), - dummyT(1), dummyT(4)); - - - return boost::report_errors(); -} diff --git a/test/indirect_iter_member_types.cpp b/test/indirect_iter_member_types.cpp deleted file mode 100644 index 84dcaeb..0000000 --- a/test/indirect_iter_member_types.cpp +++ /dev/null @@ -1,89 +0,0 @@ -// (C) Copyright Jeremy Siek 2004. -// Distributed under 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) - -// Revision History -// 03 Jan 2004 Jeremy Siek -// First draft. - - -#include -#include - -#include -#include -#include "static_assert_same.hpp" -#include - -struct zow { }; - -struct my_ptr { - typedef zow const element_type; - zow const& operator*() const; -// typedef const zow& reference; -// typedef const zow* pointer; -// typedef void difference_type; -// typedef boost::no_traversal_tag iterator_category; -}; - -BOOST_TT_BROKEN_COMPILER_SPEC(my_ptr) -BOOST_TT_BROKEN_COMPILER_SPEC(zow) - -// Borland 5.6.4 and earlier drop const all over the place, so this -// test will fail in the lines marked with (**) - -int main() -{ - { - typedef boost::indirect_iterator Iter; - STATIC_ASSERT_SAME(Iter::value_type, int); - STATIC_ASSERT_SAME(Iter::reference, int&); - STATIC_ASSERT_SAME(Iter::pointer, int*); - STATIC_ASSERT_SAME(Iter::difference_type, std::ptrdiff_t); - - BOOST_STATIC_ASSERT((boost::is_convertible::value)); - BOOST_STATIC_ASSERT((boost::is_convertible::type, - boost::random_access_traversal_tag>::value)); - } - { - typedef boost::indirect_iterator Iter; - STATIC_ASSERT_SAME(Iter::value_type, int); - STATIC_ASSERT_SAME(Iter::reference, const int&); - STATIC_ASSERT_SAME(Iter::pointer, const int*); // (**) - } - { - typedef boost::indirect_iterator Iter; - STATIC_ASSERT_SAME(Iter::value_type, int); - STATIC_ASSERT_SAME(Iter::reference, int&); - STATIC_ASSERT_SAME(Iter::pointer, int*); - } - { - typedef boost::indirect_iterator Iter; - STATIC_ASSERT_SAME(Iter::value_type, int); - STATIC_ASSERT_SAME(Iter::reference, const int&); - STATIC_ASSERT_SAME(Iter::pointer, const int*); // (**) - } - { - typedef boost::indirect_iterator Iter; - STATIC_ASSERT_SAME(Iter::value_type, zow); - STATIC_ASSERT_SAME(Iter::reference, const zow&); // (**) - STATIC_ASSERT_SAME(Iter::pointer, const zow*); // (**) - - STATIC_ASSERT_SAME(Iter::difference_type, std::ptrdiff_t); - - BOOST_STATIC_ASSERT((boost::is_convertible::value)); - BOOST_STATIC_ASSERT((boost::is_convertible::type, - boost::random_access_traversal_tag>::value)); - } - { - typedef boost::indirect_iterator Iter; - STATIC_ASSERT_SAME(Iter::value_type, int); - STATIC_ASSERT_SAME(Iter::reference, long&); - STATIC_ASSERT_SAME(Iter::pointer, int*); - STATIC_ASSERT_SAME(Iter::difference_type, short); - } - return 0; -} diff --git a/test/indirect_iterator_test.cpp b/test/indirect_iterator_test.cpp deleted file mode 100644 index 8cea482..0000000 --- a/test/indirect_iterator_test.cpp +++ /dev/null @@ -1,221 +0,0 @@ -// (C) Copyright Jeremy Siek 1999. -// Distributed under 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) - -// Revision History -// 22 Nov 2002 Thomas Witt -// Added interoperability check. -// 08 Mar 2001 Jeremy Siek -// Moved test of indirect iterator into its own file. It to -// to be in iterator_adaptor_test.cpp. - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include - -#include - -#include - -#include - -#include -#include -#include - -#if !defined(__SGI_STL_PORT) \ - && (defined(BOOST_MSVC_STD_ITERATOR) \ - || BOOST_WORKAROUND(_CPPLIB_VER, <= 310) \ - || BOOST_WORKAROUND(__GNUC__, <= 2)) - -// std container random-access iterators don't support mutable/const -// interoperability (but may support const/mutable interop). -# define NO_MUTABLE_CONST_STD_SET_ITERATOR_INTEROPERABILITY - -#endif - - -template struct see_type; -template struct see_val; - -struct my_iterator_tag : public std::random_access_iterator_tag { }; - -using boost::dummyT; -BOOST_TT_BROKEN_COMPILER_SPEC(boost::shared_ptr) - -typedef std::vector storage; -typedef std::vector pointer_ra_container; -typedef std::set iterator_set; - -template -struct indirect_iterator_pair_generator -{ - typedef boost::indirect_iterator iterator; - - typedef boost::indirect_iterator< - typename Container::iterator - , typename iterator::value_type const - > const_iterator; -}; - -void more_indirect_iterator_tests() -{ - storage store(1000); - std::generate(store.begin(), store.end(), rand); - - pointer_ra_container ptr_ra_container; - iterator_set iter_set; - - for (storage::iterator p = store.begin(); p != store.end(); ++p) - { - ptr_ra_container.push_back(&*p); - iter_set.insert(p); - } - - typedef indirect_iterator_pair_generator indirect_ra_container; - - indirect_ra_container::iterator db(ptr_ra_container.begin()); - indirect_ra_container::iterator de(ptr_ra_container.end()); - BOOST_TEST(static_cast(de - db) == store.size()); - BOOST_TEST(db + store.size() == de); - indirect_ra_container::const_iterator dci = db; - - BOOST_TEST(dci == db); - -#ifndef NO_MUTABLE_CONST_RA_ITERATOR_INTEROPERABILITY - BOOST_TEST(db == dci); -#endif - - BOOST_TEST(dci != de); - BOOST_TEST(dci < de); - BOOST_TEST(dci <= de); - -#ifndef NO_MUTABLE_CONST_RA_ITERATOR_INTEROPERABILITY - BOOST_TEST(de >= dci); - BOOST_TEST(de > dci); -#endif - - dci = de; - BOOST_TEST(dci == de); - - boost::random_access_iterator_test(db + 1, store.size() - 1, boost::next(store.begin())); - - *db = 999; - BOOST_TEST(store.front() == 999); - - // Borland C++ is getting very confused about the typedefs here - typedef boost::indirect_iterator indirect_set_iterator; - typedef boost::indirect_iterator< - iterator_set::iterator - , iterator_set::iterator::value_type const - > const_indirect_set_iterator; - - indirect_set_iterator sb(iter_set.begin()); - indirect_set_iterator se(iter_set.end()); - const_indirect_set_iterator sci(iter_set.begin()); - BOOST_TEST(sci == sb); - -# ifndef NO_MUTABLE_CONST_STD_SET_ITERATOR_INTEROPERABILITY - BOOST_TEST(se != sci); -# endif - - BOOST_TEST(sci != se); - sci = se; - BOOST_TEST(sci == se); - - *boost::prior(se) = 888; - BOOST_TEST(store.back() == 888); - BOOST_TEST(std::equal(sb, se, store.begin())); - - boost::bidirectional_iterator_test(boost::next(sb), store[1], store[2]); - BOOST_TEST(std::equal(db, de, store.begin())); -} - -// element_type detector; defaults to true so the test passes when -// has_xxx isn't implemented -BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_element_type, element_type, true) - -int -main() -{ - dummyT array[] = { dummyT(0), dummyT(1), dummyT(2), - dummyT(3), dummyT(4), dummyT(5) }; - const int N = sizeof(array)/sizeof(dummyT); - -# if BOOST_WORKAROUND(BOOST_MSVC, == 1200) - boost::shared_ptr zz((dummyT*)0); // Why? I don't know, but it suppresses a bad instantiation. -# endif - - typedef std::vector > shared_t; - shared_t shared; - - // Concept checks - { - typedef boost::indirect_iterator iter_t; - - BOOST_STATIC_ASSERT( - has_element_type< - boost::detail::iterator_traits::value_type - >::value - ); - - typedef boost::indirect_iterator< - shared_t::iterator - , boost::iterator_value::type const - > c_iter_t; - -# ifndef NO_MUTABLE_CONST_RA_ITERATOR_INTEROPERABILITY - boost::function_requires< boost_concepts::InteroperableIteratorConcept >(); -# endif - } - - // Test indirect_iterator_generator - { - for (int jj = 0; jj < N; ++jj) - shared.push_back(boost::shared_ptr(new dummyT(jj))); - - dummyT* ptr[N]; - for (int k = 0; k < N; ++k) - ptr[k] = array + k; - - typedef boost::indirect_iterator indirect_iterator; - - typedef boost::indirect_iterator - const_indirect_iterator; - - indirect_iterator i(ptr); - boost::random_access_iterator_test(i, N, array); - - boost::random_access_iterator_test( - boost::indirect_iterator(shared.begin()) - , N, array); - - boost::random_access_iterator_test(boost::make_indirect_iterator(ptr), N, array); - - // check operator-> - assert((*i).m_x == i->foo()); - - const_indirect_iterator j(ptr); - boost::random_access_iterator_test(j, N, array); - - dummyT const*const* const_ptr = ptr; - boost::random_access_iterator_test(boost::make_indirect_iterator(const_ptr), N, array); - - boost::const_nonconst_iterator_test(i, ++j); - - more_indirect_iterator_tests(); - } - return boost::report_errors(); -} diff --git a/test/interoperable.cpp b/test/interoperable.cpp deleted file mode 100755 index ba4196a..0000000 --- a/test/interoperable.cpp +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright David Abrahams 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) - -#include -#include -#include -#include - -struct mutable_it : boost::iterator_adaptor -{ - typedef boost::iterator_adaptor super_t; - - mutable_it(); - explicit mutable_it(int* p) : super_t(p) {} - - bool equal(mutable_it const& rhs) const - { - return this->base() == rhs.base(); - } -}; - -struct constant_it : boost::iterator_adaptor -{ - typedef boost::iterator_adaptor super_t; - - constant_it(); - explicit constant_it(int* p) : super_t(p) {} - constant_it(mutable_it const& x) : super_t(x.base()) {} - - bool equal(constant_it const& rhs) const - { - return this->base() == rhs.base(); - } -}; - -int main() -{ - int data[] = { 49, 77 }; - - mutable_it i(data); - constant_it j(data + 1); - BOOST_TEST(i < j); - BOOST_TEST(j > i); - BOOST_TEST(i <= j); - BOOST_TEST(j >= i); - BOOST_TEST(j - i == 1); - BOOST_TEST(i - j == -1); - - constant_it k = i; - - BOOST_TEST(!(i < k)); - BOOST_TEST(!(k > i)); - BOOST_TEST(i <= k); - BOOST_TEST(k >= i); - BOOST_TEST(k - i == 0); - BOOST_TEST(i - k == 0); - - return boost::report_errors(); -} diff --git a/test/interoperable_fail.cpp b/test/interoperable_fail.cpp deleted file mode 100644 index d6d249a..0000000 --- a/test/interoperable_fail.cpp +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright Thomas Witt 2003. -// Distributed under 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) -#include -#include -#include -#include -#include - -int main() -{ - { - typedef boost::reverse_iterator::iterator> rev_iter; - typedef boost::indirect_iterator::iterator> ind_iter; - - ind_iter() == rev_iter(); - } - - return boost::exit_success; -} diff --git a/test/is_convertible_fail.cpp b/test/is_convertible_fail.cpp deleted file mode 100644 index 757b5c6..0000000 --- a/test/is_convertible_fail.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// -// Copyright (c) Thomas Witt 2002. -// -// 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) -// -#include -#include - -int main() -{ - typedef boost::reverse_iterator rev_iter1; - typedef boost::reverse_iterator rev_iter2; - - return boost::is_convertible::value - ? boost::exit_failure : boost::exit_success; -} diff --git a/test/is_lvalue_iterator.cpp b/test/is_lvalue_iterator.cpp deleted file mode 100755 index fdace52..0000000 --- a/test/is_lvalue_iterator.cpp +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright David Abrahams 2003. 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) - -#include -#include -#include -#include -#include -#include -#include -#include - -// Last, for BOOST_NO_LVALUE_RETURN_DETECTION -#include - -struct v -{ - v(); - ~v(); -}; - -BOOST_TT_BROKEN_COMPILER_SPEC(v) - -struct value_iterator : boost::iterator -{ - v operator*() const; -}; - -struct noncopyable_iterator : boost::iterator -{ - boost::noncopyable const& operator*() const; -}; - -template -struct proxy_iterator - : boost::iterator -{ - typedef T value_type; - -#if BOOST_WORKAROUND(__GNUC__, == 2) - typedef boost::iterator base; - typedef base::iterator_category iterator_category; - typedef base::difference_type difference_type; - typedef base::pointer pointer; - typedef base::reference reference; -#endif - - struct proxy - { - operator value_type&() const; - proxy& operator=(value_type) const; - }; - - proxy operator*() const; -}; - -template -struct lvalue_iterator -{ - typedef T value_type; - typedef T& reference; - typedef T difference_type; - typedef std::input_iterator_tag iterator_category; - typedef T* pointer; - - T& operator*() const; - lvalue_iterator& operator++(); - lvalue_iterator operator++(int); -}; - -template -struct constant_lvalue_iterator -{ - typedef T value_type; - typedef T const& reference; - typedef T difference_type; - typedef std::input_iterator_tag iterator_category; - typedef T const* pointer; - - T const& operator*() const; - constant_lvalue_iterator& operator++(); - constant_lvalue_iterator operator++(int); -}; - -BOOST_TT_BROKEN_COMPILER_SPEC(proxy_iterator::proxy) -BOOST_TT_BROKEN_COMPILER_SPEC(proxy_iterator::proxy) - -int main() -{ - BOOST_STATIC_ASSERT(boost::is_lvalue_iterator::value); - BOOST_STATIC_ASSERT(boost::is_lvalue_iterator::value); - BOOST_STATIC_ASSERT(boost::is_lvalue_iterator::iterator>::value); - BOOST_STATIC_ASSERT(boost::is_lvalue_iterator::const_iterator>::value); - BOOST_STATIC_ASSERT(!boost::is_lvalue_iterator > >::value); - BOOST_STATIC_ASSERT(!boost::is_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(!boost::is_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(!boost::is_lvalue_iterator >::value); -#ifndef BOOST_NO_LVALUE_RETURN_DETECTION - BOOST_STATIC_ASSERT(!boost::is_lvalue_iterator::value); -#endif - // Make sure inaccessible copy constructor doesn't prevent - // reference binding - BOOST_STATIC_ASSERT(boost::is_lvalue_iterator::value); - - BOOST_STATIC_ASSERT(boost::is_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(boost::is_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(boost::is_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(boost::is_lvalue_iterator >::value); - - - BOOST_STATIC_ASSERT(boost::is_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(boost::is_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(boost::is_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(boost::is_lvalue_iterator >::value); - - - - BOOST_STATIC_ASSERT(boost::is_non_const_lvalue_iterator::value); - BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator::value); - BOOST_STATIC_ASSERT(boost::is_non_const_lvalue_iterator::iterator>::value); - BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator::const_iterator>::value); - BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator > >::value); - BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator >::value); -#ifndef BOOST_NO_LVALUE_RETURN_DETECTION - BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator::value); -#endif - BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator::value); - - BOOST_STATIC_ASSERT(boost::is_non_const_lvalue_iterator >::value); -#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - BOOST_STATIC_ASSERT(boost::is_non_const_lvalue_iterator >::value); -#endif - BOOST_STATIC_ASSERT(boost::is_non_const_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(boost::is_non_const_lvalue_iterator >::value); - - BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator >::value); - - return 0; -} diff --git a/test/is_readable_iterator.cpp b/test/is_readable_iterator.cpp deleted file mode 100755 index 15ed099..0000000 --- a/test/is_readable_iterator.cpp +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright David Abrahams 2003. 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) - -#include -#include -#include -#include -#include -#include -#include -#include - -// Last, for BOOST_NO_LVALUE_RETURN_DETECTION -#include - -struct v -{ - v(); - ~v(); -}; - -BOOST_TT_BROKEN_COMPILER_SPEC(v) - -struct value_iterator : boost::iterator -{ - v operator*() const; -}; - -struct noncopyable_iterator : boost::iterator -{ - boost::noncopyable const& operator*() const; -}; - -struct proxy_iterator : boost::iterator -{ -#if BOOST_WORKAROUND(__GNUC__, == 2) - typedef boost::iterator base; - typedef base::iterator_category iterator_category; - typedef base::value_type value_type; - typedef base::difference_type difference_type; - typedef base::pointer pointer; - typedef base::reference reference; -#endif - - struct proxy - { - operator v&(); - proxy& operator=(v) const; - }; - - proxy operator*() const; -}; - -struct proxy_iterator2 : boost::iterator -{ -#if BOOST_WORKAROUND(__GNUC__, == 2) - typedef boost::iterator base; - typedef base::iterator_category iterator_category; - typedef base::value_type value_type; - typedef base::difference_type difference_type; - typedef base::pointer pointer; - typedef base::reference reference; -#endif - - struct proxy - { - proxy& operator=(v) const; - }; - - proxy operator*() const; -}; - -BOOST_TT_BROKEN_COMPILER_SPEC(proxy_iterator::proxy) - -int main() -{ - BOOST_STATIC_ASSERT(boost::is_readable_iterator::value); - BOOST_STATIC_ASSERT(boost::is_readable_iterator::value); - BOOST_STATIC_ASSERT(boost::is_readable_iterator::iterator>::value); - BOOST_STATIC_ASSERT(boost::is_readable_iterator::const_iterator>::value); - BOOST_STATIC_ASSERT(!boost::is_readable_iterator > >::value); - BOOST_STATIC_ASSERT(!boost::is_readable_iterator >::value); - BOOST_STATIC_ASSERT(boost::is_readable_iterator::value); - BOOST_STATIC_ASSERT(!boost::is_readable_iterator::value); - BOOST_STATIC_ASSERT(boost::is_readable_iterator::value); - - // Make sure inaccessible copy constructor doesn't prevent - // readability - BOOST_STATIC_ASSERT(boost::is_readable_iterator::value); - - return 0; -} diff --git a/test/iter_archetype_default_ctor.cpp b/test/iter_archetype_default_ctor.cpp deleted file mode 100755 index 7936bdd..0000000 --- a/test/iter_archetype_default_ctor.cpp +++ /dev/null @@ -1,21 +0,0 @@ -// -// Copyright Thomas Witt 2004. -// Distributed under 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) -// -#include - - -int main() -{ - typedef boost::iterator_archetype< - int - , boost::iterator_archetypes::readable_iterator_t - , boost::single_pass_traversal_tag - > iter; - - // single_pass_traversal iterators are not required to be - // default constructible - iter it; -} diff --git a/test/iterator_adaptor_cc.cpp b/test/iterator_adaptor_cc.cpp deleted file mode 100644 index 599474c..0000000 --- a/test/iterator_adaptor_cc.cpp +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2004 Jeremy Siek -// Distributed under 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) - -#include -#include -#include -#include -#include - -int main() -{ - { - typedef boost::reverse_iterator rev_iter; - typedef boost::reverse_iterator c_rev_iter; - - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< boost_concepts::RandomAccessTraversalConcept >(); - boost::function_requires< boost::RandomAccessIteratorConcept >(); - boost::function_requires< boost_concepts::InteroperableIteratorConcept >(); - } - - // Many compilers' builtin container iterators don't interoperate well, though - // STLport fixes that problem. -#if defined(__SGI_STL_PORT) \ - || !BOOST_WORKAROUND(__GNUC__, <= 2) \ - && !(BOOST_WORKAROUND(__GNUC__, == 3) && BOOST_WORKAROUND(__GNUC_MINOR__, <= 1)) \ - && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) \ - && !BOOST_WORKAROUND(__LIBCOMO_VERSION__, BOOST_TESTED_AT(29)) \ - && !BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, <= 1) - { - typedef boost::reverse_iterator::iterator> rev_iter; - typedef boost::reverse_iterator::const_iterator> c_rev_iter; - - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - boost::function_requires< boost::BidirectionalIteratorConcept >(); - boost::function_requires< boost_concepts::InteroperableIteratorConcept >(); - } -#endif - - return boost::exit_success; -} diff --git a/test/iterator_adaptor_test.cpp b/test/iterator_adaptor_test.cpp deleted file mode 100644 index e339fe1..0000000 --- a/test/iterator_adaptor_test.cpp +++ /dev/null @@ -1,337 +0,0 @@ -// (C) Copyright Thomas Witt 2003. -// Distributed under 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) - -// See http://www.boost.org for most recent version including documentation. - -#include -#include - -#include -#include -#include - -#include -#if !BOOST_WORKAROUND(__MWERKS__, <= 0x2407) -# include -# include -#endif -#include - -# include - -# include - -#include -#include -#include -#include -#include - -#include "static_assert_same.hpp" - -#include - -using boost::dummyT; - -struct mult_functor { - typedef int result_type; - typedef int argument_type; - // Functors used with transform_iterator must be - // DefaultConstructible, as the transform_iterator must be - // DefaultConstructible to satisfy the requirements for - // TrivialIterator. - mult_functor() { } - mult_functor(int aa) : a(aa) { } - int operator()(int b) const { return a * b; } - int a; -}; - -template -struct select1st_ - : public std::unary_function -{ - const typename Pair::first_type& operator()(const Pair& x) const { - return x.first; - } - typename Pair::first_type& operator()(Pair& x) const { - return x.first; - } -}; - -struct one_or_four { - bool operator()(dummyT x) const { - return x.foo() == 1 || x.foo() == 4; - } -}; - -typedef std::deque storage; -typedef std::deque pointer_deque; -typedef std::set iterator_set; - -template struct foo; - -void blah(int) { } - -struct my_gen -{ - typedef int result_type; - my_gen() : n(0) { } - int operator()() { return ++n; } - int n; -}; - -template -struct ptr_iterator - : boost::iterator_adaptor< - ptr_iterator - , V* - , V - , boost::random_access_traversal_tag -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) - , V& -#endif - > -{ -private: - typedef boost::iterator_adaptor< - ptr_iterator - , V* - , V - , boost::random_access_traversal_tag -#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) - , V& -#endif - > super_t; - -public: - ptr_iterator() { } - ptr_iterator(V* d) : super_t(d) { } - - template - ptr_iterator( - const ptr_iterator& x - , typename boost::enable_if_convertible::type* = 0 - ) - : super_t(x.base()) - {} -}; - -// Non-functional iterator for category modification checking -template -struct modify_traversal - : boost::iterator_adaptor< - modify_traversal - , Iter - , boost::use_default - , Traversal - > -{}; - -template -struct fwd_iterator - : boost::iterator_adaptor< - fwd_iterator - , boost::forward_iterator_archetype - > -{ -private: - typedef boost::iterator_adaptor< - fwd_iterator - , boost::forward_iterator_archetype - > super_t; - -public: - fwd_iterator() { } - fwd_iterator(boost::forward_iterator_archetype d) : super_t(d) { } -}; - -template -struct in_iterator - : boost::iterator_adaptor< - in_iterator - , boost::input_iterator_archetype_no_proxy - > -{ -private: - typedef boost::iterator_adaptor< - in_iterator - , boost::input_iterator_archetype_no_proxy - > super_t; - -public: - in_iterator() { } - in_iterator(boost::input_iterator_archetype_no_proxy d) : super_t(d) { } -}; - -template -struct constant_iterator - : boost::iterator_adaptor< - constant_iterator - , Iter - , typename std::iterator_traits::value_type const - > -{ - typedef boost::iterator_adaptor< - constant_iterator - , Iter - , typename std::iterator_traits::value_type const - > base_t; - - constant_iterator() {} - constant_iterator(Iter it) - : base_t(it) {} -}; - -char (& traversal2(boost::incrementable_traversal_tag) )[1]; -char (& traversal2(boost::single_pass_traversal_tag ) )[2]; -char (& traversal2(boost::forward_traversal_tag ) )[3]; -char (& traversal2(boost::bidirectional_traversal_tag) )[4]; -char (& traversal2(boost::random_access_traversal_tag) )[5]; - -template -struct traversal3 -{ - static typename boost::iterator_category_to_traversal::type x; - BOOST_STATIC_CONSTANT(std::size_t, value = sizeof(traversal2(x))); - typedef char (&type)[value]; -}; - -template -typename traversal3::type traversal(Cat); - -template -int static_assert_traversal(Iter* = 0, Trav* = 0) -{ - typedef typename boost::iterator_category_to_traversal< - BOOST_DEDUCED_TYPENAME Iter::iterator_category - >::type t2; - - return static_assert_same::value; -} - -int -main() -{ - dummyT array[] = { dummyT(0), dummyT(1), dummyT(2), - dummyT(3), dummyT(4), dummyT(5) }; - const int N = sizeof(array)/sizeof(dummyT); - - // sanity check, if this doesn't pass the test is buggy - boost::random_access_iterator_test(array, N, array); - - // Test the iterator_adaptor - { - ptr_iterator i(array); - boost::random_access_iterator_test(i, N, array); - - ptr_iterator j(array); - boost::random_access_iterator_test(j, N, array); - boost::const_nonconst_iterator_test(i, ++j); - } - - int test; - // Test the iterator_traits - { - // Test computation of defaults - typedef ptr_iterator Iter1; - // don't use std::iterator_traits here to avoid VC++ problems - test = static_assert_same::value; - test = static_assert_same::value; - test = static_assert_same::value; - test = static_assert_same::value; -#if !BOOST_WORKAROUND(__MWERKS__, <= 0x2407) - BOOST_STATIC_ASSERT((boost::is_convertible::value)); -#endif - } - - { - // Test computation of default when the Value is const - typedef ptr_iterator Iter1; - test = static_assert_same::value; - test = static_assert_same::value; - -#if !BOOST_WORKAROUND(__MWERKS__, <= 0x2407) - BOOST_STATIC_ASSERT(boost::is_readable_iterator::value); -# ifndef BOOST_NO_LVALUE_RETURN_DETECTION - BOOST_STATIC_ASSERT(boost::is_lvalue_iterator::value); -# endif -#endif - -#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) // borland drops constness - test = static_assert_same::value; -#endif - } - - { - // Test constant iterator idiom - typedef ptr_iterator BaseIter; - typedef constant_iterator Iter; - - test = static_assert_same::value; - test = static_assert_same::value; -#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) // borland drops constness - test = static_assert_same::value; -#endif - -#ifndef BOOST_NO_LVALUE_RETURN_DETECTION - BOOST_STATIC_ASSERT(boost::is_non_const_lvalue_iterator::value); - BOOST_STATIC_ASSERT(boost::is_lvalue_iterator::value); -#endif - - typedef modify_traversal IncrementableIter; - - static_assert_traversal(); - static_assert_traversal(); - } - - // Test the iterator_adaptor - { - ptr_iterator i(array); - boost::random_access_iterator_test(i, N, array); - - ptr_iterator j(array); - boost::random_access_iterator_test(j, N, array); - boost::const_nonconst_iterator_test(i, ++j); - } - - // check operator-> with a forward iterator - { - boost::forward_iterator_archetype forward_iter; - - typedef fwd_iterator adaptor_type; - - adaptor_type i(forward_iter); - int zero = 0; - if (zero) // don't do this, just make sure it compiles - BOOST_TEST((*i).m_x == i->foo()); - } - - // check operator-> with an input iterator - { - boost::input_iterator_archetype_no_proxy input_iter; - typedef in_iterator adaptor_type; - adaptor_type i(input_iter); - int zero = 0; - if (zero) // don't do this, just make sure it compiles - BOOST_TEST((*i).m_x == i->foo()); - } - - // check that base_type is correct - { - // Test constant iterator idiom - typedef ptr_iterator BaseIter; - - test = static_assert_same::value; - test = static_assert_same::base_type,BaseIter>::value; - - typedef modify_traversal IncrementableIter; - - test = static_assert_same::value; - } - - std::cout << "test successful " << std::endl; - (void)test; - return boost::report_errors(); -} diff --git a/test/iterator_archetype_cc.cpp b/test/iterator_archetype_cc.cpp deleted file mode 100644 index 580a32c..0000000 --- a/test/iterator_archetype_cc.cpp +++ /dev/null @@ -1,61 +0,0 @@ -// -// Copyright Thomas Witt 2003. -// Distributed under 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) -// -#include -#include -#include -#include -#include - -int main() -{ - { - typedef boost::iterator_archetype< - int - , boost::iterator_archetypes::readable_iterator_t - , boost::random_access_traversal_tag - > iter; - - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::RandomAccessTraversalConcept >(); - } - { - typedef boost::iterator_archetype< - int - , boost::iterator_archetypes::readable_writable_iterator_t - , boost::random_access_traversal_tag - > iter; - - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::RandomAccessTraversalConcept >(); - } - { - typedef boost::iterator_archetype< - const int // I don't like adding const to Value. It is redundant. -JGS - , boost::iterator_archetypes::readable_lvalue_iterator_t - , boost::random_access_traversal_tag - > iter; - - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< boost_concepts::RandomAccessTraversalConcept >(); - } - { - typedef boost::iterator_archetype< - int - , boost::iterator_archetypes::writable_lvalue_iterator_t - , boost::random_access_traversal_tag - > iter; - - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< boost_concepts::RandomAccessTraversalConcept >(); - } - - return boost::exit_success; -} - diff --git a/test/iterator_facade.cpp b/test/iterator_facade.cpp deleted file mode 100755 index ed3057e..0000000 --- a/test/iterator_facade.cpp +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright David Abrahams 2004. Distributed under 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) - -// This is really an incomplete test; should be fleshed out. - -#include -#include - -// This is a really, really limited test so far. All we're doing -// right now is checking that the postfix++ proxy for single-pass -// iterators works properly. -template -class counter_iterator - : public boost::iterator_facade< - counter_iterator - , int const - , boost::single_pass_traversal_tag - , Ref - > -{ - public: - counter_iterator() {} - counter_iterator(int* state) : state(state) {} - - void increment() - { - ++*state; - } - - Ref - dereference() const - { - return *state; - } - - bool equal(counter_iterator const& y) const - { - return *this->state == *y.state; - } - - int* state; -}; - -struct proxy -{ - proxy(int& x) : state(x) {} - - operator int const&() const - { - return state; - } - - int& operator=(int x) { state = x; return state; } - - int& state; -}; - -struct value -{ - void mutator() {} // non-const member function -}; - -struct input_iter - : boost::iterator_facade< - input_iter - , value - , boost::single_pass_traversal_tag - , value - > -{ - public: - input_iter() {} - - void increment() - { - } - value - dereference() const - { - return value(); - } - - bool equal(input_iter const& y) const - { - return false; - } -}; - -int main() -{ - int state = 0; - boost::readable_iterator_test(counter_iterator(&state), 0); - state = 3; - boost::readable_iterator_test(counter_iterator(&state), 3); - boost::writable_iterator_test(counter_iterator(&state), 9, 7); - BOOST_TEST(state == 8); - - // test for a fix to http://tinyurl.com/zuohe - // These two lines should be equivalent (and both compile) - input_iter p; - (*p).mutator(); - p->mutator(); - - return boost::report_errors(); -} diff --git a/test/iterator_traits_test.cpp b/test/iterator_traits_test.cpp deleted file mode 100644 index 3131d44..0000000 --- a/test/iterator_traits_test.cpp +++ /dev/null @@ -1,218 +0,0 @@ -// (C) Copyright David Abrahams 2002. -// Distributed under 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) - -// See http://www.boost.org for most recent version including documentation. - -// Revision History -// 04 Mar 2001 Patches for Intel C++ (Dave Abrahams) -// 19 Feb 2001 Take advantage of improved iterator_traits to do more tests -// on MSVC. Reordered some #ifdefs for coherency. -// (David Abrahams) -// 13 Feb 2001 Test new VC6 workarounds (David Abrahams) -// 11 Feb 2001 Final fixes for Borland (David Abrahams) -// 11 Feb 2001 Some fixes for Borland get it closer on that compiler -// (David Abrahams) -// 07 Feb 2001 More comprehensive testing; factored out static tests for -// better reuse (David Abrahams) -// 21 Jan 2001 Quick fix to my_iterator, which wasn't returning a -// reference type from operator* (David Abrahams) -// 19 Jan 2001 Initial version with iterator operators (David Abrahams) - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// A UDT for which we can specialize std::iterator_traits on -// compilers which don't support partial specialization. There's no -// other reasonable way to test pointers on those compilers. -struct element {}; - -// An iterator for which we can get traits. -struct my_iterator1 - : boost::forward_iterator_helper -{ - my_iterator1(const char* p) : m_p(p) {} - - bool operator==(const my_iterator1& rhs) const - { return this->m_p == rhs.m_p; } - - my_iterator1& operator++() { ++this->m_p; return *this; } - const char& operator*() { return *m_p; } - private: - const char* m_p; -}; - -// Used to prove that we don't require std::iterator<> in the hierarchy under -// MSVC6, and that we can compute all the traits for a standard-conforming UDT -// iterator. -struct my_iterator2 - : boost::equality_comparable > > -{ - typedef char value_type; - typedef long difference_type; - typedef const char* pointer; - typedef const char& reference; - typedef std::forward_iterator_tag iterator_category; - - my_iterator2(const char* p) : m_p(p) {} - - bool operator==(const my_iterator2& rhs) const - { return this->m_p == rhs.m_p; } - - my_iterator2& operator++() { ++this->m_p; return *this; } - const char& operator*() { return *m_p; } - private: - const char* m_p; -}; - -// Used to prove that we're not overly confused by the existence of -// std::iterator<> in the hierarchy under MSVC6 - we should find that -// boost::detail::iterator_traits::difference_type is int. -struct my_iterator3 : my_iterator1 -{ - typedef int difference_type; - my_iterator3(const char* p) - : my_iterator1(p) {} -}; - -// -// Assertion tools. Used instead of BOOST_STATIC_ASSERT because that -// doesn't give us a nice stack backtrace -// -template struct assertion; - -template <> struct assertion -{ - typedef char type; -}; - -template -struct assert_same - : assertion<(::boost::is_same::value)> -{ -}; - - -// Iterator tests -template -struct non_portable_tests -{ - typedef typename boost::detail::iterator_traits::pointer test_pt; - typedef typename boost::detail::iterator_traits::reference test_rt; - typedef typename assert_same::type a1; - typedef typename assert_same::type a2; -}; - -template -struct portable_tests -{ - typedef typename boost::detail::iterator_traits::difference_type test_dt; - typedef typename boost::detail::iterator_traits::iterator_category test_cat; - typedef typename assert_same::type a1; - typedef typename assert_same::type a2; -}; - -// Test iterator_traits -template -struct input_iterator_test - : portable_tests -{ - typedef typename boost::detail::iterator_traits::value_type test_vt; - typedef typename assert_same::type a1; -}; - -template -struct non_pointer_test - : input_iterator_test - , non_portable_tests -{ -}; - -template -struct maybe_pointer_test - : portable_tests - , non_portable_tests -{ -}; - -input_iterator_test, int, std::ptrdiff_t, int*, int&, std::input_iterator_tag> - istream_iterator_test; - -#if BOOST_WORKAROUND(__BORLANDC__, <= 0x564) && !defined(__SGI_STL_PORT) -typedef ::std::char_traits::off_type distance; -non_pointer_test,int, - distance,int*,int&,std::output_iterator_tag> ostream_iterator_test; -#elif defined(BOOST_MSVC_STD_ITERATOR) -non_pointer_test, - int, void, int*, int&, std::output_iterator_tag> - ostream_iterator_test; -#elif BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(70190006)) -non_pointer_test, - int, long, int*, int&, std::output_iterator_tag> - ostream_iterator_test; -#else -non_pointer_test, - void, void, void, void, std::output_iterator_tag> - ostream_iterator_test; -#endif - - -#ifdef __KCC - typedef long std_list_diff_type; -#else - typedef std::ptrdiff_t std_list_diff_type; -#endif - -non_pointer_test::iterator, int, std_list_diff_type, int*, int&, std::bidirectional_iterator_tag> - list_iterator_test; - -maybe_pointer_test::iterator, int, std::ptrdiff_t, int*, int&, std::random_access_iterator_tag> - vector_iterator_test; - -maybe_pointer_test - int_pointer_test; - -non_pointer_test - my_iterator1_test; - -non_pointer_test - my_iterator2_test; - -non_pointer_test - my_iterator3_test; - -int main() -{ - char chars[100]; - int ints[100]; - - for (int length = 3; length < 100; length += length / 3) - { - std::list l(length); - BOOST_TEST(boost::detail::distance(l.begin(), l.end()) == length); - - std::vector v(length); - BOOST_TEST(boost::detail::distance(v.begin(), v.end()) == length); - - BOOST_TEST(boost::detail::distance(&ints[0], ints + length) == length); - BOOST_TEST(boost::detail::distance(my_iterator1(chars), my_iterator1(chars + length)) == length); - BOOST_TEST(boost::detail::distance(my_iterator2(chars), my_iterator2(chars + length)) == length); - BOOST_TEST(boost::detail::distance(my_iterator3(chars), my_iterator3(chars + length)) == length); - } - return boost::report_errors(); -} diff --git a/test/lvalue_concept_fail.cpp b/test/lvalue_concept_fail.cpp deleted file mode 100644 index 735bb4a..0000000 --- a/test/lvalue_concept_fail.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) 2004 Jeremy Siek -// Distributed under 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) - -#include -#include -#include - -int main() -{ - typedef boost::iterator_archetype< - int - , boost::iterator_archetypes::readable_iterator_t - , boost::single_pass_traversal_tag - > Iter; - boost::function_requires< - boost_concepts::LvalueIteratorConcept >(); - return boost::exit_success; -} diff --git a/test/permutation_iterator_test.cpp b/test/permutation_iterator_test.cpp deleted file mode 100644 index a62526d..0000000 --- a/test/permutation_iterator_test.cpp +++ /dev/null @@ -1,103 +0,0 @@ -// (C) Copyright Toon Knapen 2001. -// (C) Copyright Roland Richter 2003. -// Distributed under 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) - -#include -#include - -#include -#include -#include -#include - -#include -#include - -#include - - -// This test checks for convertibility/interoperability among similar -// permutation iterators. We're not using container iterators -// underneath, as in permutation_test, because of bugs in GCC-3.3's -// __normal_iterator that make is_convertible choke when testing -// convertibility. -void iterop_test() -{ - typedef boost::permutation_iterator< double*, int const* > permutation_type; - typedef boost::permutation_iterator< double const*, int const* > permutation_const_type; - - boost::function_requires< - boost_concepts::InteroperableIteratorConcept< - permutation_type - , permutation_const_type - > >(); -} - -void permutation_test() -{ - // Example taken from documentation of old permutation_iterator. - typedef std::vector< double > element_range_type; - typedef std::list< int > index_type; - - const int element_range_size = 10; - const int index_size = 7; - - BOOST_STATIC_ASSERT(index_size <= element_range_size); - element_range_type elements( element_range_size ); - for( element_range_type::iterator el_it = elements.begin(); el_it != elements.end(); ++el_it ) - { *el_it = std::distance(elements.begin(), el_it); } - - index_type indices( index_size ); - for( index_type::iterator i_it = indices.begin(); i_it != indices.end(); ++i_it ) - { *i_it = element_range_size - index_size + std::distance(indices.begin(), i_it); } - std::reverse( indices.begin(), indices.end() ); - - typedef boost::permutation_iterator< element_range_type::iterator, index_type::iterator > permutation_type; - permutation_type begin = boost::make_permutation_iterator( elements.begin(), indices.begin() ); - permutation_type it = begin; - permutation_type end = boost::make_permutation_iterator( elements.begin(), indices.end() ); - - BOOST_CHECK( it == begin ); - BOOST_CHECK( it != end ); - - BOOST_CHECK( std::distance( begin, end ) == index_size ); - - for( index_type::iterator i_it1 = indices.begin(); it != end; ++i_it1, ++it ) - { - BOOST_CHECK( *it == elements[ *i_it1 ] ); - } - - it = begin; - for( int i1 = 0; i1 < index_size - 1 ; ++++i1, ++++it ) - { - index_type::iterator i_it2 = indices.begin(); - std::advance( i_it2, i1 ); - BOOST_CHECK( *it == elements[ *i_it2 ] ); - } - - it = begin; - std::advance(it, index_size); - for( index_type::iterator i_it3 = indices.end(); it != begin; ) - { - BOOST_CHECK( *--it == elements[ *--i_it3 ] ); - } - - it = begin; - std::advance(it, index_size); - for( int i2 = 0; i2 < index_size - 1; i2+=2, --it ) - { - index_type::iterator i_it4 = --indices.end(); - std::advance( i_it4, -i2 ); - BOOST_CHECK( *--it == elements[ *i_it4 ] ); - } - -} - - -int test_main(int, char *[]) -{ - permutation_test(); - return 0; -} diff --git a/test/pointee.cpp b/test/pointee.cpp deleted file mode 100755 index b39fce1..0000000 --- a/test/pointee.cpp +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright David Abrahams 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) - -#include -#include -#include "static_assert_same.hpp" -#include -#include - -template -struct proxy_ptr -{ - typedef T element_type; - struct proxy - { - operator Ref() const; - }; - proxy operator*() const; -}; - -template -struct proxy_ref_ptr : proxy_ptr -{ -}; - -template -struct proxy_value_ptr : proxy_ptr -{ - typedef typename boost::add_const::type element_type; -}; - -struct X { - template X(T const&); - template operator T&() const; -}; - -BOOST_TT_BROKEN_COMPILER_SPEC(X) - -int main() -{ - STATIC_ASSERT_SAME(boost::pointee >::type, int); - STATIC_ASSERT_SAME(boost::pointee >::type, X); - - STATIC_ASSERT_SAME(boost::pointee >::type, int const); - STATIC_ASSERT_SAME(boost::pointee >::type, X const); - - STATIC_ASSERT_SAME(boost::pointee >::type, int const); - STATIC_ASSERT_SAME(boost::pointee >::type, X const); - - STATIC_ASSERT_SAME(boost::pointee >::type, int const); - STATIC_ASSERT_SAME(boost::pointee >::type, X const); - - STATIC_ASSERT_SAME(boost::pointee::type, int); - STATIC_ASSERT_SAME(boost::pointee::type, int const); - - STATIC_ASSERT_SAME(boost::pointee::type, X); - STATIC_ASSERT_SAME(boost::pointee::type, X const); - - STATIC_ASSERT_SAME(boost::pointee >::type, int); - STATIC_ASSERT_SAME(boost::pointee >::type, X); - - STATIC_ASSERT_SAME(boost::pointee >::type, int const); - STATIC_ASSERT_SAME(boost::pointee >::type, X const); - - STATIC_ASSERT_SAME(boost::pointee::iterator >::type, int); - STATIC_ASSERT_SAME(boost::pointee::iterator >::type, X); - - STATIC_ASSERT_SAME(boost::pointee::const_iterator >::type, int const); - STATIC_ASSERT_SAME(boost::pointee::const_iterator >::type, X const); - return 0; -} diff --git a/test/reverse_iterator_test.cpp b/test/reverse_iterator_test.cpp deleted file mode 100644 index 828bdfe..0000000 --- a/test/reverse_iterator_test.cpp +++ /dev/null @@ -1,174 +0,0 @@ -// Copyright Thomas Witt 2003, Jeremy Siek 2004. - -// Distributed under 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) - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using boost::dummyT; - -// Test reverse iterator -int main() -{ - dummyT array[] = { dummyT(0), dummyT(1), dummyT(2), - dummyT(3), dummyT(4), dummyT(5) }; - const int N = sizeof(array)/sizeof(dummyT); - - // Concept checks - // Adapting old-style iterators - { - typedef boost::reverse_iterator > Iter; - boost::function_requires< boost::BidirectionalIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } - { - typedef boost::reverse_iterator > Iter; - boost::function_requires< boost::Mutable_BidirectionalIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } - // Adapting new-style iterators - { - typedef boost::iterator_archetype< - const dummyT - , boost::iterator_archetypes::readable_iterator_t - , boost::bidirectional_traversal_tag - > iter; - typedef boost::reverse_iterator Iter; - boost::function_requires< boost::InputIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } -#if 0 - // It does not seem feasible to make this work. Need to change docs to - // require at lease Readable for the base iterator. -Jeremy - { - typedef boost::iterator_archetype< - dummyT - , boost::iterator_archetypes::writable_iterator_t - , boost::bidirectional_traversal_tag - > iter; - typedef boost::reverse_iterator Iter; - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } -#endif -#if !BOOST_WORKAROUND(BOOST_MSVC, == 1200) // Causes Internal Error in linker. - { - typedef boost::iterator_archetype< - dummyT - , boost::iterator_archetypes::readable_writable_iterator_t - , boost::bidirectional_traversal_tag - > iter; - typedef boost::reverse_iterator Iter; - boost::function_requires< boost::InputIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } - { - typedef boost::iterator_archetype< - const dummyT - , boost::iterator_archetypes::readable_lvalue_iterator_t - , boost::bidirectional_traversal_tag - > iter; - typedef boost::reverse_iterator Iter; - boost::function_requires< boost::BidirectionalIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } - { - typedef boost::iterator_archetype< - dummyT - , boost::iterator_archetypes::writable_lvalue_iterator_t - , boost::bidirectional_traversal_tag - > iter; - typedef boost::reverse_iterator Iter; - boost::function_requires< boost::BidirectionalIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } -#endif - - // Test reverse_iterator - { - dummyT reversed[N]; - std::copy(array, array + N, reversed); - std::reverse(reversed, reversed + N); - - typedef boost::reverse_iterator reverse_iterator; - - reverse_iterator i(reversed + N); - boost::random_access_iterator_test(i, N, array); - - boost::random_access_iterator_test(boost::make_reverse_iterator(reversed + N), N, array); - - typedef boost::reverse_iterator const_reverse_iterator; - - const_reverse_iterator j(reversed + N); - boost::random_access_iterator_test(j, N, array); - - const dummyT* const_reversed = reversed; - - boost::random_access_iterator_test(boost::make_reverse_iterator(const_reversed + N), N, array); - - boost::const_nonconst_iterator_test(i, ++j); - } - - // Test reverse_iterator again, with traits fully deducible on all platforms - { - std::deque reversed_container; - std::reverse_copy(array, array + N, std::back_inserter(reversed_container)); - const std::deque::iterator reversed = reversed_container.begin(); - - - typedef boost::reverse_iterator< - std::deque::iterator> reverse_iterator; - typedef boost::reverse_iterator< - std::deque::const_iterator> const_reverse_iterator; - - // MSVC/STLport gives an INTERNAL COMPILER ERROR when any computation - // (e.g. "reversed + N") is used in the constructor below. - const std::deque::iterator finish = reversed_container.end(); - reverse_iterator i(finish); - - boost::random_access_iterator_test(i, N, array); - boost::random_access_iterator_test(boost::make_reverse_iterator(reversed + N), N, array); - - const_reverse_iterator j = reverse_iterator(finish); - boost::random_access_iterator_test(j, N, array); - - const std::deque::const_iterator const_reversed = reversed; - boost::random_access_iterator_test(boost::make_reverse_iterator(const_reversed + N), N, array); - - // Many compilers' builtin deque iterators don't interoperate well, though - // STLport fixes that problem. -#if defined(__SGI_STL_PORT) \ - || !BOOST_WORKAROUND(__GNUC__, <= 2) \ - && !(BOOST_WORKAROUND(__GNUC__, == 3) && BOOST_WORKAROUND(__GNUC_MINOR__, <= 1)) \ - && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) \ - && !BOOST_WORKAROUND(__LIBCOMO_VERSION__, BOOST_TESTED_AT(29)) \ - && !BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, <= 1) - - boost::const_nonconst_iterator_test(i, ++j); - -#endif - } - - return boost::report_errors(); -} diff --git a/test/static_assert_same.hpp b/test/static_assert_same.hpp deleted file mode 100644 index 6df0506..0000000 --- a/test/static_assert_same.hpp +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright David Abrahams 2003. -// Distributed under 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) -#ifndef STATIC_ASSERT_SAME_DWA2003530_HPP -# define STATIC_ASSERT_SAME_DWA2003530_HPP - -#include -# include - -#define STATIC_ASSERT_SAME( T1,T2 ) BOOST_MPL_ASSERT((::boost::is_same< T1, T2 >)) - -template -struct static_assert_same -{ - BOOST_MPL_ASSERT((::boost::is_same< T1, T2 >)); - enum { value = 1 }; -}; - -#endif // STATIC_ASSERT_SAME_DWA2003530_HPP diff --git a/test/transform_iterator_test.cpp b/test/transform_iterator_test.cpp deleted file mode 100644 index bf08dd2..0000000 --- a/test/transform_iterator_test.cpp +++ /dev/null @@ -1,248 +0,0 @@ -// (C) Copyright Jeremy Siek 2002. -// Distributed under 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) - -// Revision History -// 22 Nov 2002 Thomas Witt -// Added interoperability check. -// 28 Oct 2002 Jeremy Siek -// Updated for new iterator adaptors. -// 08 Mar 2001 Jeremy Siek -// Moved test of transform iterator into its own file. It to -// to be in iterator_adaptor_test.cpp. - -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION -namespace boost { namespace detail -{ - template<> struct function_object_result - { - typedef int type; - }; -}} -#endif - -struct mult_functor { - // Functors used with transform_iterator must be - // DefaultConstructible, as the transform_iterator must be - // DefaultConstructible to satisfy the requirements for - // TrivialIterator. - mult_functor() { } - mult_functor(int aa) : a(aa) { } - int operator()(int b) const { return a * b; } - int a; -}; - -struct adaptable_mult_functor - : mult_functor -{ - typedef int result_type; - typedef int argument_type; - // Functors used with transform_iterator must be - // DefaultConstructible, as the transform_iterator must be - // DefaultConstructible to satisfy the requirements for - // TrivialIterator. - adaptable_mult_functor() { } - adaptable_mult_functor(int aa) : mult_functor(aa) { } -}; - - -struct const_select_first -{ - typedef int const& result_type; - - int const& operator()(std::pairconst& p) const - { - return p.first; - } -}; - -struct select_first - : const_select_first // derivation to allow conversions -{ - typedef int& result_type; - - int& operator()(std::pair& p) const - { - return p.first; - } -}; - -struct select_second -{ - typedef int& result_type; - - int& operator()(std::pair& p) const - { - return p.second; - } -}; - -struct value_select_first -{ - typedef int result_type; - - int operator()(std::pairconst& p) const - { - return p.first; - } -}; - -int mult_2(int arg) -{ - return arg*2; -} - - -int -main() -{ - const int N = 10; - - // Concept checks - { - typedef boost::transform_iterator iter_t; - typedef boost::transform_iterator c_iter_t; - - boost::function_requires< boost_concepts::InteroperableIteratorConcept >(); - } - - // Test transform_iterator - { - int x[N], y[N]; - for (int k = 0; k < N; ++k) - x[k] = k; - std::copy(x, x + N, y); - - for (int k2 = 0; k2 < N; ++k2) - x[k2] = x[k2] * 2; - - typedef boost::transform_iterator iter_t; - iter_t i(y, adaptable_mult_functor(2)); - boost::input_iterator_test(i, x[0], x[1]); - boost::input_iterator_test(iter_t(&y[0], adaptable_mult_functor(2)), x[0], x[1]); - - boost::random_access_readable_iterator_test(i, N, x); - } - - // Test transform_iterator non adaptable functor - { - int x[N], y[N]; - for (int k = 0; k < N; ++k) - x[k] = k; - std::copy(x, x + N, y); - - for (int k2 = 0; k2 < N; ++k2) - x[k2] = x[k2] * 2; - - typedef boost::transform_iterator iter_t; - iter_t i(y, mult_functor(2)); - boost::input_iterator_test(i, x[0], x[1]); - boost::input_iterator_test(iter_t(&y[0], mult_functor(2)), x[0], x[1]); - - boost::random_access_readable_iterator_test(i, N, x); - } - - // Test transform_iterator default argument handling - { - { - typedef boost::transform_iterator iter_t; - BOOST_STATIC_ASSERT((boost::is_same::value)); - BOOST_STATIC_ASSERT((boost::is_same::value)); - } - - { - typedef boost::transform_iterator iter_t; - BOOST_STATIC_ASSERT((boost::is_same::value)); - BOOST_STATIC_ASSERT((boost::is_same::value)); - } - - { - typedef boost::transform_iterator iter_t; - BOOST_STATIC_ASSERT((boost::is_same::value)); - BOOST_STATIC_ASSERT((boost::is_same::value)); - } - } - - // Test transform_iterator with function pointers - { - int x[N], y[N]; - for (int k = 0; k < N; ++k) - x[k] = k; - std::copy(x, x + N, y); - - for (int k2 = 0; k2 < N; ++k2) - x[k2] = x[k2] * 2; - - boost::input_iterator_test( - boost::make_transform_iterator(y, mult_2), x[0], x[1]); - - boost::input_iterator_test( - boost::make_transform_iterator(&y[0], mult_2), x[0], x[1]); - - boost::random_access_readable_iterator_test( - boost::make_transform_iterator(y, mult_2), N, x); - - } - - // Test transform_iterator as projection iterator - { - typedef std::pair pair_t; - - int x[N]; - int y[N]; - pair_t values[N]; - - for(int i = 0; i < N; ++i) { - - x[i] = i; - y[i] = N - (i + 1); - - } - - std::copy( - x - , x + N - , boost::make_transform_iterator((pair_t*)values, select_first()) - ); - - std::copy( - y - , y + N - , boost::make_transform_iterator((pair_t*)values, select_second()) - ); - - boost::random_access_readable_iterator_test( - boost::make_transform_iterator((pair_t*)values, value_select_first()) - , N - , x - ); - - boost::random_access_readable_iterator_test( - boost::make_transform_iterator((pair_t*)values, const_select_first()) - , N, x - ); - - boost::constant_lvalue_iterator_test( - boost::make_transform_iterator((pair_t*)values, const_select_first()), x[0]); - - boost::non_const_lvalue_iterator_test( - boost::make_transform_iterator((pair_t*)values, select_first()), x[0], 17); - - boost::const_nonconst_iterator_test( - ++boost::make_transform_iterator((pair_t*)values, select_first()) - , boost::make_transform_iterator((pair_t*)values, const_select_first()) - ); - } - - return boost::report_errors(); -} diff --git a/test/unit_tests.cpp b/test/unit_tests.cpp deleted file mode 100644 index 2434310..0000000 --- a/test/unit_tests.cpp +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright David Abrahams 2003. -// Distributed under 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) -#include -#include - -#include "static_assert_same.hpp" - -#include - -#include - -struct X { int a; }; - -BOOST_TT_BROKEN_COMPILER_SPEC(X) - -struct Xiter : boost::iterator_adaptor -{ - Xiter(); - Xiter(X* p) : boost::iterator_adaptor(p) {} -}; - -void take_xptr(X*) {} -void operator_arrow_test() -{ - // check that the operator-> result is a pointer for lvalue iterators - X x; - take_xptr(Xiter(&x).operator->()); -} - -template -struct static_assert_min_cat - : static_assert_same< - typename boost::detail::minimum_category::type, Min - > -{}; - -void category_test() -{ - using namespace boost; - using namespace boost::detail; - - BOOST_STATIC_ASSERT(( - !boost::is_convertible< - std::input_iterator_tag - , input_output_iterator_tag>::value)); - - BOOST_STATIC_ASSERT(( - !boost::is_convertible< - std::output_iterator_tag - , input_output_iterator_tag>::value)); - - BOOST_STATIC_ASSERT(( - boost::is_convertible< - input_output_iterator_tag - , std::input_iterator_tag>::value)); - - BOOST_STATIC_ASSERT(( - boost::is_convertible< - input_output_iterator_tag - , std::output_iterator_tag>::value)); - -#if 0 // This seems wrong; we're not advertising - // input_output_iterator_tag are we? - BOOST_STATIC_ASSERT(( - boost::is_convertible< - std::forward_iterator_tag - , input_output_iterator_tag>::value)); -#endif - - int test = static_assert_min_cat< - std::input_iterator_tag,input_output_iterator_tag, std::input_iterator_tag - >::value; - - test = static_assert_min_cat< - input_output_iterator_tag,std::input_iterator_tag, std::input_iterator_tag - >::value; - -#if 0 - test = static_assert_min_cat< - input_output_iterator_tag,std::forward_iterator_tag, input_output_iterator_tag - >::value; -#endif - - test = static_assert_min_cat< - std::input_iterator_tag,std::forward_iterator_tag, std::input_iterator_tag - >::value; - - test = static_assert_min_cat< - std::input_iterator_tag,std::random_access_iterator_tag, std::input_iterator_tag - >::value; - -#if 0 // This would be wrong: a random access iterator is not - // neccessarily writable, as is an output iterator. - test = static_assert_min_cat< - std::output_iterator_tag,std::random_access_iterator_tag, std::output_iterator_tag - >::value; -#endif - - (void)test; -} - -int main() -{ - category_test(); - operator_arrow_test(); - return 0; -} - diff --git a/test/zip_iterator_test.cpp b/test/zip_iterator_test.cpp deleted file mode 100755 index c6692d2..0000000 --- a/test/zip_iterator_test.cpp +++ /dev/null @@ -1,833 +0,0 @@ -// (C) Copyright Dave Abrahams and Thomas Becker 2003. Distributed -// under 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) -// - -// File: -// ===== -// zip_iterator_test_main.cpp - -// Author: -// ======= -// Thomas Becker - -// Created: -// ======== -// Jul 15, 2003 - -// Purpose: -// ======== -// Test driver for zip_iterator.hpp - -// Compilers Tested: -// ================= -// Metrowerks Codewarrior Pro 7.2, 8.3 -// gcc 2.95.3 -// gcc 3.2 -// Microsoft VC 6sp5 (test fails due to some compiler bug) -// Microsoft VC 7 (works) -// Microsoft VC 7.1 -// Intel 5 -// Intel 6 -// Intel 7.1 -// Intel 8 -// Borland 5.5.1 (broken due to lack of support from Boost.Tuples) - -///////////////////////////////////////////////////////////////////////////// -// -// Includes -// -///////////////////////////////////////////////////////////////////////////// - -#include -#include // 2nd #include tests #include guard. -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -template -struct pure_traversal - : boost::detail::pure_traversal_tag< - typename boost::iterator_traversal::type - > -{}; - -///////////////////////////////////////////////////////////////////////////// -// -// Das Main Funktion -// -///////////////////////////////////////////////////////////////////////////// - -int main( void ) -{ - - std::cout << "\n" - << "***********************************************\n" - << "* *\n" - << "* Test driver for boost::zip_iterator *\n" - << "* Copyright Thomas Becker 2003 *\n" - << "* *\n" - << "***********************************************\n\n" - << std::flush; - - size_t num_successful_tests = 0; - size_t num_failed_tests = 0; - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator construction and dereferencing - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator construction and dereferencing: " - << std::flush; - - std::vector vect1(3); - vect1[0] = 42.; - vect1[1] = 43.; - vect1[2] = 44.; - - std::set intset; - intset.insert(52); - intset.insert(53); - intset.insert(54); - // - - typedef - boost::zip_iterator< - boost::tuples::tuple< - std::set::iterator - , std::vector::iterator - > - > zit_mixed; - - zit_mixed zip_it_mixed = zit_mixed( - boost::make_tuple( - intset.begin() - , vect1.begin() - ) - ); - - boost::tuples::tuple val_tuple( - *zip_it_mixed); - - boost::tuples::tuple ref_tuple( - *zip_it_mixed); - - double dblOldVal = boost::tuples::get<1>(ref_tuple); - boost::tuples::get<1>(ref_tuple) -= 41.; - - if( 52 == boost::tuples::get<0>(val_tuple) && - 42. == boost::tuples::get<1>(val_tuple) && - 52 == boost::tuples::get<0>(ref_tuple) && - 1. == boost::tuples::get<1>(ref_tuple) && - 1. == *vect1.begin() - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - // Undo change to vect1 - boost::tuples::get<1>(ref_tuple) = dblOldVal; - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator with 12 components - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterators with 12 components: " - << std::flush; - - // Declare 12 containers - // - std::list li1; - li1.push_back(1); - std::set se1; - se1.insert(2); - std::vector ve1; - ve1.push_back(3); - // - std::list li2; - li2.push_back(4); - std::set se2; - se2.insert(5); - std::vector ve2; - ve2.push_back(6); - // - std::list li3; - li3.push_back(7); - std::set se3; - se3.insert(8); - std::vector ve3; - ve3.push_back(9); - // - std::list li4; - li4.push_back(10); - std::set se4; - se4.insert(11); - std::vector ve4; - ve4.push_back(12); - - // typedefs for cons lists of iterators. - typedef boost::tuples::cons< - std::set::iterator, - boost::tuples::tuple< - std::vector::iterator, - std::list::iterator, - std::set::iterator, - std::vector::iterator, - std::list::iterator, - std::set::iterator, - std::vector::iterator, - std::list::iterator, - std::set::iterator, - std::vector::const_iterator - >::inherited - > cons_11_its_type; - // - typedef boost::tuples::cons< - std::list::const_iterator, - cons_11_its_type - > cons_12_its_type; - - // typedefs for cons lists for dereferencing the zip iterator - // made from the cons list above. - typedef boost::tuples::cons< - const int&, - boost::tuples::tuple< - int&, - int&, - const int&, - int&, - int&, - const int&, - int&, - int&, - const int&, - const int& - >::inherited - > cons_11_refs_type; - // - typedef boost::tuples::cons< - const int&, - cons_11_refs_type - > cons_12_refs_type; - - // typedef for zip iterator with 12 elements - typedef boost::zip_iterator zip_it_12_type; - - // Declare a 12-element zip iterator. - zip_it_12_type zip_it_12( - cons_12_its_type( - li1.begin(), - cons_11_its_type( - se1.begin(), - boost::make_tuple( - ve1.begin(), - li2.begin(), - se2.begin(), - ve2.begin(), - li3.begin(), - se3.begin(), - ve3.begin(), - li4.begin(), - se4.begin(), - ve4.begin() - ) - ) - ) - ); - - // Dereference, mess with the result a little. - cons_12_refs_type zip_it_12_dereferenced(*zip_it_12); - boost::tuples::get<9>(zip_it_12_dereferenced) = 42; - - // Make a copy and move it a little to force some instantiations. - zip_it_12_type zip_it_12_copy(zip_it_12); - ++zip_it_12_copy; - - if( boost::tuples::get<11>(zip_it_12.get_iterator_tuple()) == ve4.begin() && - boost::tuples::get<11>(zip_it_12_copy.get_iterator_tuple()) == ve4.end() && - 1 == boost::tuples::get<0>(zip_it_12_dereferenced) && - 12 == boost::tuples::get<11>(zip_it_12_dereferenced) && - 42 == *(li4.begin()) - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator incrementing and dereferencing - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator ++ and *: " - << std::flush; - - std::vector vect2(3); - vect2[0] = 2.2; - vect2[1] = 3.3; - vect2[2] = 4.4; - - boost::zip_iterator< - boost::tuples::tuple< - std::vector::const_iterator, - std::vector::const_iterator - > - > - zip_it_begin( - boost::make_tuple( - vect1.begin(), - vect2.begin() - ) - ); - - boost::zip_iterator< - boost::tuples::tuple< - std::vector::const_iterator, - std::vector::const_iterator - > - > - zip_it_run( - boost::make_tuple( - vect1.begin(), - vect2.begin() - ) - ); - - boost::zip_iterator< - boost::tuples::tuple< - std::vector::const_iterator, - std::vector::const_iterator - > - > - zip_it_end( - boost::make_tuple( - vect1.end(), - vect2.end() - ) - ); - - if( zip_it_run == zip_it_begin && - 42. == boost::tuples::get<0>(*zip_it_run) && - 2.2 == boost::tuples::get<1>(*zip_it_run) && - 43. == boost::tuples::get<0>(*(++zip_it_run)) && - 3.3 == boost::tuples::get<1>(*zip_it_run) && - 44. == boost::tuples::get<0>(*(++zip_it_run)) && - 4.4 == boost::tuples::get<1>(*zip_it_run) && - zip_it_end == ++zip_it_run - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator decrementing and dereferencing - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator -- and *: " - << std::flush; - - if( zip_it_run == zip_it_end && - zip_it_end == zip_it_run-- && - 44. == boost::tuples::get<0>(*zip_it_run) && - 4.4 == boost::tuples::get<1>(*zip_it_run) && - 43. == boost::tuples::get<0>(*(--zip_it_run)) && - 3.3 == boost::tuples::get<1>(*zip_it_run) && - 42. == boost::tuples::get<0>(*(--zip_it_run)) && - 2.2 == boost::tuples::get<1>(*zip_it_run) && - zip_it_begin == zip_it_run - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator copy construction and equality - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator copy construction and equality: " - << std::flush; - - boost::zip_iterator< - boost::tuples::tuple< - std::vector::const_iterator, - std::vector::const_iterator - > - > zip_it_run_copy(zip_it_run); - - if(zip_it_run == zip_it_run && zip_it_run == zip_it_run_copy) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator inequality - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator inequality: " - << std::flush; - - if(!(zip_it_run != zip_it_run_copy) && zip_it_run != ++zip_it_run_copy) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator less than - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator less than: " - << std::flush; - - // Note: zip_it_run_copy == zip_it_run + 1 - // - if( zip_it_run < zip_it_run_copy && - !( zip_it_run < --zip_it_run_copy) && - zip_it_run == zip_it_run_copy - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator less than or equal - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "zip iterator less than or equal: " - << std::flush; - - // Note: zip_it_run_copy == zip_it_run - // - ++zip_it_run; - zip_it_run_copy += 2; - - if( zip_it_run <= zip_it_run_copy && - zip_it_run <= --zip_it_run_copy && - !( zip_it_run <= --zip_it_run_copy) && - zip_it_run <= zip_it_run - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator greater than - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator greater than: " - << std::flush; - - // Note: zip_it_run_copy == zip_it_run - 1 - // - if( zip_it_run > zip_it_run_copy && - !( zip_it_run > ++zip_it_run_copy) && - zip_it_run == zip_it_run_copy - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator greater than or equal - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator greater than or equal: " - << std::flush; - - ++zip_it_run; - - // Note: zip_it_run == zip_it_run_copy + 1 - // - if( zip_it_run >= zip_it_run_copy && - --zip_it_run >= zip_it_run_copy && - ! (zip_it_run >= ++zip_it_run_copy) - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator + int - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator + int: " - << std::flush; - - // Note: zip_it_run == zip_it_run_copy - 1 - // - zip_it_run = zip_it_run + 2; - ++zip_it_run_copy; - - if( zip_it_run == zip_it_run_copy && zip_it_run == zip_it_begin + 3 ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator - int - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator - int: " - << std::flush; - - // Note: zip_it_run == zip_it_run_copy, and both are at end position - // - zip_it_run = zip_it_run - 2; - --zip_it_run_copy; - --zip_it_run_copy; - - if( zip_it_run == zip_it_run_copy && (zip_it_run - 1) == zip_it_begin ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator += - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator +=: " - << std::flush; - - // Note: zip_it_run == zip_it_run_copy, and both are at begin + 1 - // - zip_it_run += 2; - if( zip_it_run == zip_it_begin + 3 ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator -= - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator -=: " - << std::flush; - - // Note: zip_it_run is at end position, zip_it_run_copy is at - // begin plus one. - // - zip_it_run -= 2; - if( zip_it_run == zip_it_run_copy ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator getting member iterators - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator member iterators: " - << std::flush; - - // Note: zip_it_run and zip_it_run_copy are both at - // begin plus one. - // - if( boost::tuples::get<0>(zip_it_run.get_iterator_tuple()) == vect1.begin() + 1 && - boost::tuples::get<1>(zip_it_run.get_iterator_tuple()) == vect2.begin() + 1 - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Making zip iterators - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Making zip iterators: " - << std::flush; - - std::vector > - vect_of_tuples(3); - - std::copy( - boost::make_zip_iterator( - boost::make_tuple( - vect1.begin(), - vect2.begin() - ) - ), - boost::make_zip_iterator( - boost::make_tuple( - vect1.end(), - vect2.end() - ) - ), - vect_of_tuples.begin() - ); - - if( 42. == boost::tuples::get<0>(*vect_of_tuples.begin()) && - 2.2 == boost::tuples::get<1>(*vect_of_tuples.begin()) && - 43. == boost::tuples::get<0>(*(vect_of_tuples.begin() + 1)) && - 3.3 == boost::tuples::get<1>(*(vect_of_tuples.begin() + 1)) && - 44. == boost::tuples::get<0>(*(vect_of_tuples.begin() + 2)) && - 4.4 == boost::tuples::get<1>(*(vect_of_tuples.begin() + 2)) - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator non-const --> const conversion - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator non-const to const conversion: " - << std::flush; - - boost::zip_iterator< - boost::tuples::tuple< - std::set::const_iterator, - std::vector::const_iterator - > - > - zip_it_const( - boost::make_tuple( - intset.begin(), - vect2.begin() - ) - ); - // - boost::zip_iterator< - boost::tuples::tuple< - std::set::iterator, - std::vector::const_iterator - > - > - zip_it_half_const( - boost::make_tuple( - intset.begin(), - vect2.begin() - ) - ); - // - boost::zip_iterator< - boost::tuples::tuple< - std::set::iterator, - std::vector::iterator - > - > - zip_it_non_const( - boost::make_tuple( - intset.begin(), - vect2.begin() - ) - ); - - zip_it_half_const = ++zip_it_non_const; - zip_it_const = zip_it_half_const; - ++zip_it_const; -// zip_it_non_const = ++zip_it_const; // Error: can't convert from const to non-const - - if( 54 == boost::tuples::get<0>(*zip_it_const) && - 4.4 == boost::tuples::get<1>(*zip_it_const) && - 53 == boost::tuples::get<0>(*zip_it_half_const) && - 3.3 == boost::tuples::get<1>(*zip_it_half_const) - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator categories - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator categories: " - << std::flush; - - // The big iterator of the previous test has vector, list, and set iterators. - // Therefore, it must be bidirectional, but not random access. - bool bBigItIsBidirectionalIterator = boost::is_convertible< - boost::iterator_traversal::type - , boost::bidirectional_traversal_tag - >::value; - - bool bBigItIsRandomAccessIterator = boost::is_convertible< - boost::iterator_traversal::type - , boost::random_access_traversal_tag - >::value; - - // A combining iterator with all vector iterators must have random access - // traversal. - // - typedef boost::zip_iterator< - boost::tuples::tuple< - std::vector::const_iterator, - std::vector::const_iterator - > - > all_vects_type; - - bool bAllVectsIsRandomAccessIterator = boost::is_convertible< - boost::iterator_traversal::type - , boost::random_access_traversal_tag - >::value; - - // The big test. - if( bBigItIsBidirectionalIterator && - ! bBigItIsRandomAccessIterator && - bAllVectsIsRandomAccessIterator - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - // Done - // - std::cout << "\nTest Result:" - << "\n============" - << "\nNumber of successful tests: " << static_cast(num_successful_tests) - << "\nNumber of failed tests: " << static_cast(num_failed_tests) - << std::endl; - - return num_failed_tests; -} -

-

Function Output Iterator

- --- - - - - - - - - - - - -
Author:David Abrahams, Jeremy Siek, Thomas Witt
Contact:dave@boost-consulting.com, jsiek@osl.iu.edu, witt@ive.uni-hannover.de
Organization:Boost Consulting, Indiana University Open Systems -Lab, University of Hanover Institute for Transport -Railway Operation and Construction
Date:2004-11-01
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.
- - - - --- - - - -
abstract: - - -The function output iterator adaptor makes it easier to create custom -output iterators. The adaptor takes a unary function and creates a -model of Output Iterator. Each item assigned to the output iterator is -passed as an argument to the unary function. The motivation for this -iterator is that creating a conforming output iterator is non-trivial, -particularly because the proper implementation usually requires a -proxy object.
-
- - - -
-

Header

-
-#include <boost/function_output_iterator.hpp>
-
-
-template <class UnaryFunction>
-class function_output_iterator {
-public:
-  typedef std::output_iterator_tag iterator_category;
-  typedef void                     value_type;
-  typedef void                     difference_type;
-  typedef void                     pointer;
-  typedef void                     reference;
-
-  explicit function_output_iterator();
-
-  explicit function_output_iterator(const UnaryFunction& f);
-
-  /* see below */ operator*();
-  function_output_iterator& operator++();
-  function_output_iterator& operator++(int);
-private:
-  UnaryFunction m_f;     // exposition only
-};
-
-
-
-

function_output_iterator requirements

-

UnaryFunction must be Assignable and Copy Constructible.

-
-
-

function_output_iterator models

-

function_output_iterator is a model of the Writable and -Incrementable Iterator concepts.

-
-
-

function_output_iterator operations

-

explicit function_output_iterator(const UnaryFunction& f = UnaryFunction());

- --- - - - -
Effects:Constructs an instance of function_output_iterator -with m_f constructed from f.
-

operator*();

- --- - - - -
Returns:An object r of unspecified type such that r = t -is equivalent to m_f(t) for all t.
-

function_output_iterator& operator++();

- --- - - - -
Returns:*this
-

function_output_iterator& operator++(int);

- --- - - - -
Returns:*this
- - - -
-
-

Example

-
-struct string_appender
-{
-    string_appender(std::string& s)
-        : m_str(&s)
-    {}
-
-    void operator()(const std::string& x) const
-    {
-        *m_str += x;
-    }
-
-    std::string* m_str;
-};
-
-int main(int, char*[])
-{
-  std::vector<std::string> x;
-  x.push_back("hello");
-  x.push_back(" ");
-  x.push_back("world");
-  x.push_back("!");
-
-  std::string s = "";
-  std::copy(x.begin(), x.end(),
-            boost::make_function_output_iterator(string_appender(s)));
-
-  std::cout << s << std::endl;
-
-  return 0;
-}
-
-
-
-

Iterator Facade and Adaptor

- --- - - - - - - - - - - - -
Author:David Abrahams, Jeremy Siek, Thomas Witt
Contact:dave@boost-consulting.com, jsiek@osl.iu.edu, witt@styleadvisor.com
Organization:Boost Consulting, Indiana University Open Systems -Lab, Zephyr Associates, Inc.
Date:2004-11-01
Number:This is a revised version of N1530=03-0113, which was -accepted for Technical Report 1 by the C++ standard -committee's library working group.
- - - - - --- - - - -
copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.
- --- - - - -
abstract:We propose a set of class templates that help programmers -build standard-conforming iterators, both from scratch and -by adapting other iterators.
-
-

Table of Contents

- -
-
-

Motivation

-

Iterators play an important role in modern C++ programming. The -iterator is the central abstraction of the algorithms of the Standard -Library, allowing algorithms to be re-used in in a wide variety of -contexts. The C++ Standard Library contains a wide variety of useful -iterators. Every one of the standard containers comes with constant -and mutable iterators [2], and also reverse versions of those -same iterators which traverse the container in the opposite direction. -The Standard also supplies istream_iterator and -ostream_iterator for reading from and writing to streams, -insert_iterator, front_insert_iterator and -back_insert_iterator for inserting elements into containers, and -raw_storage_iterator for initializing raw memory [7].

-

Despite the many iterators supplied by the Standard Library, obvious -and useful iterators are missing, and creating new iterator types is -still a common task for C++ programmers. The literature documents -several of these, for example line_iterator [3] and Constant_iterator -[9]. The iterator abstraction is so powerful that we expect -programmers will always need to invent new iterator types.

-

Although it is easy to create iterators that almost conform to the -standard, the iterator requirements contain subtleties which can make -creating an iterator which actually conforms quite difficult. -Further, the iterator interface is rich, containing many operators -that are technically redundant and tedious to implement. To automate -the repetitive work of constructing iterators, we propose -iterator_facade, an iterator base class template which provides -the rich interface of standard iterators and delegates its -implementation to member functions of the derived class. In addition -to reducing the amount of code necessary to create an iterator, the -iterator_facade also provides compile-time error detection. -Iterator implementation mistakes that often go unnoticed are turned -into compile-time errors because the derived class implementation must -match the expectations of the iterator_facade.

-

A common pattern of iterator construction is the adaptation of one -iterator to form a new one. The functionality of an iterator is -composed of four orthogonal aspects: traversal, indirection, equality -comparison and distance measurement. Adapting an old iterator to -create a new one often saves work because one can reuse one aspect of -functionality while redefining the other. For example, the Standard -provides reverse_iterator, which adapts any Bidirectional Iterator -by inverting its direction of traversal. As with plain iterators, -iterator adaptors defined outside the Standard have become commonplace -in the literature:

-
    -
  • Checked iter[13] adds bounds-checking to an existing iterator.
  • -
  • The iterators of the View Template Library[14], which adapts -containers, are themselves adaptors over the underlying iterators.
  • -
  • Smart iterators [5] adapt an iterator's dereferencing behavior by -applying a function object to the object being referenced and -returning the result.
  • -
  • Custom iterators [4], in which a variety of adaptor types are enumerated.
  • -
  • Compound iterators [1], which access a slice out of a container of containers.
  • -
  • Several iterator adaptors from the MTL [12]. The MTL contains a -strided iterator, where each call to operator++() moves the -iterator ahead by some constant factor, and a scaled iterator, which -multiplies the dereferenced value by some constant.
  • -
- - - - - -
[1]We use the term concept to mean a set of requirements -that a type must satisfy to be used with a particular template -parameter.
- - - - - -
[2]The term mutable iterator refers to iterators over objects that -can be changed by assigning to the dereferenced iterator, while -constant iterator refers to iterators over objects that cannot be -modified.
-

To fulfill the need for constructing adaptors, we propose the -iterator_adaptor class template. Instantiations of -iterator_adaptor serve as a base classes for new iterators, -providing the default behavior of forwarding all operations to the -underlying iterator. The user can selectively replace these features -in the derived iterator class. This proposal also includes a number -of more specialized adaptors, such as the transform_iterator that -applies some user-specified function during the dereference of the -iterator.

-
-
-

Impact on the Standard

-

This proposal is purely an addition to the C++ standard library. -However, note that this proposal relies on the proposal for New -Iterator Concepts.

-
-
-

Design

-
-

Iterator Concepts

-

This proposal is formulated in terms of the new iterator concepts -as proposed in n1550, since user-defined and especially adapted -iterators suffer from the well known categorization problems that are -inherent to the current iterator categories.

-

This proposal does not strictly depend on proposal n1550, as there -is a direct mapping between new and old categories. This proposal -could be reformulated using this mapping if n1550 was not accepted.

-
-
-

Interoperability

-

The question of iterator interoperability is poorly addressed in the -current standard. There are currently two defect reports that are -concerned with interoperability issues.

-

Issue 179 concerns the fact that mutable container iterator types -are only required to be convertible to the corresponding constant -iterator types, but objects of these types are not required to -interoperate in comparison or subtraction expressions. This situation -is tedious in practice and out of line with the way built in types -work. This proposal implements the proposed resolution to issue -179, as most standard library implementations do nowadays. In other -words, if an iterator type A has an implicit or user defined -conversion to an iterator type B, the iterator types are interoperable -and the usual set of operators are available.

-

Issue 280 concerns the current lack of interoperability between -reverse iterator types. The proposed new reverse_iterator template -fixes the issues raised in 280. It provides the desired -interoperability without introducing unwanted overloads.

-
-
-

Iterator Facade

- - - - - -

While the iterator interface is rich, there is a core subset of the -interface that is necessary for all the functionality. We have -identified the following core behaviors for iterators:

-
    -
  • dereferencing
  • -
  • incrementing
  • -
  • decrementing
  • -
  • equality comparison
  • -
  • random-access motion
  • -
  • distance measurement
  • -
-

In addition to the behaviors listed above, the core interface elements -include the associated types exposed through iterator traits: -value_type, reference, difference_type, and -iterator_category.

-

Iterator facade uses the Curiously Recurring Template -Pattern (CRTP) [Cop95] so that the user can specify the behavior -of iterator_facade in a derived class. Former designs used -policy objects to specify the behavior, but that approach was -discarded for several reasons:

-
-
    -
  1. the creation and eventual copying of the policy object may create -overhead that can be avoided with the current approach.
  2. -
  3. The policy object approach does not allow for custom constructors -on the created iterator types, an essential feature if -iterator_facade should be used in other library -implementations.
  4. -
  5. Without the use of CRTP, the standard requirement that an -iterator's operator++ returns the iterator type itself -would mean that all iterators built with the library would -have to be specializations of iterator_facade<...>, rather -than something more descriptive like -indirect_iterator<T*>. Cumbersome type generator -metafunctions would be needed to build new parameterized -iterators, and a separate iterator_adaptor layer would be -impossible.
  6. -
-
-
-

Usage

-

The user of iterator_facade derives his iterator class from a -specialization of iterator_facade and passes the derived -iterator class as iterator_facade's first template parameter. -The order of the other template parameters have been carefully -chosen to take advantage of useful defaults. For example, when -defining a constant lvalue iterator, the user can pass a -const-qualified version of the iterator's value_type as -iterator_facade's Value parameter and omit the -Reference parameter which follows.

-

The derived iterator class must define member functions implementing -the iterator's core behaviors. The following table describes -expressions which are required to be valid depending on the category -of the derived iterator type. These member functions are described -briefly below and in more detail in the iterator facade -requirements.

-
- ---- - - - - - - - - - - - - - - - - - - - - - - - - - -
ExpressionEffects
i.dereference()Access the value referred to
i.equal(j)Compare for equality with j
i.increment()Advance by one position
i.decrement()Retreat by one position
i.advance(n)Advance by n positions
i.distance_to(j)Measure the distance to j
-
- -

In addition to implementing the core interface functions, an iterator -derived from iterator_facade typically defines several -constructors. To model any of the standard iterator concepts, the -iterator must at least have a copy constructor. Also, if the iterator -type X is meant to be automatically interoperate with another -iterator type Y (as with constant and mutable iterators) then -there must be an implicit conversion from X to Y or from Y -to X (but not both), typically implemented as a conversion -constructor. Finally, if the iterator is to model Forward Traversal -Iterator or a more-refined iterator concept, a default constructor is -required.

-
-
-

Iterator Core Access

-

iterator_facade and the operator implementations need to be able -to access the core member functions in the derived class. Making the -core member functions public would expose an implementation detail to -the user. The design used here ensures that implementation details do -not appear in the public interface of the derived iterator type.

-

Preventing direct access to the core member functions has two -advantages. First, there is no possibility for the user to accidently -use a member function of the iterator when a member of the value_type -was intended. This has been an issue with smart pointer -implementations in the past. The second and main advantage is that -library implementers can freely exchange a hand-rolled iterator -implementation for one based on iterator_facade without fear of -breaking code that was accessing the public core member functions -directly.

-

In a naive implementation, keeping the derived class' core member -functions private would require it to grant friendship to -iterator_facade and each of the seven operators. In order to -reduce the burden of limiting access, iterator_core_access is -provided, a class that acts as a gateway to the core member functions -in the derived iterator class. The author of the derived class only -needs to grant friendship to iterator_core_access to make his core -member functions available to the library.

- - -

iterator_core_access will be typically implemented as an empty -class containing only private static member functions which invoke the -iterator core member functions. There is, however, no need to -standardize the gateway protocol. Note that even if -iterator_core_access used public member functions it would not -open a safety loophole, as every core member function preserves the -invariants of the iterator.

-
-
-

operator[]

-

The indexing operator for a generalized iterator presents special -challenges. A random access iterator's operator[] is only -required to return something convertible to its value_type. -Requiring that it return an lvalue would rule out currently-legal -random-access iterators which hold the referenced value in a data -member (e.g. counting_iterator), because *(p+n) is a reference -into the temporary iterator p+n, which is destroyed when -operator[] returns.

-

Writable iterators built with iterator_facade implement the -semantics required by the preferred resolution to issue 299 and -adopted by proposal n1550: the result of p[n] is an object -convertible to the iterator's value_type, and p[n] = x is -equivalent to *(p + n) = x (Note: This result object may be -implemented as a proxy containing a copy of p+n). This approach -will work properly for any random-access iterator regardless of the -other details of its implementation. A user who knows more about -the implementation of her iterator is free to implement an -operator[] that returns an lvalue in the derived iterator -class; it will hide the one supplied by iterator_facade from -clients of her iterator.

-
-
-

operator->

-

The reference type of a readable iterator (and today's input -iterator) need not in fact be a reference, so long as it is -convertible to the iterator's value_type. When the value_type -is a class, however, it must still be possible to access members -through operator->. Therefore, an iterator whose reference -type is not in fact a reference must return a proxy containing a copy -of the referenced value from its operator->.

-

The return types for iterator_facade's operator-> and -operator[] are not explicitly specified. Instead, those types -are described in terms of a set of requirements, which must be -satisfied by the iterator_facade implementation.

- - - - - -
[Cop95][Coplien, 1995] Coplien, J., Curiously Recurring Template -Patterns, C++ Report, February 1995, pp. 24-27.
-
-
-
-

Iterator Adaptor

- - - - - -

The iterator_adaptor class template adapts some Base [3] -type to create a new iterator. Instantiations of iterator_adaptor -are derived from a corresponding instantiation of iterator_facade -and implement the core behaviors in terms of the Base type. In -essence, iterator_adaptor merely forwards all operations to an -instance of the Base type, which it stores as a member.

- - - - - -
[3]The term "Base" here does not refer to a base class and is -not meant to imply the use of derivation. We have followed the lead -of the standard library, which provides a base() function to access -the underlying iterator object of a reverse_iterator adaptor.
-

The user of iterator_adaptor creates a class derived from an -instantiation of iterator_adaptor and then selectively -redefines some of the core member functions described in the -iterator_facade core requirements table. The Base type need -not meet the full requirements for an iterator; it need only -support the operations used by the core interface functions of -iterator_adaptor that have not been redefined in the user's -derived class.

-

Several of the template parameters of iterator_adaptor default -to use_default. This allows the -user to make use of a default parameter even when she wants to -specify a parameter later in the parameter list. Also, the -defaults for the corresponding associated types are somewhat -complicated, so metaprogramming is required to compute them, and -use_default can help to simplify the implementation. Finally, -the identity of the use_default type is not left unspecified -because specification helps to highlight that the Reference -template parameter may not always be identical to the iterator's -reference type, and will keep users from making mistakes based on -that assumption.

-
-
-

Specialized Adaptors

-

This proposal also contains several examples of specialized adaptors -which were easily implemented using iterator_adaptor:

-
    -
  • indirect_iterator, which iterates over iterators, pointers, -or smart pointers and applies an extra level of dereferencing.
  • -
  • A new reverse_iterator, which inverts the direction of a Base -iterator's motion, while allowing adapted constant and mutable -iterators to interact in the expected ways (unlike those in most -implementations of C++98).
  • -
  • transform_iterator, which applies a user-defined function object -to the underlying values when dereferenced.
  • -
  • filter_iterator, which provides a view of an iterator range in -which some elements of the underlying range are skipped.
  • -
-
    -
  • counting_iterator, which adapts any incrementable type -(e.g. integers, iterators) so that incrementing/decrementing the -adapted iterator and dereferencing it produces successive values of -the Base type.
  • -
  • function_output_iterator, which makes it easier to create custom -output iterators.
  • -
-

Based on examples in the Boost library, users have generated many new -adaptors, among them a permutation adaptor which applies some -permutation to a random access iterator, and a strided adaptor, which -adapts a random access iterator by multiplying its unit of motion by a -constant factor. In addition, the Boost Graph Library (BGL) uses -iterator adaptors to adapt other graph libraries, such as LEDA [10] -and Stanford GraphBase [8], to the BGL interface (which requires C++ -Standard compliant iterators).

-
-
-
-

Proposed Text

-
-

Header <iterator_helper> synopsis [lib.iterator.helper.synopsis]

-
-struct use_default;
-
-struct iterator_core_access { /* implementation detail */ };
-
-template <
-    class Derived
-  , class Value
-  , class CategoryOrTraversal
-  , class Reference  = Value&
-  , class Difference = ptrdiff_t
->
-class iterator_facade;
-
-template <
-    class Derived
-  , class Base
-  , class Value      = use_default
-  , class CategoryOrTraversal  = use_default
-  , class Reference  = use_default
-  , class Difference = use_default
->
-class iterator_adaptor;
-
-template <
-    class Iterator
-  , class Value = use_default
-  , class CategoryOrTraversal = use_default
-  , class Reference = use_default
-  , class Difference = use_default
->
-class indirect_iterator;
-
-template <class Dereferenceable>
-struct pointee;
-
-template <class Dereferenceable>
-struct indirect_reference;
-
-template <class Iterator>
-class reverse_iterator;
-
-template <
-    class UnaryFunction
-  , class Iterator
-  , class Reference = use_default
-  , class Value = use_default
->
-class transform_iterator;
-
-template <class Predicate, class Iterator>
-class filter_iterator;
-
-template <
-    class Incrementable
-  , class CategoryOrTraversal  = use_default
-  , class Difference = use_default
->
-class counting_iterator;
-
-template <class UnaryFunction>
-class function_output_iterator;
-
-
-
-

Iterator facade [lib.iterator.facade]

- - - -

iterator_facade is a base class template that implements the -interface of standard iterators in terms of a few core functions -and associated types, to be supplied by a derived iterator class.

-
-

Class template iterator_facade

- - - - - -
-template <
-    class Derived
-  , class Value
-  , class CategoryOrTraversal
-  , class Reference  = Value&
-  , class Difference = ptrdiff_t
->
-class iterator_facade {
- public:
-    typedef remove_const<Value>::type value_type;
-    typedef Reference reference;
-    typedef Value* pointer;
-    typedef Difference difference_type;
-    typedef /* see below */ iterator_category;
-
-    reference operator*() const;
-    /* see below */ operator->() const;
-    /* see below */ operator[](difference_type n) const;
-    Derived& operator++();
-    Derived operator++(int);
-    Derived& operator--();
-    Derived operator--(int);
-    Derived& operator+=(difference_type n);
-    Derived& operator-=(difference_type n);
-    Derived operator-(difference_type n) const;
- protected:
-    typedef iterator_facade iterator_facade_;
-};
-
-// Comparison operators
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type // exposition
-operator ==(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-            iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator !=(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-            iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator <(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-           iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator <=(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-            iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator >(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-           iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator >=(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-            iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
-// Iterator difference
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-/* see below */
-operator-(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-          iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
-// Iterator addition
-template <class Dr, class V, class TC, class R, class D>
-Derived operator+ (iterator_facade<Dr,V,TC,R,D> const&,
-                   typename Derived::difference_type n);
-
-template <class Dr, class V, class TC, class R, class D>
-Derived operator+ (typename Derived::difference_type n,
-                   iterator_facade<Dr,V,TC,R,D> const&);
-
-

The iterator_category member of iterator_facade is

-
-iterator-category(CategoryOrTraversal, value_type, reference)
-
-

where iterator-category is defined as follows:

-
-iterator-category(C,R,V) :=
-   if (C is convertible to std::input_iterator_tag
-       || C is convertible to std::output_iterator_tag
-   )
-       return C
-
-   else if (C is not convertible to incrementable_traversal_tag)
-       the program is ill-formed
-
-   else return a type X satisfying the following two constraints:
-
-      1. X is convertible to X1, and not to any more-derived
-         type, where X1 is defined by:
-
-           if (R is a reference type
-               && C is convertible to forward_traversal_tag)
-           {
-               if (C is convertible to random_access_traversal_tag)
-                   X1 = random_access_iterator_tag
-               else if (C is convertible to bidirectional_traversal_tag)
-                   X1 = bidirectional_iterator_tag
-               else
-                   X1 = forward_iterator_tag
-           }
-           else
-           {
-               if (C is convertible to single_pass_traversal_tag
-                   && R is convertible to V)
-                   X1 = input_iterator_tag
-               else
-                   X1 = C
-           }
-
-      2. category-to-traversal(X) is convertible to the most
-         derived traversal tag type to which X is also
-         convertible, and not to any more-derived traversal tag
-         type.
-
-

[Note: the intention is to allow iterator_category to be one of -the five original category tags when convertibility to one of the -traversal tags would add no information]

- - - -

The enable_if_interoperable template used above is for exposition -purposes. The member operators should only be in an overload set -provided the derived types Dr1 and Dr2 are interoperable, -meaning that at least one of the types is convertible to the other. The -enable_if_interoperable approach uses SFINAE to take the operators -out of the overload set when the types are not interoperable. -The operators should behave as-if enable_if_interoperable -were defined to be:

-
-template <bool, typename> enable_if_interoperable_impl
-{};
-
-template <typename T> enable_if_interoperable_impl<true,T>
-{ typedef T type; };
-
-template<typename Dr1, typename Dr2, typename T>
-struct enable_if_interoperable
-  : enable_if_interoperable_impl<
-        is_convertible<Dr1,Dr2>::value || is_convertible<Dr2,Dr1>::value
-      , T
-    >
-{};
-
-
-
-

iterator_facade Requirements

-

The following table describes the typical valid expressions on -iterator_facade's Derived parameter, depending on the -iterator concept(s) it will model. The operations in the first -column must be made accessible to member functions of class -iterator_core_access. In addition, -static_cast<Derived*>(iterator_facade*) shall be well-formed.

-

In the table below, F is iterator_facade<X,V,C,R,D>, a is an -object of type X, b and c are objects of type const X, -n is an object of F::difference_type, y is a constant -object of a single pass iterator type interoperable with X, and z -is a constant object of a random access traversal iterator type -interoperable with X.

-
-

iterator_facade Core Operations

- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ExpressionReturn TypeAssertion/NoteUsed to implement Iterator -Concept(s)
c.dereference()F::reference Readable Iterator, Writable -Iterator
c.equal(y)convertible to booltrue iff c and y -refer to the same -position.Single Pass Iterator
a.increment()unused Incrementable Iterator
a.decrement()unused Bidirectional Traversal -Iterator
a.advance(n)unused Random Access Traversal -Iterator
c.distance_to(z)convertible to -F::difference_typeequivalent to -distance(c, X(z)).Random Access Traversal -Iterator
-
-
-
-

iterator_facade operations

-

The operations in this section are described in terms of operations on -the core interface of Derived which may be inaccessible -(i.e. private). The implementation should access these operations -through member functions of class iterator_core_access.

-

reference operator*() const;

- --- - - - -
Returns:static_cast<Derived const*>(this)->dereference()
-

operator->() const; (see below)

- --- - - - -
Returns:

If reference is a reference type, an object -of type pointer equal to:

-
-&static_cast<Derived const*>(this)->dereference()
-
-

Otherwise returns an object of unspecified type such that, -(*static_cast<Derived const*>(this))->m is equivalent to (w = **static_cast<Derived const*>(this), -w.m) for some temporary object w of type value_type.

-
-

unspecified operator[](difference_type n) const;

- --- - - - -
Returns:an object convertible to value_type. For constant -objects v of type value_type, and n of type -difference_type, (*this)[n] = v is equivalent to -*(*this + n) = v, and static_cast<value_type -const&>((*this)[n]) is equivalent to -static_cast<value_type const&>(*(*this + n))
-

Derived& operator++();

- --- - - - -
Effects:
-static_cast<Derived*>(this)->increment();
-return *static_cast<Derived*>(this);
-
-
-

Derived operator++(int);

- --- - - - -
Effects:
-Derived tmp(static_cast<Derived const*>(this));
-++*this;
-return tmp;
-
-
-

Derived& operator--();

- --- - - - -
Effects:
-static_cast<Derived*>(this)->decrement();
-return *static_cast<Derived*>(this);
-
-
-

Derived operator--(int);

- --- - - - -
Effects:
-Derived tmp(static_cast<Derived const*>(this));
---*this;
-return tmp;
-
-
-

Derived& operator+=(difference_type n);

- --- - - - -
Effects:
-static_cast<Derived*>(this)->advance(n);
-return *static_cast<Derived*>(this);
-
-
-

Derived& operator-=(difference_type n);

- --- - - - -
Effects:
-static_cast<Derived*>(this)->advance(-n);
-return *static_cast<Derived*>(this);
-
-
-

Derived operator-(difference_type n) const;

- --- - - - -
Effects:
-Derived tmp(static_cast<Derived const*>(this));
-return tmp -= n;
-
-
-
-template <class Dr, class V, class TC, class R, class D>
-Derived operator+ (iterator_facade<Dr,V,TC,R,D> const&,
-                   typename Derived::difference_type n);
-
-template <class Dr, class V, class TC, class R, class D>
-Derived operator+ (typename Derived::difference_type n,
-                   iterator_facade<Dr,V,TC,R,D> const&);
-
- --- - - - -
Effects:
-Derived tmp(static_cast<Derived const*>(this));
-return tmp += n;
-
-
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator ==(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-            iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
- --- - - - -
Returns:

if is_convertible<Dr2,Dr1>::value

-
-
then
-

((Dr1 const&)lhs).equal((Dr2 const&)rhs).

-
-
Otherwise,
-

((Dr2 const&)rhs).equal((Dr1 const&)lhs).

-
-
-
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator !=(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-            iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
- --- - - - -
Returns:

if is_convertible<Dr2,Dr1>::value

-
-
then
-

!((Dr1 const&)lhs).equal((Dr2 const&)rhs).

-
-
Otherwise,
-

!((Dr2 const&)rhs).equal((Dr1 const&)lhs).

-
-
-
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator <(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-           iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
- --- - - - -
Returns:

if is_convertible<Dr2,Dr1>::value

-
-
then
-

((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) < 0.

-
-
Otherwise,
-

((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) > 0.

-
-
-
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator <=(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-            iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
- --- - - - -
Returns:

if is_convertible<Dr2,Dr1>::value

-
-
then
-

((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) <= 0.

-
-
Otherwise,
-

((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) >= 0.

-
-
-
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator >(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-           iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
- --- - - - -
Returns:

if is_convertible<Dr2,Dr1>::value

-
-
then
-

((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) > 0.

-
-
Otherwise,
-

((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) < 0.

-
-
-
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,bool>::type
-operator >=(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-            iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
- --- - - - -
Returns:

if is_convertible<Dr2,Dr1>::value

-
-
then
-

((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) >= 0.

-
-
Otherwise,
-

((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) <= 0.

-
-
-
-
-template <class Dr1, class V1, class TC1, class R1, class D1,
-          class Dr2, class V2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1,Dr2,difference>::type
-operator -(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
-           iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
-
- --- - - - - - -
Return Type:

if is_convertible<Dr2,Dr1>::value

-
-
-
then
-

difference shall be -iterator_traits<Dr1>::difference_type.

-
-
Otherwise
-

difference shall be iterator_traits<Dr2>::difference_type

-
-
-
-
Returns:

if is_convertible<Dr2,Dr1>::value

-
-
then
-

-((Dr1 const&)lhs).distance_to((Dr2 const&)rhs).

-
-
Otherwise,
-

((Dr2 const&)rhs).distance_to((Dr1 const&)lhs).

-
-
-
-
-
-
-

Iterator adaptor [lib.iterator.adaptor]

- - - - - -

Each specialization of the iterator_adaptor class template is derived from -a specialization of iterator_facade. The core interface functions -expected by iterator_facade are implemented in terms of the -iterator_adaptor's Base template parameter. A class derived -from iterator_adaptor typically redefines some of the core -interface functions to adapt the behavior of the Base type. -Whether the derived class models any of the standard iterator concepts -depends on the operations supported by the Base type and which -core interface functions of iterator_facade are redefined in the -Derived class.

-
-

Class template iterator_adaptor

- - - - - -
-template <
-    class Derived
-  , class Base
-  , class Value               = use_default
-  , class CategoryOrTraversal = use_default
-  , class Reference           = use_default
-  , class Difference = use_default
->
-class iterator_adaptor
-  : public iterator_facade<Derived, V', C', R', D'> // see details
-{
-    friend class iterator_core_access;
- public:
-    iterator_adaptor();
-    explicit iterator_adaptor(Base const& iter);
-    typedef Base base_type;
-    Base const& base() const;
- protected:
-    typedef iterator_adaptor iterator_adaptor_;
-    Base const& base_reference() const;
-    Base& base_reference();
- private: // Core iterator interface for iterator_facade.
-    typename iterator_adaptor::reference dereference() const;
-
-    template <
-    class OtherDerived, class OtherIterator, class V, class C, class R, class D
-    >
-    bool equal(iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& x) const;
-
-    void advance(typename iterator_adaptor::difference_type n);
-    void increment();
-    void decrement();
-
-    template <
-        class OtherDerived, class OtherIterator, class V, class C, class R, class D
-    >
-    typename iterator_adaptor::difference_type distance_to(
-        iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& y) const;
-
- private:
-    Base m_iterator; // exposition only
-};
-
-
-
-

iterator_adaptor requirements

-

static_cast<Derived*>(iterator_adaptor*) shall be well-formed. -The Base argument shall be Assignable and Copy Constructible.

-
-
-

iterator_adaptor base class parameters

-

The V', C', R', and D' parameters of the iterator_facade -used as a base class in the summary of iterator_adaptor -above are defined as follows:

-
-V' = if (Value is use_default)
-          return iterator_traits<Base>::value_type
-      else
-          return Value
-
-C' = if (CategoryOrTraversal is use_default)
-          return iterator_traversal<Base>::type
-      else
-          return CategoryOrTraversal
-
-R' = if (Reference is use_default)
-          if (Value is use_default)
-              return iterator_traits<Base>::reference
-          else
-              return Value&
-      else
-          return Reference
-
-D' = if (Difference is use_default)
-          return iterator_traits<Base>::difference_type
-      else
-          return Difference
-
- - - -
-
-

iterator_adaptor public operations

-

iterator_adaptor();

- --- - - - - - -
Requires:The Base type must be Default Constructible.
Returns:An instance of iterator_adaptor with -m_iterator default constructed.
-

explicit iterator_adaptor(Base const& iter);

- --- - - - -
Returns:An instance of iterator_adaptor with -m_iterator copy constructed from iter.
-

Base const& base() const;

- --- - - - -
Returns:m_iterator
-
-
-

iterator_adaptor protected member functions

-

Base const& base_reference() const;

- --- - - - -
Returns:A const reference to m_iterator.
-

Base& base_reference();

- --- - - - -
Returns:A non-const reference to m_iterator.
-
-
-

iterator_adaptor private member functions

-

typename iterator_adaptor::reference dereference() const;

- --- - - - -
Returns:*m_iterator
-
-template <
-class OtherDerived, class OtherIterator, class V, class C, class R, class D
->
-bool equal(iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& x) const;
-
- --- - - - -
Returns:m_iterator == x.base()
-

void advance(typename iterator_adaptor::difference_type n);

- --- - - - -
Effects:m_iterator += n;
-

void increment();

- --- - - - -
Effects:++m_iterator;
-

void decrement();

- --- - - - -
Effects:--m_iterator;
-
-template <
-    class OtherDerived, class OtherIterator, class V, class C, class R, class D
->
-typename iterator_adaptor::difference_type distance_to(
-    iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& y) const;
-
- --- - - - -
Returns:y.base() - m_iterator
-
-
-
-

Specialized adaptors [lib.iterator.special.adaptors]

-

The enable_if_convertible<X,Y>::type expression used in -this section is for exposition purposes. The converting constructors -for specialized adaptors should be only be in an overload set provided -that an object of type X is implicitly convertible to an object of -type Y. -The signatures involving enable_if_convertible should behave -as-if enable_if_convertible were defined to be:

-
-template <bool> enable_if_convertible_impl
-{};
-
-template <> enable_if_convertible_impl<true>
-{ struct type; };
-
-template<typename From, typename To>
-struct enable_if_convertible
-  : enable_if_convertible_impl<is_convertible<From,To>::value>
-{};
-
-

If an expression other than the default argument is used to supply -the value of a function parameter whose type is written in terms -of enable_if_convertible, the program is ill-formed, no -diagnostic required.

-

[Note: The enable_if_convertible approach uses SFINAE to -take the constructor out of the overload set when the types are not -implicitly convertible. -]

-
-

Indirect iterator

- - - -

indirect_iterator adapts an iterator by applying an -extra dereference inside of operator*(). For example, this -iterator adaptor makes it possible to view a container of pointers -(e.g. list<foo*>) as if it were a container of the pointed-to type -(e.g. list<foo>). indirect_iterator depends on two -auxiliary traits, pointee and indirect_reference, to -provide support for underlying iterators whose value_type is -not an iterator.

-
-

Class template pointee

- - - -
-template <class Dereferenceable>
-struct pointee
-{
-    typedef /* see below */ type;
-};
-
- --- - - - -
Requires:For an object x of type Dereferenceable, *x -is well-formed. If ++x is ill-formed it shall neither be -ambiguous nor shall it violate access control, and -Dereferenceable::element_type shall be an accessible type. -Otherwise iterator_traits<Dereferenceable>::value_type shall -be well formed. [Note: These requirements need not apply to -explicit or partial specializations of pointee]
-

type is determined according to the following algorithm, where -x is an object of type Dereferenceable:

-
-if ( ++x is ill-formed )
-{
-    return ``Dereferenceable::element_type``
-}
-else if (``*x`` is a mutable reference to
-         std::iterator_traits<Dereferenceable>::value_type)
-{
-    return iterator_traits<Dereferenceable>::value_type
-}
-else
-{
-    return iterator_traits<Dereferenceable>::value_type const
-}
-
-
-
-

Class template indirect_reference

- - - -
-template <class Dereferenceable>
-struct indirect_reference
-{
-    typedef /* see below */ type;
-};
-
- --- - - - -
Requires:For an object x of type Dereferenceable, *x -is well-formed. If ++x is ill-formed it shall neither be -ambiguous nor shall it violate access control, and -pointee<Dereferenceable>::type& shall be well-formed. -Otherwise iterator_traits<Dereferenceable>::reference shall -be well formed. [Note: These requirements need not apply to -explicit or partial specializations of indirect_reference]
-

type is determined according to the following algorithm, where -x is an object of type Dereferenceable:

-
-if ( ++x is ill-formed )
-    return ``pointee<Dereferenceable>::type&``
-else
-    std::iterator_traits<Dereferenceable>::reference
-
-
-
-

Class template indirect_iterator

- - - -
-template <
-    class Iterator
-  , class Value = use_default
-  , class CategoryOrTraversal = use_default
-  , class Reference = use_default
-  , class Difference = use_default
->
-class indirect_iterator
-{
- public:
-    typedef /* see below */ value_type;
-    typedef /* see below */ reference;
-    typedef /* see below */ pointer;
-    typedef /* see below */ difference_type;
-    typedef /* see below */ iterator_category;
-
-    indirect_iterator();
-    indirect_iterator(Iterator x);
-
-    template <
-        class Iterator2, class Value2, class Category2
-      , class Reference2, class Difference2
-    >
-    indirect_iterator(
-        indirect_iterator<
-             Iterator2, Value2, Category2, Reference2, Difference2
-        > const& y
-      , typename enable_if_convertible<Iterator2, Iterator>::type* = 0 // exposition
-    );
-
-    Iterator const& base() const;
-    reference operator*() const;
-    indirect_iterator& operator++();
-    indirect_iterator& operator--();
-private:
-   Iterator m_iterator; // exposition
-};
-
-

The member types of indirect_iterator are defined according to -the following pseudo-code, where V is -iterator_traits<Iterator>::value_type

-
-if (Value is use_default) then
-    typedef remove_const<pointee<V>::type>::type value_type;
-else
-    typedef remove_const<Value>::type value_type;
-
-if (Reference is use_default) then
-    if (Value is use_default) then
-        typedef indirect_reference<V>::type reference;
-    else
-        typedef Value& reference;
-else
-    typedef Reference reference;
-
-if (Value is use_default) then
-    typedef pointee<V>::type* pointer;
-else
-    typedef Value* pointer;
-
-if (Difference is use_default)
-    typedef iterator_traits<Iterator>::difference_type difference_type;
-else
-    typedef Difference difference_type;
-
-if (CategoryOrTraversal is use_default)
-    typedef iterator-category (
-        iterator_traversal<Iterator>::type,``reference``,``value_type``
-    ) iterator_category;
-else
-    typedef iterator-category (
-        CategoryOrTraversal,``reference``,``value_type``
-    ) iterator_category;
-
-
-
-

indirect_iterator requirements

-

The expression *v, where v is an object of -iterator_traits<Iterator>::value_type, shall be valid -expression and convertible to reference. Iterator shall -model the traversal concept indicated by iterator_category. -Value, Reference, and Difference shall be chosen so -that value_type, reference, and difference_type meet -the requirements indicated by iterator_category.

-

[Note: there are further requirements on the -iterator_traits<Iterator>::value_type if the Value -parameter is not use_default, as implied by the algorithm for -deducing the default for the value_type member.]

-
-
-

indirect_iterator models

-

In addition to the concepts indicated by iterator_category -and by iterator_traversal<indirect_iterator>::type, a -specialization of indirect_iterator models the following -concepts, Where v is an object of -iterator_traits<Iterator>::value_type:

-
-
    -
  • Readable Iterator if reference(*v) is convertible to -value_type.
  • -
  • Writable Iterator if reference(*v) = t is a valid -expression (where t is an object of type -indirect_iterator::value_type)
  • -
  • Lvalue Iterator if reference is a reference type.
  • -
-
-

indirect_iterator<X,V1,C1,R1,D1> is interoperable with -indirect_iterator<Y,V2,C2,R2,D2> if and only if X is -interoperable with Y.

-
-
-

indirect_iterator operations

-

In addition to the operations required by the concepts described -above, specializations of indirect_iterator provide the -following operations.

-

indirect_iterator();

- --- - - - - - -
Requires:Iterator must be Default Constructible.
Effects:Constructs an instance of indirect_iterator with -a default-constructed m_iterator.
-

indirect_iterator(Iterator x);

- --- - - - -
Effects:Constructs an instance of indirect_iterator with -m_iterator copy constructed from x.
-
-template <
-    class Iterator2, class Value2, unsigned Access, class Traversal
-  , class Reference2, class Difference2
->
-indirect_iterator(
-    indirect_iterator<
-         Iterator2, Value2, Access, Traversal, Reference2, Difference2
-    > const& y
-  , typename enable_if_convertible<Iterator2, Iterator>::type* = 0 // exposition
-);
-
- --- - - - - - -
Requires:Iterator2 is implicitly convertible to Iterator.
Effects:Constructs an instance of indirect_iterator whose -m_iterator subobject is constructed from y.base().
-

Iterator const& base() const;

- --- - - - -
Returns:m_iterator
-

reference operator*() const;

- --- - - - -
Returns:**m_iterator
-

indirect_iterator& operator++();

- --- - - - - - -
Effects:++m_iterator
Returns:*this
-

indirect_iterator& operator--();

- --- - - - - - -
Effects:--m_iterator
Returns:*this
-
-
-
-

Reverse iterator

- - - -

The reverse iterator adaptor iterates through the adapted iterator -range in the opposite direction.

-
-

Class template reverse_iterator

- - - -
-template <class Iterator>
-class reverse_iterator
-{
-public:
-  typedef iterator_traits<Iterator>::value_type value_type;
-  typedef iterator_traits<Iterator>::reference reference;
-  typedef iterator_traits<Iterator>::pointer pointer;
-  typedef iterator_traits<Iterator>::difference_type difference_type;
-  typedef /* see below */ iterator_category;
-
-  reverse_iterator() {}
-  explicit reverse_iterator(Iterator x) ;
-
-  template<class OtherIterator>
-  reverse_iterator(
-      reverse_iterator<OtherIterator> const& r
-    , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
-  );
-  Iterator const& base() const;
-  reference operator*() const;
-  reverse_iterator& operator++();
-  reverse_iterator& operator--();
-private:
-  Iterator m_iterator; // exposition
-};
-
-

If Iterator models Random Access Traversal Iterator and Readable -Lvalue Iterator, then iterator_category is convertible to -random_access_iterator_tag. Otherwise, if -Iterator models Bidirectional Traversal Iterator and Readable -Lvalue Iterator, then iterator_category is convertible to -bidirectional_iterator_tag. Otherwise, iterator_category is -convertible to input_iterator_tag.

-
-
-

reverse_iterator requirements

-

Iterator must be a model of Bidirectional Traversal Iterator. The -type iterator_traits<Iterator>::reference must be the type of -*i, where i is an object of type Iterator.

-
-
-

reverse_iterator models

-

A specialization of reverse_iterator models the same iterator -traversal and iterator access concepts modeled by its Iterator -argument. In addition, it may model old iterator concepts -specified in the following table:

- ---- - - - - - - - - - - - - - - - - - - - -
If I modelsthen reverse_iterator<I> models
Readable Lvalue Iterator, -Bidirectional Traversal IteratorBidirectional Iterator
Writable Lvalue Iterator, -Bidirectional Traversal IteratorMutable Bidirectional Iterator
Readable Lvalue Iterator, -Random Access Traversal IteratorRandom Access Iterator
Writable Lvalue Iterator, -Random Access Traversal IteratorMutable Random Access Iterator
-

reverse_iterator<X> is interoperable with -reverse_iterator<Y> if and only if X is interoperable with -Y.

-
-
-

reverse_iterator operations

-

In addition to the operations required by the concepts modeled by -reverse_iterator, reverse_iterator provides the following -operations.

-

reverse_iterator();

- --- - - - - - -
Requires:Iterator must be Default Constructible.
Effects:Constructs an instance of reverse_iterator with m_iterator -default constructed.
-

explicit reverse_iterator(Iterator x);

- --- - - - -
Effects:Constructs an instance of reverse_iterator with -m_iterator copy constructed from x.
-
-template<class OtherIterator>
-reverse_iterator(
-    reverse_iterator<OtherIterator> const& r
-  , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
-);
-
- --- - - - - - -
Requires:OtherIterator is implicitly convertible to Iterator.
Effects:Constructs instance of reverse_iterator whose -m_iterator subobject is constructed from y.base().
-

Iterator const& base() const;

- --- - - - -
Returns:m_iterator
-

reference operator*() const;

- --- - - - -
Effects:
-
-Iterator tmp = m_iterator;
-return *--tmp;
-
-

reverse_iterator& operator++();

- --- - - - - - -
Effects:--m_iterator
Returns:*this
-

reverse_iterator& operator--();

- --- - - - - - -
Effects:++m_iterator
Returns:*this
-
-
-
-

Transform iterator

- - - -

The transform iterator adapts an iterator by modifying the -operator* to apply a function object to the result of -dereferencing the iterator and returning the result.

-
-

Class template transform_iterator

- - - - -
-template <class UnaryFunction,
-          class Iterator,
-          class Reference = use_default,
-          class Value = use_default>
-class transform_iterator
-{
-public:
-  typedef /* see below */ value_type;
-  typedef /* see below */ reference;
-  typedef /* see below */ pointer;
-  typedef iterator_traits<Iterator>::difference_type difference_type;
-  typedef /* see below */ iterator_category;
-
-  transform_iterator();
-  transform_iterator(Iterator const& x, UnaryFunction f);
-
-  template<class F2, class I2, class R2, class V2>
-  transform_iterator(
-        transform_iterator<F2, I2, R2, V2> const& t
-      , typename enable_if_convertible<I2, Iterator>::type* = 0      // exposition only
-      , typename enable_if_convertible<F2, UnaryFunction>::type* = 0 // exposition only
-  );
-  UnaryFunction functor() const;
-  Iterator const& base() const;
-  reference operator*() const;
-  transform_iterator& operator++();
-  transform_iterator& operator--();
-private:
-  Iterator m_iterator; // exposition only
-  UnaryFunction m_f;   // exposition only
-};
-
-

If Reference is use_default then the reference member of -transform_iterator is -result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type. -Otherwise, reference is Reference.

-

If Value is use_default then the value_type member is -remove_cv<remove_reference<reference> >::type. Otherwise, -value_type is Value.

-

If Iterator models Readable Lvalue Iterator and if Iterator -models Random Access Traversal Iterator, then iterator_category is -convertible to random_access_iterator_tag. Otherwise, if -Iterator models Bidirectional Traversal Iterator, then -iterator_category is convertible to -bidirectional_iterator_tag. Otherwise iterator_category is -convertible to forward_iterator_tag. If Iterator does not -model Readable Lvalue Iterator then iterator_category is -convertible to input_iterator_tag.

-
-
-

transform_iterator requirements

-

The type UnaryFunction must be Assignable, Copy Constructible, and -the expression f(*i) must be valid where f is an object of -type UnaryFunction, i is an object of type Iterator, and -where the type of f(*i) must be -result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type.

-

The argument Iterator shall model Readable Iterator.

-
-
-

transform_iterator models

-

The resulting transform_iterator models the most refined of the -following that is also modeled by Iterator.

-
-
    -
  • Writable Lvalue Iterator if transform_iterator::reference is a non-const reference.
  • -
  • Readable Lvalue Iterator if transform_iterator::reference is a const reference.
  • -
  • Readable Iterator otherwise.
  • -
-
-

The transform_iterator models the most refined standard traversal -concept that is modeled by the Iterator argument.

-

If transform_iterator is a model of Readable Lvalue Iterator then -it models the following original iterator concepts depending on what -the Iterator argument models.

- ---- - - - - - - - - - - - - - - - - - - - -
If Iterator modelsthen transform_iterator models
Single Pass IteratorInput Iterator
Forward Traversal IteratorForward Iterator
Bidirectional Traversal IteratorBidirectional Iterator
Random Access Traversal IteratorRandom Access Iterator
-

If transform_iterator models Writable Lvalue Iterator then it is a -mutable iterator (as defined in the old iterator requirements).

-

transform_iterator<F1, X, R1, V1> is interoperable with -transform_iterator<F2, Y, R2, V2> if and only if X is -interoperable with Y.

-
-
-

transform_iterator operations

-

In addition to the operations required by the concepts modeled by -transform_iterator, transform_iterator provides the following -operations.

-

transform_iterator();

- --- - - - -
Returns:An instance of transform_iterator with m_f -and m_iterator default constructed.
-

transform_iterator(Iterator const& x, UnaryFunction f);

- --- - - - -
Returns:An instance of transform_iterator with m_f -initialized to f and m_iterator initialized to x.
-
-template<class F2, class I2, class R2, class V2>
-transform_iterator(
-      transform_iterator<F2, I2, R2, V2> const& t
-    , typename enable_if_convertible<I2, Iterator>::type* = 0      // exposition only
-    , typename enable_if_convertible<F2, UnaryFunction>::type* = 0 // exposition only
-);
-
- --- - - - - - -
Returns:An instance of transform_iterator with m_f -initialized to t.functor() and m_iterator initialized to -t.base().
Requires:OtherIterator is implicitly convertible to Iterator.
-

UnaryFunction functor() const;

- --- - - - -
Returns:m_f
-

Iterator const& base() const;

- --- - - - -
Returns:m_iterator
-

reference operator*() const;

- --- - - - -
Returns:m_f(*m_iterator)
-

transform_iterator& operator++();

- --- - - - - - -
Effects:++m_iterator
Returns:*this
-

transform_iterator& operator--();

- --- - - - - - -
Effects:--m_iterator
Returns:*this
-
-
-
-

Filter iterator

- - - -

The filter iterator adaptor creates a view of an iterator range in -which some elements of the range are skipped. A predicate function -object controls which elements are skipped. When the predicate is -applied to an element, if it returns true then the element is -retained and if it returns false then the element is skipped -over. When skipping over elements, it is necessary for the filter -adaptor to know when to stop so as to avoid going past the end of the -underlying range. A filter iterator is therefore constructed with pair -of iterators indicating the range of elements in the unfiltered -sequence to be traversed.

-
-

Class template filter_iterator

- - - - -
-template <class Predicate, class Iterator>
-class filter_iterator
-{
- public:
-    typedef iterator_traits<Iterator>::value_type value_type;
-    typedef iterator_traits<Iterator>::reference reference;
-    typedef iterator_traits<Iterator>::pointer pointer;
-    typedef iterator_traits<Iterator>::difference_type difference_type;
-    typedef /* see below */ iterator_category;
-
-    filter_iterator();
-    filter_iterator(Predicate f, Iterator x, Iterator end = Iterator());
-    filter_iterator(Iterator x, Iterator end = Iterator());
-    template<class OtherIterator>
-    filter_iterator(
-        filter_iterator<Predicate, OtherIterator> const& t
-        , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
-        );
-    Predicate predicate() const;
-    Iterator end() const;
-    Iterator const& base() const;
-    reference operator*() const;
-    filter_iterator& operator++();
-private:
-    Predicate m_pred; // exposition only
-    Iterator m_iter;  // exposition only
-    Iterator m_end;   // exposition only
-};
-
-

If Iterator models Readable Lvalue Iterator and Bidirectional Traversal -Iterator then iterator_category is convertible to -std::bidirectional_iterator_tag. -Otherwise, if Iterator models Readable Lvalue Iterator and Forward Traversal -Iterator then iterator_category is convertible to -std::forward_iterator_tag. -Otherwise iterator_category is -convertible to std::input_iterator_tag.

-
-
-

filter_iterator requirements

-

The Iterator argument shall meet the requirements of Readable -Iterator and Single Pass Iterator or it shall meet the requirements of -Input Iterator.

-

The Predicate argument must be Assignable, Copy Constructible, and -the expression p(x) must be valid where p is an object of type -Predicate, x is an object of type -iterator_traits<Iterator>::value_type, and where the type of -p(x) must be convertible to bool.

-
-
-

filter_iterator models

-

The concepts that filter_iterator models are dependent on which -concepts the Iterator argument models, as specified in the -following tables.

- ---- - - - - - - - - - - - - - - - - -
If Iterator modelsthen filter_iterator models
Single Pass IteratorSingle Pass Iterator
Forward Traversal IteratorForward Traversal Iterator
Bidirectional Traversal IteratorBidirectional Traversal Iterator
- ---- - - - - - - - - - - - - - - - - -
If Iterator modelsthen filter_iterator models
Readable IteratorReadable Iterator
Writable IteratorWritable Iterator
Lvalue IteratorLvalue Iterator
- ---- - - - - - - - - - - - - - - - - - - - -
If Iterator modelsthen filter_iterator models
Readable Iterator, Single Pass IteratorInput Iterator
Readable Lvalue Iterator, Forward Traversal IteratorForward Iterator
Writable Lvalue Iterator, Forward Traversal IteratorMutable Forward Iterator
Writable Lvalue Iterator, Bidirectional IteratorMutable Bidirectional Iterator
-

filter_iterator<P1, X> is interoperable with filter_iterator<P2, Y> -if and only if X is interoperable with Y.

-
-
-

filter_iterator operations

-

In addition to those operations required by the concepts that -filter_iterator models, filter_iterator provides the following -operations.

-

filter_iterator();

- --- - - - - - -
Requires:Predicate and Iterator must be Default Constructible.
Effects:Constructs a filter_iterator whose``m_pred``, m_iter, and m_end -members are a default constructed.
-

filter_iterator(Predicate f, Iterator x, Iterator end = Iterator());

- --- - - - -
Effects:Constructs a filter_iterator where m_iter is either -the first position in the range [x,end) such that f(*m_iter) == true -or else``m_iter == end``. The member m_pred is constructed from -f and m_end from end.
-

filter_iterator(Iterator x, Iterator end = Iterator());

- --- - - - - - -
Requires:Predicate must be Default Constructible and -Predicate is a class type (not a function pointer).
Effects:Constructs a filter_iterator where m_iter is either -the first position in the range [x,end) such that m_pred(*m_iter) == true -or else``m_iter == end``. The member m_pred is default constructed.
-
-template <class OtherIterator>
-filter_iterator(
-    filter_iterator<Predicate, OtherIterator> const& t
-    , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
-    );``
-
- --- - - - - - -
Requires:OtherIterator is implicitly convertible to Iterator.
Effects:Constructs a filter iterator whose members are copied from t.
-

Predicate predicate() const;

- --- - - - -
Returns:m_pred
-

Iterator end() const;

- --- - - - -
Returns:m_end
-

Iterator const& base() const;

- --- - - - -
Returns:m_iterator
-

reference operator*() const;

- --- - - - -
Returns:*m_iter
-

filter_iterator& operator++();

- --- - - - - - -
Effects:Increments m_iter and then continues to -increment m_iter until either m_iter == m_end -or m_pred(*m_iter) == true.
Returns:*this
-
-
-
-

Counting iterator

- - - -

counting_iterator adapts an object by adding an operator* that -returns the current value of the object. All other iterator operations -are forwarded to the adapted object.

-
-

Class template counting_iterator

- - - -
-template <
-    class Incrementable
-  , class CategoryOrTraversal = use_default
-  , class Difference = use_default
->
-class counting_iterator
-{
-public:
-    typedef Incrementable value_type;
-    typedef const Incrementable& reference;
-    typedef const Incrementable* pointer;
-    typedef /* see below */ difference_type;
-    typedef /* see below */ iterator_category;
-
-    counting_iterator();
-    counting_iterator(counting_iterator const& rhs);
-    explicit counting_iterator(Incrementable x);
-    Incrementable const& base() const;
-    reference operator*() const;
-    counting_iterator& operator++();
-    counting_iterator& operator--();
-private:
-    Incrementable m_inc; // exposition
-};
-
-

If the Difference argument is use_default then -difference_type is an unspecified signed integral -type. Otherwise difference_type is Difference.

-

iterator_category is determined according to the following -algorithm:

-
-if (CategoryOrTraversal is not use_default)
-    return CategoryOrTraversal
-else if (numeric_limits<Incrementable>::is_specialized)
-    return iterator-category(
-        random_access_traversal_tag, Incrementable, const Incrementable&)
-else
-    return iterator-category(
-         iterator_traversal<Incrementable>::type,
-         Incrementable, const Incrementable&)
-
-
-
[Note: implementers are encouraged to provide an implementation of
-
operator- and a difference_type that avoids overflows in -the cases where std::numeric_limits<Incrementable>::is_specialized -is true.]
-
-
-
-

counting_iterator requirements

-

The Incrementable argument shall be Copy Constructible and Assignable.

-

If iterator_category is convertible to forward_iterator_tag -or forward_traversal_tag, the following must be well-formed:

-
-Incrementable i, j;
-++i;         // pre-increment
-i == j;      // operator equal
-
-

If iterator_category is convertible to -bidirectional_iterator_tag or bidirectional_traversal_tag, -the following expression must also be well-formed:

-
---i
-
-

If iterator_category is convertible to -random_access_iterator_tag or random_access_traversal_tag, -the following must must also be valid:

-
-counting_iterator::difference_type n;
-i += n;
-n = i - j;
-i < j;
-
-
-
-

counting_iterator models

-

Specializations of counting_iterator model Readable Lvalue -Iterator. In addition, they model the concepts corresponding to the -iterator tags to which their iterator_category is convertible. -Also, if CategoryOrTraversal is not use_default then -counting_iterator models the concept corresponding to the iterator -tag CategoryOrTraversal. Otherwise, if -numeric_limits<Incrementable>::is_specialized, then -counting_iterator models Random Access Traversal Iterator. -Otherwise, counting_iterator models the same iterator traversal -concepts modeled by Incrementable.

-

counting_iterator<X,C1,D1> is interoperable with -counting_iterator<Y,C2,D2> if and only if X is -interoperable with Y.

-
-
-

counting_iterator operations

-

In addition to the operations required by the concepts modeled by -counting_iterator, counting_iterator provides the following -operations.

-

counting_iterator();

- --- - - - - - -
Requires:Incrementable is Default Constructible.
Effects:Default construct the member m_inc.
-

counting_iterator(counting_iterator const& rhs);

- --- - - - -
Effects:Construct member m_inc from rhs.m_inc.
-

explicit counting_iterator(Incrementable x);

- --- - - - -
Effects:Construct member m_inc from x.
-

reference operator*() const;

- --- - - - -
Returns:m_inc
-

counting_iterator& operator++();

- --- - - - - - -
Effects:++m_inc
Returns:*this
-

counting_iterator& operator--();

- --- - - - - - -
Effects:--m_inc
Returns:*this
-

Incrementable const& base() const;

- --- - - - -
Returns:m_inc
-
-
-
-

Function output iterator

- - - -

The function output iterator adaptor makes it easier to create custom -output iterators. The adaptor takes a unary function and creates a -model of Output Iterator. Each item assigned to the output iterator is -passed as an argument to the unary function. The motivation for this -iterator is that creating a conforming output iterator is non-trivial, -particularly because the proper implementation usually requires a -proxy object.

- -
-

Header

-
-#include <boost/function_output_iterator.hpp>
-
-
-template <class UnaryFunction>
-class function_output_iterator {
-public:
-  typedef std::output_iterator_tag iterator_category;
-  typedef void                     value_type;
-  typedef void                     difference_type;
-  typedef void                     pointer;
-  typedef void                     reference;
-
-  explicit function_output_iterator();
-
-  explicit function_output_iterator(const UnaryFunction& f);
-
-  /* see below */ operator*();
-  function_output_iterator& operator++();
-  function_output_iterator& operator++(int);
-private:
-  UnaryFunction m_f;     // exposition only
-};
-
-
-
-

function_output_iterator requirements

-

UnaryFunction must be Assignable and Copy Constructible.

-
-
-

function_output_iterator models

-

function_output_iterator is a model of the Writable and -Incrementable Iterator concepts.

-
-
-

function_output_iterator operations

-

explicit function_output_iterator(const UnaryFunction& f = UnaryFunction());

- --- - - - -
Effects:Constructs an instance of function_output_iterator -with m_f constructed from f.
-

operator*();

- --- - - - -
Returns:An object r of unspecified type such that r = t -is equivalent to m_f(t) for all t.
-

function_output_iterator& operator++();

- --- - - - -
Returns:*this
-

function_output_iterator& operator++(int);

- --- - - - -
Returns:*this
- -
-
-
-
-