From 2bd11a540f63848e20a12a7e33ef2bf62a697b9c Mon Sep 17 00:00:00 2001 From: nobody Date: Mon, 13 Sep 2004 13:31:34 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create branch 'build'. [SVN r25038] --- development/boost/iterator_categories.hpp | 159 - development/boost/iterator_concepts.hpp | 172 - development/libs/iterator/concept_tests.cpp | 73 - .../libs/iterator/iterator_categories.htm | 160 - .../libs/iterator/iterator_concepts.fig | 37 - .../libs/iterator/iterator_concepts.gif | Bin 3287 -> 0 bytes .../libs/iterator/iterator_concepts.htm | 663 --- doc/BidirectionalTraversal.html | 71 - doc/BidirectionalTraversal.rst | 37 - doc/ForwardTraversal.html | 62 - doc/ForwardTraversal.rst | 27 - doc/IncrementableIterator.html | 61 - doc/IncrementableIterator.rst | 28 - doc/InteroperableIterator.rst | 57 - doc/LvalueIterator.html | 51 - doc/LvalueIterator.rst | 21 - doc/RandomAccessTraversal.html | 129 - doc/RandomAccessTraversal.rst | 63 - doc/ReadableIterator.html | 59 - doc/ReadableIterator.rst | 23 - doc/SinglePassIterator.html | 63 - doc/SinglePassIterator.rst | 28 - doc/SwappableIterator.html | 49 - doc/SwappableIterator.rst | 19 - doc/WritableIterator.html | 47 - doc/WritableIterator.rst | 17 - doc/access.png | Bin 11127 -> 0 bytes doc/access2old.png | Bin 42175 -> 0 bytes doc/counting_iterator.html | 285 - doc/counting_iterator.pdf | Bin 81036 -> 0 bytes doc/counting_iterator.rst | 39 - doc/counting_iterator_abstract.rst | 4 - doc/counting_iterator_eg.rst | 40 - doc/counting_iterator_ref.rst | 145 - doc/default.css | 224 - doc/docutils.sty | 54 - doc/facade-and-adaptor.diff | 228 - doc/facade-and-adaptor.html | 2632 -------- doc/facade-and-adaptor.pdf | Bin 242993 -> 0 bytes doc/facade-and-adaptor.rst | 434 -- doc/facade_iterator_category.rst | 53 - doc/filter_iterator.html | 390 -- doc/filter_iterator.pdf | Bin 77005 -> 0 bytes doc/filter_iterator.rst | 29 - doc/filter_iterator_abstract.rst | 11 - doc/filter_iterator_eg.rst | 69 - doc/filter_iterator_ref.html | 241 - doc/filter_iterator_ref.rst | 169 - doc/function_output_iterator.html | 171 - doc/function_output_iterator.pdf | Bin 60656 -> 0 bytes doc/function_output_iterator.rst | 24 - doc/function_output_iterator_abstract.rst | 8 - doc/function_output_iterator_eg.rst | 35 - doc/function_output_iterator_ref.rst | 62 - doc/generate.py | 32 - doc/index.html | 241 - doc/index.rst | 319 - doc/indirect_iterator.html | 332 -- doc/indirect_iterator.pdf | Bin 82359 -> 0 bytes doc/indirect_iterator.rst | 30 - doc/indirect_iterator_abstract.rst | 11 - doc/indirect_iterator_eg.rst | 69 - doc/indirect_iterator_ref.diff | 245 - doc/indirect_iterator_ref.html | 147 - doc/indirect_iterator_ref.rst | 177 - doc/indirect_reference_ref.rst | 29 - doc/interoperability-revisited.rst | 232 - doc/issues.html | 165 - doc/issues.rst | 152 - doc/iter-issue-list.html | 5271 ----------------- doc/iter-issue-list.rst | 3841 ------------ doc/iterator_adaptor.html | 450 -- doc/iterator_adaptor.pdf | Bin 106075 -> 0 bytes doc/iterator_adaptor.rst | 37 - doc/iterator_adaptor_abstract.diff | 22 - doc/iterator_adaptor_abstract.rst | 16 - doc/iterator_adaptor_body.diff | 35 - doc/iterator_adaptor_body.rst | 40 - doc/iterator_adaptor_ref.html | 230 - doc/iterator_adaptor_ref.rst | 178 - doc/iterator_adaptor_tutorial.rst | 135 - doc/iterator_archetypes.html | 220 - doc/iterator_archetypes.pdf | Bin 66747 -> 0 bytes doc/iterator_archetypes.rst | 189 - doc/iterator_concepts.html | 123 - doc/iterator_concepts.pdf | Bin 67067 -> 0 bytes doc/iterator_concepts.rst | 128 - doc/iterator_facade.html | 1321 ----- doc/iterator_facade.pdf | Bin 180312 -> 0 bytes doc/iterator_facade.rst | 40 - doc/iterator_facade_abstract.rst | 4 - doc/iterator_facade_body.rst | 192 - doc/iterator_facade_ref.rst | 438 -- doc/iterator_facade_tutorial.rst | 523 -- doc/iterator_traits.html | 120 - doc/iterator_traits.pdf | Bin 53725 -> 0 bytes doc/iterator_traits.rst | 94 - doc/make_counting_iterator.rst | 9 - doc/make_filter_iterator.html | 53 - doc/make_filter_iterator.rst | 16 - doc/make_reverse_iterator.rst | 9 - doc/make_transform_iterator.rst | 19 - doc/make_zip_iterator.rst | 8 - doc/new-iter-concepts.html | 1023 ---- doc/new-iter-concepts.pdf | 3499 ----------- doc/new-iter-concepts.rst | 799 --- doc/oldeqnew.png | Bin 33786 -> 0 bytes doc/permutation_iterator.html | 295 - doc/permutation_iterator.pdf | Bin 71073 -> 0 bytes doc/permutation_iterator.rst | 37 - doc/permutation_iterator_abstract.rst | 4 - doc/permutation_iterator_body.rst | 15 - doc/permutation_iterator_eg.rst | 67 - doc/permutation_iterator_ref.rst | 126 - doc/pointee.html | 179 - doc/pointee.pdf | Bin 68096 -> 0 bytes doc/pointee.rst | 84 - doc/pointee_ref.rst | 38 - doc/ref_problem.html | 70 - doc/ref_problem.rst | 63 - doc/reverse_iterator.html | 281 - doc/reverse_iterator.pdf | Bin 68047 -> 0 bytes doc/reverse_iterator.rst | 29 - doc/reverse_iterator_abstract.rst | 9 - doc/reverse_iterator_eg.rst | 42 - doc/reverse_iterator_ref.rst | 137 - doc/rst2html | 7 - doc/rst2latex | 4 - doc/scanrst.py | 29 - doc/sources.py | 24 - doc/syscmd.py | 14 - doc/transform_iterator.html | 330 -- doc/transform_iterator.pdf | Bin 73219 -> 0 bytes doc/transform_iterator.rst | 28 - doc/transform_iterator_abstract.rst | 3 - doc/transform_iterator_eg.rst | 42 - doc/transform_iterator_ref.diff | 202 - doc/transform_iterator_ref.rst | 171 - doc/traversal.png | Bin 9112 -> 0 bytes doc/zip_iterator.html | 352 -- doc/zip_iterator.pdf | Bin 70909 -> 0 bytes doc/zip_iterator.rst | 25 - doc/zip_iterator_abstract.rst | 6 - doc/zip_iterator_eg.rst | 117 - doc/zip_iterator_ref.rst | 152 - example/Jamfile | 20 - example/counting_iterator_example.cpp | 52 - example/filter_iterator_example.cpp | 58 - example/function_output_iterator_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_iterator_example.cpp | 62 - example/reverse_iterator.cpp | 14 - example/reverse_iterator_example.cpp | 41 - example/transform_iterator_example.cpp | 76 - include/boost/function_output_iterator.hpp | 56 - include/boost/iterator.hpp | 59 - include/boost/iterator/counting_iterator.hpp | 215 - .../iterator/detail/any_conversion_eater.hpp | 19 - include/boost/iterator/detail/config_def.hpp | 135 - .../boost/iterator/detail/config_undef.hpp | 25 - include/boost/iterator/detail/enable_if.hpp | 86 - .../detail/facade_iterator_category.hpp | 209 - .../iterator/detail/minimum_category.hpp | 116 - include/boost/iterator/filter_iterator.hpp | 135 - include/boost/iterator/indirect_iterator.hpp | 139 - include/boost/iterator/interoperable.hpp | 50 - include/boost/iterator/is_lvalue_iterator.hpp | 150 - .../boost/iterator/is_readable_iterator.hpp | 108 - include/boost/iterator/iterator_adaptor.hpp | 364 -- .../boost/iterator/iterator_archetypes.hpp | 500 -- .../boost/iterator/iterator_categories.hpp | 188 - include/boost/iterator/iterator_concepts.hpp | 308 - include/boost/iterator/iterator_facade.hpp | 878 --- include/boost/iterator/iterator_traits.hpp | 92 - include/boost/iterator/new_iterator_tests.hpp | 264 - .../boost/iterator/permutation_iterator.hpp | 67 - include/boost/iterator/reverse_iterator.hpp | 69 - include/boost/iterator/transform_iterator.hpp | 188 - include/boost/iterator/zip_iterator.hpp | 599 -- include/boost/iterator_adaptors.hpp | 10 - 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 | 68 - include/boost/shared_container_iterator.hpp | 62 - index.html | 9 - test/Jamfile | 62 - test/Jamfile.v2 | 57 - test/concept_tests.cpp | 94 - test/counting_iterator_test.cpp | 295 - test/filter_iterator_test.cpp | 197 - test/indirect_iterator_member_types.cpp | 88 - test/indirect_iterator_test.cpp | 219 - test/interoperable.cpp | 59 - test/interoperable_fail.cpp | 21 - test/is_convertible_fail.cpp | 19 - test/is_lvalue_iterator.cpp | 145 - test/is_readable_iterator.cpp | 93 - test/iterator_adaptor_cc.cpp | 41 - test/iterator_adaptor_test.cpp | 322 - test/iterator_archetype_cc.cpp | 61 - test/iterator_archetype_default_ctor.cpp | 21 - test/iterator_facade.cpp | 69 - test/lvalue_concept_fail_expected.cpp | 15 - test/permutation_iterator_test.cpp | 84 - test/pointee.cpp | 72 - test/reverse_iterator_test.cpp | 175 - test/static_assert_same.hpp | 39 - test/transform_iterator_test.cpp | 248 - test/unit_tests.cpp | 110 - test/zip_iterator_test.cpp | 831 --- 219 files changed, 41563 deletions(-) delete mode 100644 development/boost/iterator_categories.hpp delete mode 100644 development/boost/iterator_concepts.hpp delete mode 100644 development/libs/iterator/concept_tests.cpp delete mode 100644 development/libs/iterator/iterator_categories.htm delete mode 100644 development/libs/iterator/iterator_concepts.fig delete mode 100644 development/libs/iterator/iterator_concepts.gif delete mode 100644 development/libs/iterator/iterator_concepts.htm 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 100644 doc/IncrementableIterator.html delete mode 100755 doc/IncrementableIterator.rst delete mode 100644 doc/InteroperableIterator.rst 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.diff 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 100755 doc/filter_iterator_ref.html delete mode 100644 doc/filter_iterator_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_abstract.rst delete mode 100644 doc/function_output_iterator_eg.rst delete mode 100644 doc/function_output_iterator_ref.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.diff delete mode 100755 doc/indirect_iterator_ref.html 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.html delete mode 100755 doc/issues.rst delete mode 100755 doc/iter-issue-list.html delete mode 100644 doc/iter-issue-list.rst delete mode 100644 doc/iterator_adaptor.html delete mode 100755 doc/iterator_adaptor.pdf delete mode 100644 doc/iterator_adaptor.rst delete mode 100755 doc/iterator_adaptor_abstract.diff delete mode 100644 doc/iterator_adaptor_abstract.rst delete mode 100755 doc/iterator_adaptor_body.diff delete mode 100644 doc/iterator_adaptor_body.rst delete mode 100755 doc/iterator_adaptor_ref.html 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.html 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_iterator.html delete mode 100755 doc/permutation_iterator.pdf delete mode 100644 doc/permutation_iterator.rst delete mode 100644 doc/permutation_iterator_abstract.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 100755 doc/ref_problem.html 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.diff 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/Jamfile delete mode 100644 example/counting_iterator_example.cpp delete mode 100644 example/filter_iterator_example.cpp delete mode 100644 example/function_output_iterator_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_iterator_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/iterator.hpp delete mode 100644 include/boost/iterator/counting_iterator.hpp delete mode 100755 include/boost/iterator/detail/any_conversion_eater.hpp delete mode 100644 include/boost/iterator/detail/config_def.hpp delete mode 100644 include/boost/iterator/detail/config_undef.hpp delete mode 100644 include/boost/iterator/detail/enable_if.hpp delete mode 100755 include/boost/iterator/detail/facade_iterator_category.hpp delete mode 100755 include/boost/iterator/detail/minimum_category.hpp delete mode 100644 include/boost/iterator/filter_iterator.hpp delete mode 100644 include/boost/iterator/indirect_iterator.hpp delete mode 100644 include/boost/iterator/interoperable.hpp delete mode 100755 include/boost/iterator/is_lvalue_iterator.hpp delete mode 100755 include/boost/iterator/is_readable_iterator.hpp delete mode 100644 include/boost/iterator/iterator_adaptor.hpp delete mode 100644 include/boost/iterator/iterator_archetypes.hpp delete mode 100644 include/boost/iterator/iterator_categories.hpp delete mode 100644 include/boost/iterator/iterator_concepts.hpp delete mode 100644 include/boost/iterator/iterator_facade.hpp delete mode 100644 include/boost/iterator/iterator_traits.hpp delete mode 100644 include/boost/iterator/new_iterator_tests.hpp delete mode 100644 include/boost/iterator/permutation_iterator.hpp delete mode 100644 include/boost/iterator/reverse_iterator.hpp delete mode 100644 include/boost/iterator/transform_iterator.hpp delete mode 100755 include/boost/iterator/zip_iterator.hpp delete mode 100644 include/boost/iterator_adaptors.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 delete mode 100644 test/Jamfile.v2 delete mode 100644 test/concept_tests.cpp delete mode 100644 test/counting_iterator_test.cpp delete mode 100644 test/filter_iterator_test.cpp delete mode 100644 test/indirect_iterator_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 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_archetype_default_ctor.cpp delete mode 100755 test/iterator_facade.cpp delete mode 100644 test/lvalue_concept_fail_expected.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/development/boost/iterator_categories.hpp b/development/boost/iterator_categories.hpp deleted file mode 100644 index 138a5be..0000000 --- a/development/boost/iterator_categories.hpp +++ /dev/null @@ -1,159 +0,0 @@ -#ifndef BOOST_ITERATOR_CATEGORIES_HPP -#define BOOST_ITERATOR_CATEGORIES_HPP - -#include -#include -#include -#include -#include - -namespace boost { - - // Return Type Categories - struct readable_iterator_tag { }; - struct writable_iterator_tag { }; - struct swappable_iterator_tag { }; - struct mutable_lvalue_iterator_tag : - virtual public writable_iterator_tag, - virtual public readable_iterator_tag { }; - struct constant_lvalue_iterator_tag : - virtual public readable_iterator_tag { }; - - // Traversal Categories - struct forward_traversal_tag { }; - struct bidirectional_traversal_tag : public forward_traversal_tag { }; - struct random_access_traversal_tag : public bidirectional_traversal_tag { }; - - struct error_iterator_tag { }; - - // Inherit from iterator_base if your iterator defines its own - // return_category and traversal_category. Otherwise, the "old style" - // iterator category will be mapped to the return_category and - // traversal_category. - struct new_iterator_base { }; - - namespace detail { - - struct return_category_from_nested_type { - template struct bind { - typedef typename Iterator::return_category type; - }; - }; - - struct traversal_category_from_nested_type { - template struct bind { - typedef typename Iterator::traversal_category type; - }; - }; - - template - struct choose_lvalue_return { - typedef typename ct_if::value, - boost::constant_lvalue_iterator_tag, - boost::mutable_lvalue_iterator_tag>::type type; - }; - - - template - struct iter_category_to_return { - typedef typename ct_if< - is_convertible::value, - typename choose_lvalue_return::type, - typename ct_if< - is_convertible::value, - boost::readable_iterator_tag, - typename ct_if< - is_convertible::value, - boost::writable_iterator_tag, - boost::error_iterator_tag - >::type - >::type - >::type type; - }; - - template - struct iter_category_to_traversal { - typedef typename ct_if< - is_convertible::value, - random_access_traversal_tag, - typename ct_if< - is_convertible::value, - bidirectional_traversal_tag, - forward_traversal_tag - >::type - >::type type; - }; - - struct return_category_from_old_traits { - template class bind { - typedef boost::detail::iterator_traits OldTraits; - typedef typename OldTraits::iterator_category Cat; - typedef typename OldTraits::value_type value_type; - public: - typedef iter_category_to_return::type type; - }; - }; - - struct traversal_category_from_old_traits { - template class bind { - typedef boost::detail::iterator_traits OldTraits; - typedef typename OldTraits::iterator_category Cat; - public: - typedef iter_category_to_traversal::type type; - }; - }; - - template - class choose_return_category { - typedef typename ct_if::value, - return_category_from_nested_type, - return_category_from_old_traits>::type Choice; - public: - typedef typename Choice:: template bind::type type; - }; - - template - class choose_traversal_category { - typedef typename ct_if::value, - traversal_category_from_nested_type, - traversal_category_from_old_traits>::type Choice; - public: - typedef typename Choice:: template bind::type type; - }; - - } // namespace detail - - template - struct return_category { - typedef typename detail::choose_return_category::type type; - }; - - - template - struct traversal_category { - typedef typename detail::choose_traversal_category::type type; - }; - -#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) - - template - struct return_category - { - typedef typename ct_if::value, - constant_lvalue_iterator_tag, - mutable_lvalue_iterator_tag>::type type; - }; - - template - struct traversal_category - { - typedef random_access_traversal_tag type; - }; - -#endif - -} // namespace boost - -#endif // BOOST_ITERATOR_CATEGORIES_HPP diff --git a/development/boost/iterator_concepts.hpp b/development/boost/iterator_concepts.hpp deleted file mode 100644 index a30ff17..0000000 --- a/development/boost/iterator_concepts.hpp +++ /dev/null @@ -1,172 +0,0 @@ -#ifndef BOOST_ITERATOR_CONCEPTS_HPP -#define BOOST_ITERATOR_CONCEPTS_HPP - -#include -#include -#include -#include - -namespace boost_concepts { - // Used a different namespace here (instead of "boost") so that the - // concept descriptions do not take for granted the names in - // namespace boost. - - - //=========================================================================== - // Iterator Access Concepts - - template - class ReadableIteratorConcept { - public: - typedef typename std::iterator_traits::value_type value_type; - typedef typename std::iterator_traits::reference reference; - typedef typename boost::return_category::type return_category; - - void constraints() { - boost::function_requires< boost::SGIAssignableConcept >(); - boost::function_requires< boost::EqualityComparableConcept >(); - boost::function_requires< - boost::DefaultConstructibleConcept >(); - - BOOST_STATIC_ASSERT((boost::is_convertible::value)); - - reference r = *i; // or perhaps read(x) - value_type v(r); - boost::ignore_unused_variable_warning(v); - } - Iterator i; - }; - - template - class WritableIteratorConcept { - public: - typedef typename boost::return_category::type return_category; - - void constraints() { - boost::function_requires< boost::SGIAssignableConcept >(); - boost::function_requires< boost::EqualityComparableConcept >(); - boost::function_requires< - boost::DefaultConstructibleConcept >(); - - BOOST_STATIC_ASSERT((boost::is_convertible::value)); - - *i = v; // a good alternative could be something like write(x, v) - } - ValueType v; - Iterator i; - }; - - template - class ConstantLvalueIteratorConcept { - public: - typedef typename std::iterator_traits::value_type value_type; - typedef typename std::iterator_traits::reference reference; - typedef typename boost::return_category::type return_category; - - void constraints() { - boost::function_requires< ReadableIteratorConcept >(); - - BOOST_STATIC_ASSERT((boost::is_convertible::value)); - - BOOST_STATIC_ASSERT((boost::is_same::value)); - - reference v = *i; - boost::ignore_unused_variable_warning(v); - } - Iterator i; - }; - - template - class MutableLvalueIteratorConcept { - public: - typedef typename std::iterator_traits::value_type value_type; - typedef typename std::iterator_traits::reference reference; - typedef typename boost::return_category::type return_category; - - void constraints() { - boost::function_requires< ReadableIteratorConcept >(); - boost::function_requires< - WritableIteratorConcept >(); - - BOOST_STATIC_ASSERT((boost::is_convertible::value)); - - BOOST_STATIC_ASSERT((boost::is_same::value)); - - reference v = *i; - boost::ignore_unused_variable_warning(v); - } - Iterator i; - }; - - //=========================================================================== - // Iterator Traversal Concepts - - template - class ForwardIteratorConcept { - public: - typedef typename boost::traversal_category::type traversal_category; - - void constraints() { - boost::function_requires< boost::SGIAssignableConcept >(); - boost::function_requires< boost::EqualityComparableConcept >(); - boost::function_requires< - boost::DefaultConstructibleConcept >(); - - BOOST_STATIC_ASSERT((boost::is_convertible::value)); - ++i; - (void)i++; - } - Iterator i; - }; - - template - class BidirectionalIteratorConcept { - public: - typedef typename boost::traversal_category::type traversal_category; - - void constraints() { - boost::function_requires< ForwardIteratorConcept >(); - - BOOST_STATIC_ASSERT((boost::is_convertible::value)); - - --i; - (void)i--; - } - Iterator i; - }; - - template - class RandomAccessIteratorConcept { - public: - typedef typename boost::traversal_category::type traversal_category; - typedef typename std::iterator_traits::difference_type - difference_type; - - void constraints() { - boost::function_requires< BidirectionalIteratorConcept >(); - - BOOST_STATIC_ASSERT((boost::is_convertible::value)); - - i += n; - i = i + n; - i = n + i; - i -= n; - i = i - n; - n = i - j; - } - difference_type n; - Iterator i, j; - }; - -} // namespace boost_concepts - - -#endif // BOOST_ITERATOR_CONCEPTS_HPP diff --git a/development/libs/iterator/concept_tests.cpp b/development/libs/iterator/concept_tests.cpp deleted file mode 100644 index f75f311..0000000 --- a/development/libs/iterator/concept_tests.cpp +++ /dev/null @@ -1,73 +0,0 @@ -#include -#include - -struct new_iterator - : public boost::iterator, - public boost::new_iterator_base -{ - typedef boost::random_access_traversal_tag traversal_category; - typedef boost::mutable_lvalue_iterator_tag return_category; - - 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() -{ -#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) - boost::function_requires< - boost_concepts::MutableLvalueIteratorConcept >(); - boost::function_requires< - boost_concepts::RandomAccessIteratorConcept >(); - - boost::function_requires< - boost_concepts::ConstantLvalueIteratorConcept >(); - boost::function_requires< - boost_concepts::RandomAccessIteratorConcept >(); -#endif - - boost::function_requires< - boost_concepts::MutableLvalueIteratorConcept >(); - boost::function_requires< - boost_concepts::RandomAccessIteratorConcept >(); - - boost::function_requires< - boost_concepts::MutableLvalueIteratorConcept >(); - boost::function_requires< - boost_concepts::RandomAccessIteratorConcept >(); - return 0; -} diff --git a/development/libs/iterator/iterator_categories.htm b/development/libs/iterator/iterator_categories.htm deleted file mode 100644 index 83c29e5..0000000 --- a/development/libs/iterator/iterator_categories.htm +++ /dev/null @@ -1,160 +0,0 @@ - - - - Boost Iterator Traits - - - -C++ Boost -
- -

Boost Iterator Category Traits

-Header boost/iterator_categories.hpp - -

-The boost::traversal_category and -boost::return_category traits classes provides access to the -category tags for iterators that model the Boost Iterator Concepts, which are a -replacement for the iterator requirements in the C++ standard. The -other associated types of the Boost iterator concepts are accessed -through the std::iterator_traits class. - -

    -
  • traversal_category<Iter>::type   Can the iterator go forward, backward, etc.? -
  • return_category<Iter>::type   Is the iterator read or write only? - Is the dereferenced type an lvalue? -
- -

-An important feature of the boost::traversal_category and -boost::return_category classes is that they are backwards -compatible, i.e., they automatically work for iterators for which -there are valid definitions of std::iterator_traits. The old -iterator_category is mapped to the appropriate traversal and -return categories. - -

-When creating a new iterator type that is meant to work with -boost::traversal_category and -boost::return_category, you can either create a -specialization of these classes for your iterator type, or you can -provide all the necessary associated types as nested typedefs. In -this case, your iterator class will need to inherit from -new_iterator_base to let the category traits know -that it will be able to find typedefs for traversal_category -and return_category in you iterator class. - - -Each of the new iterator requirements will need a category tag. - -

-namespace boost {
-
-  // Return Type Categories
-  struct readable_iterator_tag { };
-  struct writable_iterator_tag { };
-  struct swappable_iterator_tag { };
-  struct mutable_lvalue_iterator_tag : virtual public writable_iterator_tag,
-    virtual public readable_iterator_tag { };
-  struct constant_lvalue_iterator_tag : public readable_iterator_tag { };
-
-  // Traversal Categories
-  struct forward_traversal_tag { };
-  struct bidirectional_traversal_tag : public forward_traversal_tag { };
-  struct random_access_traversal_tag : public bidirectional_traversal_tag { };
-
-}
-
- -

-The following is pseudo-code for the iterator category traits classes. - -

-namespace boost {
-
-  // Inherit from iterator_base if your iterator defines its own
-  // return_category and traversal_category. Otherwise, the "old style"
-  // iterator category will be mapped to the return_category and
-  // traversal_category.
-  struct new_iterator_base { };
-
-  template <typename Iterator>
-  struct return_category
-  {
-    // Pseudo-code
-    if (Iterator inherits from new_iterator_base) {
-      typedef typename Iterator::return_category type;
-    } else {
-      typedef std::iterator_traits<Iterator> OldTraits;
-      typedef typename OldTraits::iterator_category Cat;
-      if (Cat inherits from std::forward_iterator_tag)
-	if (is-const(T))
-	  typedef boost::constant_lvalue_iterator_tag type;
-	else
-	  typedef boost::mutable_lvalue_iterator_tag type;
-      else if (Cat inherits from std::input_iterator_tag)
-	typedef boost::readable_iterator_tag type;
-      else if (Cat inherits from std::output_iterator_tag)
-	typedef boost::writable_iterator_tag type;
-    }
-  };
-
-  template <typename T>
-  struct return_category<T*>
-  {
-    // Pseudo-code
-    if (is-const(T))
-      typedef boost::constant_lvalue_iterator_tag type;
-    else
-      typedef boost::mutable_lvalue_iterator_tag type;
-  };
-
-  template <typename Iterator>
-  struct traversal_category
-  {
-    // Pseudo-code
-    if (Iterator inherits from new_iterator_base) {
-      typedef typename Iterator::traversal_category type;
-    } else {
-      typedef std::iterator_traits<Iterator> OldTraits;
-      typedef typename OldTraits::iterator_category Cat;
-
-      if (Cat inherits from std::random_access_iterator_tag)
-	typedef boost::random_access_traversal_tag type;
-      else if (Cat inherits from std::bidirectional_iterator_tag)
-	typedef boost::bidirectional_traversal_tag type;
-      else if (Cat inherits from std::forward_iterator_tag)
-	typedef boost::forward_traversal_tag type;
-    }
-  };
-
-  template <typename T>
-  struct traversal_category<T*>
-  {
-    typedef boost::random_access_traversal_tag type;
-  };
-
-}
-
- -
-
jeremy siek
- - -Last modified: Mon Mar 19 12:59:30 EST 2001 - - - diff --git a/development/libs/iterator/iterator_concepts.fig b/development/libs/iterator/iterator_concepts.fig deleted file mode 100644 index 198205e..0000000 --- a/development/libs/iterator/iterator_concepts.fig +++ /dev/null @@ -1,37 +0,0 @@ -#FIG 3.2 -Landscape -Center -Inches -Letter -100.00 -Single --2 -1200 2 -6 150 2325 4275 4350 -2 1 0 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 1725 4050 1725 3450 -2 1 0 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 1725 3150 1725 2550 -4 0 0 100 0 19 18 0.0000 4 210 3180 375 2550 ForwardTraversalIterator\001 -4 0 0 100 0 19 18 0.0000 4 210 3765 225 3450 BidirectionalTraversalIterator\001 -4 0 0 100 0 19 18 0.0000 4 210 4125 150 4350 RandomAccessTraversalIterator\001 --6 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 4800 3600 4800 2400 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 6900 3000 5400 2400 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 6900 3000 7500 2400 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 6900 3000 9075 2475 -4 0 0 100 0 19 18 0.0000 4 210 2040 6600 2400 WritableIterator\001 -4 0 0 100 0 19 18 0.0000 4 210 2145 3900 2400 ReadableIterator\001 -4 0 0 50 0 19 18 0.0000 4 210 2835 5700 3300 MutableLvalueIterator\001 -4 0 0 50 0 19 18 0.0000 4 270 2355 9075 2400 SwappableIterator\001 -4 0 0 50 0 19 18 0.0000 4 210 2970 3825 3900 ConstantLvalueIterator\001 diff --git a/development/libs/iterator/iterator_concepts.gif b/development/libs/iterator/iterator_concepts.gif deleted file mode 100644 index bac35c7d13e402c6bc2fd5ff770bf444da6f4426..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3287 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 avv|wt|F#w{F3RO$?#R71Ygz~cgEatv^I|Fh diff --git a/development/libs/iterator/iterator_concepts.htm b/development/libs/iterator/iterator_concepts.htm deleted file mode 100644 index f2f8dcd..0000000 --- a/development/libs/iterator/iterator_concepts.htm +++ /dev/null @@ -1,663 +0,0 @@ - - - - -Iterator Concepts - -C++ Boost - -
- - -

Iterator Concepts

- -

The standard iterator categories and requirements are flawed because -they use a single hierarchy of requirements to address two orthogonal -issues: iterator traversal and dereference return -type. The current iterator requirement hierarchy is mainly -geared towards iterator traversal (hence the category names), while -requirements that address dereference return type sneak in at various -places. - -

-The iterator requirements should be separated into two hierarchies. -One set of concepts handles the return type semantics: -

- -The other set of concepts handles iterator traversal: - - - -The current Input Iterator and Output Iterator requirements will -continue to be used as is. Note that Input Iterator implies Readable -Iterator and Output Iterator implies Writable Iterator. - -

-Note: we considered defining a Single-Pass Iterator, which could be -combined with Readable or Writable Iterator to replace the Input and -Output Iterator requirements. We rejected this idea because there are -some differences between Input and Output Iterators that make it hard -to merge them: for example Input Iterator requires Equality Comparable -while Output Iterator does not. - - -

-
- - - -
Figure 1: -The iterator concepts and refinement relationships. -
-
-

- - -

Relationship with the standard iterator concepts

- -

-std::Input Iterator implies boost::ReadableIterator. - -

-std::Output Iterator implies boost::Writable Iterator. - -

-std::Forward Iterator refines boost::Forward Iterator and -boost::Constant Lvalue Iterator or boost::Mutable Lvalue Iterator. - -

-std::Bidirectional Iterator refines boost::Bidirectional Iterator and -boost::Constant Lvalue Iterator or boost::Mutable Lvalue Iterator. - -

-std::Random Access Iterator refines boost::Random Access Iterator and -boost::Constant Lvalue Iterator or boost::Mutable Lvalue Iterator. - - -

Notation

- - - - - - - - - - - - - - - - - -
XThe iterator type.
TThe value type of X, i.e., std::iterator_traits<X>::value_type.
x, yAn object of type X.
tAn object of type T.
- -

- -


- - -

-Readable Iterator -

- -A Readable Iterator is an iterator that dereferences to produce an -rvalue that is convertible to the value_type of the -iterator. - -

Associated Types

- - - - - - - - - - - - - - - - - - - - - -
Value typestd::iterator_traits<X>::value_typeThe type of the objects pointed to by the iterator.
Reference typestd::iterator_traits<X>::reference - The return type of dereferencing the iterator. This - type must be convertible to T. -
Return Categorystd::return_category<X>::type - A type convertible to std::readable_iterator_tag -
- -

Refinement of

- -Copy Constructible - -

Valid expressions

- - - - - - - - - - - - - - - -
NameExpressionType requirementsReturn type
Dereference*x std::iterator_traits<X>::reference
Member accessx->mT is a type with a member named m. -If m is a data member, the type of m. -If m is a member function, the return type of m. -
- -

- -


- - -

-Writable Iterator -

- -A Writable Iterator is an iterator that can be used to store a value -using the dereference-assignment expression. - -

Definitions

- -If x is an Writable Iterator of type X, then the -expression *x = a; stores the value a into -x. Note that operator=, like other C++ functions, -may be overloaded; it may, in fact, even be a template function. In -general, then, a may be any of several different types. A -type A belongs to the set of value types of X -if, for an object a of type A, *x = a; is -well-defined and does not require performing any non-trivial -conversions on a. - -

Associated Types

- - - - - - - - - -
Return Categorystd::return_category<X>::type - A type convertible to std::writable_iterator_tag -
- - - -

Refinement of

- -Copy Constructible - -

Valid expressions

- - - - - - - - - - -
NameExpressionReturn type
Dereference assignment*x = aunspecified
- -

- - -


- - -

-Swappable Iterator -

- -A Swappable Iterator is an iterator whose dereferenced values can be -swapped. - -

-Note: the requirements for Swappable Iterator are dependent on the -issues surrounding std::swap() being resolved. Here we assume -that the issue will be resolved by allowing the overload of -std::swap() for user-defined types. - -

-Note: Readable Iterator and Writable Iterator combined implies -Swappable Iterator because of the fully templated -std::swap(). However, Swappable Iterator does not imply -Readable Iterator nor Writable Iterator. - -

Associated Types

- - - - - - - - - -
Return Categorystd::return_category<X>::type - A type convertible to std::swappable_iterator_tag -
- - -

Valid expressions

- -Of the two valid expressions listed below, only one OR the -other is required. If std::iter_swap() is overloaded for -X then std::swap() is not required. If -std::iter_swap() is not overloaded for X then the -default (fully templated) version is used, which will call -std::swap() (this means changing the current requirements for -std::iter_swap()). - -

- - - - - - - - - - - - - - - - - -
NameExpressionReturn type
Iterator Swapstd::iter_swap(x, y)void
Dereference and Swapstd::swap(*x, *y)void
- -

- - -


- - -

-Constant Lvalue Iterator -

- -A Constant Lvalue Iterator is an iterator that dereferences to produce a -const reference to the pointed-to object, i.e., the associated -reference type is const T&. Changing the value -of or destroying an iterator that models Constant Lvalue Iterator does -not invalidate pointers and references previously obtained from that -iterator. - - -

Refinement of

- -Readable Iterator - -

Associated Types

- - - - - - - - - - - - - - - - - -
Reference typestd::iterator_traits<X>::reference - The return type of dereferencing the iterator, which must be - const T&. -
Return Categorystd::return_category<X>::type - A type convertible to std::constant_lvalue_iterator_tag -
- - - -

- -


- - -

-Mutable Lvalue Iterator -

- -A Mutable Lvalue Iterator is an iterator that dereferences to produce a -reference to the pointed-to object. The associated reference -type is T&. Changing the value of or destroying an -iterator that models Mutable Lvalue Iterator does not invalidate -pointers and references previously obtained from that iterator. - -

Refinement of

- -Readable Iterator, -Writable Iterator, -and Swappable Iterator. - - - -

Associated Types

- - - - - - - - - - - - - - - - - -
Reference typestd::iterator_traits<X>::referenceThe return type of dereferencing the iterator, which must be - T&.
Return Categorystd::return_category<X>::type - A type convertible to std::mutable_lvalue_iterator_tag -
- - - -

-


- - -

-Forward Traversal Iterator -

- -The Forward Iterator is an iterator that can be incremented. Also, it -is permissible to make multiple passes through the iterator's range. - -

Refinement of

- -Copy Constructible, -Assignable, -Default Constructible, and -Equality Comparable - - -

Associated types

- - - - - - - - - - - - - - -
Difference Typestd::iterator_traits<X>::difference_type - A signed integral type used for representing distances - between iterators that point into the same range. -
Traversal Categorystd::traversal_category<X>::type - A type convertible to std::forward_traversal_tag -
- -

Valid expressions

- - - - - - - - - - - - - - -
NameExpressionType requirementsReturn type
Preincrement++i X&
Postincrementi++ convertible to const X&
- -

-


- - -

-Bidirectional Traversal Iterator -

- -An iterator that can be incremented and decremented. - -

Refinement of

- -Forward Traversal Iterator - -

Associated types

- - - - - - - -
Traversal Categorystd::traversal_category<X>::type - A type convertible to std::bidirectional_traversal_tag -
- -

Valid expressions

- - - - - - - - - - - - -
NameExpressionType requirementsReturn type
Predecrement--i X&
Postdecrementi-- convertible to const X&
- -

-


- - -

-Random Access Traversal Iterator -

- -An iterator that provides constant-time methods for moving forward and -backward in arbitrary-sized steps. - -

Refinement of

- -Bidirectional Traversal Iterator and -Less Than Comparable where < is a total ordering - -

Associated types

- - - - - - - -
Traversal Categorystd::traversal_category<X>::type - A type convertible to std::random_access_traversal_tag -
- -

Valid expressions

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameExpressionType requirementsReturn type
Iterator additioni += n X&
Iterator additioni + n or n + i X
Iterator subtractioni -= n X&
Iterator subtractioni - n X
Differencei - j std::iterator_traits<X>::difference_type
Element operatori[n]X must also be a model of - Readable Iterator. std::iterator_traits<X>::reference
Element assignmenti[n] = tX must also be a model of - Writable Iterator.unspecified
- -

- -


- - -
Copyright © 2000 -Jeremy Siek, Univ.of Notre Dame (jsiek@lsc.nd.edu) -
- - - diff --git a/doc/BidirectionalTraversal.html b/doc/BidirectionalTraversal.html deleted file mode 100644 index 0daa77e..0000000 --- a/doc/BidirectionalTraversal.html +++ /dev/null @@ -1,71 +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 8655c63..0000000 --- a/doc/BidirectionalTraversal.rst +++ /dev/null @@ -1,37 +0,0 @@ -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 abe055f..0000000 --- a/doc/ForwardTraversal.html +++ /dev/null @@ -1,62 +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 c4156d5..0000000 --- a/doc/ForwardTraversal.rst +++ /dev/null @@ -1,27 +0,0 @@ -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/IncrementableIterator.html b/doc/IncrementableIterator.html deleted file mode 100644 index c3ccfd7..0000000 --- a/doc/IncrementableIterator.html +++ /dev/null @@ -1,61 +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 f14928e..0000000 --- a/doc/IncrementableIterator.rst +++ /dev/null @@ -1,28 +0,0 @@ -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 0cb751e..0000000 --- a/doc/InteroperableIterator.rst +++ /dev/null @@ -1,57 +0,0 @@ -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/LvalueIterator.html b/doc/LvalueIterator.html deleted file mode 100644 index 3e3f97a..0000000 --- a/doc/LvalueIterator.html +++ /dev/null @@ -1,51 +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 46c61b1..0000000 --- a/doc/LvalueIterator.rst +++ /dev/null @@ -1,21 +0,0 @@ -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 4f7f40e..0000000 --- a/doc/RandomAccessTraversal.html +++ /dev/null @@ -1,129 +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 97b0f3d..0000000 --- a/doc/RandomAccessTraversal.rst +++ /dev/null @@ -1,63 +0,0 @@ -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 57edb8f..0000000 --- a/doc/ReadableIterator.html +++ /dev/null @@ -1,59 +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 d38dad5..0000000 --- a/doc/ReadableIterator.rst +++ /dev/null @@ -1,23 +0,0 @@ - -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 a6091c7..0000000 --- a/doc/SinglePassIterator.html +++ /dev/null @@ -1,63 +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 2754d97..0000000 --- a/doc/SinglePassIterator.rst +++ /dev/null @@ -1,28 +0,0 @@ -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 faf0347..0000000 --- a/doc/SwappableIterator.html +++ /dev/null @@ -1,49 +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 ec94d32..0000000 --- a/doc/SwappableIterator.rst +++ /dev/null @@ -1,19 +0,0 @@ -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 dafee1c..0000000 --- a/doc/WritableIterator.html +++ /dev/null @@ -1,47 +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 7b854cc..0000000 --- a/doc/WritableIterator.rst +++ /dev/null @@ -1,17 +0,0 @@ -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 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 Ofx*+&&t;ucLK6UGF@%Z$ diff --git a/doc/counting_iterator.html b/doc/counting_iterator.html deleted file mode 100644 index a098422..0000000 --- a/doc/counting_iterator.html +++ /dev/null @@ -1,285 +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-01-15
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. All rights reserved
- --- - - - -
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 cce54f8a8abb25f6180f34419059ced31e86ead6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81036 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 Rvdk^a42`)|RbBnvxB&ET0IUE2 diff --git a/doc/counting_iterator.rst b/doc/counting_iterator.rst deleted file mode 100644 index 2d2cad9..0000000 --- a/doc/counting_iterator.rst +++ /dev/null @@ -1,39 +0,0 @@ -+++++++++++++++++++ - 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. All rights reserved - -.. _`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 bdb8491..0000000 --- a/doc/counting_iterator_abstract.rst +++ /dev/null @@ -1,4 +0,0 @@ -``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 5f6b3b3..0000000 --- a/doc/counting_iterator_eg.rst +++ /dev/null @@ -1,40 +0,0 @@ - -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 bc94db7..0000000 --- a/doc/counting_iterator_ref.rst +++ /dev/null @@ -1,145 +0,0 @@ -:: - - 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 0e4226a..0000000 --- a/doc/default.css +++ /dev/null @@ -1,224 +0,0 @@ -/* -:Author: David Goodger -:Contact: goodger@users.sourceforge.net -:date: $Date$ -:version: $Revision$ -:copyright: This stylesheet has been placed in the public domain. - -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.diff b/doc/facade-and-adaptor.diff deleted file mode 100755 index 07f0e40..0000000 --- a/doc/facade-and-adaptor.diff +++ /dev/null @@ -1,228 +0,0 @@ -Index: facade-and-adaptor.rst -=================================================================== -RCS file: /cvsroot/boost/boost/libs/iterator/doc/facade-and-adaptor.rst,v -retrieving revision 1.9 -retrieving revision 1.14 -diff -b -d -u -r1.9 -r1.14 ---- facade-and-adaptor.rst 22 Sep 2003 19:55:00 -0000 1.9 -+++ facade-and-adaptor.rst 18 Jan 2004 15:51:06 -0000 1.14 -@@ -3,17 +3,25 @@ None - +++++++++++++++++++++++++++++ - - :Author: David Abrahams, Jeremy Siek, Thomas Witt --:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu, witt@acm.org -+:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu, witt@styleadvisor.com - :organization: `Boost Consulting`_, Indiana University `Open Systems -- Lab`_, University of Hanover `Institute for Transport -- Railway Operation and Construction`_ --:date: $Date: 2004/01/18 19:56:39 $ --:Number: N1530=03-0113 -+ Lab`_, `Zephyr Associates, Inc.`_ -+:date: $Date: 2004/01/18 19:56:39 $ -+ -+: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. All rights reserved - - .. _`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 -+.. _`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 -@@ -124,15 +132,15 @@ None - ================= - - This proposal is formulated in terms of the new ``iterator concepts`` --as proposed in `n1477`_, since user-defined and especially adapted -+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. - --.. _`n1477`: http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/papers/2003/n1477.html -+.. _n1550: http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/papers/2003/n1550.html - --This proposal does not strictly depend on proposal `n1477`_, as there -+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 `n1477`_ was not accepted. -+could be reformulated using this mapping if n1550_ was not accepted. - - Interoperability - ================ -@@ -141,24 +149,24 @@ None - current standard. There are currently two defect reports that are - concerned with interoperability issues. - --Issue `179`_ concerns the fact that mutable container iterator types -+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 -+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 -+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 -+.. _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 -@@ -195,7 +203,7 @@ None - * ``filter_iterator``, which provides a view of an iterator range in - which some elements of the underlying range are skipped. - --.. _counting_iterator: -+.. _counting: - - * ``counting_iterator``, which adapts any incrementable type - (e.g. integers, iterators) so that incrementing/decrementing the -@@ -226,15 +234,13 @@ Issue 9.1 et al - :: - - struct use_default; -- const unsigned use_default_access = -1; - - struct iterator_core_access { /* implementation detail */ }; - - template < - class Derived - , class Value -- , unsigned AccessCategory -- , class TraversalCategory -+ , class CategoryOrTraversal - , class Reference = Value& - , class Difference = ptrdiff_t - > -@@ -244,8 +250,7 @@ Issue 9.1 et al. - class Derived - , class Base - , class Value = use_default -- , unsigned Access = use_default_access -- , class Traversal = use_default -+ , class CategoryOrTraversal = use_default - , class Reference = use_default - , class Difference = use_default - > -@@ -254,10 +259,9 @@ Issue 9.1 et al. - template < - class Iterator - , class Value = use_default -- , unsigned Access = use_default_access -- , class Traversal = use_default -+ , class CategoryOrTraversal = use_default - , class Reference = use_default - , class Difference = use_default - > - class indirect_iterator; - -Issue 9.44y - -+ template -+ struct pointee; -+ -+ template -+ struct indirect_reference; -+ - template - class reverse_iterator; - -@@ -277,8 +287,7 @@ Issue 9.1 et al. - - template < - class Incrementable -- , unsigned Access = use_default_access -- , class Traversal = use_default -+ , class CategoryOrTraversal = use_default - , class Difference = use_default - > - class counting_iterator -@@ -312,17 +321,35 @@ Issue 9.8 - Specialized adaptors [lib.iterator.special.adaptors] - ==================================================== - --.. The requirements for all of these need to be written *much* more -- formally -DWA -- - --[*Note:* The ``enable_if_convertible::type`` expression used in -+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 ``enable_if_convertible`` approach uses SFINAE to -+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.] -+implicitly convertible. -+] - - - Indirect iterator -@@ -330,6 +357,16 @@ Issue 9.44y - - .. 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`` - .................................... - -@@ -393,8 +430,7 @@ - - - --.. -- LocalWords: Abrahams Siek Witt istream ostream iter MTL strided interoperate -+.. 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 diff --git a/doc/facade-and-adaptor.html b/doc/facade-and-adaptor.html deleted file mode 100755 index 018b502..0000000 --- a/doc/facade-and-adaptor.html +++ /dev/null @@ -1,2632 +0,0 @@ - - - - - - -Iterator Facade and Adaptor - - - - - - -

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-01-21
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. All rights reserved
- --- - - - -
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 iter);
-    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 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 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
- ---- - - - - - - - - - - - - - - - - -
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
-

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.

-
-

Class template function_output_iterator

-
-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
- -
-
-
-
-
- - - - diff --git a/doc/facade-and-adaptor.pdf b/doc/facade-and-adaptor.pdf deleted file mode 100755 index 7b052e1ea523c6c32854cbf7a45d0a7c8334bd01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242993 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°f5;>3%ya;m+Hq+8~?1hxh3 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 z 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 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:: function_output_iterator_abstract.rst - -Class template ``function_output_iterator`` -........................................... - -.. include:: function_output_iterator_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 d1d90a7..0000000 --- a/doc/filter_iterator.html +++ /dev/null @@ -1,390 +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-01-13
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. All rights reserved
- --- - - - -
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 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
- ---- - - - - - - - - - - - - - - - - -
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
-

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 67962563a8a4810e0fee3a7c62df66cbeb26443c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77005 zcmY!laBIOiwLVFj6p32;$QB zFD=Q*%u6j+Ff)S)_$B717AshoLUV_ivo&L(^894^O94GK`KBJ{spOdj>#pN`FRS4hA?wOTqE?{N^^3O67%v> zixf0MGBS%5GK&=oQqn?FBXktPQj3Z~I*j!UO$<#fbq)0l4U)hXrRJr8JO*+ZxkMpa!O+4` z&%nS?!3<=*xv7G&fsvlExut@csga(!kugYRaA{HrIC1%8=4Er~JA$Gdn%p2U&ZQr$ z07@;8B%_g=n3+?OZswnPP7k z8<^>tn42QJVQ!{pW@<(SZ)6o`re-_j7w70@mg=RZl%lyFlsYJPy@i3Exv3G{^(K}^ zdS=EJRB(NHW=V-dW?8CUXyOFF;9)Vqd_Ml98pJrICV>sfC^? zI7$rk%*`ywNl6(cB?VUc`sL;2dPF27Q0AoA6UHXydIsj^3T6;bm>3)C8Jij_n3+(+ z6F5^5s6?UI=|)Bddd5bk3TB4pdX{FU3MLk2dPas83T8$YdKQLcWo4uYAe@N61tQ75 z02QC$G74HCSz72B8!4C=8R?mtnJO58{91LLs7A2PC7wHyP=H(X@XBMNSc|(xR)N-zYk)93%Cnc)s` ze6B4@EiBC}O3ek8`RFbN)iG3Zv9X1*o{6EQf{~$-p0R<2g0ZEEp0SY;Spl4zpOTt` z5xk(9kXnv4GuE>(F;y@!GS@S*P%t(((KE3iFEQj7fKo+fejbK<$*N94X$Uj*8k>Lu z(_F#O*h0_P%tXQ1)Kt&V+?1%mO|3}GEyzJHpuvp?SZKQC=aqmfVK+l_1w&8`6vU

L^gF6J)A_eq>m1V1S#p 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 *jug*NYAkpK%6gG*Yk5$t%f@O!( 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 o0;oe5#HH_ - 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.html b/doc/filter_iterator_ref.html deleted file mode 100755 index 2ca03a0..0000000 --- a/doc/filter_iterator_ref.html +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - - - -

-
-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 base() const;
-    reference operator*() const;
-    filter_iterator& operator++();
-private:
-    Predicate m_pred; // exposition
-    Iterator m_iter;  // exposition
-    Iterator m_end;   // exposition
-};
-
-

The iterator_category member is a type convertible to the tags -corresponding to each standard concept modeled by filter_iterator, -as described in the models section.

-
-

filter_iterator requirements

-

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.

-

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

-
-
-

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
- ---- - - - - - - - - - - - - - - - - -
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
-
-
-

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.
Returns: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());

- --- - - - -
Returns: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.
Returns: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.
Returns:A filter iterator whose members are copied from t.
-

Predicate predicate() const;

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

Iterator end() const;

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

Iterator 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/filter_iterator_ref.rst b/doc/filter_iterator_ref.rst deleted file mode 100644 index 80c6182..0000000 --- a/doc/filter_iterator_ref.rst +++ /dev/null @@ -1,169 +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 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 | -+-----------------------------+----------------------------------------------------------+ - -+--------------------------------+----------------------------------------------+ -| 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 | -+-------------------------------------------------------+---------------------------------+ - - -``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/function_output_iterator.html b/doc/function_output_iterator.html deleted file mode 100644 index e3ea4e8..0000000 --- a/doc/function_output_iterator.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - -Function Output Iterator - - - - - - - -
-

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-01-13
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. All rights reserved
- --- - - - -
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.
- -
-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;
-}
-
-
-
- - - - diff --git a/doc/function_output_iterator.pdf b/doc/function_output_iterator.pdf deleted file mode 100755 index 9e3910d53eb8fa124d8aea27d3586b98483a36e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60656 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 diff --git a/doc/function_output_iterator.rst b/doc/function_output_iterator.rst deleted file mode 100644 index 01ac022..0000000 --- a/doc/function_output_iterator.rst +++ /dev/null @@ -1,24 +0,0 @@ -++++++++++++++++++++++++++ - 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. All rights reserved - -.. _`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:: function_output_iterator_abstract.rst - -.. contents:: Table of Contents - -.. include:: function_output_iterator_ref.rst -.. include:: function_output_iterator_eg.rst \ No newline at end of file diff --git a/doc/function_output_iterator_abstract.rst b/doc/function_output_iterator_abstract.rst deleted file mode 100644 index 11fb4f1..0000000 --- a/doc/function_output_iterator_abstract.rst +++ /dev/null @@ -1,8 +0,0 @@ -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/function_output_iterator_eg.rst b/doc/function_output_iterator_eg.rst deleted file mode 100644 index eb635df..0000000 --- a/doc/function_output_iterator_eg.rst +++ /dev/null @@ -1,35 +0,0 @@ -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/function_output_iterator_ref.rst b/doc/function_output_iterator_ref.rst deleted file mode 100644 index f46a91c..0000000 --- a/doc/function_output_iterator_ref.rst +++ /dev/null @@ -1,62 +0,0 @@ -:: - - 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/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 9297690..0000000 --- a/doc/index.html +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - -The Boost.Iterator Library Boost - - - -

The Boost.Iterator Library Boost

- - - - - diff --git a/doc/index.rst b/doc/index.rst deleted file mode 100755 index f181ab5..0000000 --- a/doc/index.rst +++ /dev/null @@ -1,319 +0,0 @@ -+++++++++++++++++++++++++++++++++++++++++++++++++ - The Boost.Iterator Library |(logo)|__ -+++++++++++++++++++++++++++++++++++++++++++++++++ - -.. |(logo)| image:: ../../../c++boost.gif - :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. All rights reserved - -.. _`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 c1fe764..0000000 --- a/doc/indirect_iterator.html +++ /dev/null @@ -1,332 +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-01-15
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. All rights reserved
- --- - - - -
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 357d91fcb136d665e3057f564a651ee74777190b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82359 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� 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 BsCWPX diff --git a/doc/indirect_iterator.rst b/doc/indirect_iterator.rst deleted file mode 100644 index ad3778d..0000000 --- a/doc/indirect_iterator.rst +++ /dev/null @@ -1,30 +0,0 @@ -+++++++++++++++++++ - 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. All rights reserved - -.. _`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 448b734..0000000 --- a/doc/indirect_iterator_abstract.rst +++ /dev/null @@ -1,11 +0,0 @@ -``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 356a2dd..0000000 --- a/doc/indirect_iterator_eg.rst +++ /dev/null @@ -1,69 +0,0 @@ -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.diff b/doc/indirect_iterator_ref.diff deleted file mode 100644 index 0c1bf5c..0000000 --- a/doc/indirect_iterator_ref.diff +++ /dev/null @@ -1,245 +0,0 @@ -Index: indirect_iterator_ref.rst -=================================================================== -RCS file: /cvsroot/boost/boost/libs/iterator/doc/indirect_iterator_ref.rst,v -retrieving revision 1.2 -retrieving revision 1.21 -diff -w -d -u -b -r1.2 -r1.21 ---- indirect_iterator_ref.rst 22 Sep 2003 19:55:00 -0000 1.2 -+++ indirect_iterator_ref.rst 15 Jan 2004 00:01:33 -0000 1.21 - - - -@@ -3,82 +3,139 @@ - template < - class Iterator - , class Value = use_default - -Issue 9.15 - -- , unsigned Access = use_default_access -- , class Traversal = use_default -+ , class CategoryOrTraversal = use_default - , class Reference = use_default - , class Difference = use_default - > - class indirect_iterator - -Issue 9.37x - -- : public iterator_adaptor - { -- friend class iterator_core_access; - 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); -+ - -Issue 9.15 - - template < -- class Iterator2, class Value2, unsigned Access2, class Traversal2 -+ class Iterator2, class Value2, class Category2 - , class Reference2, class Difference2 - > - indirect_iterator( - indirect_iterator< -- Iterator2, Value2, Access2, Traversal2, Reference2, Difference2 -+ Iterator2, Value2, Category2, Reference2, Difference2 - > const& y - , typename enable_if_convertible::type* = 0 // exposition - ); - -Issue 9.37x - -- private: // as-if specification -- typename indirect_iterator::reference dereference() const -- { -- return **this->base(); -- } -+ -+ 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 - .................................. - -Issue 9.40x - --The ``value_type`` of the ``Iterator`` template parameter should --itself be dereferenceable. The return type of the ``operator*`` for --the ``value_type`` must be the same type as the ``Reference`` template --parameter. The ``Value`` template parameter will be the ``value_type`` --for the ``indirect_iterator``, unless ``Value`` is const. If ``Value`` --is ``const X``, then ``value_type`` will be *non-* ``const X``. The --default for ``Value`` is -+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.] - -- iterator_traits< iterator_traits::value_type >::value_type - -Issue 9.37x - -+``indirect_iterator`` models -+............................ - --If the default is used for ``Value``, then there must be a valid --specialization of ``iterator_traits`` for the value type of the base --iterator. -+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``: - --The ``Reference`` parameter will be the ``reference`` type of the --``indirect_iterator``. The default is ``Value&``. -+ * Readable Iterator if ``reference(*v)`` is convertible to -+ ``value_type``. - --The ``Access`` and ``Traversal`` parameters are passed unchanged to --the corresponding parameters of the ``iterator_adaptor`` base --class, and the ``Iterator`` parameter is passed unchanged as the --``Base`` parameter to the ``iterator_adaptor`` base class. -+ * Writable Iterator if ``reference(*v) = t`` is a valid -+ expression (where ``t`` is an object of type -+ ``indirect_iterator::value_type``) - --The indirect iterator will model the most refined standard traversal --concept that is modeled by the ``Iterator`` type. The indirect --iterator will model the most refined standard access concept that is --modeled by the value type of ``Iterator``. -+ * 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 - ................................ - -Issue 9.37x - -+In addition to the operations required by the concepts described -+above, specializations of ``indirect_iterator`` provide the -+following operations. -+ -+ - -Issue 9.28 and 9.37x - - ``indirect_iterator();`` - - :Requires: ``Iterator`` must be Default Constructible. - :Returns: An instance of ``indirect_iterator`` with -- a default constructed base object. -+ a default-constructed ``m_iterator``. - - -Issue 9.37x - - ``indirect_iterator(Iterator x);`` - - :Returns: An instance of ``indirect_iterator`` with -- the ``iterator_adaptor`` subobject copy constructed from ``x``. -+ ``m_iterator`` copy constructed from ``x``. - - :: - - -Issue 9.29 - -@@ -94,5 +151,27 @@ - ); - - :Requires: ``Iterator2`` is implicitly convertible to ``Iterator``. --:Returns: An instance of ``indirect_iterator`` that is a copy of ``y``. -+:Returns: An instance of ``indirect_iterator`` whose -+ ``m_iterator`` subobject is constructed from ``y.base()``. -+ - -Issue 9.37x - -+``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_iterator_ref.html b/doc/indirect_iterator_ref.html deleted file mode 100755 index 08e5018..0000000 --- a/doc/indirect_iterator_ref.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - - - -
-
-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
-    );
-};
-
-

The member types of indirect_iterator are defined according to the -following pseudo-code. We use the abbreviation -V=iterator_traits<Iterator>::value_type and v is an object of -type V.:

-
-if (Value is use_default) then
-    typedef iterator_traits<V>::value_type value_type;
-else
-    typedef remove_const<Value>::type value_type;
-
-if (Reference is use_default) then
-    typedef iterator_traits<V>::reference reference;
-else
-    typedef Reference reference;
-
-typedef Value* pointer;
-
-if (Difference is use_default)
-    typedef iterator_traits<Iterator>::difference_type difference_type;
-else
-    typedef Difference difference_type;
-
-

The member indirect_iterator::iterator_category is a type that -satisfies the requirements of the concepts modeled by the indirect -iterator as specified in the models section.

-
-

indirect_iterator requirements

-

The Iterator argument shall meet the requirements of Readable -Iterator. The CategoryOrTraversal argument shall be one of the -standard iterator tags or use_default. If CategoryOrTraversal -is an iterator tag, the template parameter Iterator argument shall -meet the traversal requirements corresponding to the iterator tag.

-

The expression *v, where v is an object of type -iterator_traits<Iterator>::value_type, must be a valid expression -and must be convertible to indirect_iterator::reference. Also, -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

-

If CategoryOrTraversal is a standard iterator tag, -indirect_iterator is a model of the iterator concept corresponding -to the tag, otherwise indirect_iterator satisfies the requirements -of the most refined standard traversal concept that is satisfied by -the Iterator argument.

-

indirect_iterator models Readable Iterator. If -indirect_iterator::reference(*v) = t is a valid expression (where -t is an object of type indirect_iterator::value_type) then -indirect_iterator models Writable Iterator. If -indirect_iterator::reference is a reference then -indirect_iterator models Lvalue Iterator.

-
-
-

indirect_iterator operations

-

indirect_iterator();

- --- - - - - - -
Requires:Iterator must be Default Constructible.
Returns:An instance of indirect_iterator with -a default-constructed iterator_adaptor subobject.
-

indirect_iterator(Iterator x);

- --- - - - -
Returns:An instance of indirect_iterator with -the iterator_adaptor subobject 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.
Returns:An instance of indirect_iterator whose -iterator_adaptor subobject is constructed from y.base().
-
-
- - diff --git a/doc/indirect_iterator_ref.rst b/doc/indirect_iterator_ref.rst deleted file mode 100644 index 1065659..0000000 --- a/doc/indirect_iterator_ref.rst +++ /dev/null @@ -1,177 +0,0 @@ -:: - - 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 6754b9c..0000000 --- a/doc/interoperability-revisited.rst +++ /dev/null @@ -1,232 +0,0 @@ -++++++++++++++++++++++++++++ - Interoperability Revisited -++++++++++++++++++++++++++++ - -:date: $Date$ -:copyright: Copyright Thomas Witt 2004. - - -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 neccessary - -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 neccessary 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) \ No newline at end of file diff --git a/doc/issues.html b/doc/issues.html deleted file mode 100755 index 8087b45..0000000 --- a/doc/issues.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - -Problem with is_writable and is_swappable in N1550 - - - -
-

Problem with is_writable and is_swappable in N1550

- --- - - - - - - - - - - - -
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)
- -
-

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<X>::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<Iterator>::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<It>::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. -
  3. Change the is_readable specification to be: -is_readable<X>::type is true_type if the -result type of X::operator* is convertible to -iterator_traits<X>::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.

    -
  4. -
  5. Remove the iterator_tag class.

    -
  6. -
  7. Change the specification of traversal_category to:

    -
    -traversal-category(Iterator) =
    -    let cat = iterator_traits<Iterator>::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;
    -
    -
  8. -
-
-
-

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. -
  3. 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.
  4. -
  5. 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.
  6. -
  7. The changes to the specification of traversal_category are a -direct result of the removal of iterator_tag.
  8. -
-
-
- - 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/iter-issue-list.html b/doc/iter-issue-list.html deleted file mode 100755 index 695b466..0000000 --- a/doc/iter-issue-list.html +++ /dev/null @@ -1,5271 +0,0 @@ - - - - - - -Iterator concept and adapter issues - - - - - -
-

Iterator concept and adapter issues

- --- - - - - - -
Date:2004-01-21
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.
-
-

Index

- -
-
-

Issues from Matt's TR issues list

-
-

9.1 iterator_access overspecified?

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

The proposal includes:

-
-enum iterator_access { 
-   readable_iterator = 1, writable_iterator = 2,
-   swappable_iterator = 4, lvalue_iterator = 8
-}; 
-
-

In general, the standard specifies thing like this as a bitmask -type with a list of defined names, and specifies neither the exact -type nor the specific values. Is there a reason for iterator_access -to be more specific?

- --- - - - - -
Proposed resolution:
 The iterator_access enum will be removed, -so this is no longer an issue. See the resolution to 9.15.
-
-
-

9.2 operators of iterator_facade overspecified

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

In general, we've provided operational semantics for things like -operator++. That is, we've said that ++iter must work, without -requiring either a member function or a non-member function. -iterator_facade specifies most operators as member -functions. There's no inherent reason for these to be members, so -we should remove this requirement. Similarly, some operations are -specified as non-member functions but could be implemented as -members. Again, the standard doesn't make either of these choices, -and TR1 shouldn't, either. So: operator*(), operator++(), -operator++(int), operator--(), operator--(int), -operator+=, operator-=, operator-(difference_type), -operator-(iterator_facade instance), and operator+ should -be specified with operational semantics and not explicitly required -to be members or non-members.

- --- - - - - - - -
Proposed resolution:
 Not a defect.
Rationale:The standard uses valid expressions such as ++iter -in requirements tables, such as for input iterator. However, for -classes, such as reverse_iterator, the standard uses function -prototypes, as we have done here for -iterator_facade. Further, the prototype specification does -not prevent the implementor from using members or non-members, -since nothing the user can do in a conforming program can detect -how the function is implemented.
-
-
-

9.3 enable_if_interoperable needs standardese

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

The only discussion of what this means is in a note, so is -non-normative. Further, the note seems to be incorrect. It says -that enable_if_interoperable only works for types that "are -interoperable, by which we mean they are convertible to each -other." This requirement is too strong: it should be that one of -the types is convertible to the other. N1541 48

- --- - - - - -
Proposed resolution:
 

Add normative text. Relax requirements in the -proposed way.

-

Change:

-
-[Note: The enable_if_interoperable template used above is -for exposition purposes. The member operators should be only be -in an overload set provided the derived types Dr1 and -Dr2 are interoperable, by which we mean they are -convertible to each other. The enable_if_interoperable -approach uses SFINAE to take the operators out of the overload -set when the types are not interoperable.]
-

To:

-
-

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
-    >
-{};
-
-
-
-
-
-

9.4 enable_if_convertible unspecified, conflicts with requires

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

In every place where enable_if_convertible is used it's used like -this (simplified):

-
-template<class T>
-struct C
-{
-  template<class T1>
-  C(T1, enable_if_convertible<T1, T>::type* = 0);
-};
-
-

The idea being that this constructor won't compile if T1 isn't -convertible to T. As a result, the constructor won't be considered -as a possible overload when constructing from an object x where the -type of x isn't convertible to T. In addition, however, each of -these constructors has a requires clause that requires -convertibility, so the behavior of a program that attempts such a -construction is undefined. Seems like the enable_if_convertible -part is irrelevant, and should be removed. There are two -problems. First, enable_if_convertible is never specified, so we -don't know what this is supposed to do. Second: we could reasonably -say that this overload should be disabled in certain cases or we -could reasonably say that behavior is undefined, but we can't say -both.

-

Thomas Witt writes that the goal of putting in -enable_if_convertible here is to make sure that a specific overload -doesn't interfere with the generic case except when that overload -makes sense. He agrees that what we currently have is deficient. -Dave Abrahams writes that there is no conflict with the requires -cause because the requires clause only takes effect when the -function is actually called. The presence of the constructor -signature can/will be detected by is_convertible without violating -the requires clause, and thus it makes a difference to disable -those constructor instantiations that would be disabled by -enable_if_convertible even if calling them invokes undefined -behavior. There was more discussion on the reflector: -c++std-lib-12312, c++std-lib-12325, c++std-lib- 12330, -c++std-lib-12334, c++std-lib-12335, c++std-lib-12336, -c++std-lib-12338, c++std-lib- 12362.

- --- - - - - -
Proposed resolution:
 

Change:

-
-[Note: 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 -enable_if_convertible approach uses SFINAE to take the -constructor out of the overload set when the types are not -implicitly convertible.]
-

To:

-
-

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. ]

-
-
-
-
-

9.5 iterator_adaptor has an extraneous 'bool' at the start of the template definition

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

The title says it all; this is probably just a typo.

- --- - - - - -
Proposed resolution:
 Remove the 'bool'.
-
-
-

9.6 Name of private member shouldn't be normative

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

iterator_adaptor has a private member named m_iterator. Presumably -this is for exposition only, since it's an implementation -detail. It needs to be marked as such.

- --- - - - - -
Proposed resolution:
 
-
Mark the member m_iterator as exposition
-
only. Note/DWA: I think this is NAD because the user can't -detect it, though I'm happy to mark it exposition only.
-
-

In [lib.iterator.adaptor]

-

Change:

-
-Base m_iterator;
-
-

to:

-
-Base m_iterator; // exposition only
-
-
-
-
-

9.7 iterator_adaptor operations specifications are a bit inconsistent

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

iterator_adpator() has a Requires clause, that Base must be default -constructible. iterator_adaptor(Base) has no Requires clause, -although the Returns clause says that the Base member is copy -construced from the argument (this may actually be an oversight in -N1550, which doesn't require iterators to be copy constructible or -assignable).

- --- - - - - -
Proposed resolution:
 

Add a requirements section for the template -parameters of iterator_adaptor, and state that Base must be Copy -Constructible and Assignable.

-

N1550 does in fact include requirements for copy constructible -and assignable in the requirements tables. To clarify, we've also -added the requirements to the text.

-
-
-
-

9.8 Specialized adaptors text should be normative

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

similar to 9.3, "Specialized Adaptors" has a note describing -enable_if_convertible. This should be normative text.

- --- - - - - -
Proposed resolution:
 Changed it to normative -text. See the resolution of 9.4
-
-
-

9.9 Reverse_iterator text is too informal

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

reverse iterator "flips the direction of the base iterator's -motion". This needs to be more formal, as in the current -standard. Something like: "iterates through the controlled sequence -in the opposite direction"

- --- - - - - -
Proposed resolution:
 

Change:

-
-The reverse iterator adaptor flips the direction of a base -iterator's motion. Invoking operator++() moves the base -iterator backward and invoking operator--() moves the base -iterator forward.
-

to:

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

9.10 'prior' is undefined

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

reverse_iterator::dereference is specified as calling a function -named 'prior' which has no specification.

- --- - - - - - - -
Proposed resolution:
 

Change the specification to avoid using prior as follows.

-

Remove:

-
-typename reverse_iterator::reference dereference() const { return *prior(this->base()); }
-
-

And at the end of the operations section add:

-
-

reference operator*() const;

- --- - - - -
Effects:
-
-Iterator tmp = m_iterator;
-return *--tmp;
-
-
-
Rationale:The style of specification has changed because of issue 9.37x.
-
-
-

9.11 "In other words" is bad wording

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

Transform iterator has a two-part specification: it does this, in -other words, it does that. "In other words" always means "I didn't -say it right, so I'll try again." We need to say it once.

- --- - - - - -
Proposed resolution:
 

Change:

-
-The transform iterator adapts an iterator by applying some function -object to the result of dereferencing the iterator. In other words, -the operator* of the transform iterator first dereferences the -base iterator, passes the result of this to the function object, and -then returns the result.
-

to:

-
-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.
-
-
-
-

9.12 Transform_iterator shouldn't mandate private member

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

transform_iterator has a private member named 'm_f' which should be -marked "exposition only."

- --- - - - - -
Proposed resolution:
 

Mark the member m_f as exposition -only. Note/DWA: I think this is NAD because the user can't -detect it, though I'm happy to mark it exposition only.

-

Change:

-
-UnaryFunction m_f;
-
-

to:

-
-UnaryFunction m_f;   // exposition only
-
-
-
-
-

9.13 Unclear description of counting iterator

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

The description of Counting iterator is unclear. "The counting -iterator adaptor implements dereference by returning a reference to -the base object. The other operations are implemented by the base -m_iterator, as per the inheritance from iterator_adaptor."

- --- - - - - -
Proposed resolution:
 

Change:

-
-The counting iterator adaptor implements dereference by -returning a reference to the base object. The other operations -are implemented by the base m_iterator, as per the -inheritance from iterator_adaptor.
-

to:

-
-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.
-
-
-
-

9.14 Counting_iterator's difference type

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

Counting iterator has the following note:

-
-[Note: implementers are encouraged to provide an implementation -of distance_to and a difference_type that avoids overflows in the -cases when the Incrementable type is a numeric type.]
-

I'm not sure what this means. The user provides a template argument -named Difference, but there's no difference_type. I assume this is -just a glitch in the wording. But if implementors are encouraged to -ignore this argument if it won't work right, why is it there?

- --- - - - - -
Proposed resolution:
 The difference_type was inherited from -iterator_adaptor. However, we've removed the explicit -inheritance, so explicit typedefs have been added. See the -resolution of 9.37x.
-
-
-

9.15 How to detect lvalueness?

- --- - - - - - -
Submitter:Dave Abrahams
Status:New
-

Shortly after N1550 was accepted, we discovered that an iterator's -lvalueness can be determined knowing only its value_type. This -predicate can be calculated even for old-style iterators (on whose -reference type the standard places few requirements). A trait in -the Boost iterator library does it by relying on the compiler's -unwillingness to bind an rvalue to a T& function template -parameter. Similarly, it is possible to detect an iterator's -readability knowing only its value_type. Thus, any interface which -asks the user to explicitly describe an iterator's lvalue-ness or -readability seems to introduce needless complexity.

- --- - - - - -
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. -
  3. Change the is_readable specification. Remove the -requirement for support of the is_readable trait from the -Readable Iterator concept.
  4. -
  5. Remove the iterator_tag class and transplant the logic for -choosing an iterator category into iterator_facade.
  6. -
  7. Change the specification of traversal_category.
  8. -
  9. Remove Access parameters from N1530
  10. -
-

In N1550:

-

Remove:

-
-

Since the access concepts are not related via refinement, but -instead cover orthogonal issues, we do not use tags for the -access concepts, but instead use the equivalent of a bit field.

-

We provide an access mechanism for mapping iterator types to -the new traversal tags and access bit field. Our design reuses -iterator_traits<Iter>::iterator_category as the access -mechanism. To that end, the access and traversal information is -bundled into a single type using the following iterator_tag -class.

-
-enum iterator_access { readable_iterator = 1, writable_iterator = 2, 
-    swappable_iterator = 4, lvalue_iterator = 8 };
-
-template <unsigned int access_bits, class TraversalTag>
-struct iterator_tag : /* appropriate old category or categories */ {
-  static const iterator_access access =
-    (iterator_access)access_bits & 
-      (readable_iterator | writable_iterator | swappable_iterator);
-  typedef TraversalTag traversal;
-};
-
-

The access_bits argument is declared to be unsigned int -instead of the enum iterator_access for convenience of -use. For example, the expression (readable_iterator | -writable_iterator) produces an unsigned int, not an -iterator_access. The purpose of the lvalue_iterator -part of the iterator_access enum is to communicate to -iterator_tag whether the reference type is an lvalue so -that the appropriate old category can be chosen for the base -class. The lvalue_iterator bit is not recorded in the -iterator_tag::access data member.

-

The iterator_tag class template is derived from the -appropriate iterator tag or tags from the old requirements -based on the access bits and traversal tag passed as template -parameters. The algorithm for determining the old tag or tags -picks the least refined old concepts that include all of the -requirements of the access and traversal concepts (that is, the -closest fit), if any such category exists. For example, the -category tag for a Readable Single Pass Iterator will always be -derived from input_iterator_tag, while the category tag for -a Single Pass Iterator that is both Readable and Writable will -be derived from both input_iterator_tag and -output_iterator_tag.

-

We also provide several helper classes that make it convenient -to obtain the access and traversal characteristics of an -iterator. These helper classes work both for iterators whose -iterator_category is iterator_tag and also for -iterators using the original iterator categories.

-
-template <class Iterator> struct is_readable  { typedef ... type; };
-template <class Iterator> struct is_writable { typedef ... type; };
-template <class Iterator> struct is_swappable { typedef ... type; };
-template <class Iterator> struct traversal_category { typedef ... type; };
-
-
-

After:

-
-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.
-

Add:

-
-

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.

-
-

From the Readable Iterator Requirements table, remove:

-
- ----- - - - - - - -
is_readable<X>::typetrue_type 
-
-

From the Writable Iterator Requirements table, remove:

-
- ----- - - - - - - -
is_writable<X>::typetrue_type 
-
-

From the Swappable Iterator Requirements table, remove:

-
- ----- - - - - - - -
is_swappable<X>::typetrue_type 
-
-

From [lib.iterator.synopsis] replace:

-
-template <class Iterator> struct is_readable;
-template <class Iterator> struct is_writable;
-template <class Iterator> struct is_swappable;
-template <class Iterator> struct traversal_category;
-
-enum iterator_access { readable_iterator = 1, writable_iterator = 2, 
-    swappable_iterator = 4, lvalue_iterator = 8 };
-
-template <unsigned int access_bits, class TraversalTag>
-struct iterator_tag : /* appropriate old category or categories */ {
-  static const iterator_access access =
-    (iterator_access)access_bits & 
-      (readable_iterator | writable_iterator | swappable_iterator);
-  typedef TraversalTag traversal;
-};
-
-

with:

-
-template <class Iterator> struct is_readable_iterator;
-template <class Iterator> struct iterator_traversal;
-
-

In [lib.iterator.traits], remove:

-
-

The iterator_tag class template is an iterator category tag -that encodes the access enum and traversal tag in addition to -being compatible with the original iterator tags. The -iterator_tag class inherits from one of the original -iterator tags according to the following pseudo-code.

-
-inherit-category(access, traversal-tag) =
-     if ((access & readable_iterator) && (access & lvalue_iterator)) {
-         if (traversal-tag is convertible to random_access_traversal_tag)
-             return random_access_iterator_tag;
-         else if (traversal-tag is convertible to bidirectional_traversal_tag)
-             return bidirectional_iterator_tag;
-         else if (traversal-tag is convertible to forward_traversal_tag)
-             return forward_iterator_tag;
-         else if (traversal-tag is convertible to single_pass_traversal_tag)
-             if (access-tag is convertible to writable_iterator_tag)
-                 return input_output_iterator_tag;
-             else
-                 return input_iterator_tag;
-         else
-             return null_category_tag;
-     } else if ((access & readable_iterator) and (access & writable_iterator)
-                and traversal-tag is convertible to single_pass_iterator_tag)
-         return input_output_iterator_tag;
-     else if (access & readable_iterator
-              and traversal-tag is convertible to single_pass_iterator_tag)
-         return input_iterator_tag;
-     else if (access & writable_iterator
-              and traversal-tag is convertible to incrementable_iterator_tag)
-         return output_iterator_tag;
-     else
-         return null_category_tag;
-
-

If the argument for TraversalTag is not convertible to -incrementable_iterator_tag then the program is ill-formed.

-
-

Change:

-
-

The is_readable, is_writable, is_swappable, and -traversal_category class templates are traits classes. For -iterators whose iterator_traits<Iter>::iterator_category -type is iterator_tag, these traits obtain the access -enum and traversal member type from within -iterator_tag. For iterators whose -iterator_traits<Iter>::iterator_category type is not -iterator_tag and instead is a tag convertible to one of the -original tags, the appropriate traversal tag and access bits -are deduced. The following pseudo-code describes the -algorithm.

-
-is-readable(Iterator) = 
-    cat = iterator_traits<Iterator>::iterator_category;
-    if (cat == iterator_tag<Access,Traversal>)
-        return Access & readable_iterator;
-    else if (cat is convertible to input_iterator_tag)
-        return true;
-    else
-        return false;
-
-is-writable(Iterator) =
-    cat = iterator_traits<Iterator>::iterator_category;
-    if (cat == iterator_tag<Access,Traversal>)
-        return Access & writable_iterator;
-    else if (cat is convertible to output_iterator_tag)
-         return true;
-    else if (
-         cat is convertible to forward_iterator_tag
-         and iterator_traits<Iterator>::reference is a 
-             mutable reference)
-        return true;
-    else
-        return false;
-
-is-swappable(Iterator) =
-    cat = iterator_traits<Iterator>::iterator_category;
-    if (cat == iterator_tag<Access,Traversal>)
-        return Access & swappable_iterator;
-    else if (cat is convertible to forward_iterator_tag) {
-        if (iterator_traits<Iterator>::reference is a const reference)
-            return false;
-        else
-            return true;
-    } else 
-        return false;
-
-traversal-category(Iterator) =
-    cat = iterator_traits<Iterator>::iterator_category;
-    if (cat == iterator_tag<Access,Traversal>)
-        return Traversal;
-    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;
-
-

The following specializations provide the access and traversal -category tags for pointer types.

-
-template <typename T>
-struct is_readable<const T*> { typedef true_type type; };
-template <typename T>
-struct is_writable<const T*> { typedef false_type type; };
-template <typename T>
-struct is_swappable<const T*> { typedef false_type type; };
-
-template <typename T>
-struct is_readable<T*> { typedef true_type type; };
-template <typename T>
-struct is_writable<T*> { typedef true_type type; };
-template <typename T>
-struct is_swappable<T*> { typedef true_type type; };
-
-template <typename T>
-struct traversal_category<T*>
-{
-  typedef random_access_traversal_tag type;
-};
-
-
-

to:

-
-

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
-
-
-

In N1530:

-

In [lib.iterator.helper.synopsis]:

-

Change:

-
-const unsigned use_default_access = -1;
-
-struct iterator_core_access { /* implementation detail */ };
-
-template <
-    class Derived
-  , class Value
-  , unsigned AccessCategory
-  , class TraversalCategory
-  , class Reference  = Value&
-  , class Difference = ptrdiff_t
->
-class iterator_facade;
-
-template <
-    class Derived
-  , class Base
-  , class Value      = use_default
-  , unsigned Access  = use_default_access
-  , class Traversal  = use_default
-  , class Reference  = use_default
-  , class Difference = use_default
->
-class iterator_adaptor;
-
-template <
-    class Iterator
-  , class Value = use_default
-  , unsigned Access  = use_default_access
-  , class Traversal  = use_default
-  , class Reference = use_default
-  , class Difference = use_default
->
-class indirect_iterator;
-
-

To:

-
-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;
-
-

Change:

-
-template <
-    class Incrementable
-  , unsigned Access  = use_default_access
-  , class Traversal  = use_default
-  , class Difference = use_default
->
-class counting_iterator
-
-

To:

-
-template <
-    class Incrementable
-  , class CategoryOrTraversal  = use_default
-  , class Difference = use_default
->
-class counting_iterator;
-
-

In [lib.iterator.facade]:

-

Change:

-
-template <
-    class Derived
-  , class Value
-  , unsigned AccessCategory
-  , class TraversalCategory
-  , class Reference  = /* see below */
-  , class Difference = ptrdiff_t
->
-class iterator_facade {
-
-

to:

-
-template <
-    class Derived
-  , class Value
-  , class CategoryOrTraversal
-  , class Reference  = Value&
-  , class Difference = ptrdiff_t
->
-class iterator_facade {
-
-

Change:

-
-typedef iterator_tag<AccessCategory, TraversalCategory> iterator_category;
-
-

to:

-
-typedef /* see below */ iterator_category;
-
-

Change:

-
-// Comparison operators
-template <class Dr1, class V1, class AC1, class TC1, class R1, class D1,
-          class Dr2, class V2, class AC2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1, Dr2, bool>::type // exposition
-operator ==(iterator_facade<Dr1, V1, AC1, TC1, R1, D1> const& lhs,
-            iterator_facade<Dr2, V2, AC2, TC2, R2, D2> const& rhs);
-
-template <class Dr1, class V1, class AC1, class TC1, class R1, class D1,
-          class Dr2, class V2, class AC2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1, Dr2, bool>::type
-operator !=(iterator_facade<Dr1, V1, AC1, TC1, R1, D1> const& lhs,
-            iterator_facade<Dr2, V2, AC2, TC2, R2, D2> const& rhs);
-
-template <class Dr1, class V1, class AC1, class TC1, class R1, class D1,
-          class Dr2, class V2, class AC2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1, Dr2, bool>::type
-operator <(iterator_facade<Dr1, V1, AC1, TC1, R1, D1> const& lhs,
-           iterator_facade<Dr2, V2, AC2, TC2, R2, D2> const& rhs);
-
-template <class Dr1, class V1, class AC1, class TC1, class R1, class D1,
-          class Dr2, class V2, class AC2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1, Dr2, bool>::type
-operator <=(iterator_facade<Dr1, V1, AC1, TC1, R1, D1> const& lhs,
-            iterator_facade<Dr2, V2, AC2, TC2, R2, D2> const& rhs);
-
-template <class Dr1, class V1, class AC1, class TC1, class R1, class D1,
-          class Dr2, class V2, class AC2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1, Dr2, bool>::type
-operator >(iterator_facade<Dr1, V1, AC1, TC1, R1, D1> const& lhs,
-           iterator_facade<Dr2, V2, AC2, TC2, R2, D2> const& rhs);
-
-template <class Dr1, class V1, class AC1, class TC1, class R1, class D1,
-          class Dr2, class V2, class AC2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1, Dr2, bool>::type
-operator >=(iterator_facade<Dr1, V1, AC1, TC1, R1, D1> const& lhs,
-            iterator_facade<Dr2, V2, AC2, TC2, R2, D2> const& rhs);
-
-template <class Dr1, class V1, class AC1, class TC1, class R1, class D1,
-          class Dr2, class V2, class AC2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1, Dr2, bool>::type
-operator >=(iterator_facade<Dr1, V1, AC1, TC1, R1, D1> const& lhs,
-            iterator_facade<Dr2, V2, AC2, TC2, R2, D2> const& rhs);
-
-// Iterator difference
-template <class Dr1, class V1, class AC1, class TC1, class R1, class D1,
-          class Dr2, class V2, class AC2, class TC2, class R2, class D2>
-typename enable_if_interoperable<Dr1, Dr2, bool>::type
-operator -(iterator_facade<Dr1, V1, AC1, TC1, R1, D1> const& lhs,
-           iterator_facade<Dr2, V2, AC2, TC2, R2, D2> const& rhs);
-
-// Iterator addition
-template <class Derived, class V, class AC, class TC, class R, class D>
-Derived operator+ (iterator_facade<Derived, V, AC, TC, R, D> const&,
-                   typename Derived::difference_type n)
-
-

to:

-
-// 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&);
-
-

After the iterator_facade synopsis, add:

-

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.
-
-
-
-

In [lib.iterator.facade] iterator_facade requirements:

-

Remove:

-
-AccessCategory must be an unsigned value which uses no more -bits than the greatest value of iterator_access.
-

In the Iterator Adaptor section, change:

-
-Several of the template parameters of iterator_adaptor default -to use_default (or use_default_access).
-

to:

-
-Several of the template parameters of iterator_adaptor default -to use_default.
-

In [lib.iterator.special.adaptors]:

-

Change:

-
-template <
-    class Iterator
-  , class Value = use_default
-  , unsigned Access  = use_default_access
-  , class Traversal  = use_default
-  , class Reference = use_default
-  , class Difference = use_default
->
-class indirect_iterator
-
-

to:

-
-template <
-    class Iterator
-  , class Value = use_default
-  , class CategoryOrTraversal = use_default
-  , class Reference = use_default
-  , class Difference = use_default
->
-class indirect_iterator
-
-

Change:

-
-template <
-    class Iterator2, class Value2, unsigned Access2, class Traversal2
-  , class Reference2, class Difference2
->
-indirect_iterator(
-
-

to:

-
-template <
-    class Iterator2, class Value2, class Category2
-  , class Reference2, class Difference2
->
-indirect_iterator(
-
-

Change:

-
-template <
-    class Incrementable
-  , unsigned Access = use_default_access
-  , class Traversal = use_default
-  , class Difference = use_default
->
-class counting_iterator
-
-

to:

-
-template <
-    class Incrementable
-  , class CategoryOrTraversal = use_default
-  , class Difference = use_default
->
-class counting_iterator
-
-

Change:

-
-typedef iterator_tag<
-      writable_iterator
-    , incrementable_traversal_tag
-> iterator_category;
-
-

to:

-
-typedef std::output_iterator_tag iterator_category;
-

In [lib.iterator.adaptor]

-

Change:

-
-template <
-    class Derived
-  , class Base
-  , class Value      = use_default
-  , unsigned Access  = use_default_access
-  , class Traversal  = use_default
-  , class Reference  = use_default
-  , class Difference = use_default
->
-class iterator_adaptor 
-
-

To:

-
-template <
-    class Derived
-  , class Base
-  , class Value               = use_default
-  , class CategoryOrTraversal = use_default
-  , class Reference           = use_default
-  , class Difference = use_default
->
-class iterator_adaptor 
-
-
- --- - - - -
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. -
  3. 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.
  4. -
  5. 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.
  6. -
  7. The changes to the specification of traversal_category are a -direct result of the removal of iterator_tag.
  8. -
-
-
-

9.16 is_writable_iterator returns false positives

- --- - - - - - -
Submitter:Dave Abrahams
Status:New
-

is_writable_iterator returns false positives for forward iterators -whose value_type has a private assignment operator, or whose -reference type is not a reference (currently legal).

- --- - - - - -
Proposed Resolution:
 See the resolution to 9.15.
-
-
-

9.17 is_swappable_iterator returns false positives

- --- - - - - - -
Submitter:Dave Abrahams
Status:New
-

is_swappable_iterator has the same problems as -is_writable_iterator. In addition, if we allow users to write their -own iter_swap functions it's easy to imagine old-style iterators -for which is_swappable returns false negatives.

- --- - - - - -
Proposed Resolution:
 See the resolution to 9.15.
-
-
-

9.18 Are is_readable, is_writable, and is_swappable useful?

- --- - - - - - -
Submitter:Dave Abrahams
Status:New
-

I am concerned that there is little use for any of is_readable, -is_writable, or is_swappable, and that not only do they unduly -constrain iterator implementors but they add overhead to -iterator_facade and iterator_adaptor in the form of a template -parameter which would otherwise be unneeded. Since we can't -implement two of them accurately for old-style iterators, I am -having a hard time justifying their impact on the rest of the -proposal(s).

- --- - - - - -
Proposed Resolution:
 See the resolution to 9.15.
-
-
-

9.19 Non-Uniformity of the "lvalue_iterator Bit"

- --- - - - - - -
Submitter:Dave Abrahams
Status:New
-

The proposed iterator_tag class template accepts an "access bits" -parameter which includes a bit to indicate the iterator's -lvalueness (whether its dereference operator returns a reference to -its value_type. The relevant part of N1550 says:

-
-The purpose of the lvalue_iterator part of the iterator_access -enum is to communicate to iterator_tagwhether the reference type -is an lvalue so that the appropriate old category can be chosen -for the base class. The lvalue_iterator bit is not recorded in -the iterator_tag::access data member.
-

The lvalue_iterator bit is not recorded because N1550 aims to -improve orthogonality of the iterator concepts, and a new-style -iterator's lvalueness is detectable by examining its reference -type. This inside/outside difference is awkward and confusing.

- --- - - - - -
Proposed Resolution:
 The iterator_tag class will be removed, so this is no longer an issue. -See the resolution to 9.15.
-
-
-

9.20 Traversal Concepts and Tags

- --- - - - - - -
Submitter:Dave Abrahams
Status:New
-

Howard Hinnant pointed out some inconsistencies with the naming of -these tag types:

-
-incrementable_iterator_tag // ++r, r++ 
-single_pass_iterator_tag // adds a == b, a != b 
-forward_traversal_iterator_tag // adds multi-pass 
-bidirectional_traversal_iterator_tag // adds --r, r--
-random_access_traversal_iterator_tag // adds r+n,n+r,etc. 
-
-

Howard thought that it might be better if all tag names contained -the word "traversal". It's not clear that would result in the best -possible names, though. For example, incrementable iterators can -only make a single pass over their input. What really distinguishes -single pass iterators from incrementable iterators is not that they -can make a single pass, but that they are equality -comparable. Forward traversal iterators really distinguish -themselves by introducing multi-pass capability. Without entering -a "Parkinson's Bicycle Shed" type of discussion, it might be worth -giving the names of these tags (and the associated concepts) some -extra attention.

- --- - - - - -
Proposed resolution:
 

Change the names of the traversal tags to the -following names:

-
-incrementable_traversal_tag
-single_pass_traversal_tag
-forward_traversal_tag
-bidirectional_traversal_tag
-random_access_traversal_tag
-
-

In [lib.iterator.traversal]:

-

Change:

-
- ----- - - - - - - -
traversal_category<X>::typeConvertible to -incrementable_iterator_tag 
-
-

to:

-
- ----- - - - - - - -
iterator_traversal<X>::typeConvertible to -incrementable_traversal_tag 
-
-

Change:

-
- ----- - - - - - - -
traversal_category<X>::typeConvertible to -single_pass_iterator_tag 
-
-

to:

-
- ----- - - - - - - -
iterator_traversal<X>::typeConvertible to -single_pass_traversal_tag 
-
-

Change:

-
- ----- - - - - - - -
traversal_category<X>::typeConvertible to -forward_traversal_iterator_tag 
-
-

to:

-
- ----- - - - - - - -
iterator_traversal<X>::typeConvertible to -forward_traversal_tag 
-
-

Change:

-
- ----- - - - - - - -
traversal_category<X>::typeConvertible to -bidirectional_traversal_iterator_tag 
-
-

to:

-
- ----- - - - - - - -
iterator_traversal<X>::typeConvertible to -bidirectional_traversal_tag 
-
-

Change:

-
- ------ - - - - - - - -
traversal_category<X>::typeConvertible to -random_access_traversal_iterator_tag  
-
-

to:

-
- ------ - - - - - - - -
iterator_traversal<X>::typeConvertible to -random_access_traversal_tag  
-
-

In [lib.iterator.synopsis], change:

-
-struct incrementable_iterator_tag { };
-struct single_pass_iterator_tag : incrementable_iterator_tag { };
-struct forward_traversal_tag : single_pass_iterator_tag { };
-
-

to:

-
-struct incrementable_traversal_tag { };
-struct single_pass_traversal_tag : incrementable_traversal_tag { };
-struct forward_traversal_tag : single_pass_traversal_tag { };
-
-

Remove:

-
-struct null_category_tag { };
-struct input_output_iterator_tag : input_iterator_tag, output_iterator_tag {};
-
-
-
-
-

9.21 iterator_facade Derived template argument underspecified

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

The first template argument to iterator_facade is named Derived, -and the proposal says:

-
-The Derived template parameter must be a class derived from -iterator_facade.
-

First, iterator_facade is a template, so cannot be derived -from. Rather, the class must be derived from a specialization of -iterator_facade. More important, isn't Derived required to be the -class that is being defined? That is, if I understand it right, the -definition of D here this is not valid:

-
-class C : public iterator_facade<C, ... > { ... }; 
-class D : public iterator_facade<C, ...> { ... }; 
-
-

In the definition of D, the Derived argument to iterator_facade is -a class derived from a specialization of iterator_facade, so the -requirement is met. Shouldn't the requirement be more like "when -using iterator_facade to define an iterator class Iter, the class -Iter must be derived from a specialization of iterator_facade whose -first template argument is Iter." That's a bit awkward, but at the -moment I don't see a better way of phrasing it.

- --- - - - - -
Proposed resolution:
 

In [lib.iterator.facade]

-

Remove:

-
-The Derived template parameter must be a class derived from -iterator_facade.
-

Change:

-
-The following table describes the other requirements on the -Derived parameter. Depending on the resulting iterator's -iterator_category, a subset of the expressions listed in the table -are required to be valid. The operations in the first column must be -accessible to member functions of class iterator_core_access.
-

to:

-
-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 [lib.iterator.adaptor]

-

Change:

-
-The iterator_adaptor is a base class template derived from -an instantiation of iterator_facade.
-

to:

-
-Each specialization of the iterator_adaptor class template -is derived from a specialization of iterator_facade.
-

Change:

-
-The Derived template parameter must be a derived class of -iterator_adaptor.
-

To:

-
-static_cast<Derived*>(iterator_adaptor*) shall be well-formed.
-
-

[Note: The proposed resolution to Issue 9.37 contains related -changes]

-
-
-

9.22 return type of Iterator difference for iterator facade

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

The proposal says:

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

Shouldn't the return type be one of the two iterator types? Which -one? The idea is that if one of the iterator types can be converted -to the other type, then the subtraction is okay. Seems like the -return type should then be the type that was converted to. Is that -right?

- --- - - - - -
Proposed resolution:
 See resolution to 9.34.
-
-
-

9.23 Iterator_facade: minor wording Issue

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

In the table that lists the required (sort of) member functions of -iterator types that are based on iterator_facade, the entry for -c.equal(y) says:

-
-true iff c and y refer to the same position. Implements c == y -and c != y. The second sentence is inside out. c.equal(y) does -not implement either of these operations. It is used to implement -them. Same thing in the description of c.distance_to(z).
- --- - - - - -
Proposed resolution:
 remove "implements" descriptions from -table. See resolution to 9.34
-
-
-

9.24 Use of undefined name in iterator_facade table

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

Several of the descriptions use the name X without defining -it. This seems to be a carryover from the table immediately above -this section, but the text preceding that table says "In the table -below, X is the derived iterator type." Looks like the X:: -qualifiers aren't really needed; X::reference can simply be -reference, since that's defined by the iterator_facade -specialization itself.

- --- - - - - -
Proposed resolution:
 

Remove references to X.

-

In [lib.iterator.facade] operations operator->() const;:

-
-

Change:

-
- --- - - - -
Returns:

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

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

Otherwise returns an object of unspecified type such that, -given an object a of type X, a->m is equivalent -to (w = *a, w.m) for some temporary object w of type -X::value_type.

-

The type X::pointer is Value* if -is_writable_iterator<X>::value is true, and -Value const* otherwise.

-
-
-

to:

-
- --- - - - -
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.

-
-
-

Further changes are covered by issue 9.26.

-
-
-
-
-

9.25 Iterator_facade: wrong return type

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

Several of the member functions return a Derived object or a -Derived&. Their Effects clauses end with:

-
-return *this;
-
-

This should be

-
-return *static_cast<Derived*>(this);
-
- --- - - - - -
Proposed resolution:
 

In [lib.iterator.facade], in the effects clause -of the following operations:

-
-Derived& operator++()
-Derived& operator--()
-Derived& operator+=(difference_type n)
-Derived& operator-=(difference_type n)
-
-
-
Change:
-
return *this
-
to:
-
return *static_cast<Derived*>(this);
-
-
-
-
-

9.26 Iterator_facade: unclear returns clause for operator[]

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

The returns clause for operator[](difference_type n) const -says:

-
-Returns: an object convertible to X::reference and holding a copy -p of a+n such that, for a constant object v of type -X::value_type, X::reference(a[n] = v) is equivalent to p = v. -This needs to define 'a', but assuming it's supposed to be -*this (or maybe *(Derived*)this), it still isn't clear -what this says. Presumably, the idea is that you can index off of -an iterator and assign to the result. But why the requirement -that it hold a copy of a+n? Granted, that's probably how it's -implemented, but it seems over-constrained. And the last phrase -seems wrong. p is an iterator; there's no requirement that you -can assign a value_type object to it. Should that be *p = v? -But why the cast in reference(a[n] = v)?
- --- - - - - -
Proposed resolution:
 

In section operator[]:

-
-

Change:

-
-Writable iterators built with iterator_facade implement -the semantics required by the preferred resolution to issue -299 and adopted by proposal n1477: the result of p[n] -is a proxy object containing a copy of p+n, and p[n] = -x is equivalent to *(p + n) = x. 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[] which returns an lvalue in the -derived iterator class; it will hide the one supplied by -iterator_facade from clients of her iterator.
-

to:

-
-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.
-
-

In [lib.iterator.facade] operations:

-
-

Change:

-
- --- - - - -
Returns:an object convertible to X::reference and -holding a copy p of a+n such that, for a constant -object v of type X::value_type, X::reference(a[n] -= v) is equivalent to p = v.
-
-

to:

-
- --- - - - -
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))
-
-
-
-
-
-

9.27 Iterator_facade: redundant clause

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

operator- has both an effects clause and a returns -clause. Looks like the returns clause should be removed.

- --- - - - - -
Proposed resolution:
 

Remove the returns clause.

-

In [lib.iterator.facade] operations:

-
-
Remove:
-
--- - - - -
Returns:static_cast<Derived const*>(this)->advance(-n);
-
-
-
-
-
-

9.28 indirect_iterator: incorrect specification of default constructor

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

The default constructor returns "An instance of indirect_iterator -with a default constructed base object", but the constructor that -takes an Iterator object returns "An instance of indirect_iterator -with the iterator_adaptor subobject copy constructed from x." The -latter is the correct form, since it does not reach inside the base -class for its semantics. So the default constructor shoudl return -"An instance of indirect_iterator with a default-constructed -iterator_adaptor subobject."

- --- - - - - - - -
Proposed resolution:
 
-
Change:
-
--- - - - -
Returns:An instance of indirect_iterator with -a default constructed base object.
-
-
to:
-
--- - - - -
Returns:An instance of indirect_iterator with -a default-constructed m_iterator.
-
-
-
Rationale:Inheritance from iterator_adaptor has been removed, so we instead -give the semantics in terms of the (exposition only) member -m_iterator.
-
-
-

9.29 indirect_iterator: unclear specification of template constructor

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

The templated constructor that takes an indirect_iterator with a -different set of template arguments says that it returns "An -instance of indirect_iterator that is a copy of [the argument]". -But the type of the argument is different from the type of the -object being constructed, and there is no description of what -a "copy" means. The Iterator template parameter for the argument -must be convertible to the Iterator template parameter for the type -being constructed, which suggests that the argument's contained -Iterator object should be converted to the target type's Iterator -type. Is that what's meant here? -(Pete later writes: In fact, this problem is present in all of the -specialized adaptors that have a constructor like this: the -constructor returns "a copy" of the argument without saying what a -copy is.)

- --- - - - - - - -
Proposed resolution:
 
-
Change:
-
--- - - - -
Returns:An instance of indirect_iterator that is a copy of y.
-
-
to:
-
--- - - - -
Returns:An instance of indirect_iterator whose -m_iterator subobject is constructed from y.base().
-
-
-
Rationale:Inheritance from iterator_adaptor has been removed, so we -instead give the semantics in terms of the member m_iterator.
-
-
-

9.30 transform_iterator argument irregularity

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

The specialized adaptors that take both a Value and a Reference -template argument all take them in that order, i.e. Value precedes -Reference in the template argument list, with the exception of -transform_iterator, where Reference precedes Value. This seems like -a possible source of confusion. Is there a reason why this order is -preferable?

- --- - - - - - - -
Proposed resolution:
 NAD
Rationale:defaults for Value depend on Reference. A sensible -Value can almost always be computed from Reference. The first -parameter is UnaryFunction, so the argument order is already -different from the other adapters.
-
-
-

9.31 function_output_iterator overconstrained

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

function_output_iterator requirements says: "The UnaryFunction must -be Assignable, Copy Constructible, and the expression f(x) must be -valid, where f is an object of type UnaryFunction and x is an -object of a type accepted by f."

-

Everything starting with "and," somewhat reworded, is actually a -constraint on output_proxy::operator=. All that's needed to create -a function_output_iterator object is that the UnaryFunction type be -Assignable and CopyConstructible. That's also sufficient to -dereference and to increment such an object. It's only when you try -to assign through a dereferenced iterator that f(x) has to work, -and then only for the particular function object that the iterator -holds and for the particular value that is being assigned.

-
-
Addition from Jeremy:
-
The constructor for function_output_iterator is also -slightly overconstrained because it requires -the UnaryFunction to have a default constructor -even when the default constructor of function_output_iterator -is not used.
-
- --- - - - - -
Proposed resolution:
 
-
Change:
-
output_proxy operator*();
-
to:
-
/* see below */ operator*();
-
-

After function_output_iterator& operator++(int); add:

-
-private:
-  UnaryFunction m_f;     // exposition only
-
-
-
Change:
-
The UnaryFunction must be Assignable, Copy Constructible, -and the expression f(x) must be valid, where f is an -object of type UnaryFunction and x is an object of a -type accepted by f. The resulting -function_output_iterator is a model of the Writable and -Incrementable Iterator concepts.
-
to:
-
UnaryFunction must be Assignable and Copy Constructible.
-
-

After the requirements section, add:

-
-
-

function_output_iterator models

-
-function_output_iterator is a model of the Writable and -Incrementable Iterator concepts.
-
-
Change:
-
--- - - - -
Returns:An instance of function_output_iterator with -f stored as a data member.
-
-
to:
-
--- - - - -
Effects:Constructs an instance of function_output_iterator -with m_f constructed from f.
-
-
Change:
-

output_proxy operator*();

- --- - - - -
Returns:An instance of output_proxy constructed with -a copy of the unary function f.
-
-
to:
-

operator*();

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

function_output_iterator::output_proxy operations

-

output_proxy(UnaryFunction& f);

- --- - - - -
Returns:An instance of output_proxy with f stored as -a data member.
-

template <class T> output_proxy& operator=(const T& value);

- --- - - - -
Effects:
-m_f(value); 
-return *this; 
-
-
-
-
-

Change:

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

to:

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

9.32 Should output_proxy really be a named type?

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

This means someone can store an output_proxy object for later use, -whatever that means. It also constrains output_proxy to hold a copy -of the function object, rather than a pointer to the iterator -object. Is all this mechanism really necessary?

- --- - - - - -
Proposed resolution:
 See issue 9.31.
-
-
-

9.33 istreambuf_iterator isn't a Readable Iterator

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

c++std-lib-12333:

-
-N1550 requires that for a Readable Iterator a of type X, *a -returns an object of type -iterator_traits<X>::reference. istreambuf_iterator::operator* -returns charT, but istreambuf_iterator::reference is -charT&. So am I overlooking something, or is -istreambuf_iterator not Readable.
- --- - - - - - - -
Proposed resolution:
 

Remove all constraints on -iterator_traits<X>::reference in Readable Iterator and Lvalue -Iterator. Change Lvalue Iterator to refer to T& instead of -iterator_traits<X>::reference.

-
-
Change:
-
A class or built-in type X models the Readable Iterator -concept for the value type T if the following expressions -are valid and respect the stated semantics. U is the type -of any specified member of type T.
-
to:
-
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.
-
-

From the Input Iterator Requirements table, remove:

-
- ----- - - - - - - -
iterator_traits<X>::referenceConvertible to -iterator_traits<X>::value_type 
-
-

Change:

-
- ----- - - - - - - -
*aiterator_traits<X>::referencepre: a is -dereferenceable. If a -== b then *a is -equivalent to *b
-
-

to:

-
- ----- - - - - - - -
*aConvertible to T
-
pre: a is dereferenceable. If a == b then *a
-
is equivalent to *b.
-
-
-
-
-
Change:
-
The Lvalue Iterator concept adds the requirement that the -reference type be a reference to the value type of the -iterator.
-
to:
-
The Lvalue Iterator concept adds the requirement that the -return type of operator* type be a reference to the value -type of the iterator.
-
-

Change:

-
- ----- - - - - - - - - - - - - - - -
Lvalue Iterator Requirements
ExpressionReturn TypeAssertion
iterator_traits<X>::referenceT&T is cv -iterator_traits<X>::value_type -where cv is an optional -cv-qualification
-
-

to:

-
- ----- - - - - - - - - - - - - - - -
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.
-
-

At the end of the section reverse_iterator models, add: -The type iterator_traits<Iterator>::reference must be the type of -*i, where i is an object of type Iterator.

-
Rationale:

Ideally there should be requirements on the reference -type, however, since Readable Iterator is suppose to correspond -to the current standard iterator requirements (which do not place -requirements on the reference type) we will leave them off for -now. There is a DR in process with respect to the reference type -in the stadard iterator requirements. Once that is resolved we -will revisit this issue for Readable Iterator and Lvalue -Iterator.

-

We added Assignable to the requirements for Readable -Iterator. This is needed to have Readable Iterator coincide with -the capabilities of Input Iterator.

-
-
-
-

9.34 iterator_facade free functions unspecified

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

c++std-lib-12562:

-
-The template functions operator==, operator!=, -operator<, operator<=, operator>, operator>=, and -operator- that take two arguments that are specializations of -iterator_facade have no specification. The template function -operator+ that takes an argument that is a specialization of -iterator_facade and an argument of type difference_type has no -specification.
- --- - - - - -
Proposed resolution:
 

Add the missing specifications.

-
-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 -lhs.equal(rhs). Otherwise, rhs.equal(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 -!lhs.equal(rhs). Otherwise, !rhs.equal(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 -lhs.distance_to(rhs) < 0. Otherwise, rhs.distance_to(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 -lhs.distance_to(rhs) <= 0. Otherwise, rhs.distance_to(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 -lhs.distance_to(rhs) > 0. Otherwise, -rhs.distance_to(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 -lhs.distance_to(rhs) >= 0. Otherwise, -rhs.distance_to(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 --lhs.distance_to(rhs). Otherwise, -rhs.distance_to(lhs).
-
-
-
-

9.35 iterator_facade: too many equals?

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

c++std-lib-12563:

-
-

The table listing the functions required for types derived from -iterator_facade has two functions named equal and two named -distance_to:

-
-c.equal(b)
-c.equal(y)
-c.distance_to(b)
-c.distance_to(z)
-
-

where b and c are const objects of the derived type, y and z are -constant objects of certain iterator types that are interoperable -with the derived type. Seems like the 'b' versions are -redundant: in both cases, the other version will take a 'b'. In -fact, iterator_adaptor is specified to use iterator_facade, but -does not provide the 'b' versions of these functions.

-

Are the 'b' versions needed?

-
- --- - - - - -
Proposed resolution:
 

Remove the 'b' versions.

-

In iterator_facade requirements, remove:

-
- ------ - - - - - - - -
c.equal(b)convertible to booltrue iff b and c are -equivalent.Single Pass Iterator
-
-

and remove:

-
- ------ - - - - - - - -
c.distance_to(b)convertible to -X::difference_typeequivalent to distance(c, b)Random Access Traversal -Iterator
-
-
-
-
-

9.36 iterator_facade function requirements

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

c++std-lib-12636:

-
-

The table that lists required functions for the derived type X -passed to iterator_facade lists, among others:

-

for a single pass iterator:

-
-c.equal(b)
-c.equal(y)
-
-

where b and c are const X objects, and y is a const object of a -single pass iterator that is interoperable with X. Since X is -interoperable with itself, c.equal(b) is redundant. There is a -difference in their descriptions, but its meaning isn't -clear. The first is "true iff b and c are equivalent", and the -second is "true iff c and y refer to the same position." Is there -a difference between the undefined term "equivalent" and "refer -to the same position"?

-

Similarly, for a random access traversal iterator:

-
-c.distance_to(b)
-c.distance_to(z)
-
-

where z is a constant object of a random access traversal -iterator that is interoperable with X. Again, X is interoperable -with itself, so c.distance_to(b) is redundant. Also, the -specification for c.distance_to(z) isn't valid. It's written -as "equivalent to distance(c, z)". The template function distance -takes two arguments of the same type, so distance(c, z) isn't -valid if c and z are different types. Should it be -distance(c, (X)z)?

-
- --- - - - - -
Proposed resolution:
 

Removed the 'b' versions (see 9.35) and added the cast.

-

Change:

-
- ------ - - - - - - - -
c.distance_to(z)convertible to -X::difference_typeequivalent to distance(c, z). -Implements c - z, c < z, c -<= z, c > z, and c >= c.Random Access Traversal -Iterator
-
-

to:

-
- ------ - - - - - - - -
c.distance_to(z)convertible to -F::difference_typeequivalent to -distance(c, X(z)).Random Access Traversal -Iterator
-
-
-
-
-
-

More Issues (not from Matt's list)

-
-

9.37x Inheritance in iterator_adaptor and other adaptors is an overspecification

- --- - - - - - -
Submitter:Pete Becker
Status:New
-

c++std-lib-12696: -The paper requires that iterator_adaptor be derived from an -appropriate instance of iterator_facade, and that most of the specific -forms of adaptors be derived from appropriate instances of -iterator_adaptor. That seems like overspecification, and we ought to -look at specifying these things in terms of what the various templates -provide rather than how they're implemented.

- --- - - - - -
Proposed resolution:
 

Remove the specfication of inheritance, and add explicit -specification of all the functionality that was inherited from the -specialized iterators.

-

In iterator_adaptor, inheritance is retained, sorry NAD. Also, -the Interoperable Iterators concept is added to the new iterator -concepts, and this concept is used in the specification of the -iterator adaptors.

-

In n1550, after [lib.random.access.traversal.iterators], add:

-
-

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).
-
-

In N1530:

-
-

In [lib.iterator.adaptor]

-

Change:

-
-class iterator_adaptor 
-  : public iterator_facade<Derived, /* see details ...*/>
-
-

To:

-
-class iterator_adaptor 
-  : public iterator_facade<Derived, *V'*, *C'*, *R'*, *D'*> // see details
-
-
-
Change the text from:
-
The Base type must implement the expressions involving -m_iterator in the specifications...
-
until the end of the iterator_adaptor requirements section, to:
-
The Base argument shall be Assignable and Copy Constructible.
-
-

Add:

-
-
-
-

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
-
-
-

In [lib.iterator.special.adaptors]

-

Change:

-
-class indirect_iterator
-  : public iterator_adaptor</* see discussion */>
-{
-    friend class iterator_core_access;
-
-

to:

-
-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;
-
-

Change:

-
-private: // as-if specification
-    typename indirect_iterator::reference dereference() const
-    {
-        return **this->base();
-    }
-
-

to:

-
-    Iterator const& base() const;
-    reference operator*() const;
-    indirect_iterator& operator++();
-    indirect_iterator& operator--();
-private:
-   Iterator m_iterator; // exposition
-
-

After the synopsis add:

-
-

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;
-
-
-

[Note: See resolution to 9.44y for a description of pointee and -indirect_reference]

-

After the requirements section, add:

-
-
-

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.

-
-

Before indirect_iterator(); add:

-
-In addition to the operations required by the concepts described -above, specializations of indirect_iterator provide the -following operations.
-
-
Change:
-
--- - - - -
Returns:An instance of indirect_iterator with -the iterator_adaptor subobject copy constructed from x.
-
-
to:
-
--- - - - -
Returns:An instance of indirect_iterator with -m_iterator copy constructed from x.
-
-
-

At the end of the indirect_iterator operations add:

-
-

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
-
-

Change:

-
-template <class Iterator>
-class reverse_iterator :
-  public iterator_adaptor< reverse_iterator<Iterator>, Iterator >
-{
-  friend class iterator_core_access;
-
-

to:

-
-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;
-
-

Change:

-
-private: // as-if specification
-  typename reverse_iterator::reference dereference() const { return *prior(this->base()); }
-
-  void increment() { --this->base_reference(); }
-  void decrement() { ++this->base_reference(); }
-
-  void advance(typename reverse_iterator::difference_type n)
-  {
-      this->base_reference() += -n;
-  }
-
-  template <class OtherIterator>
-  typename reverse_iterator::difference_type
-  distance_to(reverse_iterator<OtherIterator> const& y) const
-  {
-      return this->base_reference() - y.base();
-  }
-
-

to:

-
-  Iterator const& base() const;
-  reference operator*() const;
-  reverse_iterator& operator++();
-  reverse_iterator& operator--();
-private:
-  Iterator m_iterator; // exposition
-
-
-
After the synopsis for reverse_iterator, add:
-
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.
-
Change:
-

reverse_iterator requirements

-

The base Iterator must be a model of Bidirectional Traversal -Iterator. The resulting reverse_iterator will be a model of the -most refined standard traversal and access concepts that are modeled -by Iterator.

-
-
to:
-

reverse_iterator requirements

-

Iterator must be a model of Bidirectional Traversal 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.

-
-
-
Change:
-
--- - - - -
Returns:An instance of reverse_iterator with a -default constructed base object.
-
-
to:
-
--- - - - -
Effects:Constructs an instance of reverse_iterator with m_iterator -default constructed.
-
-
Change:
-
--- - - - -
Effects:Constructs an instance of reverse_iterator with a -base object copy constructed from x.
-
-
to:
-
--- - - - -
Effects:Constructs an instance of reverse_iterator with a -m_iterator constructed from x.
-
-
Change:
-
--- - - - -
Returns:An instance of reverse_iterator that is a copy of r.
-
-
to:
-
--- - - - -
Effects:Constructs instance of reverse_iterator whose -m_iterator subobject is constructed from y.base().
-
-
At the end of the operations for reverse_iterator, add:
-

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
-
-
-

Change:

-
-class transform_iterator
-  : public iterator_adaptor</* see discussion */>
-{
-  friend class iterator_core_access;
-
-

to:

-
-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;
-
-

After UnaryFunction functor() const; add:

-
-Iterator const& base() const;
-reference operator*() const;
-transform_iterator& operator++();
-transform_iterator& operator--();
-
-

Change:

-
-private:
-  typename transform_iterator::value_type dereference() const;
-  UnaryFunction m_f;
-};
-
-

to:

-
-private:
-  Iterator m_iterator; // exposition only
-  UnaryFunction m_f;   // exposition only
-};
-
-
-
After the synopsis, add:
-
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.
-
In the requirements section, change:
-

The type Iterator must at least model Readable Iterator. The -resulting transform_iterator models the most refined of the -following that is also modeled by Iterator.

-
-
    -
  • Writable Lvalue Iterator if -result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type -is a non-const reference.
  • -
  • Readable Lvalue Iterator if -result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type -is a const reference.
  • -
  • Readable Iterator otherwise.
  • -
-
-

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

-

The reference type of transform_iterator is -result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type. -The value_type is remove_cv<remove_reference<reference> >::type.

-
-
to:
-
The argument Iterator shall model Readable Iterator.
-
-

After the requirements section, add:

-
-
-

transform_iterator models

-
-

The resulting transform_iterator models the most refined of the -following options 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.

-
-

Remove the private operations section heading and remove:

-
-``typename transform_iterator::value_type dereference() const;``
-
-:Returns: ``m_f(transform_iterator::dereference());``
-
-

After the entry for functor(), add:

-
-``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``
-
-

Change:

-
-template <class Predicate, class Iterator>
-class filter_iterator
-   : public iterator_adaptor<
-         filter_iterator<Predicate, Iterator>, Iterator
-       , use_default
-       , /* see details */
-     >
-{
- public:
-
-

to:

-
-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;
-
-

Change:

-
-private: // as-if specification
-   void increment()
-   {
-       ++(this->base_reference());
-       satisfy_predicate();
-   }
-
-   void satisfy_predicate()
-   {
-       while (this->base() != this->m_end && !this->m_predicate(*this->base()))
-           ++(this->base_reference());
-   }
-
-   Predicate m_predicate;
-   Iterator m_end;
-
-

to:

-
-    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
-
-
-
Change:
-
The base Iterator parameter must be a model of Readable -Iterator and Single Pass Iterator. The resulting -filter_iterator will be a model of Forward Traversal Iterator -if Iterator is, otherwise the filter_iterator will be a -model of Single Pass Iterator. The access category of the -filter_iterator will be the same as the access category of -Iterator.
-
to:
-
The Iterator argument shall meet the requirements of Readable -Iterator and Single Pass Iterator or it shall meet the requirements of -Input Iterator.
-
-

After the requirements section, add:

-
-
-

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
- ---- - - - - - - - - - - - - - - - - -
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
-

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

-
-
-
Change:
-
--- - - - -
Returns:a filter_iterator whose -predicate is a default constructed Predicate and -whose end is a default constructed Iterator.
-
-
to:
-
--- - - - -
Effects:Constructs a filter_iterator whose``m_pred``, m_iter, and m_end -members are a default constructed.
-
-
Change:
-
--- - - - -
Returns:A filter_iterator at position x that filters according -to predicate f and that will not increment past end.
-
-
to:
-
--- - - - -
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.
-
-
Change:
-
--- - - - -
Returns:A filter_iterator at position x that filters -according to a default constructed Predicate -and that will not increment past end.
-
-
to:
-
--- - - - -
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.
-
-
Change:
-
--- - - - -
Returns:A copy of iterator t.
-
-
to:
-
--- - - - -
Effects:Constructs a filter iterator whose members are copied from t.
-
-
Change:
-
--- - - - -
Returns:A copy of the predicate object used to construct *this.
-
-
to:
-
--- - - - -
Returns:m_pred
-
-
Change:
-
--- - - - -
Returns:The object end used to construct *this.
-
-
to:
-
--- - - - -
Returns:m_end
-
-
-

At the end of the operations section, add:

-
-

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
-
-

Change:

-
-class counting_iterator
-  : public iterator_adaptor<
-        counting_iterator<Incrementable, Access, Traversal, Difference>
-      , Incrementable
-      , Incrementable
-      , Access
-      , /* see details for traversal category */
-      , Incrementable const&
-      , Incrementable const*
-      , /* distance = Difference or a signed integral type */>
-{
-    friend class iterator_core_access;
- public:
-
-

to:

-
-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;
-
-

Change:

-
-private:
-    typename counting_iterator::reference dereference() const
-    {
-        return this->base_reference();
-    }
-
-

to:

-
-    Incrementable const& base() const;
-    reference operator*() const;
-    counting_iterator& operator++();
-    counting_iterator& operator--();
-private:
-    Incrementable m_inc; // exposition
-
-

After the synopsis, add:

-
-

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&)
-
-
-
-
Change:
-
-
[Note: implementers are encouraged to provide an implementation of
-
distance_to and a difference_type that avoids overflows in -the cases when the Incrementable type is a numeric type.]
-
-
-
to:
-
-
[Note: implementers are encouraged to provide an implementation of
-
operator- and a difference_type that avoid overflows in -the cases where std::numeric_limits<Incrementable>::is_specialized -is true.]
-
-
-
Change:
-

The Incrementable type must be Default Constructible, Copy -Constructible, and Assignable. The default distance is -an implementation defined signed integegral type.

-

The resulting counting_iterator models Readable Lvalue Iterator.

-
-
to:
-
The Incrementable argument shall be Copy Constructible and Assignable.
-
Change:
-
Furthermore, if you wish to create a counting iterator that is a Forward -Traversal Iterator, then the following expressions must be valid:
-
to:
-
If iterator_category is convertible to forward_iterator_tag -or forward_traversal_tag, the following must be well-formed:
-
Change:
-
If you wish to create a counting iterator that is a -Bidirectional Traversal Iterator, then pre-decrement is also required:
-
to:
-
If iterator_category is convertible to -bidirectional_iterator_tag or bidirectional_traversal_tag, -the following expression must also be well-formed:
-
Change:
-
If you wish to create a counting iterator that is a Random Access -Traversal Iterator, then these additional expressions are also -required:
-
to:
-
If iterator_category is convertible to -random_access_iterator_tag or random_access_traversal_tag, -the following must must also be valid:
-
-

After the requirements section, add:

-
-
-

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.

-
-

At the begining of the operations section, add:

-
-In addition to the operations required by the concepts modeled by -counting_iterator, counting_iterator provides the following -operations.
-
-
Change:
-
--- - - - -
Returns:A default constructed instance of counting_iterator.
-
-
to:
-
--- - - - - - -
Requires:Incrementable is Default Constructible.
Effects:Default construct the member m_inc.
-
-
Change:
-
--- - - - -
Returns:An instance of counting_iterator that is a copy of rhs.
-
-
to:
-
--- - - - -
Effects:Construct member m_inc from rhs.m_inc.
-
-
Change:
-
--- - - - -
Returns:An instance of counting_iterator with its base -object copy constructed from x.
-
-
to:
-
--- - - - -
Effects:Construct member m_inc from x.
-
-
-

At the end of the operations section, add:

-
-

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
-
-
-
-
-

9.38x Problem with specification of a->m in Readable Iterator

- --- - - - - - -
Submitter:Howard Hinnant
Status:New
-

c++std-lib-12585:

-

Readable Iterator Requirements says:

-
- ----- - - - - - - -
a->mU&pre: (*a).m is well-defined. Equivalent to (*a).m
-
-

Do we mean to outlaw iterators with proxy references from meeting -the readable requirements?

-

Would it be better for the requirements to read static_cast<T>(*a).m -instead of (*a).m ?

- --- - - - - - - -
Proposed resolution:
 NAD.
Rationale:

We think you're misreading "pre:". -If (*a).m is not well defined, then the iterator is not -required to provide a->m. So a proxy iterator is not -required to provide a->m.

-

As an aside, it is possible for proxy iterators to -support ->, so changing the requirements to -read static_cast<T>(*a).m is interesting. -However, such a change to Readable Iterator would -mean that it no longer corresponds to the -input iterator requirements. So old iterators would not -necessarily conform to new iterator requirements.

-
-
-
-

9.39x counting_iterator Traversal argument unspecified

- --- - - - -
Submitter:Pete Becker
-

c++std-lib-12635:

-

counting_iterator takes an argument for its Traversal type, with a -default value of use_default. It is derived from an instance of -iterator_adaptor, where the argument passed for the Traversal type -is described as "/* see details for traversal category -*/". The details for counting_iterator describe constraints on -the Incrementable type imposed by various traversal -categories. There is no description of what the argument to -iterator_adaptor should be.

- --- - - - - -
Proposed resolution:
 We no longer inherit from iterator_adaptor. So instead, -we specify the iterator_category in terms of the Traversal type -(which is now called CategoryOrTraversal). Also the -requirements and models section was reorganized to -match these changes and to make more sense.
-
-
-

9.40x indirect_iterator requirements muddled

- --- - - - -
Submitter:Pete Becker
-

c++std-lib-12640:

-
-
-The value_type of the Iterator template parameter should itself -be dereferenceable. The return type of the operator* for -the value_type must be the same type as the Reference template -parameter.
-

I'd say this a bit differently, to emphasize what's required: -iterator_traits<Iterator>::value_type must be dereferenceable. -The Reference template parameter must be the same type as -*iterator_traits<Iterator>::value_type().

-
-The Value template parameter will be the value_type for the -indirect_iterator, unless Value is const. If Value is const X, then -value_type will be non- const X.
-

Also non-volatile, right? In other words, if Value isn't use_default, it -just gets passed as the Value argument for iterator_adaptor.

-
-

The default for Value is:

-
-iterator_traits< iterator_traits<Iterator>::value_type >::value_type
-
-

If the default is used for Value, then there must be a valid -specialization of iterator_traits for the value type of the -base iterator.

-
-

The earlier requirement is that -iterator_traits<Iterator>::value_type must be -dereferenceable. Now it's being treated as an iterator. Is this -just a pun, or is iterator_traits<Iterator>::value_type -required to be some form of iterator? If it's the former we need -to find a different way to say it. If it's the latter we need to -say so.

-
- --- - - - - - - -
Proposed resolution:
 

Change:

-
-

The value_type of the Iterator template parameter -should itself be dereferenceable. The return type of the -operator* for the value_type must be the same type as -the Reference template parameter. The Value template -parameter will be the value_type for the -indirect_iterator, unless Value is const. If Value -is const X, then value_type will be non- const X. -The default for Value is:

-
-iterator_traits< iterator_traits<Iterator>::value_type >::value_type
-
-

If the default is used for Value, then there must be a -valid specialization of iterator_traits for the value type -of the base iterator.

-

The Reference parameter will be the reference type of the -indirect_iterator. The default is Value&.

-

The Access and Traversal parameters are passed -unchanged to the corresponding parameters of the -iterator_adaptor base class, and the Iterator parameter -is passed unchanged as the Base parameter to the -iterator_adaptor base class.

-
-

to:

-
-
-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.]

-
-
Rationale:Not included above is the specification of the -value_type, reference, etc., members, which is handled by -the changes in 9.37x.
-
-
-

9.41x Problem with transform_iterator requirements

- --- - - - -
Submitter:Pete Becker
-

c++std-lib-12641:

-
-The reference type of transform_iterator is result_of< -UnaryFunction(iterator_traits<Iterator>::reference) ->::type. The value_type is -remove_cv<remove_reference<reference> >::type.
-

These are the defaults, right? If the user supplies their own types -that's what gets passed to iterator_adaptor. And again, the -specification should be in terms of the specialization of -iterator_adaptor, and not in terms of the result:

-

Reference argument to iterator_adaptor:

-
-if (Reference != use_default)
-    Reference
-else
-    result_of<
-        UnaryFunction(iterator_traits<Iterator>::reference)
-    >::type
-
-

Value argument to iterator_adaptor:

-
-if (Value != use_default)
-    Value
-else if (Reference != use_default)
-    remove_reference<reference>::type
-else
-    remove_reference<
-        result_of<
-            UnaryFunction(iterator_traits<Iterator>::reference)
-        >::type
-    >::type
-
-

There's probably a better way to specify that last alternative, but -I've been at this too long, and it's all turning into a maze of -twisty passages, all alike.

- --- - - - - -
Proposed resolution:
 

Replace:

-
-The reference type of transform_iterator is result_of< -UnaryFunction(iterator_traits<Iterator>::reference) ->::type. The value_type is -remove_cv<remove_reference<reference> >::type.
-

with:

-
-

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.

-
-
-
-
-

9.42x filter_iterator details unspecified

- --- - - - -
Submitter:Pete Becker
-

c++std-lib-12642:

-

The paper says:

-
-template<class Predicate, class Iterator>
-class filter_iterator
-     : public iterator_adaptor<
-         filter_iterator<Predicate, Iterator>,
-         Iterator,
-         use_default,
-         /* see details */ >
-
-

That comment covers the Access, Traversal, Reference, and Difference -arguments. The only specification for any of these in the details is:

-
-The access category of the filter_iterator will be the same as -the access category of Iterator.
-

Needs more.

- --- - - - - -
Proposed resolution:
 

Add to the synopsis:

-
-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;
-
-

and add just after the synopsis:

-
-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.
-
-
-
-

9.43x transform_iterator interoperability too restrictive

- --- - - - -
Submitter:Jeremy Siek
-

We do not need to require that the function objects have the same -type, just that they be convertible.

- --- - - - - -
Proposed resolution:
 

Change:

-
-template<class OtherIterator, class R2, class V2>
-transform_iterator(
-      transform_iterator<UnaryFunction, OtherIterator, R2, V2> const& t
-    , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
-);
-
-

to:

-
-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
-);
-
-
-
-
-

9.44y indirect_iterator and smart pointers

- --- - - - -
Submitter:Dave Abrahams
-

indirect_iterator should be able to iterate over containers of -smart pointers, but the mechanism that allows it was left out of -the specification, even though it's present in the Boost -specification

- --- - - - - -
Proposed resolution:
 

Add pointee and indirect_reference -to deal with this capability.

-

In [lib.iterator.helper.synopsis], add:

-
-template <class Dereferenceable>
-struct pointee;
-
-template <class Dereferenceable>
-struct indirect_reference;
-
-

After indirect_iterator's abstract, add:

-
-
-

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
-
-
-

See proposed resolution to Issue 9.37x for more changes related to -this issue.

-
-
-

9.45y N1530: Typos and editorial changes in proposal text (not standardese)

- --- - - - -
Submitter:Dave Abrahams
-
    -
  1. "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 making mistakes based on -that assumption."

    - --- - - - - -
    Proposed resolution:
     

    add "from" before "making"

    -
    -
  2. -
  3. mention of obsolete projection_iterator

    -
  4. -
-
- --- - - - - - - -
Proposed Resolution:
 

From n1530, in the Specialized Adaptors section, remove:

-
-projection_iterator, which is similar to transform_iterator -except that when dereferenced it returns a reference instead of -a value.
-
Rationale:This iterator was in the original boost library, but the new -iterator concepts allowed this iterator to be -folded into transform_iterator.
-
-
-
-

9.46y N1530: base() return-by-value is costly

- --- - - - -
Submitter:Dave Abrahams
-

We've had some real-life reports that iterators that use -iterator_adaptor's base() function can be inefficient -when the Base iterator is expensive to copy. Iterators, of -all things, should be efficient.

- --- - - - - -
Proposed resolution:
 

In [lib.iterator.adaptor]

-

Change:

-
-Base base() const;
-
-

to:

-
-Base const& base() const;
-
-

twice (once in the synopsis and once in the public -operations section).

-
-
-
-

9.47x Forgot default constructible in Forward Traversal Iterator

- --- - - - -
Submitter:Jeremy Siek
-

We want Forward Traversal Iterator plus Readable Lvalue Iterator to -match the old Foward Iterator requirements, so we need Forward -Traversal Iterator to include Default Constructible.

- --- - - - - -
Proposed resolution:
 

Change:

-
-

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

- ----- - - - - -
Forward Traversal Iterator Requirements (in addition to Single Pass Iterator)
-
-

to:

-
-

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)
-
-
-
-
-

9.48x Editorial changes (non-normative text)

-
-
Change:
-
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. iterator_facade does not use policy -objects for several reasons:
-
to:
-
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:
-
Change:
-
iterator's operator++ returns the iterator type itself means -that all iterators generated by iterator_facade would be -instantiations of iterator_facade. Cumbersome type generator
-
to:
-
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
-
Change:
-
The return type for operator-> and operator[] is not -explicitly specified. Instead it requires each iterator_facade -instantiation to meet the requirements of its iterator_category.
-
To:
-
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.
-
-
-
-

9.49x Clarification of iterator_facade requirements and type members

-

A general cleanup and simplification of the requirements and -description of type members for iterator_facade.

-

The user is only allowed to add const as a qualifier.

-
-
Change:
-
typedef remove_cv<Value>::type value_type;
-
to:
-
typedef remove_const<Value>::type value_type;
-
-

We use to have an unspecified type for pointer, to match the -return type of operator->, but there's no real reason to make them -match, so we just use the simpler Value* for pointer.

-

Change:

-
-typedef /* see description of operator-> */ pointer;
-
-
To:
-
typedef Value* pointer;
-
Remove:
-
Some of the constraints on template parameters to -iterator_facade are expressed in terms of resulting nested -types and should be viewed in the context of their impact on -iterator_traits<Derived>.
-
Change:
-
The Derived template parameter must be a class derived from -iterator_facade.
-
and:
-
The following table describes the other requirements on the -Derived parameter. Depending on the resulting iterator's -iterator_category, a subset of the expressions listed in the table -are required to be valid. The operations in the first column must be -accessible to member functions of class iterator_core_access.
-
to:
-
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.
-
Remove:
-

The nested ::value_type type will be the same as -remove_cv<Value>::type, so the Value parameter must be -an (optionally const-qualified) non-reference type.

-

The nested ::reference will be the same as the Reference -parameter; it must be a suitable reference type for the resulting -iterator. The default for the Reference parameter is -Value&.

-
-
-

Change:

-
-

In the table below, X is the derived iterator type, a is an -object of type X, b and c are objects of type const X, -n is an object of X::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.

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

to:

-
-

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
-
-
-
-
- - - - diff --git a/doc/iter-issue-list.rst b/doc/iter-issue-list.rst deleted file mode 100644 index 6e1064d..0000000 --- a/doc/iter-issue-list.rst +++ /dev/null @@ -1,3841 +0,0 @@ -+++++++++++++++++++++++++++++++++++++ - Iterator concept and adapter issues -+++++++++++++++++++++++++++++++++++++ - -:date: $Date$ - -.. contents:: Index - -=================================== - Issues from Matt's TR issues list -=================================== - - -9.1 iterator_access overspecified? -================================== - -:Submitter: Pete Becker -:Status: New - -The proposal includes:: - - enum iterator_access { - readable_iterator = 1, writable_iterator = 2, - swappable_iterator = 4, lvalue_iterator = 8 - }; - -In general, the standard specifies thing like this as a bitmask -type with a list of defined names, and specifies neither the exact -type nor the specific values. Is there a reason for iterator_access -to be more specific? - -:Proposed resolution: The ``iterator_access`` enum will be removed, - so this is no longer an issue. See the resolution to 9.15. - - -9.2 operators of iterator_facade overspecified -============================================== - -:Submitter: Pete Becker -:Status: New - -In general, we've provided operational semantics for things like -operator++. That is, we've said that ++iter must work, without -requiring either a member function or a non-member function. -iterator_facade specifies most operators as member -functions. There's no inherent reason for these to be members, so -we should remove this requirement. Similarly, some operations are -specified as non-member functions but could be implemented as -members. Again, the standard doesn't make either of these choices, -and TR1 shouldn't, either. So: ``operator*()``, ``operator++()``, -``operator++(int)``, ``operator--()``, ``operator--(int)``, -``operator+=``, ``operator-=``, ``operator-(difference_type)``, -``operator-(iterator_facade instance)``, and ``operator+`` should -be specified with operational semantics and not explicitly required -to be members or non-members. - -:Proposed resolution: Not a defect. - -:Rationale: The standard uses valid expressions such as ``++iter`` - in requirements tables, such as for input iterator. However, for - classes, such as ``reverse_iterator``, the standard uses function - prototypes, as we have done here for - ``iterator_facade``. Further, the prototype specification does - not prevent the implementor from using members or non-members, - since nothing the user can do in a conforming program can detect - how the function is implemented. - - -9.3 enable_if_interoperable needs standardese -============================================= - -:Submitter: Pete Becker -:Status: New - -The only discussion of what this means is in a note, so is -non-normative. Further, the note seems to be incorrect. It says -that enable_if_interoperable only works for types that "are -interoperable, by which we mean they are convertible to each -other." This requirement is too strong: it should be that one of -the types is convertible to the other. N1541 48 - -:Proposed resolution: Add normative text. Relax requirements in the - proposed way. - - Change: - - [*Note:* The ``enable_if_interoperable`` template used above is - for exposition purposes. The member operators should be only be - in an overload set provided the derived types ``Dr1`` and - ``Dr2`` are interoperable, by which we mean they are - convertible to each other. The ``enable_if_interoperable`` - approach uses SFINAE to take the operators out of the overload - set when the types are not interoperable.] - - To: - - 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 - > - {}; - -9.4 enable_if_convertible unspecified, conflicts with requires -============================================================== - -:Submitter: Pete Becker -:Status: New - -In every place where enable_if_convertible is used it's used like -this (simplified):: - - template - struct C - { - template - C(T1, enable_if_convertible::type* = 0); - }; - -The idea being that this constructor won't compile if T1 isn't -convertible to T. As a result, the constructor won't be considered -as a possible overload when constructing from an object x where the -type of x isn't convertible to T. In addition, however, each of -these constructors has a requires clause that requires -convertibility, so the behavior of a program that attempts such a -construction is undefined. Seems like the enable_if_convertible -part is irrelevant, and should be removed. There are two -problems. First, enable_if_convertible is never specified, so we -don't know what this is supposed to do. Second: we could reasonably -say that this overload should be disabled in certain cases or we -could reasonably say that behavior is undefined, but we can't say -both. - -Thomas Witt writes that the goal of putting in -enable_if_convertible here is to make sure that a specific overload -doesn't interfere with the generic case except when that overload -makes sense. He agrees that what we currently have is deficient. -Dave Abrahams writes that there is no conflict with the requires -cause because the requires clause only takes effect when the -function is actually called. The presence of the constructor -signature can/will be detected by is_convertible without violating -the requires clause, and thus it makes a difference to disable -those constructor instantiations that would be disabled by -enable_if_convertible even if calling them invokes undefined -behavior. There was more discussion on the reflector: -c++std-lib-12312, c++std-lib-12325, c++std-lib- 12330, -c++std-lib-12334, c++std-lib-12335, c++std-lib-12336, -c++std-lib-12338, c++std-lib- 12362. - -:Proposed resolution: - Change: - - [*Note:* 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 - ``enable_if_convertible`` approach uses SFINAE to take the - constructor out of the overload set when the types are not - implicitly convertible.] - - To: - - 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. ] - -9.5 iterator_adaptor has an extraneous 'bool' at the start of the template definition -===================================================================================== - -:Submitter: Pete Becker -:Status: New - -The title says it all; this is probably just a typo. - -:Proposed resolution: Remove the 'bool'. - -9.6 Name of private member shouldn't be normative -================================================= - -:Submitter: Pete Becker -:Status: New - -iterator_adaptor has a private member named m_iterator. Presumably -this is for exposition only, since it's an implementation -detail. It needs to be marked as such. - -:Proposed resolution: Mark the member ``m_iterator`` as exposition - only. Note/DWA: I think this is NAD because the user can't - detect it, though I'm happy to mark it exposition only. - - In [lib.iterator.adaptor] - - Change:: - - Base m_iterator; - - to:: - - Base m_iterator; // exposition only - - -9.7 iterator_adaptor operations specifications are a bit inconsistent -===================================================================== - -:Submitter: Pete Becker -:Status: New - -iterator_adpator() has a Requires clause, that Base must be default -constructible. iterator_adaptor(Base) has no Requires clause, -although the Returns clause says that the Base member is copy -construced from the argument (this may actually be an oversight in -N1550, which doesn't require iterators to be copy constructible or -assignable). - -:Proposed resolution: Add a requirements section for the template - parameters of iterator_adaptor, and state that Base must be Copy - Constructible and Assignable. - - N1550 does in fact include requirements for copy constructible - and assignable in the requirements tables. To clarify, we've also - added the requirements to the text. - - -9.8 Specialized adaptors text should be normative -================================================= - -:Submitter: Pete Becker -:Status: New - -similar to 9.3, "Specialized Adaptors" has a note describing -enable_if_convertible. This should be normative text. - -:Proposed resolution: Changed it to normative - text. See the resolution of 9.4 - -9.9 Reverse_iterator text is too informal -========================================= - -:Submitter: Pete Becker -:Status: New - -reverse iterator "flips the direction of the base iterator's -motion". This needs to be more formal, as in the current -standard. Something like: "iterates through the controlled sequence -in the opposite direction" - -:Proposed resolution: - - Change: - - The reverse iterator adaptor flips the direction of a base - iterator's motion. Invoking ``operator++()`` moves the base - iterator backward and invoking ``operator--()`` moves the base - iterator forward. - - to: - - The reverse iterator adaptor iterates through the adapted iterator - range in the opposite direction. - - -9.10 'prior' is undefined -========================= - -:Submitter: Pete Becker -:Status: New - -reverse_iterator::dereference is specified as calling a function -named 'prior' which has no specification. - -:Proposed resolution: - Change the specification to avoid using ``prior`` as follows. - - Remove:: - - typename reverse_iterator::reference dereference() const { return *prior(this->base()); } - - And at the end of the operations section add: - - ``reference operator*() const;`` - - :Effects: - - :: - - Iterator tmp = m_iterator; - return *--tmp; - -:Rationale: - The style of specification has changed because of issue 9.37x. - - - -9.11 "In other words" is bad wording -==================================== - -:Submitter: Pete Becker -:Status: New - -Transform iterator has a two-part specification: it does this, in -other words, it does that. "In other words" always means "I didn't -say it right, so I'll try again." We need to say it once. - -:Proposed resolution: - Change: - - The transform iterator adapts an iterator by applying some function - object to the result of dereferencing the iterator. In other words, - the ``operator*`` of the transform iterator first dereferences the - base iterator, passes the result of this to the function object, and - then returns the result. - - to: - - 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. - - -9.12 Transform_iterator shouldn't mandate private member -======================================================== - -:Submitter: Pete Becker -:Status: New - -transform_iterator has a private member named 'm_f' which should be -marked "exposition only." - -:Proposed resolution: Mark the member ``m_f`` as exposition - only. Note/DWA: I think this is NAD because the user can't - detect it, though I'm happy to mark it exposition only. - - Change:: - - UnaryFunction m_f; - - to:: - - UnaryFunction m_f; // exposition only - - - -9.13 Unclear description of counting iterator -============================================= - -:Submitter: Pete Becker -:Status: New - -The description of Counting iterator is unclear. "The counting -iterator adaptor implements dereference by returning a reference to -the base object. The other operations are implemented by the base -m_iterator, as per the inheritance from iterator_adaptor." - -:Proposed resolution: - Change: - - The counting iterator adaptor implements dereference by - returning a reference to the base object. The other operations - are implemented by the base ``m_iterator``, as per the - inheritance from ``iterator_adaptor``. - - to: - - ``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. - - - -9.14 Counting_iterator's difference type -======================================== - -:Submitter: Pete Becker -:Status: New - -Counting iterator has the following note: - - [Note: implementers are encouraged to provide an implementation - of distance_to and a difference_type that avoids overflows in the - cases when the Incrementable type is a numeric type.] - -I'm not sure what this means. The user provides a template argument -named Difference, but there's no difference_type. I assume this is -just a glitch in the wording. But if implementors are encouraged to -ignore this argument if it won't work right, why is it there? - -:Proposed resolution: The ``difference_type`` was inherited from - ``iterator_adaptor``. However, we've removed the explicit - inheritance, so explicit typedefs have been added. See the - resolution of 9.37x. - - - -9.15 How to detect lvalueness? -============================== - -:Submitter: Dave Abrahams -:Status: New - -Shortly after N1550 was accepted, we discovered that an iterator's -lvalueness can be determined knowing only its value_type. This -predicate can be calculated even for old-style iterators (on whose -reference type the standard places few requirements). A trait in -the Boost iterator library does it by relying on the compiler's -unwillingness to bind an rvalue to a T& function template -parameter. Similarly, it is possible to detect an iterator's -readability knowing only its value_type. Thus, any interface which -asks the user to explicitly describe an iterator's lvalue-ness or -readability seems to introduce needless complexity. - - -: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. Remove the - requirement for support of the ``is_readable`` trait from the - Readable Iterator concept. - - 3. Remove the ``iterator_tag`` class and transplant the logic for - choosing an iterator category into ``iterator_facade``. - - 4. Change the specification of ``traversal_category``. - - 5. Remove Access parameters from N1530 - - In N1550: - - Remove: - - Since the access concepts are not related via refinement, but - instead cover orthogonal issues, we do not use tags for the - access concepts, but instead use the equivalent of a bit field. - - We provide an access mechanism for mapping iterator types to - the new traversal tags and access bit field. Our design reuses - ``iterator_traits::iterator_category`` as the access - mechanism. To that end, the access and traversal information is - bundled into a single type using the following `iterator_tag` - class. - - :: - - enum iterator_access { readable_iterator = 1, writable_iterator = 2, - swappable_iterator = 4, lvalue_iterator = 8 }; - - template - struct iterator_tag : /* appropriate old category or categories */ { - static const iterator_access access = - (iterator_access)access_bits & - (readable_iterator | writable_iterator | swappable_iterator); - typedef TraversalTag traversal; - }; - - The ``access_bits`` argument is declared to be ``unsigned int`` - instead of the enum ``iterator_access`` for convenience of - use. For example, the expression ``(readable_iterator | - writable_iterator)`` produces an unsigned int, not an - ``iterator_access``. The purpose of the ``lvalue_iterator`` - part of the ``iterator_access`` enum is to communicate to - ``iterator_tag`` whether the reference type is an lvalue so - that the appropriate old category can be chosen for the base - class. The ``lvalue_iterator`` bit is not recorded in the - ``iterator_tag::access`` data member. - - The ``iterator_tag`` class template is derived from the - appropriate iterator tag or tags from the old requirements - based on the access bits and traversal tag passed as template - parameters. The algorithm for determining the old tag or tags - picks the least refined old concepts that include all of the - requirements of the access and traversal concepts (that is, the - closest fit), if any such category exists. For example, the - category tag for a Readable Single Pass Iterator will always be - derived from ``input_iterator_tag``, while the category tag for - a Single Pass Iterator that is both Readable and Writable will - be derived from both ``input_iterator_tag`` and - ``output_iterator_tag``. - - We also provide several helper classes that make it convenient - to obtain the access and traversal characteristics of an - iterator. These helper classes work both for iterators whose - ``iterator_category`` is ``iterator_tag`` and also for - iterators using the original iterator categories. - - :: - - template struct is_readable { typedef ... type; }; - template struct is_writable { typedef ... type; }; - template struct is_swappable { typedef ... type; }; - template struct traversal_category { typedef ... type; }; - - - After: - - 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. - - Add: - - 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. - - 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. - - - From the Readable Iterator Requirements table, remove: - - +-----------------------------------+-----------------------------------+-------------------------+ - |``is_readable::type`` |``true_type`` | | - +-----------------------------------+-----------------------------------+-------------------------+ - - From the Writable Iterator Requirements table, remove: - - +-------------------------+--------------+----------------------------+ - |``is_writable::type`` |``true_type`` | | - +-------------------------+--------------+----------------------------+ - - From the Swappable Iterator Requirements table, remove: - - +-------------------------+-------------+-----------------------------+ - |``is_swappable::type``|``true_type``| | - +-------------------------+-------------+-----------------------------+ - - - From [lib.iterator.synopsis] replace:: - - template struct is_readable; - template struct is_writable; - template struct is_swappable; - template struct traversal_category; - - enum iterator_access { readable_iterator = 1, writable_iterator = 2, - swappable_iterator = 4, lvalue_iterator = 8 }; - - template - struct iterator_tag : /* appropriate old category or categories */ { - static const iterator_access access = - (iterator_access)access_bits & - (readable_iterator | writable_iterator | swappable_iterator); - typedef TraversalTag traversal; - }; - - with:: - - template struct is_readable_iterator; - template struct iterator_traversal; - - - In [lib.iterator.traits], remove: - - The ``iterator_tag`` class template is an iterator category tag - that encodes the access enum and traversal tag in addition to - being compatible with the original iterator tags. The - ``iterator_tag`` class inherits from one of the original - iterator tags according to the following pseudo-code. - - :: - - inherit-category(access, traversal-tag) = - if ((access & readable_iterator) && (access & lvalue_iterator)) { - if (traversal-tag is convertible to random_access_traversal_tag) - return random_access_iterator_tag; - else if (traversal-tag is convertible to bidirectional_traversal_tag) - return bidirectional_iterator_tag; - else if (traversal-tag is convertible to forward_traversal_tag) - return forward_iterator_tag; - else if (traversal-tag is convertible to single_pass_traversal_tag) - if (access-tag is convertible to writable_iterator_tag) - return input_output_iterator_tag; - else - return input_iterator_tag; - else - return null_category_tag; - } else if ((access & readable_iterator) and (access & writable_iterator) - and traversal-tag is convertible to single_pass_iterator_tag) - return input_output_iterator_tag; - else if (access & readable_iterator - and traversal-tag is convertible to single_pass_iterator_tag) - return input_iterator_tag; - else if (access & writable_iterator - and traversal-tag is convertible to incrementable_iterator_tag) - return output_iterator_tag; - else - return null_category_tag; - - If the argument for ``TraversalTag`` is not convertible to - ``incrementable_iterator_tag`` then the program is ill-formed. - - Change: - - The ``is_readable``, ``is_writable``, ``is_swappable``, and - ``traversal_category`` class templates are traits classes. For - iterators whose ``iterator_traits::iterator_category`` - type is ``iterator_tag``, these traits obtain the ``access`` - enum and ``traversal`` member type from within - ``iterator_tag``. For iterators whose - ``iterator_traits::iterator_category`` type is not - ``iterator_tag`` and instead is a tag convertible to one of the - original tags, the appropriate traversal tag and access bits - are deduced. The following pseudo-code describes the - algorithm. - - :: - - is-readable(Iterator) = - cat = iterator_traits::iterator_category; - if (cat == iterator_tag) - return Access & readable_iterator; - else if (cat is convertible to input_iterator_tag) - return true; - else - return false; - - is-writable(Iterator) = - cat = iterator_traits::iterator_category; - if (cat == iterator_tag) - return Access & writable_iterator; - else 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; - - is-swappable(Iterator) = - cat = iterator_traits::iterator_category; - if (cat == iterator_tag) - return Access & swappable_iterator; - else if (cat is convertible to forward_iterator_tag) { - if (iterator_traits::reference is a const reference) - return false; - else - return true; - } else - return false; - - traversal-category(Iterator) = - cat = iterator_traits::iterator_category; - if (cat == iterator_tag) - return Traversal; - 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; - - - The following specializations provide the access and traversal - category tags for pointer types. - - :: - - template - struct is_readable { typedef true_type type; }; - template - struct is_writable { typedef false_type type; }; - template - struct is_swappable { typedef false_type type; }; - - template - struct is_readable { typedef true_type type; }; - template - struct is_writable { typedef true_type type; }; - template - struct is_swappable { typedef true_type type; }; - - template - struct traversal_category - { - typedef random_access_traversal_tag type; - }; - - to: - - 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. - - .. _`category-to-traversal`: - - ``iterator_traversal::type`` is - - .. parsed-literal:: - - *category-to-traversal*\ (iterator_traits::iterator_category) - - where *category-to-traversal* is defined as follows - - .. 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* - - In N1530: - - In [lib.iterator.helper.synopsis]: - - Change:: - - const unsigned use_default_access = -1; - - struct iterator_core_access { /* implementation detail */ }; - - template < - class Derived - , class Value - , unsigned AccessCategory - , class TraversalCategory - , class Reference = Value& - , class Difference = ptrdiff_t - > - class iterator_facade; - - template < - class Derived - , class Base - , class Value = use_default - , unsigned Access = use_default_access - , class Traversal = use_default - , class Reference = use_default - , class Difference = use_default - > - class iterator_adaptor; - - template < - class Iterator - , class Value = use_default - , unsigned Access = use_default_access - , class Traversal = use_default - , class Reference = use_default - , class Difference = use_default - > - class indirect_iterator; - - To:: - - 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; - - Change:: - - template < - class Incrementable - , unsigned Access = use_default_access - , class Traversal = use_default - , class Difference = use_default - > - class counting_iterator - - To:: - - template < - class Incrementable - , class CategoryOrTraversal = use_default - , class Difference = use_default - > - class counting_iterator; - - In [lib.iterator.facade]: - - Change:: - - template < - class Derived - , class Value - , unsigned AccessCategory - , class TraversalCategory - , class Reference = /* see below */ - , class Difference = ptrdiff_t - > - class iterator_facade { - - to:: - - template < - class Derived - , class Value - , class CategoryOrTraversal - , class Reference = Value& - , class Difference = ptrdiff_t - > - class iterator_facade { - - - Change:: - - typedef iterator_tag iterator_category; - - to:: - - typedef /* see below */ iterator_category; - - - Change:: - - // 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); - - template - typename enable_if_interoperable::type - operator >=(iterator_facade const& lhs, - iterator_facade const& rhs); - - // Iterator difference - template - typename enable_if_interoperable::type - operator -(iterator_facade const& lhs, - iterator_facade const& rhs); - - // Iterator addition - template - Derived operator+ (iterator_facade const&, - typename Derived::difference_type n) - - to:: - - // 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&); - - - After the ``iterator_facade`` synopsis, add: - - The ``iterator_category`` member of ``iterator_facade`` is - - .. parsed-literal:: - - *iterator-category*\ (CategoryOrTraversal, value_type, reference) - - where *iterator-category* is defined as follows: - - .. 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* - -.. |iterator-category| replace:: *iterator-category* -.. _iterator-category: - - In [lib.iterator.facade] ``iterator_facade`` requirements: - - Remove: - - ``AccessCategory`` must be an unsigned value which uses no more - bits than the greatest value of ``iterator_access``. - - In the **Iterator Adaptor** section, change: - - Several of the template parameters of ``iterator_adaptor`` default - to ``use_default`` (or ``use_default_access``). - - to: - - Several of the template parameters of ``iterator_adaptor`` default - to ``use_default``. - - In [lib.iterator.special.adaptors]: - - Change:: - - template < - class Iterator - , class Value = use_default - , unsigned Access = use_default_access - , class Traversal = use_default - , class Reference = use_default - , class Difference = use_default - > - class indirect_iterator - - to:: - - template < - class Iterator - , class Value = use_default - , class CategoryOrTraversal = use_default - , class Reference = use_default - , class Difference = use_default - > - class indirect_iterator - - Change:: - - template < - class Iterator2, class Value2, unsigned Access2, class Traversal2 - , class Reference2, class Difference2 - > - indirect_iterator( - - to:: - - template < - class Iterator2, class Value2, class Category2 - , class Reference2, class Difference2 - > - indirect_iterator( - - Change:: - - template < - class Incrementable - , unsigned Access = use_default_access - , class Traversal = use_default - , class Difference = use_default - > - class counting_iterator - - to:: - - template < - class Incrementable - , class CategoryOrTraversal = use_default - , class Difference = use_default - > - class counting_iterator - - - Change:: - - typedef iterator_tag< - writable_iterator - , incrementable_traversal_tag - > iterator_category; - - to: - - typedef std::output_iterator_tag iterator_category; - - In [lib.iterator.adaptor] - - Change:: - - template < - class Derived - , class Base - , class Value = use_default - , unsigned Access = use_default_access - , class Traversal = use_default - , class Reference = use_default - , class Difference = use_default - > - class iterator_adaptor - - To:: - - template < - class Derived - , class Base - , class Value = use_default - , class CategoryOrTraversal = use_default - , class Reference = use_default - , class Difference = use_default - > - class iterator_adaptor - -: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``. - - - -9.16 is_writable_iterator returns false positives -================================================= - -:Submitter: Dave Abrahams -:Status: New - -is_writable_iterator returns false positives for forward iterators -whose value_type has a private assignment operator, or whose -reference type is not a reference (currently legal). - -:Proposed Resolution: See the resolution to 9.15. - - -9.17 is_swappable_iterator returns false positives -================================================== - -:Submitter: Dave Abrahams -:Status: New - -is_swappable_iterator has the same problems as -is_writable_iterator. In addition, if we allow users to write their -own iter_swap functions it's easy to imagine old-style iterators -for which is_swappable returns false negatives. - -:Proposed Resolution: See the resolution to 9.15. - - -9.18 Are is_readable, is_writable, and is_swappable useful? -=========================================================== - -:Submitter: Dave Abrahams -:Status: New - -I am concerned that there is little use for any of is_readable, -is_writable, or is_swappable, and that not only do they unduly -constrain iterator implementors but they add overhead to -iterator_facade and iterator_adaptor in the form of a template -parameter which would otherwise be unneeded. Since we can't -implement two of them accurately for old-style iterators, I am -having a hard time justifying their impact on the rest of the -proposal(s). - -:Proposed Resolution: See the resolution to 9.15. - -9.19 Non-Uniformity of the "lvalue_iterator Bit" -================================================ - -:Submitter: Dave Abrahams -:Status: New - -The proposed iterator_tag class template accepts an "access bits" -parameter which includes a bit to indicate the iterator's -lvalueness (whether its dereference operator returns a reference to -its value_type. The relevant part of N1550 says: - - The purpose of the lvalue_iterator part of the iterator_access - enum is to communicate to iterator_tagwhether the reference type - is an lvalue so that the appropriate old category can be chosen - for the base class. The lvalue_iterator bit is not recorded in - the iterator_tag::access data member. - -The lvalue_iterator bit is not recorded because N1550 aims to -improve orthogonality of the iterator concepts, and a new-style -iterator's lvalueness is detectable by examining its reference -type. This inside/outside difference is awkward and confusing. - -:Proposed Resolution: The iterator_tag class will be removed, so this is no longer an issue. - See the resolution to 9.15. - - -9.20 Traversal Concepts and Tags -================================ - -:Submitter: Dave Abrahams -:Status: New - -Howard Hinnant pointed out some inconsistencies with the naming of -these tag types:: - - incrementable_iterator_tag // ++r, r++ - single_pass_iterator_tag // adds a == b, a != b - forward_traversal_iterator_tag // adds multi-pass - bidirectional_traversal_iterator_tag // adds --r, r-- - random_access_traversal_iterator_tag // adds r+n,n+r,etc. - -Howard thought that it might be better if all tag names contained -the word "traversal". It's not clear that would result in the best -possible names, though. For example, incrementable iterators can -only make a single pass over their input. What really distinguishes -single pass iterators from incrementable iterators is not that they -can make a single pass, but that they are equality -comparable. Forward traversal iterators really distinguish -themselves by introducing multi-pass capability. Without entering -a "Parkinson's Bicycle Shed" type of discussion, it might be worth -giving the names of these tags (and the associated concepts) some -extra attention. - -:Proposed resolution: Change the names of the traversal tags to the - following names:: - - incrementable_traversal_tag - single_pass_traversal_tag - forward_traversal_tag - bidirectional_traversal_tag - random_access_traversal_tag - - - In [lib.iterator.traversal]: - - - Change: - - +--------------------------------+-------------------------------+--------------------+ - |``traversal_category::type`` |Convertible to | | - | |``incrementable_iterator_tag`` | | - +--------------------------------+-------------------------------+--------------------+ - - to: - - +--------------------------------+-------------------------------+--------------------+ - |``iterator_traversal::type`` |Convertible to | | - | |``incrementable_traversal_tag``| | - +--------------------------------+-------------------------------+--------------------+ - - Change: - - +--------------------------------+-----------------------------+---------------------------+ - |``traversal_category::type`` |Convertible to | | - | |``single_pass_iterator_tag`` | | - +--------------------------------+-----------------------------+---------------------------+ - - to: - - +--------------------------------+-----------------------------+---------------------------+ - |``iterator_traversal::type`` |Convertible to | | - | |``single_pass_traversal_tag``| | - +--------------------------------+-----------------------------+---------------------------+ - - Change: - - +---------------------------------------+-----------------------------------+---------------+ - |``traversal_category::type`` |Convertible to | | - | |``forward_traversal_iterator_tag`` | | - +---------------------------------------+-----------------------------------+---------------+ - - to: - - +---------------------------------------+-----------------------------------+----------------------------+ - |``iterator_traversal::type`` |Convertible to | | - | |``forward_traversal_tag`` | | - +---------------------------------------+-----------------------------------+----------------------------+ - - Change: - - +------------------------------------+---------------------------------------------+---------------------+ - |``traversal_category::type`` |Convertible to | | - | |``bidirectional_traversal_iterator_tag`` | | - +------------------------------------+---------------------------------------------+---------------------+ - - to: - - +--------------------------------+-------------------------------+---------------------+ - |``iterator_traversal::type`` |Convertible to | | - | |``bidirectional_traversal_tag``| | - +--------------------------------+-------------------------------+---------------------+ - - Change: - - +-------------------------------------------+-------------------------------------------------+-------------------------+----------------------+ - |``traversal_category::type`` |Convertible to | | | - | |``random_access_traversal_iterator_tag`` | | | - +-------------------------------------------+-------------------------------------------------+-------------------------+----------------------+ - - to: - - +-------------------------------+---------------------------------+-------------------------+----------------------+ - |``iterator_traversal::type``|Convertible to | | | - | |``random_access_traversal_tag`` | | | - +-------------------------------+---------------------------------+-------------------------+----------------------+ - - - In [lib.iterator.synopsis], change:: - - struct incrementable_iterator_tag { }; - struct single_pass_iterator_tag : incrementable_iterator_tag { }; - struct forward_traversal_tag : single_pass_iterator_tag { }; - - to:: - - struct incrementable_traversal_tag { }; - struct single_pass_traversal_tag : incrementable_traversal_tag { }; - struct forward_traversal_tag : single_pass_traversal_tag { }; - - Remove:: - - struct null_category_tag { }; - struct input_output_iterator_tag : input_iterator_tag, output_iterator_tag {}; - - -9.21 iterator_facade Derived template argument underspecified -============================================================= - -:Submitter: Pete Becker -:Status: New - -The first template argument to iterator_facade is named Derived, -and the proposal says: - - The Derived template parameter must be a class derived from - iterator_facade. - -First, iterator_facade is a template, so cannot be derived -from. Rather, the class must be derived from a specialization of -iterator_facade. More important, isn't Derived required to be the -class that is being defined? That is, if I understand it right, the -definition of D here this is not valid:: - - class C : public iterator_facade { ... }; - class D : public iterator_facade { ... }; - -In the definition of D, the Derived argument to iterator_facade is -a class derived from a specialization of iterator_facade, so the -requirement is met. Shouldn't the requirement be more like "when -using iterator_facade to define an iterator class Iter, the class -Iter must be derived from a specialization of iterator_facade whose -first template argument is Iter." That's a bit awkward, but at the -moment I don't see a better way of phrasing it. - -:Proposed resolution: - - In [lib.iterator.facade] - - Remove: - - The ``Derived`` template parameter must be a class derived from - ``iterator_facade``. - - Change: - - The following table describes the other requirements on the - ``Derived`` parameter. Depending on the resulting iterator's - ``iterator_category``, a subset of the expressions listed in the table - are required to be valid. The operations in the first column must be - accessible to member functions of class ``iterator_core_access``. - - to: - - 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 [lib.iterator.adaptor] - - Change: - - The ``iterator_adaptor`` is a base class template derived from - an instantiation of ``iterator_facade``. - - to: - - Each specialization of the ``iterator_adaptor`` class template - is derived from a specialization of ``iterator_facade``. - - Change: - - The ``Derived`` template parameter must be a derived class of - ``iterator_adaptor``. - - To: - - ``static_cast(iterator_adaptor*)`` shall be well-formed. - -[Note: The proposed resolution to Issue 9.37 contains related -changes] - -9.22 return type of Iterator difference for iterator facade -=========================================================== - -:Submitter: Pete Becker -:Status: New - -The proposal says:: - - template - typename enable_if_interoperable::type - operator -(iterator_facade const& lhs, - iterator_facade const& rhs); - -Shouldn't the return type be one of the two iterator types? Which -one? The idea is that if one of the iterator types can be converted -to the other type, then the subtraction is okay. Seems like the -return type should then be the type that was converted to. Is that -right? - -:Proposed resolution: - - See resolution to 9.34. - -9.23 Iterator_facade: minor wording Issue -========================================= - -:Submitter: Pete Becker -:Status: New - -In the table that lists the required (sort of) member functions of -iterator types that are based on iterator_facade, the entry for -c.equal(y) says: - - true iff c and y refer to the same position. Implements c == y - and c != y. The second sentence is inside out. c.equal(y) does - not implement either of these operations. It is used to implement - them. Same thing in the description of c.distance_to(z). - -:Proposed resolution: remove "implements" descriptions from - table. See resolution to 9.34 - - -9.24 Use of undefined name in iterator_facade table -=================================================== - -:Submitter: Pete Becker -:Status: New - -Several of the descriptions use the name X without defining -it. This seems to be a carryover from the table immediately above -this section, but the text preceding that table says "In the table -below, X is the derived iterator type." Looks like the X:: -qualifiers aren't really needed; X::reference can simply be -reference, since that's defined by the iterator_facade -specialization itself. - -:Proposed resolution: - - Remove references to X. - - In [lib.iterator.facade] operations ``operator->() const;``: - - Change: - - :Returns: If ``X::reference`` is a reference type, an object - of type ``X::pointer`` equal to:: - - &static_cast(this)->dereference() - - Otherwise returns an object of unspecified type such that, - given an object ``a`` of type ``X``, ``a->m`` is equivalent - to ``(w = *a, w.m)`` for some temporary object ``w`` of type - ``X::value_type``. - - The type ``X::pointer`` is ``Value*`` if - ``is_writable_iterator::value`` is ``true``, and - ``Value const*`` otherwise. - - to: - - :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``. - - Further changes are covered by issue 9.26. - -9.25 Iterator_facade: wrong return type -======================================= - -:Submitter: Pete Becker -:Status: New - -Several of the member functions return a Derived object or a -Derived&. Their Effects clauses end with:: - - return *this; - -This should be :: - - return *static_cast(this); - -:Proposed resolution: - - In [lib.iterator.facade], in the effects clause - of the following operations:: - - Derived& operator++() - Derived& operator--() - Derived& operator+=(difference_type n) - Derived& operator-=(difference_type n) - - Change: - ``return *this`` - - to: - ``return *static_cast(this);`` - -9.26 Iterator_facade: unclear returns clause for operator[] -=========================================================== - -:Submitter: Pete Becker -:Status: New - -The returns clause for ``operator[](difference_type n)`` const -says: - - Returns: an object convertible to X::reference and holding a copy - p of a+n such that, for a constant object v of type - X::value_type, X::reference(a[n] = v) is equivalent to p = v. - This needs to define 'a', but assuming it's supposed to be - ``*this`` (or maybe ``*(Derived*)this``), it still isn't clear - what this says. Presumably, the idea is that you can index off of - an iterator and assign to the result. But why the requirement - that it hold a copy of a+n? Granted, that's probably how it's - implemented, but it seems over-constrained. And the last phrase - seems wrong. p is an iterator; there's no requirement that you - can assign a value_type object to it. Should that be ``*p = v``? - But why the cast in reference(a[n] = v)? - -:Proposed resolution: - - In section operator[]: - - Change: - - Writable iterators built with ``iterator_facade`` implement - the semantics required by the preferred resolution to `issue - 299` and adopted by proposal `n1477`: the result of ``p[n]`` - is a proxy object containing a copy of ``p+n``, and ``p[n] = - x`` is equivalent to ``*(p + n) = x``. 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[]`` which returns an lvalue in the - derived iterator class; it will hide the one supplied by - ``iterator_facade`` from clients of her iterator. - - to: - - 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. - - In [lib.iterator.facade] operations: - - Change: - - :Returns: an object convertible to ``X::reference`` and - holding a copy *p* of ``a+n`` such that, for a constant - object ``v`` of type ``X::value_type``, ``X::reference(a[n] - = v)`` is equivalent to ``p = v``. - - to: - - :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))`` - - -9.27 Iterator_facade: redundant clause -====================================== - -:Submitter: Pete Becker -:Status: New - -``operator-`` has both an effects clause and a returns -clause. Looks like the returns clause should be removed. - -:Proposed resolution: - - Remove the returns clause. - - In [lib.iterator.facade] operations: - - Remove: - :Returns: ``static_cast(this)->advance(-n);`` - - - - -9.28 indirect_iterator: incorrect specification of default constructor -====================================================================== - -:Submitter: Pete Becker -:Status: New - -The default constructor returns "An instance of indirect_iterator -with a default constructed base object", but the constructor that -takes an Iterator object returns "An instance of indirect_iterator -with the iterator_adaptor subobject copy constructed from x." The -latter is the correct form, since it does not reach inside the base -class for its semantics. So the default constructor shoudl return -"An instance of indirect_iterator with a default-constructed -iterator_adaptor subobject." - -:Proposed resolution: - Change: - :Returns: An instance of ``indirect_iterator`` with - a default constructed base object. - - to: - :Returns: An instance of ``indirect_iterator`` with - a default-constructed ``m_iterator``. - -:Rationale: Inheritance from iterator_adaptor has been removed, so we instead - give the semantics in terms of the (exposition only) member - ``m_iterator``. - - -9.29 indirect_iterator: unclear specification of template constructor -===================================================================== - -:Submitter: Pete Becker -:Status: New - -The templated constructor that takes an indirect_iterator with a -different set of template arguments says that it returns "An -instance of indirect_iterator that is a copy of [the argument]". -But the type of the argument is different from the type of the -object being constructed, and there is no description of what -a "copy" means. The Iterator template parameter for the argument -must be convertible to the Iterator template parameter for the type -being constructed, which suggests that the argument's contained -Iterator object should be converted to the target type's Iterator -type. Is that what's meant here? -(Pete later writes: In fact, this problem is present in all of the -specialized adaptors that have a constructor like this: the -constructor returns "a copy" of the argument without saying what a -copy is.) - -:Proposed resolution: - - Change: - :Returns: An instance of ``indirect_iterator`` that is a copy of ``y``. - - to: - :Returns: An instance of ``indirect_iterator`` whose - ``m_iterator`` subobject is constructed from ``y.base()``. - - -:Rationale: Inheritance from iterator_adaptor has been removed, so we - instead give the semantics in terms of the member ``m_iterator``. - - -9.30 transform_iterator argument irregularity -============================================= - -:Submitter: Pete Becker -:Status: New - -The specialized adaptors that take both a Value and a Reference -template argument all take them in that order, i.e. Value precedes -Reference in the template argument list, with the exception of -transform_iterator, where Reference precedes Value. This seems like -a possible source of confusion. Is there a reason why this order is -preferable? - -:Proposed resolution: NAD - -:Rationale: defaults for Value depend on Reference. A sensible - Value can almost always be computed from Reference. The first - parameter is UnaryFunction, so the argument order is already - different from the other adapters. - - -9.31 function_output_iterator overconstrained -============================================= - -:Submitter: Pete Becker -:Status: New - -function_output_iterator requirements says: "The UnaryFunction must -be Assignable, Copy Constructible, and the expression f(x) must be -valid, where f is an object of type UnaryFunction and x is an -object of a type accepted by f." - -Everything starting with "and," somewhat reworded, is actually a -constraint on output_proxy::operator=. All that's needed to create -a function_output_iterator object is that the UnaryFunction type be -Assignable and CopyConstructible. That's also sufficient to -dereference and to increment such an object. It's only when you try -to assign through a dereferenced iterator that f(x) has to work, -and then only for the particular function object that the iterator -holds and for the particular value that is being assigned. - - -Addition from Jeremy: - The constructor for ``function_output_iterator`` is also - slightly overconstrained because it requires - the ``UnaryFunction`` to have a default constructor - even when the default constructor of ``function_output_iterator`` - is not used. - - -:Proposed resolution: - - Change: - ``output_proxy operator*();`` - - to: - ``/* see below */ operator*();`` - - After ``function_output_iterator& operator++(int);`` add:: - - private: - UnaryFunction m_f; // exposition only - - Change: - The ``UnaryFunction`` must be Assignable, Copy Constructible, - and the expression ``f(x)`` must be valid, where ``f`` is an - object of type ``UnaryFunction`` and ``x`` is an object of a - type accepted by ``f``. The resulting - ``function_output_iterator`` is a model of the Writable and - Incrementable Iterator concepts. - - to: - ``UnaryFunction`` must be Assignable and Copy Constructible. - - After the requirements section, add: - -.. topic:: ``function_output_iterator`` models - - ``function_output_iterator`` is a model of the Writable and - Incrementable Iterator concepts. - - Change: - :Returns: An instance of ``function_output_iterator`` with - ``f`` stored as a data member. - - to: - :Effects: Constructs an instance of ``function_output_iterator`` - with ``m_f`` constructed from ``f``. - - Change: - ``output_proxy operator*();`` - - :Returns: An instance of ``output_proxy`` constructed with - a copy of the unary function ``f``. - - to: - ``operator*();`` - - :Returns: An object ``r`` of unspecified type such that ``r = t`` - is equivalent to ``m_f(t)`` for all ``t``. - - - Remove: - ``function_output_iterator::output_proxy`` operations - - ``output_proxy(UnaryFunction& f);`` - - :Returns: An instance of ``output_proxy`` with ``f`` stored as - a data member. - - - ``template output_proxy& operator=(const T& value);`` - - :Effects: - :: - - m_f(value); - return *this; - - - Change:: - - explicit function_output_iterator(const UnaryFunction& f = UnaryFunction()); - - to:: - - explicit function_output_iterator(); - - explicit function_output_iterator(const UnaryFunction& f); - - - -9.32 Should output_proxy really be a named type? -================================================ - -:Submitter: Pete Becker -:Status: New - -This means someone can store an output_proxy object for later use, -whatever that means. It also constrains output_proxy to hold a copy -of the function object, rather than a pointer to the iterator -object. Is all this mechanism really necessary? - -:Proposed resolution: See issue 9.31. - - - -9.33 istreambuf_iterator isn't a Readable Iterator -================================================== - -:Submitter: Pete Becker -:Status: New - -c++std-lib-12333: - - N1550 requires that for a Readable Iterator a of type X, ``*a`` - returns an object of type - ``iterator_traits::reference``. ``istreambuf_iterator::operator*`` - returns ``charT``, but ``istreambuf_iterator::reference`` is - ``charT&``. So am I overlooking something, or is - ``istreambuf_iterator`` not Readable. - -:Proposed resolution: Remove all constraints on - ``iterator_traits::reference`` in Readable Iterator and Lvalue - Iterator. Change Lvalue Iterator to refer to ``T&`` instead of - ``iterator_traits::reference``. - - Change: - A class or built-in type ``X`` models the *Readable Iterator* - concept for the value type ``T`` if the following expressions - are valid and respect the stated semantics. ``U`` is the type - of any specified member of type ``T``. - - to: - 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``. - - From the Input Iterator Requirements table, remove: - - +-----------------------------------+-----------------------------------+-------------------------+ - |``iterator_traits::reference`` |Convertible to | | - | |``iterator_traits::value_type`` | | - +-----------------------------------+-----------------------------------+-------------------------+ - - Change: - - +-----------------------------------+-----------------------------------+-------------------------+ - |``*a`` |``iterator_traits::reference`` |pre: ``a`` is | - | | |dereferenceable. If ``a | - | | |== b`` then ``*a`` is | - | | |equivalent to ``*b`` | - +-----------------------------------+-----------------------------------+-------------------------+ - - to: - - +-----------------------------------+------------------------+----------------------------------------------------------------+ - |``*a`` | Convertible to ``T`` |pre: ``a`` is dereferenceable. If ``a == b`` then ``*a`` | - | | | is equivalent to ``*b``. | - +-----------------------------------+------------------------+----------------------------------------------------------------+ - - Change: - The *Lvalue Iterator* concept adds the requirement that the - ``reference`` type be a reference to the value type of the - iterator. - - to: - The *Lvalue Iterator* concept adds the requirement that the - return type of ``operator*`` type be a reference to the value - type of the iterator. - - Change: - - +---------------------------------------------------------------------------------+ - | Lvalue Iterator Requirements | - +---------------------------------+-----------+-----------------------------------+ - |Expression |Return Type|Assertion | - +=================================+===========+===================================+ - |``iterator_traits::reference``|``T&`` |``T`` is *cv* | - | | |``iterator_traits::value_type`` | - | | |where *cv* is an optional | - | | |cv-qualification | - +---------------------------------+-----------+-----------------------------------+ - - to: - - +-------------------------------------------------------------+ - | 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``. | - +-------------+-----------+-----------------------------------+ - - - At the end of the section reverse_iterator models, add: - The type ``iterator_traits::reference`` must be the type of - ``*i``, where ``i`` is an object of type ``Iterator``. - - -:Rationale: Ideally there should be requirements on the reference - type, however, since Readable Iterator is suppose to correspond - to the current standard iterator requirements (which do not place - requirements on the reference type) we will leave them off for - now. There is a DR in process with respect to the reference type - in the stadard iterator requirements. Once that is resolved we - will revisit this issue for Readable Iterator and Lvalue - Iterator. - - We added Assignable to the requirements for Readable - Iterator. This is needed to have Readable Iterator coincide with - the capabilities of Input Iterator. - - -9.34 iterator_facade free functions unspecified -=============================================== - -:Submitter: Pete Becker -:Status: New - -c++std-lib-12562: - - The template functions ``operator==``, ``operator!=``, - ``operator<``, ``operator<=``, ``operator>``, ``operator>=``, and - ``operator-`` that take two arguments that are specializations of - iterator_facade have no specification. The template function - operator+ that takes an argument that is a specialization of - iterator_facade and an argument of type difference_type has no - specification. - -:Proposed resolution: - Add the missing specifications. - - :: - - 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 - ``lhs.equal(rhs)``. Otherwise, ``rhs.equal(lhs)``. - - :: - - template - typename enable_if_interoperable::type - operator !=(iterator_facade const& lhs, - iterator_facade const& rhs); - - :Returns: if ``is_convertible::value``, then - ``!lhs.equal(rhs)``. Otherwise, ``!rhs.equal(lhs)``. - - :: - - template - typename enable_if_interoperable::type - operator <(iterator_facade const& lhs, - iterator_facade const& rhs); - - :Returns: if ``is_convertible::value``, then - ``lhs.distance_to(rhs) < 0``. Otherwise, ``rhs.distance_to(lhs) > - 0``. - - :: - - template - typename enable_if_interoperable::type - operator <=(iterator_facade const& lhs, - iterator_facade const& rhs); - - :Returns: if ``is_convertible::value``, then - ``lhs.distance_to(rhs) <= 0``. Otherwise, ``rhs.distance_to(lhs) - >= 0``. - - :: - - template - typename enable_if_interoperable::type - operator >(iterator_facade const& lhs, - iterator_facade const& rhs); - - :Returns: if ``is_convertible::value``, then - ``lhs.distance_to(rhs) > 0``. Otherwise, - ``rhs.distance_to(lhs) < 0``. - - - :: - - template - typename enable_if_interoperable::type - operator >=(iterator_facade const& lhs, - iterator_facade const& rhs); - - :Returns: if ``is_convertible::value``, then - ``lhs.distance_to(rhs) >= 0``. Otherwise, - ``rhs.distance_to(lhs) <= 0``. - - :: - - 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 - ``-lhs.distance_to(rhs)``. Otherwise, - ``rhs.distance_to(lhs)``. - - - -9.35 iterator_facade: too many equals? -====================================== - -:Submitter: Pete Becker -:Status: New - -c++std-lib-12563: - - The table listing the functions required for types derived from - iterator_facade has two functions named equal and two named - distance_to:: - - c.equal(b) - c.equal(y) - c.distance_to(b) - c.distance_to(z) - - where b and c are const objects of the derived type, y and z are - constant objects of certain iterator types that are interoperable - with the derived type. Seems like the 'b' versions are - redundant: in both cases, the other version will take a 'b'. In - fact, iterator_adaptor is specified to use iterator_facade, but - does not provide the 'b' versions of these functions. - - Are the 'b' versions needed? - -:Proposed resolution: Remove the 'b' versions. - - In ``iterator_facade`` requirements, remove: - - +--------------------+-------------------+-------------------------------------+---------------------------+ - |``c.equal(b)`` |convertible to bool|true iff ``b`` and ``c`` are |Single Pass Iterator | - | | |equivalent. | | - +--------------------+-------------------+-------------------------------------+---------------------------+ - - and remove: - - +--------------------+-------------------+-------------------------------------+---------------------------+ - |``c.distance_to(b)``|convertible to |equivalent to ``distance(c, b)`` |Random Access Traversal | - | |X::difference_type | |Iterator | - +--------------------+-------------------+-------------------------------------+---------------------------+ - - -9.36 iterator_facade function requirements -========================================== - -:Submitter: Pete Becker -:Status: New - -c++std-lib-12636: - - The table that lists required functions for the derived type X - passed to iterator_facade lists, among others: - - for a single pass iterator:: - - c.equal(b) - c.equal(y) - - where b and c are const X objects, and y is a const object of a - single pass iterator that is interoperable with X. Since X is - interoperable with itself, c.equal(b) is redundant. There is a - difference in their descriptions, but its meaning isn't - clear. The first is "true iff b and c are equivalent", and the - second is "true iff c and y refer to the same position." Is there - a difference between the undefined term "equivalent" and "refer - to the same position"? - - Similarly, for a random access traversal iterator:: - - c.distance_to(b) - c.distance_to(z) - - where z is a constant object of a random access traversal - iterator that is interoperable with X. Again, X is interoperable - with itself, so c.distance_to(b) is redundant. Also, the - specification for c.distance_to(z) isn't valid. It's written - as "equivalent to distance(c, z)". The template function distance - takes two arguments of the same type, so distance(c, z) isn't - valid if c and z are different types. Should it be - distance(c, (X)z)? - -:Proposed resolution: Removed the 'b' versions (see 9.35) and added the cast. - - Change: - - +--------------------+-------------------+-------------------------------------+---------------------------+ - |``c.distance_to(z)``|convertible to |equivalent to ``distance(c, z)``. |Random Access Traversal | - | |X::difference_type |Implements ``c - z``, ``c < z``, ``c |Iterator | - | | |<= z``, ``c > z``, and ``c >= c``. | | - +--------------------+-------------------+-------------------------------------+---------------------------+ - - to: - - +--------------------+----------------------+-------------------------+---------------------------+ - |``c.distance_to(z)``|convertible to |equivalent to |Random Access Traversal | - | |``F::difference_type``|``distance(c, X(z))``. |Iterator | - +--------------------+----------------------+-------------------------+---------------------------+ - - - -==================================== - More Issues (not from Matt's list) -==================================== - - - -9.37x Inheritance in iterator_adaptor and other adaptors is an overspecification -================================================================================ - -:Submitter: Pete Becker -:Status: New - -c++std-lib-12696: -The paper requires that iterator_adaptor be derived from an -appropriate instance of iterator_facade, and that most of the specific -forms of adaptors be derived from appropriate instances of -iterator_adaptor. That seems like overspecification, and we ought to -look at specifying these things in terms of what the various templates -provide rather than how they're implemented. - -:Proposed resolution: - - Remove the specfication of inheritance, and add explicit - specification of all the functionality that was inherited from the - specialized iterators. - - In iterator_adaptor, inheritance is retained, sorry NAD. Also, - the Interoperable Iterators concept is added to the new iterator - concepts, and this concept is used in the specification of the - iterator adaptors. - - - In n1550, after [lib.random.access.traversal.iterators], add: - - 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)``. | - +-----------+-----------------------+---------------------+--------------------------------------+ - - - - In N1530: - - In [lib.iterator.adaptor] - - Change:: - - class iterator_adaptor - : public iterator_facade - - To:: - - class iterator_adaptor - : public iterator_facade // see details - - - Change the text from: - The ``Base`` type must implement the expressions involving - ``m_iterator`` in the specifications... - - until the end of the **iterator_adaptor requirements** section, to: - The ``Base`` argument shall be Assignable and Copy Constructible. - - - Add: - -.. topic:: ``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 - - - In [lib.iterator.special.adaptors] - - Change:: - - class indirect_iterator - : public iterator_adaptor - { - friend class iterator_core_access; - - to:: - - 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; - - Change:: - - private: // as-if specification - typename indirect_iterator::reference dereference() const - { - return **this->base(); - } - - to:: - - Iterator const& base() const; - reference operator*() const; - indirect_iterator& operator++(); - indirect_iterator& operator--(); - private: - Iterator m_iterator; // exposition - - - After the synopsis add: - - 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; - - - [Note: See resolution to 9.44y for a description of ``pointee`` and - ``indirect_reference``] - - After the requirements section, add: - -.. topic:: ``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``. - - - Before ``indirect_iterator();`` add: - - In addition to the operations required by the concepts described - above, specializations of ``indirect_iterator`` provide the - following operations. - - Change: - :Returns: An instance of ``indirect_iterator`` with - the ``iterator_adaptor`` subobject copy constructed from ``x``. - - to: - :Returns: An instance of ``indirect_iterator`` with - ``m_iterator`` copy constructed from ``x``. - - - At the end of the indirect_iterator operations add: - - ``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`` - - - - Change:: - - template - class reverse_iterator : - public iterator_adaptor< reverse_iterator, Iterator > - { - friend class iterator_core_access; - - to:: - - 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; - - Change:: - - private: // as-if specification - typename reverse_iterator::reference dereference() const { return *prior(this->base()); } - - void increment() { --this->base_reference(); } - void decrement() { ++this->base_reference(); } - - void advance(typename reverse_iterator::difference_type n) - { - this->base_reference() += -n; - } - - template - typename reverse_iterator::difference_type - distance_to(reverse_iterator const& y) const - { - return this->base_reference() - y.base(); - } - - to:: - - Iterator const& base() const; - reference operator*() const; - reverse_iterator& operator++(); - reverse_iterator& operator--(); - private: - Iterator m_iterator; // exposition - - After the synopsis for ``reverse_iterator``, add: - 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``. - - - Change: - **reverse_iterator requirements** - - The base ``Iterator`` must be a model of Bidirectional Traversal - Iterator. The resulting ``reverse_iterator`` will be a model of the - most refined standard traversal and access concepts that are modeled - by ``Iterator``. - - - to: - **reverse_iterator requirements** - - ``Iterator`` must be a model of Bidirectional Traversal Iterator. - - -.. topic:: ``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``. - - Change: - :Returns: An instance of ``reverse_iterator`` with a - default constructed base object. - - to: - :Effects: Constructs an instance of ``reverse_iterator`` with ``m_iterator`` - default constructed. - - Change: - :Effects: Constructs an instance of ``reverse_iterator`` with a - base object copy constructed from ``x``. - - to: - :Effects: Constructs an instance of ``reverse_iterator`` with a - ``m_iterator`` constructed from ``x``. - - - Change: - :Returns: An instance of ``reverse_iterator`` that is a copy of ``r``. - - to: - :Effects: Constructs instance of ``reverse_iterator`` whose - ``m_iterator`` subobject is constructed from ``y.base()``. - - - - At the end of the operations for ``reverse_iterator``, add: - ``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`` - - - - Change:: - - class transform_iterator - : public iterator_adaptor - { - friend class iterator_core_access; - - to:: - - 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; - - - After ``UnaryFunction functor() const;`` add:: - - Iterator const& base() const; - reference operator*() const; - transform_iterator& operator++(); - transform_iterator& operator--(); - - Change:: - - private: - typename transform_iterator::value_type dereference() const; - UnaryFunction m_f; - }; - - to:: - - private: - Iterator m_iterator; // exposition only - UnaryFunction m_f; // exposition only - }; - - - After the synopsis, add: - 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``. - - - In the requirements section, change: - The type ``Iterator`` must at least model Readable Iterator. The - resulting ``transform_iterator`` models the most refined of the - following that is also modeled by ``Iterator``. - - * Writable Lvalue Iterator if - ``result_of::reference)>::type`` - is a non-const reference. - - * Readable Lvalue Iterator if - ``result_of::reference)>::type`` - is a const reference. - - * Readable Iterator otherwise. - - - The ``transform_iterator`` models the most refined standard traversal - concept that is modeled by ``Iterator``. - - The ``reference`` type of ``transform_iterator`` is - ``result_of::reference)>::type``. - The ``value_type`` is ``remove_cv >::type``. - - to: - The argument ``Iterator`` shall model Readable Iterator. - - - After the requirements section, add: - -.. topic:: ``transform_iterator`` models - - The resulting ``transform_iterator`` models the most refined of the - following options 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``. - - - Remove the private operations section heading and remove:: - - ``typename transform_iterator::value_type dereference() const;`` - - :Returns: ``m_f(transform_iterator::dereference());`` - - After the entry for ``functor()``, add:: - - ``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`` - - - Change:: - - template - class filter_iterator - : public iterator_adaptor< - filter_iterator, Iterator - , use_default - , /* see details */ - > - { - public: - - to:: - - 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; - - Change:: - - private: // as-if specification - void increment() - { - ++(this->base_reference()); - satisfy_predicate(); - } - - void satisfy_predicate() - { - while (this->base() != this->m_end && !this->m_predicate(*this->base())) - ++(this->base_reference()); - } - - Predicate m_predicate; - Iterator m_end; - - to:: - - 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 - - - - Change: - The base ``Iterator`` parameter must be a model of Readable - Iterator and Single Pass Iterator. The resulting - ``filter_iterator`` will be a model of Forward Traversal Iterator - if ``Iterator`` is, otherwise the ``filter_iterator`` will be a - model of Single Pass Iterator. The access category of the - ``filter_iterator`` will be the same as the access category of - ``Iterator``. - - to: - The ``Iterator`` argument shall meet the requirements of Readable - Iterator and Single Pass Iterator or it shall meet the requirements of - Input Iterator. - - After the requirements section, add: - -.. topic:: ``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 | - +-----------------------------+----------------------------------------------------------+ - - +--------------------------------+----------------------------------------------+ - | 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 | - +-------------------------------------------------------+---------------------------------+ - - - ``filter_iterator`` is interoperable with ``filter_iterator`` - if and only if ``X`` is interoperable with ``Y``. - - - Change: - :Returns: a ``filter_iterator`` whose - predicate is a default constructed ``Predicate`` and - whose ``end`` is a default constructed ``Iterator``. - - to: - :Effects: Constructs a ``filter_iterator`` whose``m_pred``, ``m_iter``, and ``m_end`` - members are a default constructed. - - Change: - :Returns: A ``filter_iterator`` at position ``x`` that filters according - to predicate ``f`` and that will not increment past ``end``. - - to: - :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``. - - Change: - :Returns: A ``filter_iterator`` at position ``x`` that filters - according to a default constructed ``Predicate`` - and that will not increment past ``end``. - - to: - :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. - - - Change: - :Returns: A copy of iterator ``t``. - - to: - :Effects: Constructs a filter iterator whose members are copied from ``t``. - - Change: - :Returns: A copy of the predicate object used to construct ``*this``. - - to: - :Returns: ``m_pred`` - - Change: - :Returns: The object ``end`` used to construct ``*this``. - - to: - :Returns: ``m_end`` - - At the end of the operations section, add: - - ``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`` - - - Change:: - - class counting_iterator - : public iterator_adaptor< - counting_iterator - , Incrementable - , Incrementable - , Access - , /* see details for traversal category */ - , Incrementable const& - , Incrementable const* - , /* distance = Difference or a signed integral type */> - { - friend class iterator_core_access; - public: - - to:: - - 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; - - - - Change:: - - private: - typename counting_iterator::reference dereference() const - { - return this->base_reference(); - } - - to:: - - Incrementable const& base() const; - reference operator*() const; - counting_iterator& operator++(); - counting_iterator& operator--(); - private: - Incrementable m_inc; // exposition - - After the synopsis, add: - - 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&) - - - - Change: - [*Note:* implementers are encouraged to provide an implementation of - ``distance_to`` and a ``difference_type`` that avoids overflows in - the cases when the ``Incrementable`` type is a numeric type.] - - to: - [*Note:* implementers are encouraged to provide an implementation of - ``operator-`` and a ``difference_type`` that avoid overflows in - the cases where ``std::numeric_limits::is_specialized`` - is true.] - - Change: - The ``Incrementable`` type must be Default Constructible, Copy - Constructible, and Assignable. The default distance is - an implementation defined signed integegral type. - - The resulting ``counting_iterator`` models Readable Lvalue Iterator. - - to: - The ``Incrementable`` argument shall be Copy Constructible and Assignable. - - Change: - Furthermore, if you wish to create a counting iterator that is a Forward - Traversal Iterator, then the following expressions must be valid: - - to: - If ``iterator_category`` is convertible to ``forward_iterator_tag`` - or ``forward_traversal_tag``, the following must be well-formed: - - Change: - If you wish to create a counting iterator that is a - Bidirectional Traversal Iterator, then pre-decrement is also required: - - to: - If ``iterator_category`` is convertible to - ``bidirectional_iterator_tag`` or ``bidirectional_traversal_tag``, - the following expression must also be well-formed: - - Change: - If you wish to create a counting iterator that is a Random Access - Traversal Iterator, then these additional expressions are also - required: - - to: - If ``iterator_category`` is convertible to - ``random_access_iterator_tag`` or ``random_access_traversal_tag``, - the following must must also be valid: - - After the requirements section, add: - -.. topic:: ``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``. - - At the begining of the operations section, add: - - In addition to the operations required by the concepts modeled by - ``counting_iterator``, ``counting_iterator`` provides the following - operations. - - Change: - :Returns: A default constructed instance of ``counting_iterator``. - - to: - :Requires: ``Incrementable`` is Default Constructible. - :Effects: Default construct the member ``m_inc``. - - Change: - :Returns: An instance of ``counting_iterator`` that is a copy of ``rhs``. - - to: - :Effects: Construct member ``m_inc`` from ``rhs.m_inc``. - - Change: - :Returns: An instance of ``counting_iterator`` with its base - object copy constructed from ``x``. - - to: - :Effects: Construct member ``m_inc`` from ``x``. - - At the end of the operations section, add: - - ``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`` - - -9.38x Problem with specification of a->m in Readable Iterator -============================================================= - -:Submitter: Howard Hinnant -:Status: New - -c++std-lib-12585: - -Readable Iterator Requirements says: - - +----------+--------+-----------------------------------------------------------+ - | ``a->m`` | ``U&`` | pre: ``(*a).m`` is well-defined. Equivalent to ``(*a).m`` | - +----------+--------+-----------------------------------------------------------+ - -Do we mean to outlaw iterators with proxy references from meeting -the readable requirements? - -Would it be better for the requirements to read ``static_cast(*a).m`` -instead of ``(*a).m`` ? - -:Proposed resolution: NAD. - -:Rationale: We think you're misreading "pre:". - If ``(*a).m`` is not well defined, then the iterator is not - required to provide ``a->m``. So a proxy iterator is not - required to provide ``a->m``. - - As an aside, it is possible for proxy iterators to - support ``->``, so changing the requirements to - read ``static_cast(*a).m`` is interesting. - However, such a change to Readable Iterator would - mean that it no longer corresponds to the - input iterator requirements. So old iterators would not - necessarily conform to new iterator requirements. - - -9.39x counting_iterator Traversal argument unspecified -====================================================== - -:Submitter: Pete Becker - -c++std-lib-12635: - -counting_iterator takes an argument for its Traversal type, with a -default value of use_default. It is derived from an instance of -iterator_adaptor, where the argument passed for the Traversal type -is described as "\ ``/* see details for traversal category -*/``". The details for counting_iterator describe constraints on -the Incrementable type imposed by various traversal -categories. There is no description of what the argument to -iterator_adaptor should be. - - -:Proposed resolution: - We no longer inherit from iterator_adaptor. So instead, - we specify the iterator_category in terms of the Traversal type - (which is now called CategoryOrTraversal). Also the - requirements and models section was reorganized to - match these changes and to make more sense. - - - -9.40x indirect_iterator requirements muddled -============================================ - -:Submitter: Pete Becker - -c++std-lib-12640: - - The value_type of the Iterator template parameter should itself - be dereferenceable. The return type of the ``operator*`` for - the value_type must be the same type as the Reference template - parameter. - - I'd say this a bit differently, to emphasize what's required: - iterator_traits::value_type must be dereferenceable. - The Reference template parameter must be the same type as - ``*iterator_traits::value_type()``. - - The Value template parameter will be the value_type for the - indirect_iterator, unless Value is const. If Value is const X, then - value_type will be non- const X. - - Also non-volatile, right? In other words, if Value isn't use_default, it - just gets passed as the Value argument for iterator_adaptor. - - The default for Value is:: - - iterator_traits< iterator_traits::value_type >::value_type - - If the default is used for Value, then there must be a valid - specialization of iterator_traits for the value type of the - base iterator. - - The earlier requirement is that - ``iterator_traits::value_type`` must be - dereferenceable. Now it's being treated as an iterator. Is this - just a pun, or is ``iterator_traits::value_type`` - required to be some form of iterator? If it's the former we need - to find a different way to say it. If it's the latter we need to - say so. - -:Proposed resolution: - Change: - - The ``value_type`` of the ``Iterator`` template parameter - should itself be dereferenceable. The return type of the - ``operator*`` for the ``value_type`` must be the same type as - the ``Reference`` template parameter. The ``Value`` template - parameter will be the ``value_type`` for the - ``indirect_iterator``, unless ``Value`` is const. If ``Value`` - is ``const X``, then ``value_type`` will be *non-* ``const X``. - The default for ``Value`` is:: - - iterator_traits< iterator_traits::value_type >::value_type - - If the default is used for ``Value``, then there must be a - valid specialization of ``iterator_traits`` for the value type - of the base iterator. - - The ``Reference`` parameter will be the ``reference`` type of the - ``indirect_iterator``. The default is ``Value&``. - - The ``Access`` and ``Traversal`` parameters are passed - unchanged to the corresponding parameters of the - ``iterator_adaptor`` base class, and the ``Iterator`` parameter - is passed unchanged as the ``Base`` parameter to the - ``iterator_adaptor`` base class. - - to: - - 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.] - - -:Rationale: Not included above is the specification of the - ``value_type``, ``reference``, etc., members, which is handled by - the changes in 9.37x. - - -9.41x Problem with transform_iterator requirements -================================================== - -:Submitter: Pete Becker - -c++std-lib-12641: - - The reference type of transform_iterator is ``result_of< - UnaryFunction(iterator_traits::reference) - >::type``. The ``value_type`` is - ``remove_cv >::type``. - -These are the defaults, right? If the user supplies their own types -that's what gets passed to iterator_adaptor. And again, the -specification should be in terms of the specialization of -iterator_adaptor, and not in terms of the result: - -Reference argument to iterator_adaptor:: - - if (Reference != use_default) - Reference - else - result_of< - UnaryFunction(iterator_traits::reference) - >::type - -Value argument to iterator_adaptor:: - - if (Value != use_default) - Value - else if (Reference != use_default) - remove_reference::type - else - remove_reference< - result_of< - UnaryFunction(iterator_traits::reference) - >::type - >::type - -There's probably a better way to specify that last alternative, but -I've been at this too long, and it's all turning into a maze of -twisty passages, all alike. - -:Proposed resolution: - Replace: - - The reference type of transform_iterator is ``result_of< - UnaryFunction(iterator_traits::reference) - >::type``. The ``value_type`` is - ``remove_cv >::type``. - - with: - - If ``Reference`` is ``use_default`` then the ``reference`` - member of ``transform_iterator`` is ``result_of< - UnaryFunction(iterator_traits::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``. - - -9.42x filter_iterator details unspecified -========================================= - -:Submitter: Pete Becker - -c++std-lib-12642: - -The paper says:: - - template - class filter_iterator - : public iterator_adaptor< - filter_iterator, - Iterator, - use_default, - /* see details */ > - -That comment covers the Access, Traversal, Reference, and Difference -arguments. The only specification for any of these in the details is: - - The access category of the filter_iterator will be the same as - the access category of Iterator. - -Needs more. - -:Proposed resolution: - Add to the synopsis:: - - 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; - - and add just after the synopsis: - - 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``. - - -9.43x transform_iterator interoperability too restrictive -========================================================= - -:Submitter: Jeremy Siek - -We do not need to require that the function objects have the same -type, just that they be convertible. - -:Proposed resolution: - - Change:: - - template - transform_iterator( - transform_iterator const& t - , typename enable_if_convertible::type* = 0 // exposition - ); - - to:: - - template - transform_iterator( - transform_iterator const& t - , typename enable_if_convertible::type* = 0 // exposition only - , typename enable_if_convertible::type* = 0 // exposition only - ); - - -9.44y ``indirect_iterator`` and smart pointers -============================================== - -:Submitter: Dave Abrahams - -``indirect_iterator`` should be able to iterate over containers of -smart pointers, but the mechanism that allows it was left out of -the specification, even though it's present in the Boost -specification - -:Proposed resolution: Add ``pointee`` and ``indirect_reference`` - to deal with this capability. - - In [lib.iterator.helper.synopsis], add:: - - template - struct pointee; - - template - struct indirect_reference; - - After ``indirect_iterator``\ 's abstract, add: - -.. topic:: Class template ``pointee`` - - .. include:: pointee_ref.rst - -.. topic:: Class template ``indirect_reference`` - - .. include:: indirect_reference_ref.rst - -See proposed resolution to Issue 9.37x for more changes related to -this issue. - -9.45y N1530: Typos and editorial changes in proposal text (not standardese) -=========================================================================== - -:Submitter: Dave Abrahams - -1. "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 making mistakes based on - that assumption." - - :Proposed resolution: add "from" before "making" - -2. mention of obsolete projection_iterator - - :Proposed Resolution: - - From n1530, in the **Specialized Adaptors** section, remove: - - ``projection_iterator``, which is similar to ``transform_iterator`` - except that when dereferenced it returns a reference instead of - a value. - - :Rationale: - This iterator was in the original boost library, but the new - iterator concepts allowed this iterator to be - folded into ``transform_iterator``. - - - -9.46y N1530: ``base()`` return-by-value is costly -================================================= - -:Submitter: Dave Abrahams - -We've had some real-life reports that iterators that use -``iterator_adaptor``\ 's ``base()`` function can be inefficient -when the ``Base`` iterator is expensive to copy. Iterators, of -all things, should be efficient. - -:Proposed resolution: - - In [lib.iterator.adaptor] - - Change:: - - Base base() const; - - to:: - - Base const& base() const; - - twice (once in the synopsis and once in the **public - operations** section). - - -9.47x Forgot default constructible in Forward Traversal Iterator -================================================================ - -:Submitter: Jeremy Siek - -We want Forward Traversal Iterator plus Readable Lvalue Iterator to -match the old Foward Iterator requirements, so we need Forward -Traversal Iterator to include Default Constructible. - -:Proposed resolution: - - Change: - - A class or built-in type ``X`` models the *Forward Traversal Iterator* - concept if the following expressions are valid and respect the stated - semantics. - - +-------------------------------------------------------------------------------------------+ - |Forward Traversal Iterator Requirements (in addition to Single Pass Iterator) | - +---------------------------------------+-----------------------------------+---------------+ - - to: - - 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) | - +---------------------------------------+-----------------------------------+----------------------------+ - -9.48x Editorial changes (non-normative text) -============================================ - -Change: - 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. ``iterator_facade`` does not use policy - objects for several reasons: - -to: - 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: - - -Change: - iterator's ``operator++`` returns the iterator type itself means - that all iterators generated by ``iterator_facade`` would be - instantiations of ``iterator_facade``. Cumbersome type generator - -to: - 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 - - -Change: - The return type for ``operator->`` and ``operator[]`` is not - explicitly specified. Instead it requires each ``iterator_facade`` - instantiation to meet the requirements of its ``iterator_category``. - -To: - 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. - - -9.49x Clarification of iterator_facade requirements and type members -==================================================================== - -A general cleanup and simplification of the requirements and -description of type members for ``iterator_facade``. - - -The user is only allowed to add ``const`` as a qualifier. - -Change: - ``typedef remove_cv::type value_type;`` - -to: - ``typedef remove_const::type value_type;`` - - -We use to have an unspecified type for ``pointer``, to match the -return type of ``operator->``, but there's no real reason to make them -match, so we just use the simpler ``Value*`` for ``pointer``. - -Change: - - ``typedef /* see description of operator-> */ pointer;`` - -To: - ``typedef Value* pointer;`` - - -Remove: - Some of the constraints on template parameters to - ``iterator_facade`` are expressed in terms of resulting nested - types and should be viewed in the context of their impact on - ``iterator_traits``. - -Change: - The ``Derived`` template parameter must be a class derived from - ``iterator_facade``. - -and: - The following table describes the other requirements on the - ``Derived`` parameter. Depending on the resulting iterator's - ``iterator_category``, a subset of the expressions listed in the table - are required to be valid. The operations in the first column must be - accessible to member functions of class ``iterator_core_access``. - -to: - 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. - - -Remove: - The nested ``::value_type`` type will be the same as - ``remove_cv::type``, so the ``Value`` parameter must be - an (optionally ``const``\ -qualified) non-reference type. - - The nested ``::reference`` will be the same as the ``Reference`` - parameter; it must be a suitable reference type for the resulting - iterator. The default for the ``Reference`` parameter is - ``Value&``. - - -Change: - - In the table below, ``X`` is the derived iterator type, ``a`` is an - object of type ``X``, ``b`` and ``c`` are objects of type ``const X``, - ``n`` is an object of ``X::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``. - - +--------------------+-------------------+-------------------------------------+---------------------------+ - |Expression |Return Type |Assertion/Note |Required to implement | - | | | |Iterator Concept(s) | - +====================+===================+=====================================+===========================+ - |``c.dereference()`` |``X::reference`` | |Readable Iterator, Writable| - | | | |Iterator | - +--------------------+-------------------+-------------------------------------+---------------------------+ - |``c.equal(b)`` |convertible to bool|true iff ``b`` and ``c`` are |Single Pass Iterator | - | | |equivalent. | | - +--------------------+-------------------+-------------------------------------+---------------------------+ - |``c.equal(y)`` |convertible to bool|true iff ``c`` and ``y`` refer to the|Single Pass Iterator | - | | |same position. Implements ``c == y``| | - | | |and ``c != y``. | | - +--------------------+-------------------+-------------------------------------+---------------------------+ - |``a.advance(n)`` |unused | |Random Access Traversal | - | | | |Iterator | - +--------------------+-------------------+-------------------------------------+---------------------------+ - |``a.increment()`` |unused | |Incrementable Iterator | - +--------------------+-------------------+-------------------------------------+---------------------------+ - |``a.decrement()`` |unused | |Bidirectional Traversal | - | | | |Iterator | - +--------------------+-------------------+-------------------------------------+---------------------------+ - |``c.distance_to(b)``|convertible to |equivalent to ``distance(c, b)`` |Random Access Traversal | - | |X::difference_type | |Iterator | - +--------------------+-------------------+-------------------------------------+---------------------------+ - |``c.distance_to(z)``|convertible to |equivalent to ``distance(c, z)``. |Random Access Traversal | - | |X::difference_type |Implements ``c - z``, ``c < z``, ``c |Iterator | - | | |<= z``, ``c > z``, and ``c >= c``. | | - +--------------------+-------------------+-------------------------------------+---------------------------+ - -to: - - 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``. - - **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 | - +--------------------+----------------------+-------------------------+---------------------------+ - - - diff --git a/doc/iterator_adaptor.html b/doc/iterator_adaptor.html deleted file mode 100644 index d09d4c5..0000000 --- a/doc/iterator_adaptor.html +++ /dev/null @@ -1,450 +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-01-12
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. All rights reserved
-
- --- - - - -
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 iter);
-    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 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 1dca935d67fb5b10b6ec3b57343d121e304d1a80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106075 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 - - - - - - - - -
- - -
-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 iter);
-    Base base() const;
- protected:
-    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 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 usage

-

The Derived template parameter must be a publicly derived from -iterator_adaptor. In order for Derived to model the -iterator concepts corresponding to -iterator_traits<Derived>::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<Derived, V, C, R, D> -in evaluating any valid expression involving Derived -in those concepts' requirements.

-
-
-

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 iter);

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

Base 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
-
-
- - - - diff --git a/doc/iterator_adaptor_ref.rst b/doc/iterator_adaptor_ref.rst deleted file mode 100644 index b8de30d..0000000 --- a/doc/iterator_adaptor_ref.rst +++ /dev/null @@ -1,178 +0,0 @@ -.. 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. All - rights reserved. - -.. 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 iter); - 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 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 143e9d0..0000000 --- a/doc/iterator_archetypes.html +++ /dev/null @@ -1,220 +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-01-27
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004. All rights reserved
- --- - - - -
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 c00fda4baa908c4bb177aa41a888e01c5693d8bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66747 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 W291<~TSaCjCI%*4s;aL3Zd?G_K|oyq diff --git a/doc/iterator_archetypes.rst b/doc/iterator_archetypes.rst deleted file mode 100755 index 18d22ff..0000000 --- a/doc/iterator_archetypes.rst +++ /dev/null @@ -1,189 +0,0 @@ -++++++++++++++++++++ - 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: $Date$ -:copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004. All rights reserved - -.. _`Boost Consulting`: http://www.boost-consulting.com -.. _`Open Systems Lab`: http://www.osl.iu.edu -.. _`Zephyr Associates, Inc.`: http://www.styleadvisor.com - -: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 |concepts|_ library. - -.. |concepts| replace:: ``boost::concept_check`` -.. _concepts: ../../concept_check/index.html - - -.. contents:: Table of Contents - -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_concepts.html b/doc/iterator_concepts.html deleted file mode 100644 index 7962ff0..0000000 --- a/doc/iterator_concepts.html +++ /dev/null @@ -1,123 +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-01-27
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004. All rights reserved
- --- - - - -
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 ba9b983d3bcbcd516a91cee8fa00ad37492ded0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67067 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 z 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 z zYvyB_xi$@p+qGXayT&%oo~`ik{Sk#p5lb7DUGCNVx z^-;UB?;m56KCkra;yn2`Y1hhbsLpJAdpvrN6My`hb?fD z9)7(h`%?FzC0{n({Io5*T)d0PGRyw&6|bXn7ADF@Tu*jc*0FL;NyHVEJuz1=ZMY>> zZyc1Q5w$LN>s=GeoBRHXXHMG|JU>G?JXkLG;Le>dBTpSXSJ9~&l=3<>C_He_!ZnT4 zx24^4z1=G8(?3T!uHW3Uqr6V?-1>5})7e@w<*J_wFRY9)`B~e2^oMe%{^kuUYSXvf z{Hb-4>!?JWp4$;PCC5H*c*rR+fBTp?Z0z{i#*^JtYiJvQ;LVh_WBG78hA( zv3u{b!lbmt&AUS0zDvy2uAXkOJ^M!I#(#J6&hMFOXC8CEd(j_R5eILF*m(|^OY0lBug{*bH*Cc;FDltt@ z$^7Z2pd8n&pM0LhyrmRR=8yQv2y^X>1^d;9x=5y1{&YAZW z+{wRc^#9{TkImaQ2L;WE)|{PlZR^956$)FA?Yn(WM`c}1=%%cW-|O$(E_>DYne$Hd z83&c6f2+E6zNTG%Q?=Or_g*u@lY8t!OkdyWWnLS-K9&2R=<4jw&!v4IU%t;q^psEVmu{Xt7HsliE z9qHwv?d%)kiKSz2ioR?JY!|FDgt!h*$KE|LH#bp1-z7DtBvC;>BqJ3>`6T8hr6elo zM`SAK2V^Sf2WO^(6onQPXXfPRDd-1efFz1D74-dcQ_~X_^wZK5^wTmG^wV-cY!Cy) zN}>PRU&W;b1x2aF#R||P$rSVpOCjfefm;!%hkt>FEI>UV1<<$#sI{)3pO_2kF@XD5 zV2w~+1&KwedEhp`K9~s=h7Ecs=tIXZKo{OBKySPSo0^%Qq5wH&M*)2Gt%81jUaEqA zNqN44eo01AYAUE#59)NLWtOEX=oe>JC_pa6RnSk(OwTA$(9g>RX#ii33zC8!(gX7! zq|*)U?i7|HpS%X+Dd;DbP`jfFYN5ewpr5UvpQE6ktDv8!pr5axU!b60 zsGwh@pkJ(@U!tI2s-Rz{pkJ<_U!kC1si0q_pr4wTl31Lfpr4uxp)*SJ(i4kHb8`|) zOBD1m&H;lb7qqUNfr38t_&Cb)2WIbV@MajoM|**bCQ!)|tzd3qtYB^cSq5mJU=W2O9fLiBL#Cqh`gmGs00PcBV$uTLj@Bv12BfMAv^;G zV*`kZMy6&87KRpJ(?DuK*g(O=$VkD&z*523*hsH?X8 zdO6OC1s;%$W`?f|gjNLO=mMEp;OPPxnt_)mg8D!vW_T{m2Hk({rthhbIA{y?m@Uv! zMc94UNJnfT_m9A_f!sd=3&6Y&>mL~!nwh{BC>kl4SsKB4s68ZeGjkIndPvhkBVulE zde14e;Nk-nkHwshy9&$8+aFvqxe)O<@1W`q?*eYQJBmA^FD!6mV&UX`H+}23o7OvD z+uZwIvd{Q=&5Zq0rmOxfcI(aev(geRO$#*Mp&7!J_x#M6Q-@Bmi-cd9kjly&8F?VV zkU@6t4&^IHB-yr4HYjZS#28swd9xuX;PUb5$J_fSclS@_c3>B2zg=x{NJnRG5b=`83O%xEeUa+Whv+9*^hHOWUu&v;0Kd|7OoQ^}FwDf{o@y2r+vI5jsEY`l# z!+PKpmr1kZoW^AV+%seuzD!q(v@W)o@H;-uSp0WA|4t{_xpJ6N*?=v>(+kuP@jadb5e5O0u+91|9=0> zui5h5PdJL%Up30FKJ)9vkBa}l&pwbpsq$8#z<9=7)(O3nxicQU$aut9k+aDC5lhuZ zro^(efO3T^e*+CWj`F?xW5N0(LQ;N#Jw9}G9W&9AwmKH;wX4++VC>~?x* z|MAzv^gfpVG2_Hb{+cxtKg<8vVKd$SLtxu$`5zjG-{${$e^y0}t^9jZ+S4R(BkRrf(DY^a3I|71Skoo+Up1d7G=Su%zXd<^S3~dF!wDbNH%r@-(i< zaxv`D&F?&R%6i84aZN-b+3|W{F7Ms?%k2=xAJpp1(mP%q*+TQOt`yh0?XA~vE8ye z?IyH6KP=A8-udy2OJY+t?C9>6ttvRVcG=p14?B}r@a;GfxS8)-`ze!GcOrP&nAOrx zvHLleaxOjbb8eCTvw3ngyoshSPVAAc>}%QbyHfm5QO|oTw&Y`bQpzQ6AIx#uJnd~& zoALq6EVXi%h?JH~7n-IRHfW?jl&dLSQ|?m|X5Ym>!QI!cYSly)wycY9ZoH1E>DO60 z;vv+&TWSc(rxE9~(wpNJWH`}#fazydQSLxGq(zaAgR{VHyUA(8UV}XL;+bu@r z{>MVOHh-w{gxwn5M$ey^IF+mkJq&&KFPGkhu9 z6UKd~D%eMUec39BpM;59MFz(rA6B z>m2$&yTdQJpCLK8e`m4IReRg27iN6vrrg>tmu~Od6P5j+t37Pv>J6oCpI0}^uC~|S zd8@^%bUFWl^KVql8<+}i9D5WRsbB5CuIpRh1naf+wtMQz&Q0*?oEa!n-1})(+LmJq zp7AvX6Q>n#GN~6l`aH0?VWy{>xqP|MUN84q3o}&vs7#gpL%VzIP+(RX8pt~)2GLteal{|WU)$uaaYIe z6UPe;e{;(&Ul;P`LfsOEZx3VaR=!xaK({8dLwZ-Frmypnnj+Kd`yLxhb4AGZ9BuMY ztz`Y$(>^uksgbwoU9qIOU7wR(WTG6i_CGMX6{k6~%jL4rsp;RMjW4Ag`m$@?&d*Ml z#CH4j33=Z%`<=At&!3;XFXm}wnf~^udDga& z$|Cb)&+mtdz22?a>2N4Wtg%Qfjn(V^TKnFmFYkuW?tL>g_mZcr$`+?;Zn3N#{ihd~ z?C;c{S$Tb;D6&wo>R2n+8s zwut>}TFCr)+uw=h?-xE9xoyJq_;mNVslt(;l1pyo*&CNQmpfJ*o@BcrYTB9I=F5Vz zCYG&Z`gbO|^^m@vMQpZv+u8g@nzI9})+M{n&YXJZAY;FK(4j8J%R7#DCFjd?cm?lZ z_;8n_!I-7Yb_(z3H0@gviBEnutvQ?QUv~M4$E(M^E>2Z=1BJ`03vWGsk-ytIwP6{L1)}J^sPB35lF<**<%EC)^6R z_1y1q?vKHuiCpS(wXrOhrvKzCTlrmSQp0x^tG_~D^fmaFD9`&CcDZE69XG`~Zec;M zd0QU@9(x%j!=0^d*v^yx#dbYg?Om<24HqrGE!dkW9&)sL<^N)?t!L)`-D*(R!Sd=r zPIYwS%=ujXFT8vm%GNOm_ntD>PPGX6yC%$qXZhmj2S3kGUNis8L~)byL?N%0*QPg3 zVv0G{%l$x2AY+OL+HrdGr^~uez#CJ-fWj z`{PePt}JoC{c_&p=e+ZG$v$6I;nTmGlYi5hraapor}MeyS<8xAA9dVXY*yyC*H-p% z+P(uKK@w%kF(Owr7F!vgE_m>5<;*B&UduTLL{s8a1SQwmY5jVyT^YJ&>UPd`r@Njz zE;5S9yU6jJZI)b82kQ>jDLk`;ieum1@0)T|=>7xg#QUAR!8hHed&^kV+g7UWt(Cs{ zaA~he#TC`YsL1GKh_@ih}>8B#^%-f z_jx?EbN4#R9WL0qsiR|~&3e%vU75Oy_wwH#+xe~7vNmCY{IaH0C;C-Hj`t zZ}?}$$A8Roi8e1^=Ax3xyAu{WPM9;rTus8@TkvXEOO@JBN0uiZ^ZNX`W72`<%(C1n zBmE06--xC8`r94pik>y?b)kiGUst2(&qbnkXEZDXmG2xqviDQs%ivTA2dDWt*{7$4 zS5&K(G-NNbKh%_KT0X7f8#m|1YNe$P$0ce)Berdb^A4L(v1Wzi+LFL0*H*k~n8%Xa zfAXSy*P*QZTIk;^_jBIMBKLI+FkZsGVEaIwJ9}owj4dnZ5g&* zKVzMo{QRz+lMFeH|7~hKZCU5H&v&A}gZR>pliWTx&z>^<@Tewq*&m@?rxn*@9S-hV zR-3YC)r4F5Nljbpgo=bxvK);`vkkve9Ag zJ>`B&3m<K;2XBjsdTN| z^v}d}M*PIKuq=}^eYYmhHECq@So7BJQvIuolP~|(Js&mg^pTp+(=J{8o|!LdeIr_O zI-AL)TQgd^e~a;NwAjb=I*-S&weqh;;hi}gt#zB$C;gN@`puz^i(Wq{o1FH2 ziSg?<3`_U4Th2F~D7_(frP5-xmzP#o1sa;nZs`2LcXpO{wCL+&U8SG4b{zP;>{At& z!-}w;lCvuors_vlMQiMu&%a&e{OL|luEcj0x_6Q`hwwXgc}zN-5GrLkvFb_EMDGoD zw@gcOZtk_7RO|bDxwzu~7eD7+G;5jlDDd~A{9jiO9cMYO5G3-sOmkJ3n})o{)NeZ% z)$BFDwDWyQSaR}7&i6ZKxL$YRI?=ss53k?-v*n(NOot{L zzqqi8`R$hsE0znvORH4ZsurzFbvgF`fp3(g(~SAP6{TA`H0D3lekP$jQ*&YT%d_kD zYn|G+oyCmv=$vy`I=FK(g>QLC|4q6(QKCV_^2VEetBd~^Z1TN!XxoYO?JAT0*~puG z4Gnz#`E8>~iiz{gh-^?rMF%`X1CSTMOeu|(^Uq(b_|D|75@`t^JHs=pmQ z-mm*iI{Ewda<7dZv$bC3PwsfV?0B5rLCY0;zbWRQTEFRf?*s`aIhMJ)r(2d)dpi5G z#U#!MxV8T04E>s8seGR<>V7-w+_zwcRxb~Cn;FBz-zt-3&xhFhu3C6x!Fd(?)4^dUuBHH@^MqUQ}hOp zclREhI=AuL?$a$CzH?N(_1{b|_;zF7#U=0i-nFlpXT9cG-|8>3N?bY@pE%fY`pt3P zr=RzSysXd2zNxZ?<>Ip>*2hAfPE%^K)+d{`8+aT!5`*67Tk<{CDcz9Z z)Yx@TX}4#`(i+ZMPoBJor3ImGDPO+YIo#*`XIa~JVQazk&3l%&{$0V>&e$0?%eQI4 zk;x)|7RAm|3%lmv-)ej+GA2m%r|-=T#wADA$DQ9NbLHY@5u+wm^{T2C8^b>bx5c05 zwB+CIek{U{>1PL9bJ2-zxA2xsn+G2kGp=iodA~%GZI+A3y|4>yhku{WbvM-Vf19~+ z@#HW5fqP57{?K>&^1Ax9u;TQ{HQMKPr||q*y-7ke>awb^{f&FZWxib9Z#!>x-r6ME zR`4rf_tBDuiM+X1|myz0)=hTwPx5pdoO&&Q*ZuWF5T1h zv5m7e;y!#aI<+&`QgK?zKJlBMf830!xRzJx$MbCm-{Tpc9G6cux z%Spp;eD@}A@!j(IuB%nY8RkvbJJ;GrPiEnZffB%GDbs9y_Tf7gtRCk!X0?vH9QwCA~%eZHt~ZK0Dgg zmHzg2(whD!m+ZUeZZ6Qjd2a_l!~0bk`_-qtOjJJ2cGRFnyM|-M?AfU&-#>PI_mRUw zwW{byU;fhz%Py5KJ7lI=|2J^K=8M6H|J|k%N&Z}zy0>A0pq0L%^fm}<6noZdH(z2 zFRm5RoIJ@fmo_A-Wbe_q^fT)Inh85QTVBmF)$A3Ut$yR$GYdUcj;in<6PHg_a)@@- znPU)V=yHUw_WA5rUM91c%)Mfp6GJvE%H%6pcloeaO0w5$mA-${{XKeS;?J||x=tMM z{gScfbKN_^Nij*=uH88kuxt9~S6QoVUZgIzIiNkkeY@l9>ua~GiQj(v+hy)%%Uv3u zPo0()EW8(#ziX-Hbh%xs>pj^v8^*Jk*QrR$2G#%8RGOoII4$ed!>j{KOF7>uRlf`} zFS?x^xm@^L_Q4uG(dl9DR;-}ERZNhXxU|C1#!4oF! z)vi0DUeuq?&Uj!l`x(!~b(`(_7sR}JxLB}PGs-IBeC0W}VgdWBmpa>?Us=tj^Z8~f zDw}j| zE=<3=uD8x`)22CHn?5P-DluF0TG_nRS>;+AL*lDv+wO6uan3FC`)X)7<+O!qkwBmS zvFPy0?+SnY>AdsF-+ER2WW&H(p*tn#Zrz-rl4d&n(VGI6wRIQn+_?3oB%-0Bm zzPC-dbmJDhNW9I|t~4=aFJF9%&g45R%MUm#lWIB;5!=`9#~!2=rBU`@xHar+k{SQD zADtUSw|{A@-1C0g*&T~I@7sLd`$t(-NcHOD9$jsgt#Rw)KX6ARolQ>Iw_}FDgJRF8 z(^sff>1%#iHdD-YdF`?3N~=;YcN8wQRFg3{-4|%9y?OD=C#f5o%w|vXR6G~Y%6Vn= zzdMfKu3gi=xw*GKyscYKV*RPC;^zi-zvl2w*SlmoVaXj{+i+JTViwtQ~pL6J&jMFb_hs7tT9uQz++2Di1>UG(2cznK5k``OhT z@35xTY!i=cdU7BrZ>`4`h5qfHvFgjkb-DLgM(UKDlz61!bw_z=t?d$NcH8Ztecvjt z_~#l;T*;{B@L2rE{K_MNOV(>|;5Iz}`OFt}UaMcn#jQ0zxUM_teLsJe?elNev;XBi zbhzBRCMbW_>PLT{ZQ$KM@5t*vORLY^TYrMJzFL%*HU6TLua(=}tVdlRkD7(Fy<3?- zciwyM*3-&tSFXo22Cs6r5H)VITEDT=Be^bI=1t(^I*Lj_`rmF7h?z>$6 zr@kH*UnMlb%Rr|8~rL6D}FK=a}La*E^TCocQ$5>bPxYgnO`4tL4X?HVmvC zp???rurp_z#);q^LO#jW2zC-BU>h*I!h?rdZ^2Tb))+(Dy zpBYm(oyqCck5zqkxb4BC=J(r|)OUQm-@2~kr)ANkD$|b}CY+eFjzRVoE92Rz`qXE9ZuN2TV`y}8G(Zj@c2J}XIoTF~qX ziyaD;++01MWjT7sK8Sj8;%(Cc%XcPz{~t-*vz>kJk89Y|HeSU?2Qv7~v^RX-AW+ow zjPcyAzQ>cj9z2L~u5`HK=JvTr@YcU07iL!e`w<-Vbmm;g#ar5@n|LKYG)d^m-g9}0 ziR@!?O_JvTMJi##S<+#Z$YPFW& zO?vV39E+dQ=h)=wLDx86@YaZg_m!%$r~GEt`c&(-@}$$ZrJ=7%vid_g^}dOoIb-Gj z{J@s$c6T4IICA0dMpo%{Uw+J+cisM^8jol9vb<@g56sn{idK7tbggd8?q$4R@L>6p za~pq&&)$7XDz!kbyxe^HF-4#6slVriiiq0k7k+1cGtJ@z*X^J)*19*`GFXDH$o6lN z_PlygYUPPFL5cm(yxzQc&TSOJcV&aXsxN2ajW%zyyH(l#{+dR`EC0BjqF+jx^|o6c zvu((qHRXo+3*)fZ6ZNJW3pIDGwqv}0)zYuIpUZ8DaNt+F%{#=~8uyo7K4I6%>E{+c zJ>z0q?k830&)+`36Zw>PfN5`@Q_H%7Vxzn-X_sT{w>&-LZ_cmecvM=uLajA^!y75% zX3HuTr|t6#HmSapl|GjDbZ1g(-{<;ymBNufHw9G5J`awxPF^rivUC5>x63EZHqLCV z+jh@)$=bt@dVFo)m`lny*nVsGTpk`WRqi&|1CvU{W0#bpo#k{EJ>>4O(_d|3^tUcz^lSxn25|DUuM(*@^UW((FX z+fu(!!FK7RCzA!j7COk!T(jW}`>)SJFaIb%*?D_O&Aaaxn>HP&{y(Ef@ZldR9X*wo zN8FC*zF+!i`>xHoHp}hfwW6zjN&VWeeN$Waqz>5-`}g6`HE#XfR1;;mm@&~*Iphu9F7bT{2g~;*kB>RMXO|Ty z`}Wm#i_0#9>QA3n8#CX%K7Y=>&3E@dd=PD6@ok^}rlWtqemtjVe9vwHtI>;=ty|Bp zZ#wI#b7e_s;;|%+KSKL+Jj9u!xx#N$c;CG4Ty$Z>l=#gVKTovE9yTsz@!{jyu*^A1 zGrwS8e}hqN_!+_X)G^*8TAOlW#^$R&?CC?5urHE_N4Yyz`r5^6zCovzbqQ-1nO; zzqs|3bw8B09xgdiJvr*8nI)^5eh=#=l^Mq)-NPPFvuHN$y*Sk@S|M1BDe%&l%LcEU zzA;bAI&|((t7k&ScdwcIC$xL2XKn6^alLP9>l%D6L{NS1`DnW%-k(m$FeUl-iw90T z+$!>G?(7${^c(M3|E~GHp!mX}?ypC=9TrZ@lq)k(4B2DV%690$JJIL>+u2V(9JZYI zCUl8U)}dqX*aS~1Zu&N__==cZ@!qQ!7QH&^Rh;G5DIjhA()4rMscn8&Z>RQ$C^+q0 z_^Bhi;uQY{{Ub|1{8$v!uoBqq| zANbGqLtc;}iP^NUr0w=Bizw!Q{11OfdSfh(G6gLPfXy|#VL9YRA2I>0U}R`)3|etr zTvC*pn9Ef$XKCc^zT0j>wb#Qx1TweCervtEWPXnN>x3qTn>VUFgD=%7_`Q&beCTHob%dpsvr8@-3+HbnRv2jS*cWR|7w-0hX3{@ zVqTfcf|!pBnXJmyBqgI;Z^G(bUf&}~#zsP>^+5Xk_ zxx0=QpYzdD(iKYkR5|0G315z^R|lU!W~SpO7lXr}uR8C$*rMn^xA`0Q zUh#Rt^=I)z=>sc;G8cXQe$-cGQ^wz=w{Bio!lGZUH*MLC-S;28X#Um4Q>P;>|5Z@_ zpI5nE=sUss?;ER=n%8B$UuAK*_x`GFZ$Gp#9+N9PV|n`WmB;_q+1+*dX6awDF;{(Y zYl@IkPuUJx8|LjhJGTVsc>k%pA$_*l{)faHj>zMUJ8w@aaA%V%d?|ae+x}_v1GBaz zQP;nTue{!IMuP^`9957ks_wIXR?#Fqmc@j-N7L#YbX*cjt-87Tg?o0E5{WGI3 z7^MDiI(MR~?&UuBm|y#!ud1nup3l#-`Q^;1yPtDfsI^Wrl((C8#_2`%PC1*L^?^4p zJ=pv8%_-*o9bdRbj@&MO{rXja*lzv4mRB+6Io4CzPd&MC_1Wi!9JdO!YOXCOb(YTi zRNTBWVvg3CqyI&7Q%@Jfltpb6>6Bc%0*<^1*(&GrMv_ zw=6Y($M*7V=4rK}kOq#Xo{e3Kra1&*f}Hwi!6aY~{7 z3d6ay{FOnszC|Coy7;np{nCX^o|7ML`@Q+oO5S(3Q*O4;-hA|Jg-W7(b}s+Xo7Z=& zE-nAad40|97~PYlj%vsE-QRou;Hw&y?%&)Gn)o!9DSunmygJ(?|MfcQOo_2x*_<%QRcRJ4v~AlL|E@UeaAgvey!d2Kes3N zKfmVoUTg8E*{<3bl6Bv$v)1WPtXJcEvsQf1!|(O}({~@u{LvctaZl*`wtViTyPlrDWP5%2$+_=W@Wi^@4lu0x=f$<}z=!69_t`2- zxa;EmGK3~XaDG`ZMY=-#hqdRU-pAdh+iuxRP^oR-QC)6&;(>Yowr|--gRR{rHYo{M zmV~X748LXdkLUbfPV@2x=1-DSvc>jB`1CjzTdZ^V;Za`{Q5*HQ$kFrMqXV}&(zJr6 zaoud+*(zH*$6u1@xmg{SRWl#0V zswr|6OpIV<-_&vJ)A3L9W(B_7$IQzA^Hn)N=Sd^I-}fi(x--G;@So#8_v3Ccn{sk+ zrSR^XlM^faEF?=A(M>vlXuP|I))k zbk19JcC6m{R`n2v*qKiYdtMy=Rl(f(Fzebsk=>8pJ-8*)vEu7m`6s>mZ86kBWY!k8dvWeB1g^0xtc{qzXOG6bc{bJM?WZHk-Y9J>+fyZJ z`+;)JzSyZ>i3C zRWsP_jAQ@FG#>4oZ}WmK#OORM=9P~VEDk9#Tov89KIal=nmub*vvK%d&I@t*zlGeU zihZuWJ2U2P)|QA(m&2$3wm09^pP4n^*=PImwfBPq_ARf!Ft>>L@r^SZk0vIqR*4R= zWx8>p(#lEMi;+f$uir&$yCP9xsDqPya6klDIt$3I{B zmm6}Hh2gIpOXcb=T5^3bcJx3x2656pVBmHlyyVG0DBM*H!dRu#@+<{q1yVy@>=X^hx z|M~h~$?F?`pDVuiTeJ3h#Jq=0ZYvn-jTMi@WZjs;!~bQfq3@aJl0Rnu`KA6z8GLDVd2*`4tM$3ZONMrk199M&@P;7AA&z7M2RJT>8%Wc_pcNCB+J6 zkOka`y<}h`;4Py3yb=Y_DnvIE69rSyqDIiNa1%oX@L7}~wy~vxG02r5wxNjvco#W{ zZJ}TcH(5WRC_gzkwL~FWK|jF7O+h~-wW34;c>^2RXqcstRp6il^xG=pzGHw7)~L^;~hIXKcW%n7tcJ;V_6XiHPja!-^6 zi68?&u8USMH3WGU6sEMr5POhG1F+o?5s2L&HVh+VK_aoRje%gVfLsoWL&sw9a%M9_ zLzK;QAg)U)L{1m&dRMf7LS9K~z@-n_N(b5-5a9t?mTCe%D>6T?1a``$p@OcFv5A7I zk%@wtC9aKhkPWE%kmD^g^fQqUw?tkkY6kK*a>RfIVBUi?)D0CZjX((@H7~s+!$`r% z)B?x3mc~XPb=aExc6MB_R{pKGlPYbdRNp^-ULpJR$uK89mFP1)bG;-aiv*JUC5*#) zlG_Zwol(hdaf(z*>Gzv9$u`xptZ%EqHJwz>Vh^tGPv#WQfA`LQ{`2+EzsBsZU-!NI z=O4TE@4u@nR!OQZ?^U&Gta4$B{$UTgC76mDH9wfIG9MftGrlraseAd zcz8SWt$XJhn0OjiXJ}|kZQ` zV-tf6n+Bz%0)?CLau<$0X55@F8`mKDf^|}j!x|fP8NP%<38M!rR*yO6T*&X^;ke$> z@M?bIn(fE$Ysyb}a@2s;!_dcznWsBKiSa#u!olo00m({_^(H)gQh)eL|D&pV6?+VC z{hj^i-;{sa{bk1={{6p7VOMpJ(&Nj$3f@Z?Z3y@FiQ3wPu#+J zu0o*UujHZ1mk<9qyh)Xje9Sb#^WK9x36+HUF9&Aa-p8!Ll)5-~rSk9VPTwa_zi7d9 z^UnRp_gCFt^#-B+m!3& zCq8)IJN|#();_+A`T=}=Cp0y*7*BC|HFWJNx==qYQlMboy#h1p54Shz1)1KxR%${gb zx$W??gWnR}-|9DC^O$lxz-eKx%d3}DvYdkY#U6R(Oj*dsW>{L-RQ|2+%7K(eozGVp zM=gK0OU-^so}s&@MVi)eo@srH)+}uAVmh|8I%$>VBX;hu9>Vi~?s;LzU*;F#yDxpY&nofA}VKb`!ut|`4g z`d(jP>+|3B6{iAo%&*T;y?exaW6zYm4~-VyD!bcmU&#CJS7dNu{~=b1{crVt;pwx| zQfB=+EuR0P_hQKH1;W`S{_9Tlm)*SPdi3UVjcsq8_2153tS(h;u`2b-l2-j^dx|1< zd(Vk;dbg!WCf3I}|4Z~0|1G_8oB5o7Wtgm=R#x==?bOqojlTzrG`U|&`|zx5!O@qG z^rZ|GPrse?<*GyVw2UR))Bjb7esq#rb$ima^RcCIe=EZO1Yeo%QnKUXMX!!qcO~@l z`qOIHtDTrxn6#vNWkUHf#mQ;BNt?_s=f*YZoQX4iCB%3>yZgvz(K(Z)B(tA#{#N)m z;c3>KE_d_KFAi6Ftv5EVSl=5b)#h*|yI?=}`WdxbLf7o>{q(x~WlZBv*=d(fT)et- zLY7ni)U7hNc>><+Wjprh>}Xi#`0dO*SwT;SD;3?Vl$N($ool>u;%WVy^`GSyt?q2-&XvV$f-I^t$f&qAuC^ex9oO zM>kH@|K_V~c}vQ_S*e!f*~UIQyixh+!4zfdBU5x4FT4zjT2epFtZV_V_%+v0@hd-1 zE9RfK+&4%5wb7o8$m{ue0dHsXtzI(0zJ;UIIx#i5NxIHq^NzkKo?jEgD*xhY`wt2J z^pw-O%dY69oOr9V?$wg;DIeAC($?Bu^xt+>B<<+wqU!BSRG$0Y-p6Zl=HXnqDe)B& z>-QV#%X0m&7qnH?3+nQ_Un^cTMSbd{r9n50K23@CsOVaucKD5z;+*|)^?Ss3E>|`1 zj@&0|@snLN^00fpk#L>K%e0!rTYL6}@s)+NKYjRUq4cabOs1BRTWTh6TroNKhF`^u ztTS(~7@HnG^SbHI)?~JcvR#{01oL->v;K9%N7Uoxkz$%30r**R*d*lo42dI$*u-=6{mq?TX8rqrCq#KhJl4H8VtGUB1=j zb&HbZe-?+%zHokO_#4k4!;9_tca{e)YRziq_tsJ#uQ>a~&ZmuhcVD}i$!Y9tYMh*&JU);85I#b?F#X*ep+ zVA!1Z`PRyHn_d?Om-n7eHj};e$31kb?6LjdY@^z*_S$G}yE(`H_TJ$COXGfcd{_59 zWjo{S^Yi6Zwv(97%#gpc=j-iv5B0UJD&1TcUD;lnwN*9m(5vsS4d$-=@>F1JwdWZp zWq~IWIl?9ZiYY8z$Mh{$T(9ol@J9B{%&ZIl)|$jlVr8woyDrG-eC6kvZ;B3o{F7u} zr8q-+Cg)-)iS4qIh6~k%rue=)Cb|9u8>@tL*|xH&`X~A#=kETj^(BfB-5xydOW7Tnv z>x3t(Ccjq`D~q~&&+&ilmO`Pat}Vyd9t!C6#qI2lHC(4@YsXOgN7QE90TF>kH;-od z&DB@Bzwwtu;hRaXtDj6=w|GrdrdHTpq z7WKO88`>Ye5!}5jjOnG>a&4p8w*G6ZgtN>(UB9m^{6FB3+0OMD>Eb3#=JR`h?BksL z%kr}SrJio}P=)uOK7MSu;ujITbjM!N+27njDIpXizFI!)0RNQ|{>dNk&b6OslA9x&Ty?gGLDF+v+ zxZldExKhxY_A2*QlCzke0<-3^rIlUhelpa2`t>HarpkHy?4u^}vF{G_d9s(!4`#@} zc|3D7$K^je)_f{)FsPVoz&oXH^Q?VevSW8839X8*YuQTt_u<~ONwpP`c`E9 zN%Nf@wEfBC>mt@?MA|st-3_$3t8wdQPL$lj{nsq?!(91AZqD9Xy6({h$(6m2PJJ*; zXmu#7X#3kg=d5sPj8(yrjlw1IlT3GQs`N14ps~|M&E~YwB0asmlM_>y&zW*;eUZrS zpu~??{uSh;#w}j5KF4$AY(LMb)~7?3dfrOOJ)``7(|K;0+&7NZrZPE3nO{D>*sEVP z#b3_n+Jb!tetFfHEO}mbVAlO3k0sMM<62bW7Hm7kD)!;y_x7F9LPgPDng;g%#rt&^ z@^Y$w6lmgr>CanZc;BOj?YDg0od5bC>YW&x*)OUXU6l1Ldi+ORedc_AjG+Q>KOWW< z!q%&SO=Or`7@*8!9Gw=MKifd0?fp;DeK|`XKJYKN78

G;3@3*4}O1E5-E+tyP#r zGFJclEz8r^GGSGa{W1-v=D+ifzqd5o_nCw1fqTFSLw*r1<<_Ml8gZ43yITK$-^c!3 zs95mO-y`1f7Z}`wl-80oBZSQuczB+ya7&J_Nkh|?fFuAx$5q5BSggH*1yHl3XdVzs~O z?fuMnW9856qT2^rv=n&FJ0FV~c1M3$G}oc^?bG~3eb?jsRVjBHI5s;lIj%1GIb~~< z>(r3j#${!NZILFa)`1a$JC#+tl8?>e{C4>5p95SHs*%l$Mbcb$G3W*_3ty&HlJjl$ z8m=wnbDxLWPV6&a@s{$~pf)M^Wx}bY%`4PonS?Hy9=rMC$RE?Kx=})gGAt#+=I1s` z1O$qjQ|_4?k0=3grfde2G=u3>AjlyQlrJ*UQ{@b+ zkqdltRU~(lE1l^Py(a zV_$iqvv!TlUh3W`ughy#wd(iZU#Z*+k5|_z=FHQt z`TbU9ape7XHYZnd1RGXP`n+52--V-jUoQ&uXf<;3&-IY*&O2V@{_$#=)?o({JiAUf|6o{BSGeZ zl%hK_6RJ}ev>m^=ST`A}Q_m2^%^<5`+97T>hYT0#J1Uq%h9Y6Zrr_8Bd7&t^Ou-D~ z*&r@`um_+4j2I0Cn*lNw;en8%#4^Z1eHeZK+XGUK(+?#u%{aUPb^y!-s5hV??5JQ4 zier$wA)~*j-T?U@d2Gxaqzz<}1}p&M;USk%P@oW8nU`NsoQa44u<0NTI2{kuubWX& zpj!;pj~Wf;$Vts5wYa2M!5k96NMQ;RfLY|7nNq9}tzZsHC_yM=!eAkoGQY&!RFFCi zm;7Yi;F83m5={m0X8j-qxc|@-h^B%$I8bn_&@FW~8ZL2@MUnn6ajUCDi9|F%wM%ONbw1x%7Q9b2CfOqXuD* zi6&~Kg4_X%R2PM41xPUHM?^*`n49Q84EwI=NN;l-{1*I|kdd)2? z^~}snvDk~8w?Xl13NkE60VRTQY6hiT{1%%U80%S>VDm8HgoRr#1qlnBVeq@z#Kb_) z$jlrwu)rA$zg}Y_6FnnSLo9mH6Bf3BHZ{^SGq=Q|898MkH3;C@(Jd2oehz$v8qB4R zr6n2pMG6`&iDj873XVxdi5ZEx#X1UJsYR)|l?uU`so6RTAsP9(iNy-xnI$EfT>6lj z3{i(7YEIA$Ush^ziGqeEm%cOTbXAbiK8Ycz5ens*B^e4Cl?ACqMX6~D1&PVoiRr1D zT%hU1l+xtXA_a|tl(dl42wg)xLxUuR)QXbSyp+@wg``S_fPnn+)FKmwFateHJrhkX zeecxD^8BKdVuU@J`FSphC8-J;E>=bc1||mPh9(9UhK2?xO`(dS)HE&w1xr&d12|AH zGc`3fRY+4nh*>ItWfk(^Vn)Wsm|~!VWIzg$)R`J%>NPjEz|d=Hgdt{VXoO*hp|Ozx zx?V$5&~Y@V_8OXlZq!2)v#>Np*K1^8X^tUg1gcF?^%|Lg>RL20Gf;a7P0Rw+QAHIq zHUQ1gqKO%qV1$dY324?CO`RELSQ%S@W~9;7S%R7&sA49Dm~muk1Ul6mRh_9Zs7gf> zGc&*ldkagI)Dg8ouR1-s9lF9W)3?46;;g4 z03+;;%#4lE2?1S8Ik%t2)a$T$OdIyEx4#0XO(3nS1iiXeq>b;f3 zP~nB<4^s4$O=()3ceer3rdEH8U~5D2vTZ3_#svRC`SfG17~fi6KUwF*7m3 zVh8y6F*NgxvDjgPQKy)hm|&FcW+tYfBaG3^Gc&*l0~0gQ*Z`V3b1Zh4W5&6O1#&rF zQk0mPlUl?D?ulkrrGn~T{h<8(5(Q9GJcvu*GcPS)0o*77cX^9J9YSzbZDwjgw;t1ps7g8IS+~ diff --git a/doc/iterator_concepts.rst b/doc/iterator_concepts.rst deleted file mode 100755 index 0904ef3..0000000 --- a/doc/iterator_concepts.rst +++ /dev/null @@ -1,128 +0,0 @@ - - -++++++++++++++++++ - 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: $Date$ -:copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004. All rights reserved - -.. _`Boost Consulting`: http://www.boost-consulting.com -.. _`Open Systems Lab`: http://www.osl.iu.edu -.. _`Zephyr Associates, Inc.`: http://www.styleadvisor.com - -: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 |concepts|_ library. - -.. |concepts| replace:: ``boost::concept_check`` -.. _concepts: ../../concept_check/index.html - - -Reference -========= - -Iterator Access Concepts -........................ - -* |Readable|_ -* |Writable|_ -* |Swappable|_ -* |Lvalue|_ - -.. |Readable| replace:: *Readable Iterator* -.. _Readable: ReadableIterator.html - -.. |Writable| replace:: *Writable Iterator* -.. _Writable: WritableIterator.html - -.. |Swappable| replace:: *Swappable Iterator* -.. _Swappable: SwappableIterator.html - -.. |Lvalue| replace:: *Lvalue Iterator* -.. _Lvalue: LvalueIterator.html - - -Iterator Traversal Concepts -........................... - -* |Incrementable|_ -* |SinglePass|_ -* |Forward|_ -* |Bidir|_ -* |Random|_ - - -.. |Incrementable| replace:: *Incrementable Iterator* -.. _Incrementable: IncrementableIterator.html - -.. |SinglePass| replace:: *Single Pass Iterator* -.. _SinglePass: SinglePassIterator.html - -.. |Forward| replace:: *Forward Traversal* -.. _Forward: ForwardTraversal.html - -.. |Bidir| replace:: *Bidirectional Traversal* -.. _Bidir: BidirectionalTraversal.html - -.. |Random| replace:: *Random Access Traversal* -.. _Random: RandomAccessTraversal.html - - - -``iterator_concepts.hpp`` Synopsis -.................................. - -:: - - namespace boost_concepts { - - // Iterator Access Concepts - - template - 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 207485b..0000000 --- a/doc/iterator_facade.html +++ /dev/null @@ -1,1321 +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-01-12
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. All rights reserved
-
- --- - - - -
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<
-        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 048f3d35c4da123106b1ac293c1da52467c0b488..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180312 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%0Dsq<2TKWOUa*xJWt=KaE?H`#x7fYwCwqsuU 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 diff --git a/doc/iterator_facade.rst b/doc/iterator_facade.rst deleted file mode 100644 index 41a775f..0000000 --- a/doc/iterator_facade.rst +++ /dev/null @@ -1,40 +0,0 @@ -++++++++++++++++ - 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. All rights reserved - -.. _`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 f024b9b..0000000 --- a/doc/iterator_facade_abstract.rst +++ /dev/null @@ -1,4 +0,0 @@ -``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 82f57a1..0000000 --- a/doc/iterator_facade_body.rst +++ /dev/null @@ -1,192 +0,0 @@ -.. 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. All - rights reserved - - -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 da7c28d..0000000 --- a/doc/iterator_facade_ref.rst +++ /dev/null @@ -1,438 +0,0 @@ -.. 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. All - rights reserved - - -.. 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 f56085d..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< - 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 2691867..0000000 --- a/doc/iterator_traits.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - -Iterator Traits - - - - - - - -
-

Iterator Traits

- --- - - - - - - - - - - - -
Author:David Abrahams
Contact:dave@boost-consulting.com
Organization:Boost Consulting
Date:2004-01-13
Copyright:Copyright David Abrahams 2004. All rights reserved
- --- - - - -
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 796fff67388585345b73304d773a0cd315839205..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53725 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 diff --git a/doc/iterator_traits.rst b/doc/iterator_traits.rst deleted file mode 100755 index aaaaa6f..0000000 --- a/doc/iterator_traits.rst +++ /dev/null @@ -1,94 +0,0 @@ -+++++++++++++++++ - Iterator Traits -+++++++++++++++++ - -:Author: David Abrahams -:Contact: dave@boost-consulting.com -:organization: `Boost Consulting`_ -:date: $Date$ -:copyright: Copyright David Abrahams 2004. All rights reserved - -.. _`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 f1c9ae9..0000000 --- a/doc/make_counting_iterator.rst +++ /dev/null @@ -1,9 +0,0 @@ - -:: - - 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.html b/doc/make_filter_iterator.html deleted file mode 100755 index 994bd7b..0000000 --- a/doc/make_filter_iterator.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - -

-
-template <class Predicate, class Iterator>
-filter_iterator<Predicate,Iterator>
-make_filter_iterator(Predicate f, Iterator x, Iterator end = Iterator());
-
- --- - - - -
Returns:An instance of filter_iterator<Predicate,Iterator> -where m_iter is either the first position in the range [x,end) such that -f(*this->base()) == true or else m_iter == end. -The member m_pred is constructed from f and m_end from end.
-
-template <class Predicate, class Iterator>
-filter_iterator<Predicate,Iterator>
-make_filter_iterator(Iterator x, Iterator end = Iterator());
-
- --- - - - -
Returns:An instance of filter_iterator<Predicate,Iterator> -where m_iter is either the first position in the range [x,end) -such that f(*this->base()) == true, where f is a default -constructed Predicate, or else m_iter == end. -The member m_pred is default constructed and m_end -is constructed from end.
-
- - - - diff --git a/doc/make_filter_iterator.rst b/doc/make_filter_iterator.rst deleted file mode 100755 index e4cd877..0000000 --- a/doc/make_filter_iterator.rst +++ /dev/null @@ -1,16 +0,0 @@ - -:: - - 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 c3e20ed..0000000 --- a/doc/make_reverse_iterator.rst +++ /dev/null @@ -1,9 +0,0 @@ -:: - - 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 5d5f1b2..0000000 --- a/doc/make_transform_iterator.rst +++ /dev/null @@ -1,19 +0,0 @@ -:: - - 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 0369760..0000000 --- a/doc/make_zip_iterator.rst +++ /dev/null @@ -1,8 +0,0 @@ -:: - - 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 b78dc6e..0000000 --- a/doc/new-iter-concepts.html +++ /dev/null @@ -1,1023 +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:2004-07-14
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. All rights reserved
-
- - --- - - - -
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 322b032..0000000 --- a/doc/new-iter-concepts.pdf +++ /dev/null @@ -1,3499 +0,0 @@ -%PDF-1.3 -1 0 obj -<< -/Type /Catalog -/Pages 2 0 R -/Outlines 135 0 R -/Names 211 0 R -/PageMode /UseOutlines -/URI << -/Base () ->> -/ViewerPreferences << ->> -/OpenAction 316 0 R -/PTEX.Fullbanner (This is pdfTeX, Version 3.14159-1.10b) ->> -endobj -2 0 obj -<< -/Type /Pages -/Kids [ 3 0 R 56 0 R 78 0 R 90 0 R 93 0 R 98 0 R 102 0 R 112 0 R 115 0 R 122 0 R 126 0 R ] -/Count 11 ->> -endobj -3 0 obj -<< -/Type /Page -/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R 31 0 R ] -/Resources 32 0 R -/MediaBox [ 0 0 595.276 841.89 ] -/Parent 2 0 R -/Contents 55 0 R ->> -endobj -4 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 181.001 641.875 302.379 652.723 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (mailto:dave@boost-consulting.com) ->> ->> -endobj -5 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 306.475 641.875 376.656 652.723 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (mailto:jsiek@osl.iu.edu) ->> ->> -endobj -6 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 380.752 641.875 480.019 652.723 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (mailto:witt@styleadvisor.com) ->> ->> -endobj -7 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 181.001 629.92 258.393 640.768 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (http://www.boost-consulting.com) ->> ->> -endobj -8 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 346.358 629.92 430.269 640.768 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (http://www.osl.iu.edu) ->> ->> -endobj -9 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 434.267 629.92 493.561 640.768 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (http://www.styleadvisor.com) ->> ->> -endobj -10 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 181.001 617.965 229.818 628.702 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (http://www.styleadvisor.com) ->> ->> -endobj -11 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 98.32 448.058 147.912 456.859 ] -/Subtype /Link -/A << -/S /GoTo -/D (motivation) ->> ->> -endobj -12 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 98.32 426.473 205.225 437.321 ] -/Subtype /Link -/A << -/S /GoTo -/D (impact-on-the-standard) ->> ->> -endobj -13 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 120.238 406.27 381.564 418.226 ] -/Subtype /Link -/A << -/S /GoTo -/D (possible-but-not-proposed-changes-to-the-working-paper) ->> ->> -endobj -14 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 138.868 391.16 300.29 402.009 ] -/Subtype /Link -/A << -/S /GoTo -/D (changes-to-algorithm-requirements) ->> ->> -endobj -15 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 138.868 377.351 197.26 388.089 ] -/Subtype /Link -/A << -/S /GoTo -/D (deprecations) ->> ->> -endobj -16 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 138.868 365.479 203.624 373.56 ] -/Subtype /Link -/A << -/S /GoTo -/D (vector-bool) ->> ->> -endobj -17 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 98.32 344.031 129.564 354.769 ] -/Subtype /Link -/A << -/S /GoTo -/D (design) ->> ->> -endobj -18 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 98.32 324.383 163.907 335.231 ] -/Subtype /Link -/A << -/S /GoTo -/D (proposed-text) ->> ->> -endobj -19 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 120.238 304.181 287.057 316.136 ] -/Subtype /Link -/A << -/S /GoTo -/D (addition-to-lib-iterator-requirements) ->> ->> -endobj -20 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 138.868 288.517 386.716 300.472 ] -/Subtype /Link -/A << -/S /GoTo -/D (iterator-value-access-concepts-lib-iterator-value-access) ->> ->> -endobj -21 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 155.804 274.708 337.235 286.663 ] -/Subtype /Link -/A << -/S /GoTo -/D (readable-iterators-lib-readable-iterators) ->> ->> -endobj -22 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 155.804 260.898 333.804 272.854 ] -/Subtype /Link -/A << -/S /GoTo -/D (writable-iterators-lib-writable-iterators) ->> ->> -endobj -23 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 155.804 247.089 351.515 259.044 ] -/Subtype /Link -/A << -/S /GoTo -/D (swappable-iterators-lib-swappable-iterators) ->> ->> -endobj -24 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 155.804 233.28 314.515 245.235 ] -/Subtype /Link -/A << -/S /GoTo -/D (lvalue-iterators-lib-lvalue-iterators) ->> ->> -endobj -25 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 138.868 219.47 356.552 231.426 ] -/Subtype /Link -/A << -/S /GoTo -/D (iterator-traversal-concepts-lib-iterator-traversal) ->> ->> -endobj -26 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 155.804 205.661 382.787 217.616 ] -/Subtype /Link -/A << -/S /GoTo -/D (incrementable-iterators-lib-incrementable-iterators) ->> ->> -endobj -27 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 155.804 191.852 354.919 203.807 ] -/Subtype /Link -/A << -/S /GoTo -/D (single-pass-iterators-lib-single-pass-iterators) ->> ->> -endobj -28 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 155.804 178.042 413.367 189.997 ] -/Subtype /Link -/A << -/S /GoTo -/D (forward-traversal-iterators-lib-forward-traversal-iterators) ->> ->> -endobj -29 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 155.804 164.233 454.269 176.188 ] -/Subtype /Link -/A << -/S /GoTo -/D (bidirectional-traversal-iterators-lib-bidirectional-traversal-iterators) ->> ->> -endobj -30 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 155.804 150.424 474.941 162.379 ] -/Subtype /Link -/A << -/S /GoTo -/D (random-access-traversal-iterators-lib-random-access-traversal-iterators) ->> ->> -endobj -31 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 155.804 136.614 375.647 148.569 ] -/Subtype /Link -/A << -/S /GoTo -/D (interoperable-iterators-lib-interoperable-iterators) ->> ->> -endobj -32 0 obj -<< -/Font << -/F17 33 0 R -/F38 38 0 R -/F8 42 0 R -/F39 46 0 R -/F40 50 0 R ->> -/ProcSet [ /PDF /Text ] ->> -endobj -33 0 obj -<< -/Type /Font -/Subtype /Type1 -/Encoding 34 0 R -/FirstChar 67 -/LastChar 119 -/Widths 35 0 R -/BaseFont /TEGGAL+CMR17 -/FontDescriptor 36 0 R ->> -endobj -34 0 obj -<< -/Type /Encoding -/Differences [ 0 /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /suppress /exclam /quotedblright /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /exclamdown /equal /questiondown /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress 129 /.notdef 160 /space /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi 171 /.notdef 173 /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /suppress /dieresis 197 /.notdef ] ->> -endobj -35 0 obj -[ 668 0 0 0 0 0 328 0 0 0 0 693 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 459 0 406 0 406 0 0 0 0 0 0 0 0 511 459 511 0 354 359 354 0 0 668 ] -endobj -36 0 obj -<< -/Ascent 694 -/CapHeight 683 -/Descent -195 -/FontName /TEGGAL+CMR17 -/ItalicAngle 0 -/StemV 53 -/XHeight 431 -/FontBBox [ -33 -250 945 749 ] -/Flags 4 -/CharSet (/C/I/N/a/c/e/n/o/p/r/s/t/w) -/FontFile 37 0 R ->> -endobj -37 0 obj -<< -/Length1 933 -/Length2 2950 -/Length3 532 -/Length 3598 -/Filter /FlateDecode ->> -stream -xÚí•y8”}ÛÇ+Ä=e'E¸,#éafÈK–d2ö"û6f.ŒÆ 3£1È’-ÙEŠBd([¡’½!RÖn"[vy¦îç¾ïžî?ß÷¯÷x¯ëŸësžßßy~óüÇ•03—×Á“]@4™D“G( Ô]㳡‡@¡ºK#I§°4P @¨ª"7@ jJ(5Åã( KöbPnî4@V÷èw‘ - ã R8, 0ÆÒÜAOf –˜“qÆPtˆDàì÷Tà,H)@¼ð pÝ$ì»! É• ¨üÆûxý™ºR¨LS€,ÓäQ€iO&t…ÀLÈÌ^ ÓÉÿ†©_‹£}ˆD¬ç÷ò߇ô4Ö“@düG@öôò¡À˜Œ)¤_¥VàÞŒA<ÁÇó×,††%p:$7"Àÿ¨h‚/ˆ7#Ðpî€+–HÄAþW̹ý°³Ð;}ZÇèØûü‘3ÃH4 †×_U¿‹0âofN‡Bðìà -p8‚)d¾~9üÒK„#ã $æ…PFX -Ë€0o“”@ áA_ôe†)È4æ€9“‹€+™ù¾N¤ -ÓýúA*J ó7¡˜É_ÄÜ û7©0Ü_„`zƒ#ÀH?!3Kþ ˜×Ox€Q~BeFý ‘Œö2ûÒà?G~ò$Ù×_^I WT†ªÇ••ãªÿ[wŽDðö1§e8®¢ªü#Šó¡P@íÇgnóOv%0w‚¾ 2ÐGÆ©‡y¤VEêÝyyMn÷I·êk&OÞÔï íßMÌk3ô–{ßz£0Ÿk’mRœ¾%B® 8Ó‰þâ}-­÷ÛäçÉt¿G"Ö‹éÆŒ /ÉÕÐîÚªžåÏÊ»M_¿o/H²Éy–9ÿ|&ÛLö”ÅûÄ®F» •aHkt:ñ\dø}%‰³ŽAk»ë˸228ο›œíÖ,}þUÖtV§^còaËc)%¥÷œ¾È.ÿuœ³sZÞýZ÷*ÞËÅ¥< ã*±›J”ü$ºãåœA‘ørnµn®W6Ù+†.uÝ5¼ä›]–y÷÷ÓšR©Ù¯w>\TE9œ<Ý|¯0¶š ãCª‰]Ö+5ÀHuœèÕ#Çþ+™äa·`¢œ–¼ÚjŠá§X6  ¤"Âz$Hé¦?æõ/DU'Q^@ˆ7¥’:€N”޲ºT¤Ž<æ?;ë¡  kz—SVlmòûȃƒ²o.…‡a­›n¤7cˆò¯ö"ø+ôô@›“ƒúŸ:s^ø ÷ +Ašw@ Qt›"ýÙM -꟱ -·dÈ­¼ -ͬ}­åþgìí4És,¶½Pt*wèÜë7\…åK,¿‰ÕñæªdðÕji;ªÊÕ,èÃÒf¡·',pŸ½ üÇŸªN†ð%c…^@å«6 -ñ憆–1Òž•ÒŽ¡:§dbӪʃã?–¯]Tì#¿”zµÀ)GG8¯Ê=§ªñîA)vºoº\ÎM¥ë®†HÇ8ÒÁY)Õ÷¿}†¬O>Pà -nAh8$¼jæ:¬¬ÆÖPOÍÒÚôVUÞé M­È¯ë°=x, èÁÁ ÌÓAŒ§à‘Á‡ êv/ÿ9-D³ËéÛ|S¤{ºñba.Ï|Kôã"í©þãUœÆe(˵üžhy[]}^—JN?ôãõ-½?Ö?Ñ(4-ˆâ®†šè‡(5{ƒ…]½g´÷±«½%—MûnÄCÃSw¶Å~+ˆ^“©=­´tw‘µ îã.®pF¼ðe×|Ì\”µ;èlg |am’œûêK YùNìì‚Æ“vÿrÆT™µDÛ&y>ÄO¸/Ëû}zbÍà Ÿã¾æ“à)H|ž1žƒÃq{æ+’k÷­džÃáƒ_D8_£*ÄÅ?âa§ÚÓß”gΤ¿µrhŽ2›ö›E”œ G§r'M4J¦Š‰ BªÇ;>~*]J¸9ËBµ†ÏEEÎ ³\·TŸ°R¥ójyy7D©ÕbŸÄõ©T0tdÆ"$®k‚•ßZhˆï\ ˆ658Ej<"9u›Q'«`ÂÄm¶iØp_^ú -G¸8çÔ!;’_´þ -]¬Næ±{Ì}E$#¿OZ[ÖÐNtJº·k©÷½ÐÅha¾¾Ñc§»Íù«ÞË›ÓpXÄþÛSF¾ãWL—5$¶j¹Ü§Eõðø¨#…öN:D–>“áÐê‹>yuÑâuUÚú!@ûج65ä½*ßîÃW‘ÜH¥ÚQïó]½·ÙÆ=Ýøl .óN3 o+¢q©Ù—7NöÒÜrX}½YÑ9úbaû–îU·e“ƒ¹¨ë¯›'ÞX–˜Üâ°9ÄùâfÝÞˆ\ 7ra/ŠUóFtnÉðK¢Ülü»j/z/óĶ[m]Óæó“RÙrÛvë)WñwÎBZ.ð¡ ²u£„h)—è–ëЊ!t‹Ìë*O‘!£­ƒb®\KRvù»pô£Ã…rìy^yËŽó׊2‹N)TGtûPv®_<[Ü÷^lÊvƒW¯DŽv¶ÔùÝ“åë1:›¾ê®˜l =+lCu’R5smä[?-—Ú¢?øAåI’.Úök†×e¼qyüRjÅëa -®µ LÔF±©ÕP®ï°+2‰qàsUv$øÄys?±ì@[ñcaH6…^®P‘€š˜Òô—ç3üºšD/Á¿mM½ö¬TPý\PË7Ž­I9ßϦ>(¯(Tí:Àñ¨îZ1ìöýs~¤¶ôµóŸQ99ÇíÑ,,ö!ö¹æG Ü7²ré -¥˜ac¨çù åsÇÓSRϳ®5öVª:¥¶zâֳƚÞ¾šþ¦Úb:/‘’Ú!®UªQôñ¿ìéSù÷è˜S÷sQÝv¿‰ÚÐ -‡µÌs-Ív&ƒƒ Žø[Ù0ÄD±s#j:²“`Úª›| "¶TÏ ®!³ÄUõ›‡xtݺv¸KĹt£’ZÇ÷Í÷%ƒMÑ;®~ù³—Ñ=»¿°T›×çHºj^aç¾{/M“|x2Ùþ·–†Ò@ýÄAéµ:§êß‹/›7¥û—‡öû²¸Ðòö¾ó¬VˆSò›m(mެa1w+60p=¿ÌÅW©[5\’ev*Œ5ë­‘¿{§± -2_äe-ššï¬n#påÊu©¥ÖÙTO¬syüš£L{cK@Mîu1ûœÒ>­ßºµÅú¸4Ù$9‡j âürÒ‰A~Ä!JË觉>-‡ýz®,sRZÚÁ%ä°¼Ã|‘ÚÌC…ôtnº#Ý6štE£3¬G0‚Ça+?.‹ÛÝþ ï¨ ¡Ü>kɳP¶°RÈ{ŸÅ¨×)•n*W–†ÁÌü-döq½þÃÖ|¦6Þ]Þêžu¬Ýz÷ƒ¤îzd²å*”,Ùs¢´Cž#NìÅåÍÞþô1ñâfÉ¢š¸¸Þ@çÆl¾OÐ@† ¿Ñ«úb•Ó[H#ª5ŸhÔnÀi'[$¶es¾¹§üÐáLÙkŠ¢FMÔ.Þ†t^î4ôØå%ͲÎ7Ú›[×.º¥ØÆJy棭y¾ 8JV!°=‘ÊG_Ë•ï©nï+ë) ÒÝÞ!å - .ôX“»ò¸1Ð6Í2yäóÌž´¹Xß4"³Òɾ`Åp]°{•žó]À0vQ\ž7™ÿ.¨±XÜ""D‰Ml£Ý¾1ÿk]A2ZˆÜ†¹ZÆáa‰Âî‘TŠ–m§èÅ/µ"T>;}u;)åáV!~øÿðüÿpDK¡‘=±”ó`Cüendstream -endobj -38 0 obj -<< -/Type /Font -/Subtype /Type1 -/Encoding 34 0 R -/FirstChar 40 -/LastChar 122 -/Widths 39 0 R -/BaseFont /YMRQIU+CMBX10 -/FontDescriptor 40 0 R ->> -endobj -39 0 obj -[ 447 447 0 0 319 383 319 575 0 0 575 0 0 0 0 0 0 0 319 0 0 0 0 0 0 869 818 831 882 756 724 0 0 436 0 0 692 0 900 864 786 0 862 639 800 0 869 1189 0 0 0 319 0 319 0 0 0 559 639 511 639 527 351 575 639 319 0 0 319 958 639 575 639 607 474 454 447 639 607 831 607 607 511 ] -endobj -40 0 obj -<< -/Ascent 694 -/CapHeight 686 -/Descent -194 -/FontName /YMRQIU+CMBX10 -/ItalicAngle 0 -/StemV 114 -/XHeight 444 -/FontBBox [ -301 -250 1164 946 ] -/Flags 4 -/CharSet (/parenleft/parenright/comma/hyphen/period/slash/two/colon/A/B/C/D/E/F/I/L/N/O/P/R/S/T/V/W/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z) -/FontFile 41 0 R ->> -endobj -41 0 obj -<< -/Length1 1533 -/Length2 9126 -/Length3 532 -/Length 10026 -/Filter /FlateDecode ->> -stream -xÚí—UX\Û¶­qw'XáÜÝ!¸»[áNáî Ü îw înÁCp— §ÖÚû¬äìóxïÓýnU=Ì¿1ZkÕǘó«¢&WQg³p2J;9‚˜Ø˜ÙøŠâ:l¬6fVVq$jj W )ÈÆÉQÒä°ññ±¤fà ð‡Ÿ‹“Ÿ•‰ áäìíjce ÐIÐÿ5‰ ætµ17u(š‚¬` sS{€º“¹ äÍ ³·¨ýµÂ  tºz-˜‘ØØ6æ €ÐÊÆ‰å¯L²Ž–Nž•-Üÿ{Èèê û;&=ÒÂÉÑÞ`´DbQr»ÁYþoÄúOqiw{{%S‡¿äÿîÔÿ7u°±÷þ÷ 'gwРèdtuüÏ©ÚÀ…w²ÿ_6² S{s1G+{ €õ_%7i/ …Š ÈÜ`ijïü»t´øÏàÆý€EWQMUVóí¿÷ôïASG†·ó?²Íþ›Ù~3¸;®6^}Vp{ÙÀÁïÿ¾2ü3)Gs' G+;7ÀÔÕÕÔ |zÀÄðeØ8Z½@/pbfG'x Ü€¥“+Ò_ÊÉ -`q6u:Ú-A ý«Êöïê¿¶ïŸ2'€ÅÜÉÁÁôw… Àbííl tü]â¯ﲓÅï€ÅÍÞÔÍúŸ -Øäéô›yÿR¶wú-à VûM`QñßÖ“øM൒¿‰À"õñ€}¤€Eö75~XEé7U”ÿ!^°ŠÊob°¨ý&°¦úowHã7´~8µö?Än±™«©¹ô?ZÏÇñOý6|÷°ün<8®ÙoÇ5ÿ‡ØXÁy-þ@°ðç·üÁ†V øXÿàm°ùÁ¶ö Ø×á7‚Ï8‹ãöuúÁ¾Î Ø×åûºþ`_·?ÜIÐî…ûNåñ‚SyþFvp*¯?œÊû§òùÿ÷M,.îäåËÄî;øÄ‚Spø8¹ýÿçLMGw ¬$øP³²ò€Oã_UswWðíúûÁ ~Bü7[Ú€Ÿ'@ ÐiyÁÉ\ Ì6­1¢4@êóT,¤¸US¼R}÷lrèR¤ý—y†:ÇòLl´}Ø}2Ï'"·¨v?Õqé³`—øôù—}“ýLŸ"ËLEï=gŠ»Ð#ô¶Æ¹ëc.Hå™ÑÒdÝÂOçƒGù*t’ðkä=ú =YaÜ<:Ò™öš‘áu4äjé.¥ï9#×=1’aÖ'Cl#šß®^8µ»c=~FÈKz1†x0‡‹Žv{ó~„ŒºrB$âß²ÙÀÃÄÇÕ±“sP‘ÛXúuB‘¥Š¨{OïûÛ'i /Ï–[ÊÖÒÇÉõár"ÁÑnÓø%¡!­‡ùΗQ¦šŒ´K‹9„x'`Z@òð·Ø°ÌºCìäg¼Šñ„W5¹JW³ZhÕ´Ö©¸†qÍ™›ÛÜßuñà¶ö†D6D≯úÙwI4:í6[ùWŸæ'¾…©½† *³ö©tXÝewQòÎ~”]Êϧ»bަƒ¥j»ØWšUïÏE:¶Éto¦…`ÎM q¨¿•àˆ „øÈõ!Jî1iù…™ÿ Æ!á[LäFàþئr£j:ZÄ4ñ‚ÜSÈÚs"|³Îæs·ÏKÂt´«¡¶èü¤z%ºÖÁL«Ä{þáÍDOÄ8fñî»èÁed³O‡ž¬Tú?~€n¡PI‡ÏÖü ¤[ÅÃÝÈ™[ÐU{s-!¬t6d$’Îz„`àÔIcY¡ÇÃtIÇ0™;¢¥Å‡„ê'—qÌ#ºä6yÆL-9‚-T¢«8eóV±‹ ¯üøKb?šäsç &A»º¶þ%-ÛÁ‹7g¥‹^Ÿ€!·wSذ¨ôþ¸ ÒÚô­M­ÇäŠc]ˆa¿ä£¢©~w°Û+lÇÓˆ<æ ªÝ\èsßÃ)*}i!`Þ#Í·’Sz wÔ¾ 6É¥ŸZ²Á¶•¦¥²}Å”å_Ã3`“.‘¸ÆíÐó*ÃU'vÉLûl¥å0òk8ÁD0³Ú hà—bPu1r¶k˼ï?«yW6X¡ê¤™§íº9ùn¥û‘(Ú‹ôkŠÍÎÔ¼âÇÇïW'ÛfÞž¶­¸œ¤âûÜŽPÁÎ!NßkÄe ÃP0Œ£6^]ñ…3ênÅô× Ñ,H+âmÎÚÉàÈ9‹/µÈ³uÞu/± E˜c-›ÇÚD]ÊH XBt -jÈþ,©pA¯ÜU®½Y1©ÕòH¤räÙÔºÕN -ZKf}¤ËEÅé&=U?P.Ípô³’TÑßç³Þq‡<°XO&ö.VcÜêÈböG^ò™xº†Écó{ÈdN& ö¸ÞÇcuhøŠBï¹»Ø!"J1à ]÷ç-µÈŠ('—)2™=SÃn?wJ´i'å»êÔÞUÏ$²åÁã±p8Þ±W{e‡Ó› -vXÌòØînòok¨´êÅHã1‘ø°:j{…ï¥ró7‡¥WŒúyÀ¥î+ì qA«=r›°Õ@µ^¼Ùw Ží:‡ã óIhHwÄ7-/\³”ÝK*LŸüÁ÷ Æ®²ÿýš :5û¿}“„Qì´¦æöþÙD%•jrw5u˜ñ©‘D<O‡>—Àú´Î^ô<ûiÏ«óü-î¡&Ý£\Ý -k\‘ósDQÝi§9ÑS<µ7îs‘>XýØÅd—ý̪ÁTóÓÍ×5å*åѸ50qX«Cpd3ÍRÛÛÂxA5;èxóX«œo›¾c"åšN¤ÛWe£¯Û´íçÅlHÍ@~]äˆÊÁ4™}Æl&š¢W)V¿ê79GV£oˆÕIܦ¶Z¶êEºÁ>99ºA1].˜¢ºc*?án¾ ‚œù>oE@ÿ€*IúxS5ˆÉÕÃ¥›Ä¨.'†›4ä2ývKÚ;Å$¶Þæè}N±¿™\l¯‘Ë V¾Ë×8‘Ô¼3éÁ]÷-Õ¦3øyúGV~ˆ)ÇhtÍU8¢s -l‡J3)¸=hi)6>QxÂö(1T}¦°l¤.ûAB7é.b`©_Tëá&¼”OÚÔÆãþ¥£ûÃÍFoìÜëÆ„ ÊKÖÃYú»Ñ™"5õ;šBgyƒ Á/ë.ï‘w‘B>0†º3,윱ìx0n.¦ Ôb„²|ƒ!ÌY#-‚Bj)s›—>Ð1 î*DÓ¿acÏŸ;‚¯sͦˆÄ’O%\ÂEí ‚@ZŽ ˜¦ŒÆ_Ýeåë8µÁÂÿÑk¸µ%üÄÀrs55QK!^ë†dDb + ˆMÿ r¹¼>Xæ‚!Á3Uað­n!úÙ~g÷CÞ%¦—R»"0.ÕS?Y³Áˆ#«¸ûa‹ Äe $ᦠKó¥íWA‹¡$ÊÄIS+GäM¯|¨÷{ ½âúlžkƒž1dô 5K§ùXo&Á™;w‹¡^_ÕÜ~µæ×2AíJh$|œN{¡f¤Ñ,këH?ã¢ÑïÝvÍ ë® úæ¿6¾¨qÕ˜1x8|L4¢ ãå]îÖñ›ç~wþá*.ÃAÎ$=u¦y#Zd–7¯ªž^xÊžUÀ \¥—%íÜŒñ}•¦9| -_¡õè ¬|ë õ–kfì66“ž¾¢éÍ™Û)R¥³Ìû­Ú#•ˆ8Õ·B‚Ê‹e•eq˜V'¦HÔ­ü¼Ã\›hý!ì«M0+TäT56ëVñc.²µZW\ya·¢Ö±Œ¯KŒkü–’òQ"A^pn£~ľÈ"Ûw¤*L …àWÔC?Àeà¿S,àd7cr›"SñÖ`¡¬#¼d,UU³Ö[¯'?G‡Wx¡FŸ“‘Xm*|÷Uà]È—JÇs¤É$6„+\ òvÕÅœí”`ñB ™ fÃ¥·Ë/ľxTXe´¸30ú*1ð¡ö>ûÓjL.±÷*owÃ3ñ­ÎÓšSc•˹iùïS¬ŽhPZFÚ>¾ó9éõ€$•ºÙ¸ó£üš[UFý²à:ÝÒuÍÖ? -úùúl¡¼Ÿ®ôœoCûjí…ââÞ['ßɹn€b!yÁÎÅ£7œxËw›/2„¬„n’g²}Ôo#oÄ5t”)¸„9y–3&jò= µ;}¨jŠû6ÈП=›A1š5uo#ÍW¼ä‚\ -ð‚úÌÂ|-|Gó«ÎísARα_r°°ÂžãÎCÀƒÿaƒœòÙN¾D\ٸ߅›ª - &€“ý®¢ž(Žî-öM\ÒtoѱF%ä‹÷››~IÓªúSmºˆ3]oœïȾzÜeHSž¤ØÎ¹Þ]»³¢â“|;b¡p~ÐÏX‚!¢vŠ£Ç4Ö_®¾0@ÂMÖª~-씫|£~ä<ç1oezĺ<Ía=÷uÁ‘Œ€ÏR‡¢Ú°¨CüÜjû 4x´š+øR¯Ì:S› N»ÛµÕ)ý…Î ð 1ÅU£cRy) -7Ù@HS»ŠÝƒ~Þ¯Šœ :MYœèÝÊ¥î¯7œC™ô¼ë=CuWFþ<'?\Rí…ûúãm(cœÈ˜ô){øV:˜Ìfºˆ¢JsTƉE‹pÍÔߨÀÈ蕃œÓkQ› - ~†bßy ïi™‘ûîɼI°!9kE!ô¾ºÊ,kªRDïrCgY^óO°ó(K€èjWngTƒÓËDâi›n)’ÇD¸TR½öŃþ¬ZãBí‘ï–¹´\šp'b’¦³¶õ$kØšÚJ¸\Ó.×µÈß¿d«Òî ‰ŸFóÙ•á9évJµZø½Ä -Âyíf?Gˆ–ʤi­iì€'Ò.ªèŽîˆÆÀ¦MŸñåµe¢’‰gyUñ_ ½…¦Õ“FÔ…Pyàø¶ -…œJv²V¾£TÌêËRÒ…Ô±êí’P÷#¿h„¼ÿýñ­ŽQ6º|Î7ŒÓJé¥nõ›pV3¸òµ_{¯ÐíÉ0ì³,R~B_<¥Û–ì¶æC¬³rr#Z‚GB±z© È*Ï×W<*1wÐááµsÑÖ_°Wüß)9„èl’õE Ï!^!<Ôòty™ ߩ֙j®±çÈ(Ïv-²6:ôW߉V*µÜ„U‡æ^ }¡ul“©‰…¸ø+³=a›ãHû;÷[ù†~ç\wµÌª¥Üz×è×¹¡ûܹ¿âZêžÌýÓJnѪA’'«cN0φQ¢aJ\²ÙÀú>"Ü«R¾w ·5Àóè4HÐHñÖÖf2ö+àCC]b‘¨#©l,"/ö=fv¸7`ZáZÑø&ÉD(™uÉÃN,ZÒšÊÑîÕº/æ3â~ŠD!‚ûDý·zþ²u;eĉ$î9Ú⽤¦óªi‘&óÆ¢,,VL -iÏ›BÑ#lîšVOf[ª/ü튨t뤾È×ÒÛ-UÊ w˜C q?¥vÁŽÝµÆ Å„¡ÖV(ÂM* -¹úàAœÂÚжòȨ́¦hˆãŽ”X9ï &æz>®ÙïÍ›"”{•ô¼nKÃ4^±7†&êÓroàï3Í•? av¼¾vyeñ™[µq2=Do  »Ü¬éص—$$ÑÍôïNf'¯€ú^ ]p{ô™`%æ.Ú³ì¯ò U1­ÒªNzF~R§±ÖmI"ÇgK)_n„i– çÈ­ !Ü?ùÁQ>C?ëIñB ÔÓˆUH¾DvE@×#35ÑYdL¯É›9'ËgÏ‘õ{Ë3fy/]Ë4:Ö貨ùDM= ÷ÁƼÄÛìCâ4¶–)H¸½ öxÕ÷ôzrÁq¦¿ÁÞÿœC8e­ ö—Õys÷—q='ªÀ<ê‚=¥jy|ÄÎÚ¯r -º¥ò^ÈjOˆh²)µ"’c‹lYÊVjFƶAÎnËðg9$Ëò˜V+þÄWËšêÄGú±ÕSn®Â­^ü­µµ—†ÒúòëTŠÈ0˜GÒ›™¢bcÜÞünU(ÁD[„Dó$øÎ'P»ÆÃnoÞ,¼@ÕMs‡ÕêÆ­¤ÑÏ -èîÞu3Ç’ÝÅ,†¤¨„8t÷/£Ë^i\pÔq}רqß÷9Ç“Ò`Í·-@«´èb>/W@±Éìq¢C/¢l-1Q˜k¬›Ï¨r¨,ÃÙžf·/ŸÞ·ž‚ìköº2¢¼Î#¦9ͱS §Fý™Z2Lè’wáûq„éÊ-¥<> üH;öÌ.”ÕU«Ÿè jí^‹%«C"R…ºPKÊ|ˆASsœ§0-ÓÝ·?B')¨ ®¿O±øÕšÕS!Ñ;KgœÏq†â¯’+RòAn›b°À0‹þ¬¿ù`ßx#æ«|•¸ž‰Ó ˜õóñ~YËiâ¾Ã¼æÌJX®þô¯-?’/Û¥ûè½\Âï½»Ó)hï†9Í\ÞG²RŒzëù²Îç.]‡è&ìIÇ<žþÛîºúYÖí²ŒÔÌR£Gúrã,½ŸA(±]‡) Ë8a'üc%?¼“­KZk4Õ0ˆ1×ï®Z{Œ¬Ba¹D²îßa¸šÔûç²ÜÿhJüñµõBö‰÷Ž&u±jà-ÁÜÏ6îýx»3å6sÖ*â]ŠMnö‹a^bíng·D”ÕÆ÷¯´³t·#Ë”åb{ð?WD‰>ëaiæØ+®WV'¤7k›±vo);Ò²ÁT‰Èg»ŒÝרö÷ÃgèCd¼H+€Û{ÈîÒ-Γ3ÒdÓÃènñB¤ÑDÜÍ ê)ý⺘=úº,•.ŸñÔêÐ7e_¹:âyå t¦qƒú¨«Ä’ S‹¾ë×]ž×p'}²û²Uò¢QžÏig“àÿÒ­ñ†åF‡t§¿ãíÐÞ¦á8ÿR1Å8€ß$Çk͹Ö1è •ÅeW”²ª5íÞÝg¸u:—‡õL÷TÒ¾]SPj Ñ5RI‹’"²‚ÁךG¼ ?Ãä'w—AŠ|Ç6â[nA³ÛàÁÍ0<óýt¯îÂó!j) ÙºYÕëE¡ƒ×!æÉï3gQi|øTPèí\3ŒD¨Õôéµ ®£’ ÒÄÇ¾Š±§áfàAåîI˵À´Ve3ÃSiá2ßž8 - ©(û0ø>Êe#˜ß÷W&÷Dâ kC"@HGJ×Ôfókaoj•™Èiÿ’Ƕ}ƒç(×MmLå@ç„n£â¶}”,v+@ŒO!"ÐÓ<úÃñŒ+娆?©;„œêó…Ÿɼ*¤L7ýõ ÂMµ3•WZ~ÞqsZ/‘‹žíº(4ÏXµÒa“‰›j«Ìu¢j¯X±•þGÀg4Sß@¬Ð7‰¦ü¥e?4Þ/þ€­2‡£4Y>ãT<]ø Oòó~^'´Úc$V/º7y˜Fz‡:Os0P3¢Ä»öÛ‚ØËá¨S¹×´óYÖmWí€Ì º•¯Ñ¼¸~XAa`Ç6¢±ý§—ë=G[j?‹˜wÅ,vn~bì*Õ¾ÛØÁQh/mbNÝ_ÖQq ‘&–Ì­ê›ç1SÇÓx¬2§Ø®í›Öþþøè¬Ï3Žb ®Ž©×Ov\rÞQÎàëŠ&ÂéQÓiY˜2ج¡$úgêPÏ1 åm´O)U‡1¤'iã8c¬Ÿ{‹E=ˆ§C¾2ֿ׿“H5)Ò?At³J`³Ulâ’/ÛÌÔpìœ –¦F9Æ"ô-¹^Nfðƒ¿Òà’›Å…¥[{ßÖniöé´6SH:‘y^›¥Ò[°¶ÈóÄîtzKEcÓ¶Æ6~ W³ƒ“ -o~ŸYJm­àB¤ŸmÍ@z.W/_Àæ9$3Ê#†ò€y<5`ÁCƒߥÚSF¥YZöÔ‘ˆÁÇ0[ì0÷‘ ù@Õo$XCG~,6¿²©Üe1Ü“Y.Oy ðè6ëIß-@ç²;JÆyn2…徿©ôÌ,C9\÷Å`”.#¶€à,O а=e›¸|ïCýöNç… å¬dI{§Ÿ2š&åC¨ÚìxXó2lëηe¿Y(’:Êà1aÒÄÆ|Wå‹üpkaQz )Ü!Â=°%¯\3F—ßGù+kFÒ(u𙌠ø…iÕÝ&vgíV®ÂK èÒÊ3V±‹(!Îı>M¸LM¾6?ÕfL°Ç—ç×:RË ŽôSQîǾózÉÙ?‚ÕÕáì?Ëi‚€ñ/qhÏU9úR²ÝúMeÌ?¥zO"°2»º#MR‘âÃÒ½‚œI¥ýãⲸq2‡PÐÔTê½”RXæø¢­ùꘛy4¨Wc¨X¡ãn¶¤Õ×Ráï Žj³9M_k¼ˆ²‚ñ|ÔkEH#®§^êå|I‡4º¶7™H¨ª®H‡WAZ½™RsÉhÙ7Y°¶{|Z¡Eo7Ä ]çAü³šO‹gЮÐs'!Îù±žÄíl º¡Œ:fW\$E”<£²s¨O³ZC@æ\õ!'ohs¾Þ ϞˋHé‹=»èQ]ø2Š|p“ÎäšB£—‰±>g}å ºê†+B£_KÔ½º~,8 ø*ýùžËl³ƒ^6­' 𮥜z™ Ù~ÓÚsXؾLFu~€z©¿Ã~YoÎi‡ÜaZÑ$ÂNÀÄH#n‘gV-Éå1bõ–õ~þÑ›Üä¹M3Ó“KÄ]óIFà1ÒÈ|],â*ŽsÜÛ®Ì#:ó;Ó7GN̓Êê[ã%íAЂ‡ïNK:—†t;¯ZÊÓšYMÙ1ñÇQG7Ý5x`²± -ò–á -lM••òš'‹h(YQ$õ©†É^gQÔbŸ·Ñª!•@¿¿nâ×$MÅNJké¡þŒõo‹+/>£Ìîåå)Fß=R›X/hÑ_à¦õ¯É°…'ȰüR•P±q>ÙWÔÈcÃó7á£T\—"-ÆØCd»äØoh´V½ÀµY”"ß?5ܬP•lùy?çsWoFP»ö• ¥¨/I’Žg"çØÞ'¢%ÑÁÕäÍapŒHj=۟Ͱô-¤¨#W¬¿zè[@ïNRj¹é¢fó›ðô'|¬‘¨ù1L‘ˆl²[|Û¶ôÝS‘dµRø.û©‡qÄ–çòw]ù_ai¹÷ùG1o>Fý’ùŽ0p%Îé÷åñÛ’`q.9튛þÐÓ«B>«®{C»¬ñû°½ÎÀ Äi†¡q6Å]s& Å9"nyWɸ4—ÚŒqOT¡ñôE@aV¿1¥'Ú?#IŠ/MÎ%Z‡–ßÍ,ŠÅ -l#ãÄËÍî{µ%]…B#¡ô ‰/)5ƈ” P¾Ë0ZUÁv,âÌz¼ñV©^t±3‰)C"o ÄÎÒ„›¤ 3g#2•…»e³iƦ*b£½ªüü‰Ï¥ãY†ÊÉäÓf 9Âk[:^¸¸áqá»MP ;Z"™‰Ú•PU‡¨° -ù¥SosØ+à—+³‹­|O,2Š#Ý’ÔÚ7Ö=$Û6’çÕœ ž¾(CÎÂûøãŠÅä¼Wc¹ãÔ¨ÈÈ÷tÎÊ#æè®qÕ2ÏÜÛO—ÈA‚ù «õTü°"üô¦¦Qì|¶ä3®.й} ^uÑù¨qwáíÇiÜi Æ|\›;”fç XÖ£o2âŠÀ\O]m¶ã8¡ç¶xŽâøèeÍå û«M]LÝ[ŒêNéUîT(ËÞª/, ?2G(ÇÞ6éÀÅ/Úhfß=í}-†VuÊÄBªð‚Ì?ÅAïUPL<…êõ¼ÑY¹ødúÊÏzUJ†ŸâÜçpw 3ª \äM Ó,%6?‘™;|õÌ ¾ŸÏÉäQ*&•vGö´ÈàQú®·‚†HŒÒÑ¡·œºÈ\Èò¹Ãg=ÇàT·U{Tj> ±Òؼ ¹Y ι0¹{P×Ü­·+ë‹á…¶LäoR˜xPw]`M[³!V^[Ÿà×ÜÜù¤¸ÆŽ•TƒÜ©¸øR¹:›š\¤ˆ -9Àê~ë;^¥£¤ú¹Ëªh<¦š—8æÝ«0WD+,ÿ[ÛùFsã½ÇÜH_¨¤‹Jâ¹E.6i ;±d3#âØDxYóß•'Ô:'²ymÕÆnFÜm#ÎZÞmP ÆU}ðqPþ^¦1ãS¬7±F—;> -endobj -43 0 obj -[ 556 556 833 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 0 0 278 389 389 0 778 278 333 278 500 500 500 500 500 500 500 500 500 500 500 278 278 0 778 0 0 778 750 708 722 764 681 653 785 750 361 514 0 625 917 750 778 681 0 736 556 722 750 750 1028 0 0 611 278 500 278 0 0 0 500 556 444 556 444 306 500 556 278 306 528 278 833 556 500 556 528 392 394 389 556 528 722 528 528 444 ] -endobj -44 0 obj -<< -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /MFDKYY+CMR10 -/ItalicAngle 0 -/StemV 69 -/XHeight 431 -/FontBBox [ -251 -250 1009 969 ] -/Flags 4 -/CharSet (/fi/fl/ffi/quotedblright/quoteright/parenleft/parenright/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/equal/at/A/B/C/D/E/F/G/H/I/J/L/M/N/O/P/R/S/T/U/V/W/Z/bracketleft/quotedblleft/bracketright/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z) -/FontFile 45 0 R ->> -endobj -45 0 obj -<< -/Length1 1992 -/Length2 14226 -/Length3 532 -/Length 15322 -/Filter /FlateDecode ->> -stream -xÚí·eTÞ¶ö‹Cq—b¡¸»)^¼¸;ww/îîîîÒâîî)îîúæ¿Ï9»Ýçýxï§;n’‘‘ß\s­çYsIr9EzA# ˜µ#=3óg€°Œ3€™‰Ižœ\بïhfc-¢ïü `ææfˆ @@¯ÏìlŸÙYàÉÂ6¶nöf&¦Ž*aê’8‚V@{3C}k€Œ¾£)Ð -4†¡¾%@ÑÆÐ èèÆ´´(üÓàtÚ;à™™Ff†Ž ‰™5<ã?–$¬mœÿ6r²ýŸ&g ½È€ê_6© “F6Ö–n# 1<£¬ H òòÿ†­ÿ=¸˜“¥¥¬¾Õ?ÃÿS¨ÿ«YßÊÌÒí¿l¬lö# ½õÿNUþ—7 ‘™“Õÿn•pÔ·43´6±˜þ+dæ fæ -4’3s44ë[:ÿZýo ÊýË£Œ˜ˆ”º:í­é¿Úäôͬ•Ülÿ=ê?Éÿbæ? ªŽ½™+@“ T^fP"èù?Ÿ´ÿ—–¨µ¡‘™µ €… oo¯ïÚ= bx0̬€® +È0#ƒµ#¨ T/€±=ü? ÊÌ`46û'ö_È -BË?È¿šYAlçdã42°ü¯•ýw ÷·üg˜ Àh«o´¶ÿeþïèÿJ‰ÛZ:9ü €ä m¬¬ôÿDØŒ¦n¶¦@ë?!P/¬ÑŸ'€ÑÁRßÁôO„ Àè´·ùùµ±þ›ÙAF]þ´³ƒ,:šÚÿÊø§R6NöÿÔÊÌù¯ ]вý›Af€Îy-#ð?æÌ²jmö·®ælióW'2ûÏ(È ÐÎIÿÏbq€äõÿŒÌRüC e¡?RþC I‘?’ý7q‚ê"ö‡@¢_ÿ¨"âT‰?2#ù‡@êÒ¤.ó‡@겤þíßÄR—ûC =…?ÒSüC =¥?š»ò©«ü!ºê¿‰¤ ñ‡@ó3°×7´:þdžݺÿÞ÷ÿÙÀúïÿ¹—AwãŸmË š£ÁÍÑðÏcY0ú ÿYØ¿ðŸm÷‚MþBдMÿBмÿ:ÌL ‰›ÿ… O!ÈÔ_G äÊê‚î+Fë¿äÊæ/¹²ý A®ìþB+û¿ðŸsð‚\9þ… WN!È•ó_råòY@®\ÿB+·¿äÊý_øßÇBB6®ô, s zcú§êÜnn¯ÿÌT¶6³sJˆ€î&&NÐêþ5t²ÝUŽÿú]öÿÃÆf ¯ Ðh¿¼`cÈhžÜTê-š?UM.dÒ#[ß5ÛŽ° nY4"eG³^§öTž†¼½Gìò‚ïÖæ)?.vîg“2ÿ¶ç¬·—æÞНv•&ã¶kûé>àågÓÜÍ ;ø·™õÑÒõ‚þÌ‹ã\9*¥}Ø_$`ݚΠÝéœjbi–ÊÁßë(XIPSìJCØ‚×\Pâ Ö&¼ÍƒáZhW/mڜПòárâß´î±¢Ñ ÛˆY¶h0ö¿œ”£¢Ô¾÷ U ¤Lí{Ð+p -#YAÕ™îEu§/p&DCdœÏéZÛÔH^É9´×‹vtYiuM $— -™.âòm*")áÜߎIÜymRñ>d›¾çž(ñ޹‘*ZÔÐ$H­æ¤8ýiéS˜îÌÈ7ʽá?Ù~Ix÷pHÓô*r€7ÛF}2¢~ñþf€€Ò7À+w˜…“ÕH$-Õ§€cÏH%pù[(Ê¡zSKCn6BMæeFF ³“} ÍÊp]@¡¸R±I0ÏÛoÇ/Á5p‚Ý_ëKnW"|ð§²çˆâr\ƒᨎ6ëÆ´#cä!¡“Z´Ë-–NK8‹/|ªÞl:¡~­^¤œäƒ·T™¢¡¤p&íú]Â`JÈoh:A±ä1½æ7:ip5î'Ó”w“Âä|L}yÀÍ´kY½I”ûq”qÙêÙ98–$5þµÉèuHZ¤¾¬Šé /ã@µ¿ýØë…R# .Š¸Ù†uv¶1nrýÂs¾´Ü® DaT´‚T¡¨}‡7[dÌ °2Ôbê²8¦t°¥Þý¡ÆÔz&@ÖËb>sýíkãWî†òJãÔûiœ#iÉN«2°ÔõWö$-C#7ÿð+³“!wZ‚ˆJKצ]ýØäÚÁ–E§; üCõé;v1~;“,Ÿo¢6.R4o×K<Œá©o(?Dê'±Š0¾å掻òñ7KNìœÒÍ¥EŒ·–ïƒ,*av7 Øf`_ü‡ç–bvàqz«*F='À˜3a\ʬš7Éäc¢“Ì\Ú#"a_Ûo¦ÔDd½¼b]#R=; EcLð¤<òÇn”^ŠÒü3ó,D¿#grjuÛZ¶7QMê‘gÖèZk¬˜?s -+BÏÑ4aÆY¼Šl N‹@Ÿ¾#`J¤ÏÐ;¸)¼½1“ôÌ™ç ¢šâ—&#}¸<ú–«b‘´E$)š'¹rbxG=à<›""‘û˜Ò‹[òÆ15Œ[DŽÂÓùƒ˜ßø]ÑœEøËC;µébÆåç©ÍñyŞ·óO"Ü’³Ü÷†·Å‚y©Y-HÆjpHm5nCk\9 !•ÐÞ8ʵeý8caBaBF5ûЕÂ}Žs"÷©¢öTQŽýÄd?õ r¸Êý<¿¶8Äêã»Ä…“Ky( º´9NÁ—®<ëã9QJ[ÁHÍ | uéšÐ<Œ¨ù« ó„om¦`]xóµïñù¨ŒxÉI'ȯÝåv3ª—3§W‘¼+E¥1ÄdîÞµçH¹ÝÜw«Äl•QºÀ¹­p8ä`ë^­)¨4èÞ¬‹“€ydÃ~¼–§Ü_ê3ˆ¡ß£™gÖ¯=Z[X¿É¡ ³2þÞ~‰ ’;rÃ.¦x$«^úÆ(„õì¦ÛG8ù ÓºMHMôµLª¥KËÅlƒùð#Ê(Ïէž9ßãîcn=êñ=¬Ê|“Jû©ReîÙ4®#ÄüI4Ò{ظIfͲü𶦑x9òk^ޤ•…œÊÛÀAüQBê]Ò#)¿÷ ¬k€À§Ÿ9¥âüG]^jh&4HÆx±ŽþÛ?8éçvu] ?ï}¿&þye"/xý,¢:F“P{_W3©„ð3$¸iÝNgUð¸uJERÌþ–Û#‘ú#ÁÉ®u_ÆhèTuK n37ûþ®«a²ÚóJ½¼ÛV©¤xÖoJ屨LIÑ1Ò°>CfÈî‚Ã&×´ë §0É€C þZóþü›.÷ó¤[ÕMcÖ;?Rí;¬&¡rº!³‰F@~ŒJ—ËÑÞÕýôÚ)BS ä7xóz&RJpKuHõ RßFÙ;!ð×\‰~ü<‘-m.á›wè^ñT® üe¢¨[ªWtT=Ýâïâ|´ -úâÛ#Å¢”­WbÝë$ûG 1MË0ã¸,}íYïÛŸóªà,É(ÚHBƒ ã[3‚ÙS±Ž›­ì ÊŒÝ×%”¦jûR>õˆEÔ½å©D‘®ö€6åbw’ §ÁE†nïSQÕ¹j} §à¼6-å/Íö•3bï -QLJÊ¢éÛ\Ø© G?Ç“8ê†k5ÆÊN¨ç€¼N0Žºh>}¤_& hºáŒy ,ÿYÀ×BÔµrJª·‚UwmáÁð14KwÓˆ¼áUòxßÊœuÕF#NÔYÊ“×îc!ð<ó3½T}ß -eèyöûãJÕÜüî£[˜ ó^ „ÿTÛØã¦âÇ—#ЇØlΫ/¬ªŸ†û1‰žãÄk¨žtüBÈ×.ñÊ+«Ïy‹n[q©HÈYÇi=ý °(Zø]rqþj7RÃÖ_#9ĉÙj£ Ó5¼ö›íhrõ,9ƒMÈÜ«xQÊ$:J’/‘ûøèùÀÊw`…Yê‹›6ÕvGÞâe0£‰FÍèuiU¿ Ò ˆåÒ@Ë2 `Þ•lr² ?•¤, =§=Ín%ÇuÊËçô±CÇÙ½Û6ù×§©Dˆ£†Ný®KkOAŒë#æ~3WÿIµnÚÔß øM!ZøJžÓT½›aÎg®o©¯•ä3Û´ˆþEÐÝdÝ–ÈWɺœÝ!‹9Q£ÆÑ·ßä—´õ¢ Qª¡C"ž‰Máóó.j²³8¾†Tt‡ïvu‘~Y$¬öùG;/3â‘á%{'ê9bÓ«§tíœqàAi,u¸ë̸0¡gruQ34*>¦Ž;‘áJPŽÛ• |þóÕ·´’q0ùpÏ{â†W;öF›þt‹$$u0¯ué -FÜ‘ -»¹½¡†~€‹ÓzÂÇ)˜Rñ>ÛׯPxWÀ›øÇ"ýài½Qœúùfè­ò3­óÜ­…E!¦a:#l,–uH±~%\¢æïnh¶“6(Zú/쨕˜·ëÂŒÿ˜âòÀœ«µÝýq 7;w÷K@K“OÄ:+ÇÆ%šTŽ]à`n~~·És¦xìAY´–sb¦‹8¾Nj)¦Åfí´š¤(Jmå}Îò³‚}Àh)ÁEBÂ|4Òš1JûdWòÇo‰hî#¶(¨Âr¨¨ö5Ë¿Rf†ö«™í\ùÇIM*êéâÀºÍÏ£ß8:Æ<{p‘X‚.Y|éXx'Êlý)F kH¢oDNJË „2Ûç¤~:ÜY/siNt þÀ´( hx}I37ZÒ; sŸKñ!㉫<çóªÆ™Š ™–e`މUü:6ú)ý¾R6™?an±?êÚ\„ʺ¤—°6£<7;P¬ê½r·ÉSîÑw¼Åù£µâÀo&ºC—.’^-³µˆ8¢ñR‘ÏÁ÷En_ºÇ[–uê3ÕyàÕœ*g^1§(Šø¦½:½‡ä—”•ÃjµµÙe z…gC…š<‘ñÈ Jßt ® Rÿ¨Ad‚Fñx"iä!E*!…1XÜîj¥<†S^ [w«¦9bì8°±hÈ ½»ž„ÖÏÒ5ÍrœNù+Èž5âM¼u%íl›öã36IE¯_™Žc‚—vôÈ`²Å2ñ1 ý>X›  šo~„JÎå™é?ܶ•cPÛMü ¶³³¤}YTé54ù¹>Rá»uGêÎþ€”§z…hÎÃãÒ퀩øÐÌ ·ˆø«­¦—#oÆ­ÊtTîr9. -5åïŒS× Žmî£íû¹‰Ût´X1°K«éÅÈ›¦ë|ãã}i‘å{.ÖÆ ä’@iŸ€FjE+=ñ˜ë&OÓecMúÅë]CŒ¥¬†…§>ŠSX AÌ;ΤJ  Â¿1 -á‰ê>}|1mc œ”mñoóà -wFÒõIq.W–¸3‡qìÙ.ÕOs•loCVÿ‰rÕb‡–OÃ,ÆqµÛp•-Ånè†åïå<Äèˆ3wjD«0&ü¸…¼4N€!9÷‹Ê¤¢ežÍø:VB‹H–Å—eòc¶Ù7\²O܉ b›x8f¦¢è‡RDg¾i6šh€Ü|n·²§Ùg×]úóÙs…¼JŠÁÎsñŠœ>Õo¨4Üõ¿“kÓÑ ¨zÅ\ÐUkì'Æ8ƒð‘3&®©ñ[df±t$ Ÿ˜¦óÏx(ý'9…åõ›Ë*¨UzÜU -C6O<ºOµÀØJIYvá/úÏ‚,àYwÂR*!bV££…ÄNîê`Èl‰’Õ£îwEáòÁ§©óÚ› :;b ‚ X^£è)°½” ÷÷ z‰‚ p'gÛÅ„ìè}æ T`]’3þÚO5|2bØ3ÅÌoq«®?ïÿÆßÚ<§çòT"iÝø« -–ÝÿGt,ùsæ²"Üw„ÂÃl÷5A‚Ìɋ׸EKñï÷$NÛÅ §)Š(ò'·‘N–k6¥¨¸=ž¸üαÒR]ÈŠ’ÙKô×r±W>S˜ªJ¾ƒ¥ð}…åæå®âOE*g”°‰­òPss½xÞ ͯäÇ>'-­œ¹=€´Â!1Qù¥áQ£~ÂÚášœ[2(¼è‘ -¼æ£Í¸ÓQ¯…› ½Bø­¯Öa\3ãX­Nùr+ì6âxo4#*¥àcyIÒgcQCd¥‘¬]žS¾†±†8ðó6À?ó4€—±Xã0ºFФܾPøÅïEHÑ\!„0‘—ë[²£}‘ /ìÃ÷ˆ'ÚJdJŒ™Yojºö¾Õ/é©D¶Ap{”Ú…Žóâ5*4î -€°«¦†ŸÃŒÑb²Õ6,Gï3ŸÚ… jJäòycÛCu Zr+½àBç1Õ¶Ú¼TÜF¿þ¸§˜Pé&W²ˆf!t/ÇÓ<ƼŸåÆQáûDZœ’èÉî5\Íýa¸Ò¥¥@’7—æÒ«RÏ C£Åø¹ -ìª(â·ð[È÷‘<íöîS>äôÔi()÷ÌŸœ¿ö è)ˆA%G‹a³>>$… ‡\Oû€q/>ßèxïèË,Õp{dí½»jn¾ÌÛú`\ÌðnùŠ=d|ÛÏ’R NÍ,®ôÞKpXóåñºÚ‡äx‰Ýõ ÒÊôšDÈ’YyÙ¿&¢>®¾0d’BåkÊEÀ¨ð¸FÓ '?«ÐQRìç>üšš‘Þæ5þi*1eQ?pgƒhn`ß“ ÉŸöƒˆ™gÕþLíRiR ù– 3ÃýbT„ÒEà@²Ðœ˜Ú/Ö -Þ””A$Ü@±2éÆ{:SÅÀw&¸«:yð€Büæí}è£^Þ‚æùñŽÚ%ŽrT¢OÊ.ÄË% -§n‡÷>Ü_©·±ˆìì [?À½g ¿’'šJºãcN &öù¡×zÄ»_¥Ù?µ`ws¯ž"3["¹ÏR[¹ù^¬™Ù×9 ¶­`•K$bzÛdã0¼´¦}žp¢«ºÔêŽãÙ½ðßòjûjM=ÂP³Óòl›® ¾¦]d‹QœŠñyQ©s‰Î(C§ú¡ôw<ÉÖ"ÁŠ„ßö;ö¢„fµÉËmb‡¥ÁWj¾·NS·©5t>KêâyȘ-:/õ’[ì@ u+*UyÄÈŒ ÕyƦ| -|´àùi—!ÝY¸Ê`RcW}€£î ˆ] …?â1åUdÞP|ßÔœŠ0¼ÝGê@õŸå«¢O ö[?°æ\‡´­ÅµÃЯƒ™ QRR’—CîÍ>”;¯gzí.MÚqù…”xó€ uB–há] {ôzA3™‹M‘5’@õ9Ç#ûÓz=6¢"ât>E|ÏV&KñpL.G‚ÌËò mei#ëSŠÈæ•^Cµ6ª Õ:E T‹ÂhÁ.ðÛ;}†mÔ¾l±Ýè F'­Ÿ~IÙôL~&@—ˆñ­Ð×Y˜¥î“Gõ—7ÿ:ÒqjB¨ä‚¶lô¼xD…\¢ïàLaxÚXBîoׂF°ð¡HÂU¢iì9“¿ÕiÐÑ¿¸=Û¶í²³v{ué‘GÐØ”ˆ"FÛô*Šÿ¬·Ð<º*:ã12o‡³~\ºPü3M p­¬}ñTiÌåYä)Üê6<Û<4$Q‰%‹9J/²T.` M|‘ÒKJ€l ‹¿KI ûC:·X©L—&Î-Ÿš$ô°YËc´ê&ŸùÎ+HoA¾=L½/–¢ñÂs(2CÙü¢¼à…éîoUù230Ì¢z¯Q‹¦ÂÞ†Â÷b;hŽ]þÕPÂ!¨œT™J$Ð![ŠŸ¹!ÜÐJ¢#ó„Ëa³Ð2„ÁîÊ¿`ækQˆ¹Çgg]bd“ÚL;á-HþülLW%p[e)‡íK¼LÂg˜Å¬1>#4 öy¦ðSøåw_ŸE±Ú;Yç#ØÀŠt‰èO®)òX<ñ°çæÊ ºÃÓ¨hAc=#ÁÇtÂ_²D‹q¿ÛÔåž7Æ¥Íïöôw¹ÆJM -¿÷ý"B¾c©{] -Söy[5waa°ï,&Ã}œk)»Ð!mÁ¦/&Ï«NÜî׎Te—gO]økíRPÊ<Û,=)I"“$سxgißðufy=øÔ©xÈ[¤‹Ó™‘;:õ 5XxÞeé‹¢h­¯ŸWS¡°žj3+9èK>wv)Hôï )ØŽWÀíÚek›ó1R½]/”œ³Ÿ´½~0¬ÈÛÐŽ ‹¹”á <Ô¦Ž~³÷\äF _¦M=4_N¥Ë3Ã3 ÿ¸$ì¾²X#8°ƒ¬” ZŠÇ¹?~lðëàùÎÊ«V;¦eF½-³?¥}è³3Çråsâyû­²*°^–¾:{ÚúÑv°ªà Û~߸HbÚ ƒ\×PGô> "e—ûKrüA ï!ß’OH­`t7ãkª}E†ãL×ó8×¾™¿n"¼ÈŦâL£W¥SÈáx{1ö¬ÿÏÒU®.ˆ›Îã¡m¦Ï×O¹¯àë´KòD‰t»ýÍ^€ü«½è²|Iˆ¢ßI×rÎÍzÔÊ:‡ú ß…Å¿XŠtÍUÂçÿŽÛüö›gßÑz ´¤cÁyU}&+ä«nûÑ -ôV&\{Ml°Á[ÈÝXµ­p·T=“2ÇDö´úê.Â¥´ò~mj'ŠÔÈY×=ž4a^Ä¡Ož“²röò-äw³ÒúÓû"œì–ÃÀÙ,$¯âh9øw”à%k9Ü–5¥ÚÍЉŒ¼‡lÊ=pûˆ¡IS.E2—ŸÓ³8ª§$!ÖØuºcžÆt®¶Sù6ãðò-3WØJåÕ0ß#ZMî -SlA`¢{Ôj~ß+žÚˆ[ý òZvne‡¹w¿{çý¬eŒn(`vtÛ¤2Ò»•¿lÜC£§IÆh°À®xw—Mº*Êv*ST!ðþ” -â¢V榆®ípP-ŸÉ˜+zê(Qɶ$HV=½ßU€Éü -%ÅâFdh^•¨R$küV2‚¯q£çZ{_ Xüê|FGN´«ª²9oÀªÖ;Ó#È}Åæ²¥Œ¤BèšÜ¿&ñXv¯è5BœÚÔÑeûTñ‰ì'ë/¸íRQÚ"ÔHÉ6O^Et¾| x‚­DR'óòÒj‹»7OVôïu{‡Ô—ÒéF@)aYDa ô›ÚŽ­¸ÔÜt_ÔšäB>WŽƒ€#õ.m þ½¹@…›545—ÇÆŠõÂú„€+k^Ç+£…“ô|Ž)‘Æê$¹l¼Úßo~ëÂò‡<„Ôbc=#×Ûx®ÑÏ6³^_d: 4¤í'ÌÞþùG—x]Ý&{* WUCñk[è„Ú¼jŒ€¬‘£çð±s˜óÓœu£HaYaÞ9׭˨Øë²!@ ÊNZô°>P)`x7?æÚ÷Qs¯:Å?¶Wg{D– ¸­¡Öa™l$¡ã¥óm#¬¿l¬‡£iTžÑ*Þ°Ÿ¬ õx ho)‘ÀÝ]âÖò(Bœ +ÔwΑi®'r‹`ÉIƒ"èçÚ[°îFFõSG3NXàéæÛ>ù…‰)QÊ|1ïû ÕÕQH>H!ðž³ZˆJ ŽpËæûªH´†ÐkάùaOž…«Ú ?5œÅ§MDfrCiUQi“ŽÃJ gÃJZ 5ŠõÅ‘\”^u¼ùËvÏÁ½ TÒ÷"ìêwÀl ‰~3A9ÕÉ'Þ™,”µÌ«mÒÜqX–Þ5ŠL׳Ša…p=¤qé)_ÿ†v‚°¦O}}\¦çÕR½Æ*zí¡îÓŸ—¤iq)¸ÒÛ¶¶v Çícµe~ªÛø¶‹Ý¸—±ÓÆ“ðÓOˆ_\dÖ5ÿH–Å*ßì&Å%—ö[î;iC&Üâ/I%ˆËõjn®Ÿ¡^öã3ƒÑ> ¼AòY1]°#aì=*Y Ư¤ANÔ ®aBKðÄ$mÍí=òP‚Ç66Èšj0£"ÒŒ?úGÅdÏÜ™Þi­¨ri{Ž`¤ômK´3oñ‹Ž ×Í[ôÏØ·ë?¿hŽê†„5`é$ vkYïw­¯j´bL™…ÁÉâñ¯ôôR®xMŒå¥Åu,ovÎ\‘«- o^Ì# 3§)¸!éeÑÊWi¡ò×j*ĄCì¤!¬êFf/\è=ÃìÇôÇÝÚ‡úÎtß2`qCš§òµ†ÐX:u¯ ®øÅ …ÂßèºHg}èk…>=¯Û2íýs‡ÿ&9ѤtEµ ‘´)—¥Zxw¾Øuç’¦ø¢‹·ŠNýh¦ºwö½CÏZ¥8ÒæÃ‰+¥fPn)¥Æ4Ôȧ‹âCïKMŒÏ“¸ôz´÷ØÐÓöê‹@çÉW¯ÇV©Í™Iæ&XdÏˆÎØã=x$ó,Bu!ÏXŽ’ßßë%²cwdR‰\ÊÃô4gõ¬xçj9/Àv¿ÑÁý)µåBÃÀŠÆôÛæo´ëïõKÄu…ÃŒ"¥¢Š‹î÷ ÔJ®Ë=SÝñÁÐÆà²-L`^ÕtpYÐ`FÃi‘ÃhœÊ³¹;@-ݽxußG.3jf«¸Ö_»üý -kæ3„Œ“{õåï[._>úǽ¼c¹¶#ñæ¼Rîœà¡f5=#Ùo26š¶ås„XÌËO]öwˆ¹·íO»ô/£CïºÅRù#©Íä@ÐÅížÑZCXŠÈÈ"Nˆ”…’›Á€UL|§ÚøyGˆ˜hu`ºRõ ô#×dêˈAH¸¸{tM™†yÜ2Ü0f9‡ÌÂKàû§á+7îZGO~Ú fƒšd™Ý¢¹YÝ ¹~J6‹TaG²z変…ýôç_6Ší3ûš˜šÝ€^kZŠ ÿÃñ±Ii“9nçJèqöéw%,݂Ӈ âTÙÌiÆY7À}ä¦CX¥ÇÆ/ó·Gg—àHxõx©DŸ´œÏe,H¸G¢âi\àC×/4Âi=ý1k¹Wç7YC5.W÷.M‚ ³E}fudÇLTxÆ þê¿à¾Ën¿Mew{fð½ÅUgšÕ+h>Uàfkߤx1J«hÒ œiQœhiØ®YÇIµ53ÏŒ56èGÝÝjèY~¡ÌTËÛھģ!y¬fAÛ&ìÂU†%¿QÚ8"×¥4óä‹ÃŠvòÃËa3–œÛÏw~/ÕæÅξŽ#u¢vrébf)Þc;wçuÓºô‚áœ*9£Ëtúõ ÌÂrsúµ“¨b-&»×‘@î²ï “¼’Yû`=\bE"ŒÌ'Öy÷Ó®Ö=aåWÞ`ñˆùØ÷ÏWVÝÜé¢Ã”ÎÛý Ö¥%g´h–v œ>`FÙGÅÐF(¡yú^,þÈtì_ôüe4Ê}iñoÅ-4&Ζò D-þ%`ߘÃyåÑѪàG—ê/9צ›§Ä›û3¤Ê•äñé¨Ë`ž&ø’åz½oQuhGdõºq¤ ‘[ÍÄ—­ Z·ü[ëTNfž’ËX󮈌ÅΟ…4EЮ}…¬®hoúÙ~³ èkŸƒ¬- ¦´Ú¦9G^V Yóƒw˜ØÛg0z5(ú&cŸîWo9iJ”7Ë"êƒíûlj=ú_1Ý?†¨çŽN8Ð àhäòCé˜ÕÓ4 ïëõVÂÜÊŽßRwŒuÈÒd?6õ‰ñ>‡èhSo‰4±ó 5?Ln\£ ÑÛŽó½}ÛX,ªü*:M ߬ùZ$¿áéìñÛ ÆPN°s£cšþ‘r²fN!±ÁG« »m¾tÞ Ë¨Vý¨¹²è€uŒ­pgžš×á0óÐû–‰þ*¿5l”R9 ۨݹÉ3ùmv‰sG}æ›O68”ª@jv1Û¯«7»œ“ÍA<Š|2r€vox5qöl‡îƧÊ#“¾ÃI‡=¶v“+äÊdlßý¦¸‰6—]ÁœÓÁ¶œdNPun¾;éI½@Ö,LFpBÇc˜° SþþéŒÒ†a›ïAZV²€ë;Ò8A¤ù¼¤ÚÑ9„Ë­ K¤ÄfjÍ…#¸coŒ#UÇ£ÚDî™ú:ŠÓ<×ÐÇdë®´¥BωÝgµD(à"Œ*t÷¢—á³5ƒ¸ÓðÎÞÌK+;ò`Âþ#f=&tõÅf¶½64½²—˜~”ñÁb;<]ZÍж{Çdóò¼Å4#¬*Fôã]t¨Ç².YûÑrˆª-¢_ç%ç|D*Éiro(c.¾A“ ºÀìb}ÿ‚èqåjë€C’g´$ZôöK¼T§^EYØ…‘õ>uÕrQda›hMʹѺ¥Ï³M±öécVÞ'áÈ -}6FD¥ÒñQ4¡êàpžÜ¡r—Ô+Þo‘W§.>¾'ˆ8•U‰»ó"qlkŠi#umu«]¸fyãu…˜Ô•Ö|‘àÓνßSvàì9Õ~#²=gá¡uyL­¹ñBÚCÎÂqU°(%ziš‡ËlÁ½wWêVQ9&[³’p|Ö÷O`ªÈP¥ºSªwDÍCéÂuvh¥À©Nhß0§Š$1PCÑ£åç‡ã$ï±:7–]òîé+wx0¬®Ðjܽ<ñvô#D=~‰läE’­:ó†Êô­…§A¹L¾E éq@œ;!x»ªr(ïÄÔ¸¨Î½ò“X’ï.éøÀM€iì;Ê4~Ëì}(},˜±mºÖ2͇ÃÚy ±\ÙKÕ}q(<ŽqÓÿV\¢QOk5ÃÄÖâ·ÚÇs7JÍË>ºüÁÁZð—Ð[‰Ø9N¸@ʘÍɲ³ªáìtò#oiSÑqù—áç<|b÷ÆïÃkeÎnÄÓX_"ÔÑlƒ–«Õþæ‚#«–=6€;::‡%Q|aé_¿Dø=VÉÈéÔéD²ãOÍïd9ÃÈÔÁrWæã(ÕLkûÄãà¥ûٴΣ½\r§^¬ß”èï[èˆ?Æ‘hö— ôwüŒ¿ËëUÌ!»R]% - -¥QÄ+ëMשޝa<¥x®NFdꂊÕn™L‰˜d~|œh­sÁm)DQÅ =u-z€×Nµ1’‰ÚÄ mZ©ƒ‰Ÿ4Zr夾Í+¶]o Aü²gŒÑ©AµoÿÌ«§fïH¬A€­`-»E<©)±0ø1¯Òc•;:¬DGrÌÏ7e{Bf.D—ÌÃ- ›+˜.Y‡­ÚŒmÖ°vƾ¬Œ1VM52Ô,›é)ûï%òï?¨7‰O§u\wäËÍ)õyYêóMÞ^ó¨m²s Ë)jî¯(kz,¸›÷еNåo. -¢%‚fY¤aÇ·uðåÇħã·Oå90¸8‘ÉâÀÓ›K1€ï>{¡¯Ùñ-Gz,UêÓà”X”>ƒpK•û&ÞÔCïH½Ÿ¼ýšPîQWOðòø¼‚]º‹*{—ìÔ¨CW)¯‚ø.›<õ‚l„R¤û¸÷Ìsª1ys Zî‚÷÷ Ï/&ëM勨€‘Ÿ56ÔÌ”“W™¹_ìU:Œ .B³ÛJ,¦$§HÄÄ%]V।H6ùù»Ëùj?ü°cº63™äoP+õ¦½è#“oàâEíó ©ðEV“…”}d_'ç„/yÏ(@5ÿqVÜý² Í¿SC:÷ºåÍKð=4%ÜXEçDx:¥È|æ×1=Ç´¶ô+ßáPO5Y¸,=bv]ÂG¦˜@õ"L¼GÙª—_ª’bkf8·EF'z%0ûŸ7Ö>¾› ÐV›’%±x(±#‰½3ŒJ–²çлÃslÕr߀}uf{ ÒoQ×8ê†úZæC‚‰4E¼OE‘Õˆ|%Fì:á¤èShyKPƒÍIƒ¡Xgº¿' J‘6aGb_K¤¿¶»RT–5KÆÐ ™â8²Qž³ðòl¾Âw‚µ´î³ðÎÜ”A×ÎøìÒzªÄÔ·¨dªWG-¾óúždYSe\&ãVNV˜;Tö™&YrÊrÌ/z‹Z؃¾ó‹Ó¸»u…h;SùàÍÌÔ7ŽÝ¨óò­tS^nݺÁK½ß氀ϊEGž¸*…@tN¢Ñ$%¿S%m÷¢8#¾ßp"§YŠ[ꟛ8Ú7˜¨H¡û²UX?ŸæEº@'Þóñv(L„PÂÀËâÅô`B_i‹'èÖÜ>BŽ;ë|4 ýÊ÷n||zã.p<­qÃñ5G×’èG¼nÿ(Ù¯ÐBíkTñ/P°à ¿:ŽZJÞ|ÕyÄÇ€k¿Þã]vL iu-.;çà\ø -OÙc {ç¯ëÀ…{ó¦é|¬t—.B(F0mÒH‡{Yéá"^8%òG™Ög×s GJ-ç,»&Lç°œ¹× ƒP`½*²ôX… Í!%®‚Ÿ-À–; ÷eù=ÐÙ¡ðS«–é ù9>!aÜÆa@ÔüÔ9Äb¼Ù‚eIÇgêÀì¾â€Çú¹´Ÿ3·Ì_4¹Ä-Ë÷uGç|°ãK -šW1ÞšAÐÕÚdo²SmàX•ÎO¿LÈ4#þ&OHKã‹Èt»Š‹º -øPÍ5‹›Ÿruž´û²^ýb²ü’ØË!Ý‚¨8/æ’ÚXxUØïÛi!‚1Ú©ÕáÛ“þbY›"È*Ç6£-”LUùòÁõ‡ÏÀ5™>Æ¿ŸŠw^§—K£G G„{È•ìÏú6Hë9•­”–ÒzÂ2Ì–u¸"èÒëE«E¾ê+êÒØw ÅbUÜgC×ÖIÉc¨tPù÷¥†~ÔeJ^ Ðz -oæ%n~Q} åM;óÃ:é™yYÚÊ7zÃVÎ]ÇÖ³‚„©„¢Ó¬;UF)iëÕ <#BÐ`-âzµ_€k_|¸0Ô•ŸÅ w*F|¤]&¤«ù§ë&åw•c´Ðâd‡ÏÓÓvy´‘Lï3¾[ÍBégúáÅsmÄS¨aFdw,Á¹–~hAbŠÎDš¤ö²ÜÛ;{Z/±Œê¼Ã=éK\ÓrIqª{€±º?´íÙ»ËüÈ;!z]0$yˆ²j}¤C²r…K|1S¶]À-ÿâ6ÿûQå]Rº­,yl¸ÊúW\&΃í-¾ádú;™¶ÍhG4c»çÖ~bÓÐ]»€üòO-’RsÚF(Ó÷%·XjÒÁªÕ˜G—³ùAAîÚåC­lùÇýì%p¡ÎĤ™Ó •ëñ&CŠŸq#а¾– àüN®ž—cjŽ‘®c¸ŒôÕÕsó-]1ñ…ó£ aþ^éS‹&ÝÒTœa¿ä7eªÒƒBp¼Ÿ–²yZʔڹ&O?؉5>0ÿÖüšúrd³²UÌÆ£e±Rá9½!ö”b½û·œ:Ìùµ†Y+âJ¢¨2 ùñãÌÓŸaŸd)¿9 u f&àD¤(<|O²Ö˨eTÔþ 5owsç† 9½9ôŽAŽ”ÛG¾‘0¡G¨é›&öƒ‰#[ýkd{ê§3˜Kî•Èt ¡JÆL GXpåÍ× Nèk–:½Œ©°—ÉË݇|(O(ÄV-c,WÛI~O\ûñË’ jü~Ñc!â `õÊÚêÚ¿«Ô½ÀÿjT*ÕŸÍ€¦o~¡zcºÑ,87è)Ä*£Ø$XWÇÐ|ËëŽÅ3ŠC}t‚6ppÂa0âݸÍ`¬Ñçäí+³AljgIë'õz†º m0¿nvx®kÉ)î]C²ü°XƒGcµ'‹<'hÐÐ?'¹&#§¨×îÝâ%¼ùy@YUd/Ü%MŸPûdõ5¹Ø4‚Öi²9{Þw{vnˆÚ¥`Ç“&wtT:mö} I´Žñœ©zíR7{{–‡rk£#CßÖà]¸‚“H'糧cWäè… ½³[^Ä„’Á+Ñ!ÃHÐEu9žq†µ¬¯UÕªŠêÚ‰uSu¦‹6Q8¹)n$.7Åâ¿cD_‡1a¯*¿‘¹Ý|€?NúŽÔW)Öç§å4C­ûJáNWú‘ôG–órªÇ*B¦Où¤H̤Q/§ýçUê{·`OtdFpsa†Èº¹¨tª³bÔn;˜fJçé*DÎ(±g»Ÿ¬à!ú,ó=^V,'t¶É0é |vÕdAÛ'ÝÁŒõi|£øiQ„717+ë÷Òšû™$c­VJjÕ =æÙ®ÕÆûÐ&£øé›ª.6‚4÷ç¯[îcǘ·}þ'ƒ÷‹av¶<Ô­t‹põ’Â"òî)è‰i'Árï ¨8‡Ö…Û¥X;+Ç™W)ÜôdÐbÎù˜IÕÊ^nZ¸ëÇ: -/»½F¯ë_Sckᦹ6Ñý$ø`ªŸ¢2#ÜÕæÏÔIóßûËa ( ëï%IÑÊ6:]áêbÓt:S›‹.Ç$à8ƒ;µ£De^Äaߟï ]Ö1GÜW7^ð„ÆT3ôŒ¶ïÃÛ:îôï_IvKæWun˜{(o×¼è't•4‹ U[ï·;ZTÈ);…αØÊxpgJ1ŒÌ8ƒupÌotm;°Xã+#3oScÉZ+Ü$–:ùiwb¶mßUàÎç1Q2Ê%¾Ô{'ËwPçÇ} Ï˳xv­é¹T¶ã‹"/ï€Ò¨Á87ÁÅ›µŒtõ@Ÿ¨ÂíVÅ3o5*«¼ r™Ç)ÒA[¬°±Oê2nX§ec¢-¬A–i)¶¦ˆk]ð’<ºUá¡Ñï¹^ôhD<\ãRe¶)¾W¦œò*#ðSÌ1ºq…\öýÄ)vW›`½ãÆn LqzÚŒ_€ìÔžQŸ¸2Iž~Bm\ðác'̯£Ä1LåµHvc_¤`鯛F. .™qµgõ×óËÏ")˜Ú¿éfÎòë}³áÜfìûœšRpëôaç€4p£c1ò"tn¯?FT+£ài›u]rd#qò)®$ÂÖbó›–£$S€ôZ‚ƒ¬B€>Uú-%>”¨ä|ˆxº’¼æt®u2†àd‡³§e-$‘¢§Ý”ÿAµôP8ˆsÄ&¦žòmik±§Ÿ¼Tƒí«0ýæØ *©wÍtÁÊqô¶C”ŽyÖ*mPV j¬;ͱäe%^¢µw³0ð‰E „WâÌ(“°ÍÙ–U3ÀZ Nj<¡á¨æ3qÒõWâÌMpÓŸ°K¼)Kô¤F“TÞÛ|’• #*ÁÍ?’C• ø[ÇH¾±â áKì‹ô;E>ßœV øfÓ1ö¿fZÁcs{2ý?|ÀÿÿübCK ¾½£•¾½üÿ»\ŒVendstream -endobj -46 0 obj -<< -/Type /Font -/Subtype /Type1 -/Encoding 34 0 R -/FirstChar 40 -/LastChar 121 -/Widths 47 0 R -/BaseFont /CHKRCT+CMBX12 -/FontDescriptor 48 0 R ->> -endobj -47 0 obj -[ 438 438 0 0 0 0 313 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 850 0 813 862 0 707 0 0 419 0 0 0 1067 0 0 769 0 0 625 782 0 0 1162 0 0 0 313 0 313 0 0 0 547 625 500 625 513 344 563 625 313 0 594 313 938 625 563 625 594 459 444 438 625 594 0 594 594 ] -endobj -48 0 obj -<< -/Ascent 694 -/CapHeight 686 -/Descent -194 -/FontName /CHKRCT+CMBX12 -/ItalicAngle 0 -/StemV 109 -/XHeight 444 -/FontBBox [ -53 -251 1139 750 ] -/Flags 4 -/CharSet (/parenleft/parenright/period/A/C/D/F/I/M/P/S/T/W/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/x/y) -/FontFile 49 0 R ->> -endobj -49 0 obj -<< -/Length1 1340 -/Length2 6345 -/Length3 532 -/Length 7162 -/Filter /FlateDecode ->> -stream -xÚí”e\ÔÛÚ° éN ¡¥A IA¤JA``˜!†f(éé.éFJ)¥»IégöÞçl=û||ßOÏï™ÿ—¹îu¯{]+Ù™µõøä-áæ`8 Á'Ä/$PÔP0zâÄggWtƒ8L „K„$%…ò.Ö€‚!1)a)Q|v€"ÜÁà bmƒÜWäú#I ov‚X€` Âlªa‚ôà0ƒ …tÿèá Ð;ƒ\Á–üøBBKˆ`¶†Àðþ0RƒYÁâ…-]þÝä -vrFIî£$¹(EK8 ê°[á hÂQcQ&ÿ?¤þY\Å -ÕÙÿQþÏUú¯v=êñ¯ ¸½ƒ ìЀ[‚`ÿL5ÿ%§‡þ×0jb!³†‚‚… Î*w°¥6aa°AÁÆÁ0Ë* –íOEUu]E}žíçŸÚ  ¡ïáðwÙ?²ÿd¡_ŒZ'ˆ;à™ ¿  *õýûŸé?S†YÀ-!0Ô€œœ@ø¨“"Q€—³»Àî(c~ê@- `wÂÿc;E '0 -¶BüÑôWTè_Ñ¿¶ïï°*ŒÚ@¸åß!1Q€€ü/GÍùI”þ&qÔH*¿H  ö‹Pý4þ& T¦ö/Beêý"€€þ/Bõ3ü›P7CÀÜ daFüÇl$…ÿŽÿç|PRô‹Pºæ¿H `ñ7 ¢œ,CÔPàßð@Àê7D hý¢œm~CÔ’A~C”„Ýoˆ²€þ†( û_(„Ò€ý†( øoˆÒpø QŽ¿!JÃé7Di8ÿ†¨½Eü†(+—ßeåú Q€ûoˆÒðøÿû"((ÀݽøD…|D…þp’ˆ‹ -"ÿ3ƒ8º€Õ”¢‚‚‚âb’F-\œP'ñç˃ºdÿf+êJ‚Áî` üé ¸ÅÃ@Û·õÁï|”s‡Š±¸Ñ¬b5kÚF[ ^M½F‡ô©;r/T]”¤Po`m0¹]Ñ;‡·xë|QÙ÷wŒM¿Ùp}¹‘âÙHot˜¢á±îÀröj‡¤¹~ìxW]kd¡ÿ]‚q^WúA÷N¶ö}%ýMœ9f´ög®µí©bâF*)P`HP5‡0³.i’ã»P‘y7Ò„¸;óƒ¯|lCpßóÌþ€·¸_äâfÅß¼À´übðòL}/уhÕä"vàŒ¼ÊÏ´(|Õ%K#Ù8ºìÊüÙSšÐ3èadêç/âyrù‡™ò±Œ<“s-\Z‘âÇaOĉ áM­yÌ@´ªØ -ßÁ†ùœ›—&š§Œ¹÷lÔßÖ…z>ü¾T;JÝôDÈ*ÄA³C\q?•‹íö‰°zÐtÌDòuY­o2£slñ–­J~E¨U)‹6Ûøz0ŸÚBÝÔnÿ›i…W]øb26y±ŽJ¤Ò«/ñ”ÉÂíÚjŠ•ãI5QLwä“Ç?ñ&}žz‰ùŸÖ•ªE+‹ÑŸ/1U9OV<ˆ­Õe9¸à²˜èŸMÙŒ ÃÃ6ù„¬r»&Õ”Tq* -ÙŸ†Èd==˜e/Eä-ðkñ™jF(bëúŠÐÑÏÊr¸µ'¸j–ugüÀU¼Á É\œF‹²"Z'HÌ)rJnʰšô'¥o4XÅVÌNïMô¡[sÌ$¸1²:˜˜1ë2»KÇ6Ú€³ŸË>æûXÜr;µ·Š4ÊÿùaiÙTÅbK0ÈÔZz;¼!æE@¦oG‰á—,RÓ{•x´a‡HP´‹2ªhúBDU„òºhu.ú8Cv/…,Kß÷3î‹< ºá´m±%ãh¡·ßÂfpp|ß©¼/%Ñ…ížZ™ÑÅ©2ùÛdzStÆ–(LŠ+o«j‹ÒùóâÎpé -0 #Y¬d={ʨÞúϺ^Rˆ¯È}÷p2=&%r‚E€ì´æÎ—µÒ ‘…bEÊÆý¤µN³®;óø‘ßÒk?E2ñ±½¿Þ~%°m~È@¬\ßtðI0D¡œ‹2ÎwŸÚO®u%a@ƒ¦¾óq—¸DJÿˆ5¥½™4ßùÁ}a¸‹þ¡p{‘ê\ºþ>‹A#p8ÿ"hÒì}âÑ›>…¨ ¯^š :ÒÇ´§Û?»zsS0ogù} .L&A*MZÖÐNM…l;.ž/'“àGC} :£¨+X4–ÌA[h¡h(›Ê`ˆ¿3E†´ ‰Š^h’'Ÿ~í6e¡JÂròÉ6;%3ãlnêyüë(ÍÌxº@ŸÑ @EízI˜áëørŸ†Óå˜=, Ÿ—Ý5¢-¢*OcYùÀOKJ)9‰Ú[œjë^WÐÌFAÄB'ΖžM›4³çn>˜ô¤RjŠ d~›õ™Vëe ,l:'® ž÷ž äð§ä.ª¹f1ÇB„P5T_Nã²é¦Ê.«1QØ™½ËÆQÛôiÆÛ§îòän>Hæõéõ-.£áZ]•”v' ýM{„ºd,ã÷=DòÐ#Z¾¡i~Þ”åÄ©ÓtbŸ>± -/Ì”ØÃËÊq™‹Z23¿jö¿ê±vëêuQ²ã%Üѽ’垥+VÏ«–Ì]š¿RÃ1ÚÂPN°{ë|#LÇîæ<1yu'¤ó4ŽÅÁº: ÓŽ‘å¾AWötÀµÂåxQKС•l]ÉÄï)tï,f 5"s½ù:7Û€Ì÷“Á]y¦7Û„O´ûÒùI8UåÅLíˆd,Oï)’97‚Tç4q¯ß\f¤=>ìž68𚉲"+–þØ×² ñàM-#¶¥zžaì sò¶¢jLºSnß!“B‰!jrN3¸æz« p×ôä~WrÑ>éÅNí>Í'¡7ÞSÅû˜óvëaË©¥×†X±@>Œ5Q˜´¼Œx©rr<˜Ù8ybù ÐT½ñžm,ãüLïW*£#OA˜¸±ò!$üèɽ«#¤å€UÕD"Swá³>uó]sIÀðÙû´G©AÑ7¡\ å°I#¾>_ªTˆ»ÏdbºÉrYlÓ<ýê5-TIšQ*ïaÃÝ¢—uøà»çÝ­Gäù¤»›°úøè© îÒ™ -Þˆët)¹c4Ì`˜‰¤ÎoÚeØ )>Û«¨ð<*%L$aø¶Óù-ªs*ëûhç³·‚ -'~ŠVEØQÓ6m­ïÏ öZ·$Ön‚òhE¡óoføÑƒvì¤ܘj2{Ù¥-ÚÃI16X”°å€œD‘î>Çè+f,Œõ«SÅØ*a%Ø–ïsИ¶5îÇêL£2áGb ûp“(hÎfѧO*©ŒnvÇȪ„’UF*Úe±,8ì·_ùË!'‰Ë¿Äy‘}¾·.½¶µŽ(ÞÛÂDÌn²IJߥ˜&×˦¡~M°G¶ù«ÏžÙ¦õýk„¡éÂ_ÑíyqpÐÍn¨áÃÉî+Yg‘Ê+¦ýJé·†ðFá yË2‡ŸR Ë%Ô$+Ë>x«‰«?Íu>Ñb! êc”AO¢ÝÃËôŸœe[)Žã6†»*‚¿ì\-æ”®Çv`ŠÑ -¯¥tDGˆß¯%ìpNow÷m§"o&µ\ùZ0&u»{q]Ê8`à¯ö c9\K õ"~f²oÃÚ”ˆûÑ)‘T‘±qœ ‰+¯ÿ*UÌÏ“¥¤Ò%˲AcCMüÚ{SEB>å‡ß#Úõ]=]º¬«Óµñ’üm"­×ŸÌÜŸz;ežKv1Ÿ -R°XÑe<¹ßZΧDŸ³òâcø d“#W€îZ¯`û×Å~zqÑàA ä‘ÐL*ÌÝlM²Y»háËXŠuw×¢âh–½3šÄæÄå&ªUÓIöYI#êUˆgp¦L¹¡~Õ´kîAçžœ««È+93E…жê"ÊoÊÑbn,9<áYÃOt¦±Å—Ü—lêÆýƒRß“›àoÔ˜WÖ˜?£”¾×ó‚1.’KþÔ?\Ò([ÌM¤ûPLR•€îŠfâ¨vöpÂj÷ ú‹EXùÍ{2¤âøG¾›„~ŠÉÊ #»ñ½~XèÝœ³Ù[ÏÔøv¦ÁþG¸IK§Àíe;Õ|Ö#®…ÇÂh5­æ[nÙ¡ýŽèGƒ}FFKc%¢×&·Ì)ÕÉY ìdM[7Lôº|jy÷<×_¹fæ?\ºêÔåk®G´f#iéìå?hÔÊw×Ûæ%™Ê§Ë®HáQXŽ@ÎÞP«ëÓ†ˆ„Se¥”¿î/^ÙÏûK¿VÛQm~BYTc*¸Â^ÅLG˜ ‰äªÅÕË‚÷l€—×¼âeìj¾×üˆG(ˆ½‹5œkB÷ç`~¹ûEýæ>Þ±óß’7þÂ3…ø»Ñƒ €Êà-3¿7OŽÇ®/ÐI,p"”çSrUê†. Y]±xm\ -—¸Ä_.»M·Ž­Ž=eëÖ|Û¤¶÷ªWæ@Ió°™–׬âB‹±P‚¿µú„ëÓÓÓ›§ÔÀ´·þ…éóóœ—~.‘axŽ—+~XgîŽåVQdCÔP¼@¯A©s£‹Æ÷¾Ohú¼Ë9«-õÍ~yFbÉòqº/UØy}ša’ßRæ,2)°_¬-Z+Ü÷?zx˜ÉptŸ±X‚ø™Obùò•E‰‹Ÿ(†r˜ŸG=¶'Ûà£Ú©Ã&Sa£ž™fÝ^Á,§ÃöUÆÀÝOt ×7ªÉýÓg^ê’hš; -Ìx´¸JîÄm'ÇSÛÊTyJ•áEI?k/7wƒÑjJyÔCc^¼?+ï™`àu][Ç7WQá:¨&[|‹vr°?úØ»ržÐ”œC¨+QïqïgmO~=!޶áŠjH§²™ÑƵòF‚,þë d¼­máuRY.±IŽôG†kV¦'¶®Qp1­©mÕmo7FPKáË3éÜc02ÿ¶ScqžpJŽÎØ=ö®ûqbÀôî)êz7¦;Oµ®ÿtAƒkŽZæÈÏsóçÀŽëiÀw2áÙ;Ï’¥0TôúxÒÆ‡$ýM±»|¤§â3qK‰Û{mãpuíuÑõã˶¿Î!=Ù‹ý]”ی؟T1ìiç#ÓœÝ:`Âé·þžP–âMþhÏÊÍv.o$+\dÏ'Õà¹#-mðéË£}³zl?a\¯]δŠ\oLÿáØ,³#[cyÂËðÀ|1®ð‹YD3  ºÇýÕ1(ƒ˜Œww* nÞu\äðëôÐ¥€a¿ª{¿‘@S´7ý‡ÔËWë÷™^뎨¸è‰&³õ?Nlþü^ªß5÷8ÁÛp/ݸ0½ûƒ³4Ì0¦·Ît:’Ås¶ej4"G¸U’Y”\ZkÞ²sE¸#8àL»ñ¾²:³Si ˆïœA V¯mY‡®~ïWBk°zRkù½c„Ê ‡— 2U#Ž?[H„ì&Y` ‹ôÞ¸‚D´3¿-©n&ëSÞ}_aK*ŒéµšÒ*ÐѦN<}z„­4ïÇ5šÃšð¹MÉ@–Ãùõ³Ÿ+#ºä[Íݼ›½¥vjºÖ+å(G ÎJCq$ ߇¡¹;ƒ2˜aCHG)Ó º™„}#\Õ|’Ƙ*‰<7tì á@øG0Ö"©‰4½´Hu7µ[â,¾û UÌÉ—Ó@Nr—zžâ°D'2(ö´-IÎÕBôF¦ÕL{Tcöò¸Ý.•tžÐ/±òÎÅÌlcÐ-ïH¬ßëeAlÒÍ ÒúÁ6cšî¶+Ýêâ^É #Ö#ú%à¤.ýÝsUÝìüêý„@Y"N'!Ž}ß±²Dcò4–ãNÆã±œ;^Høì¦áLI€¦qñHCŸ·ŒoöøÃSVôKÆh’“0¶ÐX:óíäð¬åÓ×÷âQÓ‡sJC -Ò–aT·{^tpÓ8h'÷˜wá6­¤Â÷ ˆ -Ôõ¿!žèG'ÐM¼5‹4 -., ð¹¤dÌ™‘ÊìõŽ.­¯TöÜ _|Ù -cs5jÎZSdBú!$²ñXu'ç”u¡ŽÃZin•ˆˆØ”ÒŽãÒ,q¾(­ì!—ßϘôÜl+KWßÖoÄÀÜ7ÒÔi -)µË…ð‹/ÀØVkÙñ¼‡÷—…´:÷]Õ*eö¶LÓê”$¢ Öõfï>Ré¥=ÑË¿7ñF4"÷†tJ>Hö+A9ÖÇK—…{5¥Ðí -Í'e9ª|—@M¾5_¾&Dûâ»Lʳ9ýè±»©Œ×Šû ³¯wõ¾—amTXŸ’„™õ ©ð¨µ©_ž•Oe¹ÎèA"@öºàsšc<ѱÈSlÓSÌ%ƒž÷ðV…T?Îò4­[d\±YÏÍòuq'M˜æpåÂz-ê­÷—¿cs˜0zÒ_|×Ê™ìk4-”ú¶y•òÆ=p¶Å“ß[‘È;}k‰ } y¢³Uµ­ NÒF°]†³^1 ­xôšy'è¹ìSª4 §ÈÚð6f›ÿA¢ÛŸ‘¬©x™¢*ÿÐ(Ñâ¤Ha%LW—h`Š8ü‘Ÿª'Ÿ*:l=G°vÊ¥Âþʘ -6=ÚjþØ×>kþ(á8ו¥ ûdr(Jm€1AFâœ> -Èmçˆ78ÆüæûHŒ6Dþe¬Üø*!ÒïÓȃ:JÅ8UןVÔ¼fK•4@ Óa‘¹s<¯æõÜy^ßùy³#ñNAøœâ±«µ‰ó¸ø+ŸWÌ_¤—˜üxxwä,‚ñZp@ã%Z ýR"ƒÉ1êEt­8wY>§2õ”‡2ǦÎçP}qË1?,¬9òIø¯xK  Šÿ”j®\¸ È.©yñâlãLH ÃŒ‹›fyÛŽrù]pÐð*»ƒ}o³»sƒ^æôÈV…,im¹r¶¦Œc£ÔÆxapøìZj]†#©„P¹µÓ«ôZíÝ2É|¹íâTNF´ÓíŒlŒj¦Nö\PO«‘˜~=F"¥®—">ý â§mÐŒ{ÉÛíaÓF›·áá#9C}ò¹Ë¤Ùª•¯;ºÕÐÎ,(J T¸Ë“jCÑ„ê¸{T¯ÖólÝ/К*yiêã‚]dK„B Í–äºJšh'ÓÎZØó»3àÞy -JÕÑÈ•=5ž«L0nÉËNK4J¸JïmÿÖK¼.»t8nFbk“žœ²·iw½ãÌù®MEž/KW3OBú&àðpU üÙ(mÔîG&³5¥ÆÚ2Þ7®ß,ûå] Ê¥¢¹Keõ-,¥§´‹çÊ”Ò&:Âóóçmsí7ƒqÛ'©ž !#‰}mNSrWeÉâ},ra¡Ð"^ÇŠÉì²ÙÃÜšÍZî›oæ6é”ó–Qr«éÛ×·˜…¤[áÄѦÌè2å ×fY.,Å[.oB®ïË Ó¸…Ék˜³½Å‡Hî0•´¢ËÆõ‹ËÎT×Ûbä³Îœoóæ;ûÜ»ÚÕ—î2­ƒvÊwèH™­J -`§#‰ AEšÛ4XÀabµ„“\—­Rì·Ä`µÖïŽÏž Àßçz“-B¤he|ÑM*šE,ªæb¡Ê/¥ù©Ôì‰'8G}tYÓq$¬–ÏâB ² =_ÙÔ_Ú¸AoéïñϳóåðòÞg-T¤èóçLž’Ø@[–¾ÅŸnKaÌU¬ç¶ %Sô;ræÚ©6Tâád`žâÜ®Ð=KÁœ®ÎÍ“¶7½2V»-:ovO¯E¯+;ôÍ‚*+•rN—MºJ|É«¸Â3&´bùÞ3-?‘óW_G¢·ïsMŠ~l÷ð!rÃŒÚILsc¹^j¶Æq(!Íë]ªÅ5–`þŽÃà[NGÎ(4Öý Ù8-(õZJÄÉ óÇš‡TÙópŽZ«Üº'yýÉõiŸf‚7GÝ‘ï?„jd³aô?…§-w)´[zI‰v‰ÑÐÉ< &èÜ|ÎË©œ-e[Äß/Í|fà;ؼÉäj‚‹}?\·•×ÉE@[X’ÄÂ6uež24}oÓWüö³út¼úà~è¿w½JâJ«aKcÅw; 8"dž…Og~yšaÞp;ð°ãF4Ú=‹k%ÍzYÄ»ÞSk*Ë\—~ª>š@ê#GÒÝÕÉN®/ rmÆÂ,¼ó56"¼#ST94yŠç Ç/…ÊÜZ ”Í‹!.ͺ.±cî¼üÞûÛ’ÂÃh4¥n `ý6NT§õ$Êž@/Lºñnvh™«äT­7qŠ0“5ÍÙ!Ñ$·Üý¯O¸½Mˆ_é¶ -Yû/f_ô-J¶0õ1ê)®†!=´ú•Ý–T•T…Ñiœâ­ceøšòm`ðR[}ò2§BdH›Î³Û}žÙ08ÁýX»°½ò`/@ëø9žâQ Û‹q÷ÈoÅò…z£ß·Bb7ÁäBußSðÓ7ðªË•Õ-æL“…;, `•ÁÿÇþÿø_Qu@N¸=ÈÉÿ@Ë[Ðendstream -endobj -50 0 obj -<< -/Type /Font -/Subtype /Type1 -/Encoding 51 0 R -/FirstChar 33 -/LastChar 122 -/Widths 52 0 R -/BaseFont /QXHNZH+CMTT10 -/FontDescriptor 53 0 R ->> -endobj -51 0 obj -<< -/Type /Encoding -/Differences [ 0 /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega /arrowup /arrowdown /quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /visiblespace /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /dieresis /visiblespace 129 /.notdef 160 /space /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi 171 /.notdef 173 /Omega /arrowup /arrowdown /quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /visiblespace /dieresis 197 /.notdef ] ->> -endobj -52 0 obj -[ 525 0 0 0 0 525 0 525 525 525 525 525 525 525 525 525 0 0 0 0 0 0 0 0 0 525 525 525 525 525 525 0 0 0 525 525 0 0 0 0 525 0 0 0 0 0 0 0 0 525 0 525 525 0 0 525 525 0 525 0 525 0 0 0 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] -endobj -53 0 obj -<< -/Ascent 611 -/CapHeight 611 -/Descent -222 -/FontName /QXHNZH+CMTT10 -/ItalicAngle 0 -/StemV 69 -/XHeight 431 -/FontBBox [ -4 -235 731 800 ] -/Flags 4 -/CharSet (/exclam/ampersand/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/colon/semicolon/less/equal/greater/question/C/D/I/R/T/U/X/Y/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z) -/FontFile 54 0 R ->> -endobj -54 0 obj -<< -/Length1 1627 -/Length2 8924 -/Length3 532 -/Length 9888 -/Filter /FlateDecode ->> -stream -xÚí–UXÊÖ¦ƒ»;hÜ¡qw—à NÓHp‚{€ Á5¸—à\,¸»3½÷ùÏNΙ˙«y¦é Þ¯ªV}k­ªzšŽJ]‹MÒÒÉ$çäèÆÆÉÎ)~¥­Í p²R¨ttÒ™ØÉQÆÌ $àäH:C\|N ô‹Jvrö‚€­mÜŒÒLMâH:€ ` 3GÀ+374†…™=@ËÉ róbHÚÛ4ÿZá -й‚  KvTNN€%ØÂ `²;¢rüåIÑÑÊ Àÿ/ÙÒÝùßC ˆ+Ô€ño›L¨IK'G{/€%È -•CÕ ºêåÿ†­ÿ.çno¯jæðWø¿+õ¿›9€í½þg†“ƒ³»xåd ‚8þ÷T]п̽Y‚Ýþ{TÑÍÌl!éhmÿ%]åÀž Ku°›… À âú[9Zþ·håþvÀ¡¡§ j Àò?Mý{PÝ ìè¦íåüOÔ¿fÿÍœ¿ZØ`„Ö—:ú÷ïÿŒþk3YG 'K°£5€‹—`˜y¡B”x>œ°£%Èò„æ`wtrƒ.@kâ°r‚ þÕQnntØÞÌá/ý_’€ÃÌÁÚc3hjÿVy€g3ÈÑdåö[åüõ_þG悆p…–ìj÷[„nålïîú[àpX898˜ýVx6^Î6 Çßt4ÓVø®öf®6¿¨eoÄéWà¯ÐöN¿ãð -BÀÿ©òA³²¹þöÄMäâ=•ÿ(Ð\¬ÿº†ÐƒôMÅÅäú×Õü-BmIÿ&¨™ˆº@ñ€†ÔüMÐ2hÿ&h t~4ŠÞo‚æ ÿ B­šCÌ,ì@nÿÑAîôÿì -ôrü®µ 4´ùo‚†¶ø‡8кXþUå„ú·ú¡ZÿÐ|lþ@hBà?ÚOÛ?êÉ²ÿ¡®~LNèâpü¡®œþ@¨+ç?ð¯ýPW?êÊõ„ºrû¡®Üÿ@¨+?êêío䂺òü¡®¼þ@¨+ï¿ñ$¤¤œ<}Øxl\ܼÐ# ýþsšŽ#zÐe¼@ P€›ëoÕ½rn?ËÐççßl†¾U 'ÈuaÖÉB8Ä6µ1¬Ô_¶`¢ Fʺ)^µ¾ó{Zð|Œý§!eæuzwåéx˜[[”oÈ\£Z}5FåŽ]âÓfž¶À¯ŒûÛ†#aY:ujuǽ+@ÎM|2yqkÄ%•=ß4n+žÎF"°òFÆúv%ƈð¢þSyFU×ǪèéÇ…¯×‹kZ-µ]^/¦ÖQÌ™GI¶ûU‘&]u‘Êå04á÷…d›*^aÛ¹ÂU+„¹Še/ˆ’Ä3ÔA,Á…© %Ÿq¼ŸÉ•Ç‚)°C‰R&ÚÁAMV€a‘ÕnÖŠÙÄ3™.ÕL_¥^š7/aZ¥tŸp«¹/:öŸqÆSñ_Í8ç÷vmž3æíÓmòÒÝSvú3Žðf]QJÙùIîÙ¢‡¬X0h%Á•í"¯ ° äL2Sí€?zeЖ&ɳçaV½E±FiÇÀ)›R.8‘CPï…±§V+b»òÊ;ãs¥N=[IøyD‘Ñ¥~yõ¨Ý>Ðx ãäP¶—’®cñˆXÚ)X&,ìàFÐŽ0ºg¬Nêhd©‡÷NÄv÷Jã;˜š=»<–8”üf«Ãœ÷ùÔ`~Ä ÝWƒülzr9qtùÆÊË¢‹:+èƒÁFŠm‘”åÇ;àtÔÃÐÏQÃÔÔÙæÜE·x]•½ñÍ»p¦•fÄ - uM4< )6¹¨—Þ?Ì|Ç$¸mª•x ²¯¶v®}¢p«Ï{%‚%ž£•}×_†ñ͈IJèÉ)¦Ã”u„AV¹9uH9>3¸È -’®y¨lìµfê¡F`v’}—ãzv ë?`ðV3¼þ¡úJw{‚[T+ß™¥X›Õ‘Ê.8Î8ßüMX'¥ô3 ÷öu’’€ wðwË(¥SÓ‚šsþŒB~–õí=Ų÷ª£¾•µùQ*ÜwåÍäÚ#)ï¸ØË!kt¨hËÏ^q̽çZ‰ÒÞ¨ÔÓÖ¼€0é9PÀQéäXwê>zÁ’ÈÄvq/zawÐ䉰šôÕo±Xò6†@ƒX—‰ä•'¢…Q÷¡fì./ÂéȤ¾ 1y‹Ö,âEyP—r.2 £»¡„Wìž•°5Ç…zŠÀ˜‹7cõW -¹sfïŠ_ÄòuPñoe¸¸ß+¦}ÏûN©$Ô³‚?þÓ:²éæO -ôJñÙú}. ·¹HìÓ¢ÍbºfyD’0^ߥ—!ú“ÈÍ–˜€ -Ac+i¶Ebšfó/+'¥<\Ô;7Ž F8ù=vôtô±á -ÈK"ôžš¹­3ê‚rB8gâAâëd§@HàÉ9u…±ŒJÍŠŸ¤B×­}ª rŸþ<7>w—A·1ýÚ½þœü“Œ=Fا“ -,×W$¡™yë`ž.ÞÛÌ z)‘þ½ôÉ|œ—.Žuc?û÷|©TIIPï&$0OÅ™Ò10ùäŽê–¡‘œ»ŠGËä>Ùýµ¡$fh3kW¦Ûd#eÆô´%™mµ¿ÁO_ð:e$ _öâæøWyöl¼Wû$$Ñ>Ív좺þîn2 ¥ð3º:IÙS1’åi2íÓÁø"b#•‡úçGV®ôÕ©aå6ÌèÎw!á“^¨ˆ™=xÀ²í‹ÖÀ÷B€é[0û¾’}›×7™LÄ´WŸ¢Žj®VÃû^ô|/wòüa@¦f€ýм>ŽôÒ•ùMý\² +db´ó#»_">FJ®ÜÚgK½¯ -Ïâ§T×ÍÞDv½ ºGŒ/ü9Ì -‡Jå"3 -Ÿµ-*5a¹Pß™ü‹$–R‘êIâ<ÆŒÙÒF=²Suã (/IÀŒÂèy—œ`ÒŽDð™C]R™FÈq2­x!Ê!¯-mÏåî‹cMè5ã2Ï2¾i ­&»j‘[ô`¢ìÞÀ[y•%šO¿%^³ŸÑ9Åï)ž“¶ÄÔ‡Ã×®¡}êq/÷8­Â -ˆšX¬S¤Óxfê‘bGÛ˜¥3H¾¹ÅD˜Xd…ÈN[çsÇ­Á™<äÙ?® 0ǪÕùaXKæ™òÆÐ%90ð2Tœ ò|VÛ'D´’“LÔ*jq£Ë2&z‹;¢÷š¤'–åZÕÉâ÷¦$ý‹V$£†ÞšÑàfÑ01PãK6—uÿÏaÇ3ï(ÄòaÛ77î„HÏÓa™Àðønó¢†gfŠb †zÊxµ”ó8[±¬ÎZ¯o¦ºG‹ñÐç« TD`àð‚š‘ yIÙT6üæWh§4gq9äS#‚9óÊ7—ŠvâíÆ5_à ~­®õºÐó{W>fäÞ¨`þÆ9‚Zà~nB1·'p}¯Ãxµ{>HF² -Bµ82¤aûºÝ4(I$!d¯Ñš0ñ3¬±¡ÿvUüpܧâE“ }Õ\ׄÁ°¹/ºÁJ4:L]–´ÉõMýN7q‚Ÿí‚ƒcô‹I—´\·ÙÈ%EY×öÜ|þÎ`J;ò®U]xAË©Žõ ï ɶ–Ã(Å4 ×u¢/p\(ƽåˆ}p¿¬Qœ¸DŒ÷´MÒ$Φ™~þ¨lhD©ódˆ!nb+ê>ùy‹ú¾&;ZÃZ9"ñûÎÌH%B°Ãóû³‘Öy •ŒÚ“˜¦ynÈûQ}*ÍN©aRµ¹™Húµ^ŠíÚíJ‘$›Ž#4‡J <ÌñT!Y»b°Ø'"ò(Bøè?™3™’ÉêºüM[}çZ¶ e½+V|ö{0qËf77b‘ù›ôëvWúÙôBKÇþ§õ¡æï3Nk Ô˜*t‘†ƒ=éN“€æBø>«¡HÚãç¤ñ Rv 9–#9áŒXó–ígžÕ[óÇ»AvëÄÚõF0Ìpô$M†èB¡ÂéDz+‰Á<*W‡˜¢Œ(O8¸˜÷Yå3yfû/ñî­ ¾‰ wß&læ!ÝŸ%¢ M%^n÷7FÀæýXjµ Þq2#é¼$Lr©„gÕ:ðÆW7¤º¯5z÷ŠGªZ¦8͉€È¦U+jk†k7SªŒ¸O)±šÏt< ¤Jg$iûSŸõ&éèSº¦ä{Ò¹h;7ƒéêM™Ýe*ÜòI¾¼ë¤¹ÜŽ™Eã­ï4µF6ŒŒŸÆ1(™§I‡xÆ´™ÒÂLQ¿_½^¯ã/Ugt²Ë«æ$°ÿ„¹pni%ä•{põl)ë€|æŽ)‰ß·O>~ñÞã«TÉìûàøí¡™’ç¸âþ"M‚ {?»b¿€ÂuÛUÔ2¥Â - !·žàj±ô¨Ъµš—»2ÔA¢,êÚ æ Ø6ñ߀‹¨{óLèΑ#1üÞx‹m1‡ôš*'þ€ÑpI 'çá ’î¾bõCtá˜$x ³lÆ1œdÚ£•>X|0ó—#é‚9´ b˜SA`§nÚeW†ÀSXµ ®ö3§ÛŠÒ,ú—¾ûͶ’ØÎíéø¾^ñCÒÕ¢Zæx^xÏ N–·Å#]@Áb´Í•˜9‹0à~ª!S²v­;ºy/ÛZõÕ†=’Ðh’h"÷\&sé³j73ö˜fÌI}œQÊ"oƒIçÞâ/æ·Ï„Ã}˜•SiÕóóí3äã²,á·™†”Þh’ùL™! ¿ÏÓœKc“pœ§M/Ëî¡?f}IšÁgÌ~šœ¹À›öKŠèX=¬€[Kã«34FÛï÷aÏ(öåÇ” W¶[« -ìÖn ƒ!o6üàÝQ³AÆ~ÍYS´ÉZfi]cû›k¯ß¶D¿é÷|üPøZMðò nwï<:BAÒ)lƒ¹æzúåh&sOm‚s3Z ¦h¼ISÃ3¥yclúÛskJ“0úGç -!Dë©;UU,g¯©”ù•RŽé¶4\‡…AEHÈç»N’Øòîô_iÜ1ÓvD‹ý"-Þô~‚ ¾êš²ÆúJÓ)%ù)ó/»›*Þ¥$cžø¡ -¶Úï—ú°)rƒ±Èb_ß\}÷ÕýÆëþ‰:%ûÚºa*HÆÎ¾¸Í -vaf U'^–¾“‘½¢uƒÑ.¦ÖÒž‚ ¹ýXr=HJ€¶( =;Ü`‡Ò¾ÃxšEšÓK·&p¢ŒFÆ Êמ“!›{m^8ëäðLð*ýÛ£•AgÎ0[ýñü: HÂBQR‚åX/†ƒ£½Ø˜ÏˆÜÍS^ƒ¬R#ðq+ùÒ%Í f7ÌýõÇÔt_ø"NB/-³a¦¬¡Õ×ëÜh©î<·2ÆÚïŠèvô˸odM/nÊhSØû—/­eë¬+‡ÅKœOݱÕÐ…,—,ï²O5±œyÝL(3‘·¾¨“D …zóÆG„µ5<¨rÞD*ÇöðO7ÈÞÞh꼆 M$h­ºâ'mÒ‚ßõ^s_öu#'VsT>÷ªögç•“«^ù$ÎÎó­]×t\ÛNÅ:Dø;- ÔÇ龡¸mد6j¶ç?¤‚Û£Én»ˆTÔ°Œ1POz=ø“tþv‡ØýÆÈ?—úÌ [Ñ»3$Þq»D˜ð¤uX’±—c5,û®‘TC§,Ú^«qÌÜÀï\¨*èqÄÅè?õðµ­sMæ|6Yl?HZžÿ¢I8c?Ì[åß._ö¼Í - -×ÊóßUöw÷ðÇ>«6Ÿý¶d—wÄ~ºGñõg³¾ƒ{žŽCÛÛ|½V¿Õi1¾Þ sÚj%£ÝááÀnd êvbù%5 ‡0#à¶“ Í;­žÅ¹²àvµh¦,N„pÖÌ˨`Ö½ÝÅ\•†}íûc‘âì÷™,gáÞ¼Íb±?ft‰€uœ}#œètMž´|Oê„I5¬ô#ŽãÅG¸…_~ž5[ˆïõ\¶Ù‹äjÄO­,“‡?^ø$몰c`ò)D°ø7t¢X%åÙ]auÌç–ãÑL Á-ÍzìËí¡•ÿòØó†×õQ()C§-Ìg¸)Üú\â 5S"aÑ~Œé×g_ç 6ñ´d IÕ)²¹ªz㥣ПXÇãO”õ©p˜^7ýêJ%±_ÒȈ>[±l¬¹¸ÒÌQP^þe&Àýƒ„ù‹Â.iÿ/¶‹fåBÿ]³Ï¸"„UKͲ²<\µNi4°¾„î20¤|ŸÃdÜü>cçÂ&+co½Å)î P.FrjüAÀ4!É!)&‚ŸýÉ;ÿKÔ#Ê…C{Ñ~snÃpeoŒ³Ï -<'ìUh ÷î¥wZyÅçrÏJÀb¯²+üîèç:*ý)ï’…‡‰œ¾ÚG”•v³ -÷brRšO~o ßG’\¤¥ Æè îÙõ˜Šáä̸)½=‚¬{!RûxþP,‚g'#Dxñž±5š˜1§q'·ËsØeËýú þ$P»ÆìîI†GÊ—Éðk'NÝépšd±ß - -«Ùî§ û¸tVÚG ¸¬Ë5€àìÒdé>ð©~Mû62+7ä)Í·g­Á,Ö|¦7×d_1æ0ùWidÞz±þDªaé럀B–OÚ¥#Ý4ÊAãÙüÞž](i¥ïCóZ5- t^FWÐm2á*¢nØÖ’WQ¨ ™|WbüáüJ$…äéâU†$­Ö„³9‚¼>ØÕ`ó~ æ=KX˜mÏ +bê§AÊDU¤Žfœ¦ŸèʃƒîhÆšF®oâònƒ¶D~V…zè`ÝKÂæ… ¶ˆºÒ_ÂE'9É’¤’%yÂÍEfÒi`íˆ*Õ¸Ðd°%î!Jù怄W7ã5ÖxæÚâ2mÆß纣?….Ûma›µ¡³ÒºªB¦š³û«#®órÚ—ïðWvîcj_NxS§$M|˜% -[‰oÔ+ù›è;€ôw¾43µÃN"=“;H>*I‘ªfƒ1ït[×}_;¹õ<ÔÕïíinw «lwßì{C8¸NëÞKF?G•«O_‚j*ñä -C²â×.PV4ÒçŸõ]9ÝÏ]"=³KÄ+¯#{Ë3D´OÎIÈRd) ®e¿ü\"ÊGƒ« -ÕÏ‘>-AYúª§6QðÁÍ{Û÷4QÅxÇMG5ƒáaožl¼Ig×…ÑÎ,Þ²²ÍÓÅE@žöe–ñÕö÷®¥ñöÓ_ðr>5©Ày‡õ~“íK®™Mn”Èòz1xÝÓe CìWpPWþ^ø =uû޾—tñ8É1‹5:ûU^†£3UN‚+²:b“Õ…“¾ú*¢Æ}„MB÷u(ö¼òå~_«"5|T–œÛÇ£ú#®ŸcÄÃOé¦3à“&˜ÂFÈŒýaÑ}Žüé²õžüO=xHºÅhD7Õe š×Yš£’ˆÍX”™ºÇ‹Stâ0¡Sÿó«Ã~ÕÔ@¹oN†ƒ»ç -<2l)òj[¯è!…TwYjÙ—¤ÖäµlZG@òò ’—âݦ~ÍDã,üt:<~ -7†j´Cç#†`1TÌJi§Jwýæ Ngiö .[)w^ë!vS :veò‘uY½³¡hû+i¼D­íÆxÇ)À‡mú¥R–‹ÉʸXímMq¦RX ®ð ù¢ÕÇ®oëÑ‚#2l7‡Ò³r’§F’?†£ïbÊdç™Ð¢&;_\ôåÄ…H¨¤4¢=X6ñ†ÕdÞ4ŠÍeë -8Æ×A^žo¿á‹(œ-·_~IɈMÖzÃU«3„¦+Éy -+/ðý³Ü;ÚÒ‚#NfÄII*n‰x‡|Ìg›¬ÖBØÎíü=–õ/ÍQ³È§£‹¿æ ™7†»¤&%òßä$—0X(¾Ÿî[Àôºy ”Þa}aDbš?\TѾ‹ø•º^[ÃFizÂ&[iåäáEN¿¾··!2Õ…¸½œýi®¾º¶«êP¶8Þ!ÐÝLJO‘Õb¬ÎóÄßT_hŦâlÚfl#æÛI(%<;e÷(´RR¾ØDµõÈU•= ñÕË!ÂË‚®:âB…÷>¦9"ÈWj+átÕxd -ˆ³ÝC\ßgäÇ!×.½Øœ -þÉæƒÒä4/FEÍLO_)e¦Úq{¤"k§eès7Î/WÌ ÚsRßAR±Ã5Î’]@ -<.å:Ûó-ó†qMÝ?ãµ^ÏÜh“ÔhšÑ lœ-š~Û¥@Hu–ó`{é¨;¯ŒuáÚUññ‚sÉ.KÍíØèC&;ÓxùR[«òdkï&…ï»_p”ì KÍ3®·»ô²Ï{V -Ëêp„=9üR{¤Â¡È2MccW-]¶#gÊ›_êåDËR‰ Ý]|DRÃÍfGªþK>E“Ný"ß}„ž¨ŒOMÂC“cè^v½5ñ‡y"¾_«q¾òÜ/}0DÂñz~ôH°ÚYæf²¤Baºú<Ÿw ¦l­j@­Uнe9î¢ÒüjŠÆÇõ†ºËz‰%wzaFEØçVWYm×Í‘cï»lNÂØ'R>yïÀÄ–VÝZërˆ¢å©6ðv×ÓP~·ëZîv@ -hô#<ý©9xŠéž¾ñ⢠ïü6ñ¥†a7ü$¸G`½¿()IL½ *Ûè½&=“½~bYí6IàVyQbòâ8åC´Ø/Qßã{|äEÌ”^å A T2eå\Ä_Fç0gDÛq<¹P†£Í±«tWη`Že>áœ!’dæ{¸.iMó`Uc×™n7~ g™~™çû©„¶ht`#µá*“hÚcè"|âÌÏOôùØ3ÁZÊ-Z¶0dÉóeúò˜B{pµDªJ/¥¼¾×@âl -ìEÎ "èÑ‹ã5sn#lýÀx)¬Ð-j‚Ò -ßñÁZÓ)_ÑhÙˆKµeéê³W ©|Е²–+ÍÎù¤s±¾â~’þå­ìÛ  {ñWt šé—‰öÌ]‘T1Þ×ÀÖoe®dû¼Ö¯(Rñ>i„žá -ÆR~[ÿ1’?Y‡ç¿Õ¿¯Ö—Ì ïèPãV«ƒŸ•!-£.\/Ó•žÁ¨Ñ™Ï÷tú •´ÿÁÿËjb{tL^w­+?mì†áM6A{“Ä×¢Ùí.gÒ´í -†1*Ò£-8"»(g2|—ÅryƒÕºb£ݹ#Ö¸‚HŽ9n†Á$ÇÁÊÎ’‡Rr:«Ï ÀÖE“—‚@Á'„·òS'ÑT[Ç)©¯©ªîK0È$Siz:ó 3ÅÁ:/jNi"“¾1"—îG -K×? S2øÊq[\Õ{ÝO¾Ëÿ$‹¬|RÃBü¼C_ËNu+ºã·zeŒ”÷ýø”øl„çyAC€Ãù§è>~Oüy‹°Ü{§ø¨§{Jdÿ‡ãűúdÔæÊýŠn§I®1»µ^¦Ì·¹”°kU­$ÓÔ˜s}ï”±”ʉk¯eE.Ñœxu,sˆ½]D(ÇbÛì[ñ7¼³”Ì9‡³æÀ™*©`C ‰æc¦Ðw¿R膗ƒÉ¿àoÄÙ¹Å+¡l‰ä«NMÌkbë¢4³Ë8P÷ñ´`‡´EX£õ!\ö]Ƽ›±¢YðHv2Ë–7(˜ÖQ°fò:¼#ÞEi”ç!EûÖ&,¢Ü’bXГݓ`Ót„Æx¦1[r7‰´)*÷½Š7ø>“™zã&Xß«аÛgï ñTçÍa\ò+уDr¤j7† û}…2Oš€Ø^ .o÷å&ò—Z¹z»×+ЇêÊ·ÏœPàEH¹8«oÞî¸Ã'AžƒØìÈLxóë³<=àÿáõÿø"€…=È âæä`±Cý_Ç·¿Ûendstream -endobj -55 0 obj -<< -/Filter /FlateDecode -/Length 2848 ->> -stream -xœ½ZmsÛ¸þî_Áo•çN8o$;m'>_ÓÉÍõš&n3ÓÜ} $Ff#‹EÇu}Ø ’OnOÆI,€}}vä§³$Šá_¥’É8Ò,gZ«h}sG[øûKG!¥fR¥p\ŠX3­àBç,™O3¡å‰dW#š° ]gÕ¸`qƒË¾u?–M AY‹÷ìme‰I;Ú+âŠ)nà]Õ¶§¾”Kâu™$,WŠ8¾¬÷ç‘™GÂë6('ø羜c›$,›§‘–’e1yh¶tñÆ3‹£^zäÖ.¾YF+âÖ§Xü)_¬€q£²Úü“úÐ.Q–u½?Üí¬žÚjo·lcFqcÀ!™ÈÄP„I  ÍããuñoC¦L¦É‰:sÔó[WÄ­ÿ}¨Ê/êÃŽ¡7ݱrs`'U€óâ#É, ÃUŽ æMevªðD=»óhEÜúâÅ¡EwyØ•Åæ³UBu¨¶ùLsóy?p4~‚À"|”–¿5èŠÅ¾B_üoÑV& §a§%SpuJØÑ§†]O~4ìLï…—|_R(ahðîÎÞìZô´ývÊ2W)c–Ç9†hæ¯Óyp€öj¿A;ûÂqüdµràÑ*ç•°¾’'ªÖQÏq<^‘üá–Œ@~o¹û|Ŷåy€áÅOÅ*à¶V18Ĩ0§Ȥ†w» ϱÞƤ£NÁ(þÂY)Ô)@u7é´íÊ/¹‡r}ƒí‚ÙÛ$Ì@Ž€¸ØíHPH±ÊFšiÐæ[Bã¶3ë -ƒ`ÀfŠºÔÅ*V‘»XÛLêa;íù$ ÂÒ[g‚ËyÎD¢»­¨å[Ú: Pí³Yt†·¥£™lìç½4ÊÃß¼HÔŒHòPuC6lx¶/ïݳë|å߸a (3§ nâºo3îàcïcWyÛöñmÖk¯‹ÖÍh›²¿ƒë¡›âû£¡ì«¨R¬÷®EsI\Ä,ÎÄV‰hSºJÁ¾x²Ñµ{@•NUjQÊp#E†hlŠÔ’RH7Œâ^—îúÈQºèIk{•¢¶“Fû¹øx4, h‹v \»¶ßtGŸ°ª®oF"wL{‘ºØm‰¿ª½¾é‘x“Îû<\òBÚÍr}wÙ¶c`^Cy;U®±ñ§õè^ ¼µ)Zʹ)%?ô/‹çMéÆîüò¡ìX¯º,rKºn+g<ùóÈ)B’k&Á)9Y,]R;r³ãj×1 ­cß\]’ÛRV(ÍùÆ\“Ò éɸ֕Ù,Ï7t´¼&@[z›Œ±‡H -úךÐY™ÉëEGø—{“Cø—r¦bèÙ@-ó¯,&d%ë91‰Å|usk¶È ÑM¸‹8ûð-Æö ªšô±´‰ÞÛ~š€&Oø¬@™âÈYìizH8TíÀõ‹€ å¢q$¨‰×ÖõÁÕÞx,¹+]äü²Xatuê®Û1@ ÓBüÿ˹#¼ôËŽb¿-ûØ®WâÚ‘wXj÷õ¨Ë -8üÑ®èð¿ -ÅLé4òt8a7&½˜ãª`·œk¿/±’ÈYeÖR@Mç2h%¢q$Ty^*o¸+:ÍIS¢! -)ñÆ ½)?Ý¡am¡hArß—j·†˜áyÏCЭShsL,Hþ•ÕäÙ¼ºˆ„êòv׃Ì3³\3î­3ÅbÒÆá~Bq5d ´Çlä%”÷s¹†²í«ºÞý)„Rœi°µ·îÔœP€r(Í J©°=Ÿ ¬…Iz.'9 -gÍ6mCùØW:‹¼¥'"*É•?O><µ3"¡°¡¦ýž”2îÈá?m@zÍ!Å$‘·ëDz-˜²¯{ŒôÁ¬'ÌB潃Öá×8DãH¨ÕÚÐélWþð ®Þ»ã -Vuo Í]SvõðÜ~ „C¦¹’ÈcrZ²Œ§”‚ð„ÏsÎâxß •/ÞkR£š¢sP#s×%Ï‹õ°÷2Ï.ƒí‹zó«#cà.¬+•·+Ö®#t'®e‹L±”Gž„ÓÔ+Ë”žW¬Î¿D×J³ÌÄVÆ’c­¸¡p¨ç7¤¨‚j@¿ü7 -{5íSw…žxSàõ®:/i.¤8ó~ã©—Bâ2ÍÇL~2ÅA@€-gGƒ ¨D:Á= å'ף“ÝÓYÌ4Ú:rDô5óš:׀ʸ=xgSPw¦Á$@:#ÔÙ[w:}{û%Þv ÜW¹õ €]/†öI5 BUàIøþ#fZ©çѨ0Ÿd„»Ô( FrMìî®kgŽ*Ñ8!jÊir×O÷‹ÉÇù$hÅj°ç<è“<› ã'Ì5àHƒèr ‘„s "$6úZÿµ?Ú?)ÏS%ké¼føu‡OFÐYì‚~«˜ÓyÂüR{ΟÇo¡óLd¸B¿%Rù~ ¥Œwž—Y8<H‡ºµKª¢Ç'#ó)Eyb²xb‹ççP'äChÖóãêt¬îãƒþPãµ÷"Ð旅žÄ¬Í¶Ýš'+W Мˆ<©‚ÙŶyùê™Þ|ð¡øœr‰•û3}ݸ´Ó O\Œ"ÙGŠG(ýis´kÂÑ£ÐZ& -ªÈSÁÔöXó™ü\§¦x>n §Orª;â¡CîÌ£Wõ)Ö8Ÿ¾; -œÆz…½€lí/,PÇ6 -ìzjHó G*¢^%ÓÑÀ"æ\ý9bÄ„l2c§&Â!×ÝyÜEß:u -ý-Ótˆÿ–húíØô ܬ¼•X!¹¤Šzù§V€TYò<ñ!c–Äsv —V)ÿ•M=ýˆ+îÿ§N¬Bë6~ùþèª1•öûkOÀÀ§§1ãêH¼™ ßEoš–yƸ -–’N"Óˆ(PQÉ”#e>jÒ:êWr›ýýìªSćendstream -endobj -56 0 obj -<< -/Type /Page -/Annots [ 57 0 R 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R ] -/Resources 66 0 R -/MediaBox [ 0 0 595.276 841.89 ] -/Parent 2 0 R -/Contents 77 0 R ->> -endobj -57 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 120.238 758.283 266.91 770.238 ] -/Subtype /Link -/A << -/S /GoTo -/D (addition-to-lib-iterator-synopsis) ->> ->> -endobj -58 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 120.238 742.343 254.374 754.298 ] -/Subtype /Link -/A << -/S /GoTo -/D (addition-to-lib-iterator-traits) ->> ->> -endobj -59 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 98.32 724.908 142.847 733.708 ] -/Subtype /Link -/A << -/S /GoTo -/D (footnotes) ->> ->> -endobj -60 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 350.669 502.326 391.516 514.281 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/lwg-active.html#200) ->> ->> -endobj -61 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 291.807 478.017 332.654 489.972 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/lwg-active.html#299) ->> ->> -endobj -62 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 341.433 426.212 377.085 438.167 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/lwg-active.html#96) ->> ->> -endobj -63 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 415.206 366.436 495.948 378.391 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (http://www.boost.org/libs/utility/transform_iterator.htm) ->> ->> -endobj -64 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 358.268 307.213 450.453 318.062 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (http://www.boost.org/libs/graph/doc/table_of_contents.html) ->> ->> -endobj -65 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 240.423 259.393 353.761 270.241 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (http://www.boost.org/libs/utility/MultiPassInputIterator.html) ->> ->> -endobj -66 0 obj -<< -/Font << -/F8 42 0 R -/F39 46 0 R -/F43 67 0 R -/F38 38 0 R -/F40 50 0 R -/F14 72 0 R ->> -/ProcSet [ /PDF /Text ] ->> -endobj -67 0 obj -<< -/Type /Font -/Subtype /Type1 -/Encoding 68 0 R -/FirstChar 45 -/LastChar 123 -/Widths 69 0 R -/BaseFont /SBSTLV+CMTI10 -/FontDescriptor 70 0 R ->> -endobj -68 0 obj -<< -/Type /Encoding -/Differences [ 0 /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /suppress /exclam /quotedblright /numbersign /sterling /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /exclamdown /equal /questiondown /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress 129 /.notdef 160 /space /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi 171 /.notdef 173 /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /suppress /dieresis 197 /.notdef ] ->> -endobj -69 0 obj -[ 358 0 0 0 0 0 0 0 0 0 0 0 0 307 0 0 0 0 0 0 743 704 0 0 0 653 0 0 386 0 0 627 0 743 0 678 0 729 562 716 0 0 999 0 0 0 0 0 0 0 0 0 511 460 460 511 460 307 460 511 307 0 0 256 818 562 511 511 0 422 409 332 537 460 664 0 486 0 511 ] -endobj -70 0 obj -<< -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /SBSTLV+CMTI10 -/ItalicAngle -14 -/StemV 68 -/XHeight 431 -/FontBBox [ -163 -250 1146 969 ] -/Flags 4 -/CharSet (/hyphen/colon/A/B/F/I/L/N/P/R/S/T/W/a/b/c/d/e/f/g/h/i/l/m/n/o/p/r/s/t/u/v/w/y/endash) -/FontFile 71 0 R ->> -endobj -71 0 obj -<< -/Length1 1280 -/Length2 8134 -/Length3 532 -/Length 8938 -/Filter /FlateDecode ->> -stream -xÚí–UT\Û¶®qHá,ªp×àîN(¨ -w n!HÁ‚ œàÜÝÝ‚…Á=—µöÙ;¹ë<ÞûtÚ™5æ×GýÿGcÎV 4êZì’PGs˜¬£ƒ;˜,”VÑVƒ€`H -ÀÀ 탸Á^@Ü`B@°  Pfþøðx ñò ù @iG'o¸•µIšù¯$~ ¤=Ìnqª@ܬaö5, v@-G 8ÌÍ›(igÔük†+Pæ -sñ€A9`0 -·pšÃ¬àο<)8X:ùÿ†º;ý{Èæâúh -Èô·Mfà£I¨£ƒ7 -³pª:>ªÁ½üÿ°õÏâ²îvvªû¿ÊÿÝ©ÿ6±‡ÛyÿW†£½“»Ì¨â…¹8ü3Uö/s*0(ÜÝþŸ£ -n;¸…¤ƒ• Èæáñü+w•…{Á êp7 k %ÄÎöwæý§“ÇþýíƒSKJK[Y—õ¿¶öïAuÜÁMÛÛ ýÎþ›Á¿ù±I.p/ è±ËàÇÄÇß¿ŸLþ!&ã`á…;X¹xù€ˆ7àñ=/Ð „;@a^@˜×£cNG·Ç)ÀÇÎø-]í+/ÓÚÛÉæðWüï¯ÓÂÑÎñw„ï1Iò7ñ9¥þCü §ìoâr*ü¦ÇLåßôXWõ?$ð8Oý7q95Óc­ßÄäÔþMü@N½ÿÐãÉâ„ü¦Góß$ø¸Žÿô(ýÁ@NØøhÀò|t`õ>Z°þûÿeíþÀG]ûßø¸ñœ࣮ãø¨ëô> -¹üB®àc?ÝþÀÇÅ»ÿ6<þÀGž¿‘ëQ×û|\àãÉ…¸þkYÿýKI9zù²ƒù¸ì\¼ ¿œñùýþïL¸³;Lá p üµpwq9¸ýýíxÔø7[Â_(Ì f˜Ÿq´µI® /ò—ÉûŒÊìJù¡ t¨5¬úƒ0Ç÷a‚)—ºQmسü0|x1^Ò¥RN¨%ïY­ä«^_-ΰ9ü^l"æìT-ô#‹ïƦH}Y=¸ö‘;óÔ[Nu¬G tç«­¨åÊ{`þ²oPŠfgîOým†×æ1S tß’&YMʉ0ÝÝÕ¸Á›9Ç\Çùü>RãÔs‡y²Žå Û%ì‚QY*ÈÓD˜½,ׇà4[êyýLAù_Õ;¸4ý3êæT±ù -œ;ñ¨l&lP ùßÒðI£g¬õkW{r˜ M•ôžqV¿ÿŒ’Û¦H1ƒv°6iM¿$GFÞÜ1 ݼŜ²,ÜÀq†Žê|ẙâ v‹™Ê—¤6µ"c &ù8÷º>6:&9¯"(¡'¢i'Jq6ê´îµÍg Èª¤øtMðw`Ü„câsèŒøòç*upˆn’êÌ—ÿÌTÀŠ•®7%=Ø (l - !¡ŸPãïL»NfwÛ> uñiÇLWš\ ¤mCü çÚ´',¦*Ã*×wãù–u·–T¨ 왞n€€{ÏàÕ'ü”…Z<àk»KãJ¿gÂÔ/ ) -¯ƒaú|ñ ‹‡E3dK¿ày¼æ™6eTóKæ´ -·=&Y|lúxñóÒïÀLŽ^uü¨!ª°I’ì“Wò45'ý Ú{D˜›FìmÃ)©±ýwïpW2±Ãe^9•Tè~¿Æ¥WiÏošÒY7q‚©4GÕ+ÚüÐÓìàg€Í¾e5 -TÑÄüzÖ"k¦gL)UÙY¥±V©o膪LUæÂÀ'[.@•qŒ›#s"—ööBÙ6Δg„YóDljGÅ>Fó=¦Ù¬°ˆÞ¥v3ú÷þ6w -?V.™Œº®Šùh)üÖ‘KGÕ;œÃH1»Z›V1®ÜìÇÖeÇ~·z‚ y‚Ÿò:“®Ì¸ŠŸì¯Óûúí - oÙŸD†¥ü2µû”f”fIòW›¢\6›Ù"DMÕ¿Ñq8½óªyER`1ÚßzÀѲϠy¤úlx}_úp1Q‡ðŒcyT°L“…ªcISÅá@y`C/¾©ãµ+§aÍÐÎnmvöbxå¾Àk1yŠý ºóM ;^؇ùž¥ŸI2-‹ýÂÑ«Ÿ@2½O¤F5·Ÿ–`—Iƒ_©¿ZdÜCä2µ;OºÍ–²Z¡Ðûf\ÇläEnbP‹­Žì ¥‰$:AÑô3ûNã`Z9ûúHÙµ–ìvf.w½`ãŸZWz[”©l”Œƒx­óO‘(F¡Þ&0g}y¥ÿ®a• Z{Xå«8§îÌ-õmµ\ù7åw|³‹r´§EÒÉãGEkæä½{%a";¢Gân{4-Sìþ„éÒÄ rݬ9ö1yÇa9èk·Y*3Ôs2/%#îáQ¶¹cÈÙµ²9Åýñ7ß’Ý…lùS]·±´öµUž7ÊðLe¥I…õ&½ ‡ja -^áZ‚†5ü‡R½B˜¬s©¥×+'“bO#!®¼ 7Ǻ±ð›Ô*™:(¯sV6Ú=ÅL]rÑ—3@I‘¤,nC€£Çjĵ4=yª/ ~dšÂ€.äÖc@Ÿi¸L© š?ƒÊuè|^ÿ9a¡å‰Ê«3ûƒId)þýYaÛ –?)’ÚxÁ âè#rMbx±•APŲi{¬ˆé&–@2+»eÎË,/·tóœ‰;U:—~Èýð$5äW«w·¶ÒÛíRÉI^Ûo"³ZïTv·0ó·}*¿ åÞÅÞ|ímã,ø8 á,´UO$ÑKSHÕÆP·ŸÜÖé׺™D™ àšÂPë“Û㦿5¶énz­õR,n¬Fö:xYäëh -sL¼Êý…™12Ó]Ûé`‰¼lŠPô~`GŽš¡aÄp[öÕ³â³ÉÈb¯òÉ<>œâÕ÷’x“â›8¥Õöl{^&E¼fùt)Ñû³¨ŒÞO^X?¥»K U ̈l¬;{V+üþe¶¥™m¢á¨rÀìù¬r×3ôý4›=>ùº±ý<<Lñ¥Ëzúˆ?cö'ogÙÐw‡Œµ‡ ¾Ü,ÊÏ è³ ‚­½g¸¤~ÐdÓ¾£V¬Ìü>C3üqÁ'þ³OƒÃs‰îÿ`IµÕíŠt~Ä #ærŒ;’x&†ð)&þ¹¯€¢ªÔŽ‘àiKmEºæ˜mOÔhcc¡)l}ÌMãþö»‰!ÀF(…í+wÐëjÂZj²“E›¸®—]üâ3ÄÆO–¥Zˆ$ŸŠkM ¿P‘݈‡{/ŽÕÄÐ\8 \G×ma„÷Þ‚Rß6G±j¢ÛŸdºiYŸh…Þ—]ŠPaa–!»Û)¥’UÎSÝ¿6Ý®ºIàruÁ”›;à  ¥:Ý@ñg'÷F&A‰óâ˜FÓ»7•N¦ˆÁ:úÔ5€|RšÊ‚\šíÐ6D­{Ü ÐBÈIHO'q‚"Z\“ªRÕ<ËRI#p;³”PÙ²”Á— U)C4·5“ˆ·{ý¾¢r{´¼Qõm=tÓ=<]tƒäÎX”U{ä49VQɉ N✇Û8W‹Þ¯%¦ÁŽDãté® -}<]ßc b=÷Ú&:£¯þäþÁ² R/âÌdÓÚk-&rÚ"ËÈ™çüªï{º8Ú[DÄÔ]¾dŒâ3³6X½ÿؾ1^²òñ*ÿdÿÍg9k ܇µÔAh+ޤÉE¹­Ú¯IBÌ\¯…¤É¨ÉÓtÿSùòܵ³ÙÙO´ç¦ÝÞÒŸj9&»jR$C¬:ðŒd%7>ö¥Àß!ÐQ>»¿7³È"÷)1äÕb©É'üU'ÌmþggÜbô³|‚°åÚ2ÛÊ4Cœâ¦ý¤üɉ‰¼6„ÑE\Ï£ÅØ‡Î!‰¯ö§°,o”ýP 댕þw¸íââN¥HP;àXÓ÷^ë -Ä€¹÷<¨ß ¡“»\Wf-ïå7äÂx:Ý;ÜP_g#›}y?žvbI³Ñà"€‹g–ë’0œYNC³2 ™Êyi ²õ<¤\¾[L^òÝÀs™»UQדþÁudñK9öí¢ŠÙãgöë”=R3cj¶k±j’@ âð‘ˆ8/kdv¯vc‰AÙ õ†v`–5ÀÇê£øEE¤FÕÅVe¯lëÒégÌþt¾ý•6ÅMǹ @í}™Ü€ÂBžW–çÉ*8Á„xgÅ0˜©@ûÄ>h¶?ZɲÍa ±û“-©)& u΃ Ëž¢»|F₦6=íkìÃîQ\ ÿ•Ò -0«KWØ„•ØK–+PY¢ZÛ—ð6ã@qèÄí¤=°ÛÖ}haqzó;Æ#Ôs“(ú†ÙmƇóœ·>Èyýæeòâï„Æ¼­?5#HÃcQÂæuUÁ²½µUê u©1^¼™N§}eºNSë“'3³½|3Ç÷egæÕ‹ý½L¯ÓÅÏmÛ¶)º5ÔÒ¤ÞÌ+“Jóæma{e@­JNWØ)q„…â£Wª÷hÆ·ó‘t}u:læûûJ~}œÑ‰?6-…Dþ$õ’ëéĈâ¯läðèr—£µtá¬,¾lÔ¢ò{ªHöÔy¶O ÂѺôÃêªV㮤»Þ²÷Œ<çsô`UãѲQFh˜tè{5 ê¡Ü;ô™uØïoµäõV0&+Q ß;£ŽÊÿ±'tB]Àª’ÍŒžk|ÇÔÜæÁ Ó ¤b‹˜U|ô,“µÊæsrËBøêÇ>Œ±9-7¼,IŸÐŽU<|wGD9ùγC‘||øœ,6o/b5t_Á·uQ¬ÙÀ­iÐñø8¾£h{ƒA,Pš‚¥ƒ±¤yÇr/û]"™át}‘‹$/#~MÔÕG2t–‘†øŒ/ Ù ƒÁ©^ŒžAÊì½±^+g 1³+ ^ÚŽÁV†i°KN re@\Tª:ãOtäàXsþÌÙl,(ŽàwL;öŽUåvÞ‹FÔÁ÷]‹ êRÌ,'K«/ -^KŸÖ´UÝêfk5>¸ÈØÕñeLydµÙìfx~ª·Ó·frÊ£©,ÎðŠã[ºûÖJbËîx™‰¿ýÝ»Àmôpiƒ:M„$*ø!²›¬ï<¶"¯sîíW"c µ™Èøƒ>*§W’ØdÄR®3bJ±a7ñáÇάç›"ÅÐü/»ú]1- ÚÒ«Z²‘v4u+¨1þ´j$bëwbf–’ýZ«ç-±Ý®Þøœ|¡·…hõó—’J&ã"s­Ô«H(ŸÀ)<Ï0p$îŠꑯÿ#sô©î]m—ØÐ,y@·š—×ÈDZ¼à*&›xŽñr³€/UŽ­ PmÆR¤ëÛFëPɦÁüŽßl5'§蟽 –ºmbùÈÏx´ KÀŒXôÊùöá¹ü ü.Cs -”Ùçû´*UC–•­E(Öж^]âÝ¢bKq3Cû1ظûQÌ=ÏxqëFß:aÏe€¸“F±ØÞùkÚøò¾ò:/}"ÄÁû GL9 -\n‡ð—ç®(¡5«¯ŒiýI[lWŒS¹N`UjaíF9oƒ"Ñgb¥RHsö*æ *›ª%m,‰VIDúõÊìkU7/¦ÅoM×”Ƶ{ŒÄtþPÝ‚ äSo?\ïKÿØ c9R]åicå¾;rÒŒ²í•H·±D‡;hbŽ>=e¤â¯’ý{z(š-¤1›ŠZÒYUÂ-jåª;Uû)±;•;öHâÙì˜8´ WV@ÒsMء素CxÄ£þÞm^¬Mžú{cMª*çÚFÅbª‚4"o“5ã…u±„O®H7¸9½G¨Qt=W_vi¿Æ7×ggïå/Âh -AØcœ>WÓ{x?$¬èåJ®¾!a´ÑzÙ&’T#ÿÒ"îCÜÄ[ÐÁÄõ„l@øŸ-QyÝ×™Þ+()ZïNox¬ž5o)ùe [IøqFdh{ؽNÆš¢Vˈø&ÌüO_±CS6L`¡(ﺂ˜¼¥½‹;d³rûçohÒ$‹tŸ(A|¶¢j 2•;j™§‚Ñ@œa’A´öÂ{(¶gÛ%Ù|€à!›“`*@³È£›Uõ¯›2×lv<Áp -¢ lš‚ØV¢ —}pXÚÒtùœM²ÇæHØÔwÙkö‚KÔ#¤p&ªTê3•ÏÑù(yЇGàœt¿¶õfy—ã›A5‡Zð”€+Lv0Ø*¹ ¦øK1 «o• Å‚ŒYƒ†±Uôeℸ²Ð¢A&øáÃøµgŒNÎlJ”>žˆÒHhupàé;ÌXâSzÁŸ­o]Õ£f«Ð -™4޽˜¸®3:“Ä⯾6;½W,Ý3½³³Pj­g‰TÔîX -Åßñs¼âW¯›­¾‹Äx/™}ËÔ@zêÜrä·Ïཆn"¢{訩62 L–¼XlÔ¿OÇßÁ ê&(`“‹Éï•J¢Ý¥ò¶bȧ«&\ß‹PæªdŠj5 #°ÿ®dÁÀ«Êñ²«9â˧{Z#NÅW„RÑ€'ÈfûS|NòÑÁ „¼„H«K„ Æ7¬º á"&ÑHƒ¾"¿í@HëO"óÉF‡ÚÆÈí"»ï©RñÓ®î*Žl_¾ó«‚”:}¦±Š¸3{‘ÿM‰Uh+@‹3Þ,–AÑð“!aýäæ•÷eäœt– ²Xù;Œnò…òÑ´³,éYDØ}ÄDTZÔ¸,48‰²HC]1„š—Ê IâŸninбûÑP94ÆõUjÇäTpÆ9 =G#nÅÑ^½$ËN*?q/âgh|Ÿ4Ý´'ö¨'•Ø+ûgˆâñGߵ誼¸ü©²Ò°ö~uýÛwo¹üŸ/"OݤµúíI5ú „Œñ2Ÿ/\~ÁMƒ^h¢€'„ŠéÏ›Çh‘Ðg TsÚ -÷}4XR:Ä£ƒ´¥ŠC¤qŽ—PtG|A‚ϱ¡¶®‡nÄþ[eœ4· Ç”o*^C{õÝŸ ©y”åm±ì¤Fh”ÞîŠÖrSºk œ²3ó×¢b@]$-ÒH[H:âbEùF6¢v^ºßBx“'KÕ‘ŠD8ÆßI–˜Üi代/²Û¿8ø=œW0lHƒxÅèSy}x>(§H´r$T­¥÷mœ5ê›Ó“ «ûë×5úø¬Žº2Å„ö6£kòh¡ z -=ã…—ÈÙ'ò]$´‡ˆJ³Óûæ}j¹߇‹ƒ5‚Ø6¤‰£‘DI•Ä0NÃbu $_k÷Ž#£Ö2›Dp÷ßš r{Š͆ï~ ‡ºý˜ÃjÎKE§œŒÎ°>sí]Ä—ÁžL_ÛnÑ]²a¤YéÌG~ûãPÂ<2Ú~%ÿĺ ÙâEIO -£zÁu\\-òäÎú«þ[%]ÏW?:¤4î=…]Ç•uÜør ±ô‘?Q1ÉÁ_»']”v -Ý÷ «{S)¿ÑE4üÛá,a»æ†ŽoÏ©þ’…É(ù‰f;ÞŽç))#“W Gyi sžúeC¨Ìý'ŠÑ*)â¬÷ B‰[bDCe3¯S‡–…®!Ÿ»ÔÃ$IÆŽ -}„w-·€•"ãB^úį îÛ™(A¿:ÔT7e03lv¯~KùrìC oÄì«Ê«‹¯ ,ZRË)ÿ&ö²DQŽÚd€ï­}Ë>{ùu {€›Øá´ jé ‰úÜtt=æ[éšK”3ìé 6pY U´Œ]%„FÏ[p©×ÈÑì™[¿4:ì¹çîTjj—?B%…LfMÚ` AñÀ_ïf®Q 3‰XgÜ.«?¥’åõ»WºJ@il Àjr•v­Kk¹È–À"½{Z?n4­g°(˜ºôØI›_ÿ–òí¸ÍQV€ð pºï)žO@9lLLúÐØœ-z¸„L­ŽÇÈ«´/ïx½`é,ÑjìyûŠÊuÉŠívØAõEÇù ¡9׈v*JWÒ(y.·…™ Ç>$âgqÉ‹ úÙö§¶ÍßÞ{f ëæòŸÉ -­ -àgÙwSìýÄÂAÆUÐÝwåy†§×įž`t””ªÕØ^äRƒiéO,piëb~ýîðú2žŸ6v¬áUƒÌZdä–¯{Ù%‡(ee£[õú]0ƒ29³{±ó€sz ›Ë¸ ]1rŽ­Žêáɺ­tcÂMX'I¹ÞÅOÑ“6¦Š%AkC[o`úHÖs½.¡kš^±u˜eâžzKÈâüg’Y㌧"y)Ò.T}ðef»`LüÉÍܵ{ïÌì¢mÒuQªÞÌ^Í~<ª¢É$rga޵í`Ci©®Brâ 4l+›æ?‹=ªóå#lBØÍ †[,b`Õˆ³††Õnv'L ú~Æ0Ã%So7É={½ç•D924”R~£AJ«¶À¹óËnöòY¼*ñÖa†µ¶p ÈaÊÒhrÈÇóf?ý\ýáÕfåŒUjLè1œ$.–~–lw–ÁÏÃu%ó}¤ŠËbNbyÇ.!Ä]²ÃÀòáÓ$þr²Eœä Ìi~u lòØŸÃj´ÅNíÝ%ˆeì ´óIE‡ÌÈÖ>¥ÈÓ•‹oñÖÜq«C¨áA©K–èHü?¡8Y•&°;óA‘,þpÕVÒ´ê{sú+‚Fît…¸{I™ˆ§‰ Þ6žÎX޳6Ó õ´Ž3ÏF[¶ÁÝoÏoË¡QT¶6Hî i#'Ê ]Èoˆ÷0uñù”äɳ}{5£­ï$¤`ùþ“°Ø5Ñ鈛ÂâVfg-‚cr9™îOÚÔ!Qv›vDhoeëŸ -M`;ns3·ïÆÓ½¿¨ÇçÃçÌî!ì§!m»O1)5GDpãì‘Ëèòá‘-ÌÑ ÑÊÄ=‘0€¿·ÒüÎ+iuœ=˜I;ŽeØK`©óçüJšˆ0J@€ãÚHÌBüü¬~è­È㳨æ­˜´$ãÉÜoM@–í¹ÔI›¿" ¹yA¿³VÜæ³«kšdº;:õDGx‹ &gm"g¿&±t¥k¿‹Êã¼½½À»W›¦þÔ‡ìûˆÇVzÎØ‘¦‘ùþò»;RÍñpL·óž7¥]ÍIˆm1®›Ï0æ·iUUÌÐSq þ©¬uó;jô§ðˆ—AÎÊVf[äA¶sÔ€¥…rjà›.î&¯"¨bøçB¶§ù#[kwÇ”:Ù½ãÚ¨  µAžûHÝýÂjöLΕ-«E= ÙÏ^·*(ïP&ù«5q¼ Nã¼^ݦ_.ëù‡a?á«Xì_‰óÉ'Q=…8ˆcë…ÅË@¾:°ÏN8¿–µ <⨿wB4—«(®ëbÞL…Ñ/ßߨùÞМûqžo MbÍz\j‹*V Þ (¿»ÙĽ%­*º©HK¹£“ø90yú“\MÚ ]ª«RÓJÞÜÎÀ8Æ ×$]:P%?çä·JÇânB6þňá7!¥•k¦Íæì€~ZÜ·ªˆöoHwúä¯ÊDTMη¬ж«ðó(|?Ïãºê#ô1 .QÝ…ú¦Õ\,H9ÜlΙT>œëØâOG­òÄpå‹•8“;o‰bºŒ~ÉøôvÚ%ºqyŒë.(qØZÞŒ?»Âóà°äòĈÔyÅ‡ŠœîR¼ZöÝ{"„qÈ=*ç½Ê’D/ÿÒ¾ý’|£á$»Ôwýj|Â3Ñdk“†WâƒÀš(†´;‘4Ù£Ë=î>¥ 8©p -<¾gâ¢4ùl|ðìÊ_Á…<_çQ$¯* ÓòŸFçÈúbˆßH´o¡?QR¥fó-Ê{GXPZa-è<‘!Z¡BT] Iúáæÿ0çé -¶ÇʉÃ`ù¤ðÛXûYfôL!ÿ¦kobuwàÉâ4bÝœ9 -óãp1wÝnK>E®2EæÂ;5ÍË÷½tçß 7’ÈXŒ?ì7P •LˆÇL?¤W¦¾>¿¨"!±ëÑd"Sl  <é?b—eaøõôƒ@6êÜC2NâØg#€¬ìCÑÁ½âË—áI NeÓÈ ÅõSQqÎǯÆNuYƒ¹aé7Ím¯çʹsC´f¿Rs-½ìŧHä}c^”wû\^›³4ÒûT¤í騗KÖrÌü-qiƒ³FâЄik!oÜ¥¢„áÒEçöv77,nžÒØ“1â½ÉÍ[B *”%cígk›î[›îLÚZþé2^V{#T?ÔÁ¿¾M‰l”ù»EÝ¢·„å•=ñX {Æ´“r°ní·ð™§¥@íK&IüömFˆ°æ›ißšYòã?Ðw(oÖæBÒ’‹¥;1ž¾O&W/{ÙbĪ,¿«d0N²õo»–`?ß,a-8"W$&ZŠep3-½&9>kôt¿#-ÿõ‰èÜi–k«wÀQóKgö‹} åæ.èÿñüoÿ,ì`7G{ˆ‹-àÿÈŽ …endstream -endobj -72 0 obj -<< -/Type /Font -/Subtype /Type1 -/Encoding 73 0 R -/FirstChar 15 -/LastChar 103 -/Widths 74 0 R -/BaseFont /BZSLOP+CMSY10 -/FontDescriptor 75 0 R ->> -endobj -73 0 obj -<< -/Type /Encoding -/Differences [ 0 /minus /periodcentered /multiply /asteriskmath /divide /diamondmath /plusminus /minusplus /circleplus /circleminus /circlemultiply /circledivide /circledot /circlecopyrt /openbullet /bullet /equivasymptotic /equivalence /reflexsubset /reflexsuperset /lessequal /greaterequal /precedesequal /followsequal /similar /approxequal /propersubset /propersuperset /lessmuch /greatermuch /precedes /follows /arrowleft /arrowright /arrowup /arrowdown /arrowboth /arrownortheast /arrowsoutheast /similarequal /arrowdblleft /arrowdblright /arrowdblup /arrowdbldown /arrowdblboth /arrownorthwest /arrowsouthwest /proportional /prime /infinity /element /owner /triangle /triangleinv /negationslash /mapsto /universal /existential /logicalnot /emptyset /Rfractur /Ifractur /latticetop /perpendicular /aleph /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /union /intersection /unionmulti /logicaland /logicalor /turnstileleft /turnstileright /floorleft /floorright /ceilingleft /ceilingright /braceleft /braceright /angbracketleft /angbracketright /bar /bardbl /arrowbothv /arrowdblbothv /backslash /wreathproduct /radical /coproduct /nabla /integral /unionsq /intersectionsq /subsetsqequal /supersetsqequal /section /dagger /daggerdbl /paragraph /club /diamond /heart /spade /arrowleft 129 /.notdef 161 /minus /periodcentered /multiply /asteriskmath /divide /diamondmath /plusminus /minusplus /circleplus /circleminus 171 /.notdef 173 /circlemultiply /circledivide /circledot /circlecopyrt /openbullet /bullet /equivasymptotic /equivalence /reflexsubset /reflexsuperset /lessequal /greaterequal /precedesequal /followsequal /similar /approxequal /propersubset /propersuperset /lessmuch /greatermuch /precedes /follows /arrowleft /spade 197 /.notdef ] ->> -endobj -74 0 obj -[ 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 500 ] -endobj -75 0 obj -<< -/Ascent 750 -/CapHeight 683 -/Descent -194 -/FontName /BZSLOP+CMSY10 -/ItalicAngle -14 -/StemV 85 -/XHeight 431 -/FontBBox [ -29 -960 1116 775 ] -/Flags 4 -/CharSet (/bullet/braceleft/braceright) -/FontFile 76 0 R ->> -endobj -76 0 obj -<< -/Length1 819 -/Length2 957 -/Length3 532 -/Length 1535 -/Filter /FlateDecode ->> -stream -xÚíRiTWU°¢ãr\Š}© ’d€°YµDAHˆš‡Ì $38™`ÂêZl¸TÅ­Š -(-Š8.€‡*9¸"ˆ”E¥X,‹· Ç¶¿z:óg¾ûÝwßû}v_J„8}(’q@¹¨ð -„¢|€rùˆ 1† HoŒuwGPPà»z8ò=®ˆð¢b´4É€é^3zI®@¨„4!ÃH€1‘PÉjÈ0P22Z.* ¨÷„ -A¤c!ÎEPà„Œá0‚ ^¯#_RN×~WÇ|lÅBZÅšÓY“3k§H…àPŽðD{dü¦Šû¨ -¦ì•ïKé³>¦$Ú J£f (Òä@ê2Øo.â„Z9°ëË` -B&$#8 Î\¾“ ¿A¨| Ä F ä˜BûpHâ­°ñõáy†IüÅöæÚ× Ä’Y¢€ÿ‰ÝW£Ÿj6%šÐ€å|.Ÿ²Döýø%pÙ|RFá.£iL‹°ÄV‚Ä¡@ ë˜Ç%)†=Øhœ¢‘Þ±²ëÄ g£…L/ÞñYŒÆdPå…>Àý³íÅ?ÿoOOJïàèÜ]X(ê\]‰'“Ä*5ôõ>ŸïæØ„LMÓdúŽÍôc-'Ø9@¨2¤¾–’ÍÞ•aø>7iþ᪼/xÃ_?©7+ )NÚKà‰ÁþÅ_E0YO6¦—s¢«-üd³wŒ§O[¦‰ôßu¬P—™²e ”{[ÂÑ®×íõÎ~ÚSßòUKwíÛØhåQJ?Úóƒí¬úNÛdãÈýx«gØá’ž{µ#ÆÍ Ú6Óf¢kýQ³†Á8Ú†–›S^'gTÌ‘µ_½ãïÈQùè¦UËçŽïĺ#Ryluµýâfá…šÖÆÕø›1b}érM›õ&›»Ž_$9š.]’U|]eŒçƦgi»ÄÑRkÏ‹ Uå*y›×,(±öŸd|äùz¢Ñ^´óËþ='“‚æbËËQƒOæ£)ï[Í&f'½ÌÁ¢÷m·ön‹[uä윞`NZ"w‘aWèó¬³å#jÏš£ãçÕÔ{m~u`¸èÊPc€º°{gqdú3§é7ç+µU ²­QiùSÂbi’&Æ|Þ M»Ðt/õb ÷ó¿ ³Þ~ý*ÔBÞ•¹Wtl£RÚ†x÷_:Q5u—Íêò‰q2wšÃŠš¨Éën„©ø{ ‡U!3Ÿ-tÝËt­‘iLËØ%3¸?Jk¿I=Å -yc0–'8¯8³½®irV“½ê’ÊÍÝÂZú.i^÷Èãü¸=+½¯»¼÷vKm)©;¿ùÊÜI^ܷε…CóBâtÞº·dG½9]/¯‹”—l³ÂÈÌ|Ãa¤¶Bò î¤^¯PßÖ˜•陯ÌU®¯šÕ¾~Ð)ý ûQ u ÂõM;6ÿ‘ë£ÛzjµÒ\¥Vî6m6’ž‹}Škê£.lËLšç—‡~›ž3ùqˆ¯]Ëàçþ¿?ïl/É ê+ôi¶È<%ÊPqÆ\ʽ×}›Z\Y­*jiÈ“àæcÅí²Ýò8Ý­qéÍ)Rs벬ø–¶Æó¼ÓOüŸw) |Aö²9c™àém/E…‰×z¶W¤v—ç¾l ·.],~ÓU´q¡a´Ã~óÖ…³£LÚÏHHQ~µÔƤ{Ãé0Az]­Ih|¥òâªan¿roÙª:Ï%rï2ƒ‘´Žk­ÒôÍsîÜ;î¶‹Hæõ¡šÙg¯hÛz5W.›_MZ¨uHÈxw}¥IÇnÅQìÌ®µ)~‰ º²´5vpErrÈ)=s±\Kn_ŽJ¬¬KL¶ßyÑ"}bÁÿ‡ò¿ÀB@¦€ÍPJŒŽFþ-8J£endstream -endobj -77 0 obj -<< -/Filter /FlateDecode -/Length 4753 ->> -stream -xœÍg]IlŸ·’7÷#q$Æ’¨#©Ýÿú4ÐÝxÒŽ3ërjkK Ù~70?ße«þe«Z$"•«º‘IU•«Íñ.]íàÿo „U"ÊÚ‘k‘gIY®Öy42Ú?«Y\é.ÙdüI½wÔøÁ™#ƒ9òB¬Öu•%u­ ¿ûp÷Í÷ÍJ&²*Vžï„ >lï~\Ý¿Ûn ÿ}?÷úw8=¬ÖEQ¬îç[?ú'ý1éçnlçaħ à÷E?†³þ¥—ýôÓÃê§Õ‡ßÝýæƒÁ2¯ÊDfƒ­²ªJJÙ@@ÅßšV¢Lšâ&­âí´šÇ;ÍD yÊ")êfeÑZ’§nE @5¯¢ôÁ/o ”I‘U@žö 1úC }¾X5È ÌøOì×Üá’§å’3‘%M™­œ©–k&˜>…„þI!*… iÕ䉔aô„@ÿñaˆß·ô8 Ë>ÞÊR@æË3âÃ^a/ò°6ŽÑž¶-îí–¿ÓÓjñ#r~ß´üm‡Œ}7éBç6º”ûù‚xÝ‘Þt.‰›°¿í ŸÓ¬D vãüÔðÝL𤶩6SlÚ‹+¿fÑó¾{áv¢5ôéO»ƒy½G”}jŒDc蛑‡gÚ –%Ô%’3œ64ÄÙÊhR:QÃ0- æØM†ÓÆ.¾AÎÔ¯I*çý°îíë'äâñî·†YDáè Ù$u©¤ ÑUBÿ°*s¤Šš·_›™¿|ìÆIÍ·d¾&MrÐ<ðXtÖ<­ ØÇö`qÕSµ@æRm*þtÓ› ÔMšçf˜z7 ô~gÈ×2QF&Ã倔û<— îŠqq_hŠuQæI“IÚHÅö°#ª÷óþ¨f(ÔÀŸà‰Û>Ëë‡Kï½óâÐíÚ=Íö&ú=) ïš$«û™[=ÎsÆÍ›ùƒç¢üƒA–ùŽÁvÝ©5—êLj$kœŒ¤F©z!=ût0;YÈŒ]'™»úgg­ - EÝ$(+4“Z´»Ž;âJU«G½ šñ­w샆bÎ=rý=<Uü[NGÀG|sIå0J «3i&¡ÍÌwÚ÷Ð Gtl$3K£ ÓÒîºvtFa«Èê˜}vU´Øg¥‡£~&]´ä7­,Ð:*¸Çû½+‰'FØxz°½iÞÔ—/ ujÙ¯™ŠB õ¾·Ì"”±;Ç¢I]‹@³·3·‰y¶ž™&™ÊÚÏ(Û ¯Ðõ/„u OîðŠƒákN6GÃ!Fêš²4Ò3ÖÛs)¬ëÂx¢ -ôµøáÀ» ž›Û'Ò>üf×ó~â\‚ »^ÀåxlÇ~Ô¢¤ñœíl„iþ1Øf} jŠÖÛ ñEå[ v{‡uÕÛÀËJ×<Ñ+ÈåV6É!æ")dR‚3Z–ò vý ˜ü·€ ˜~RR’I¹:ÞAè~ZMχ»?ÝýñÿÔ‡Q°D¸>¹î–Â@Ø"þôÇYóZÖ%4òƦ -7¶2PjU -ðÓjÞþëa%K- -š˜j‹­öL«MÖšêô1?_tD»Qä¼? BÄøüÝýso„G)>Ú1Ô{WmÂó¯qï¬L„û'ÊbÀfå,ù-$,²½Wìöwà†u•'©hŒzã‚ê:àT®Ë\%N¢Ñ|S@€]Sàâ‡ß“¯àú J¢Þ?8Ap$Ô]$5ò"QêË™þ-«ááË©ÁB€ËýýBñP |ÿ/Üh—è–Y øT_ ]L)Áin’¯á&!àŠÿ -nŠõ uË×ã£L$es‹²&É*N0¾?¡£s±däü*¯˜)¾«øG9ÅÃY±Ê2\Î`8=£Pb£³NAÀ@ §ƒ1L3Ç<Î;HÔ ‡+›Cøpƒ+¿ -a<¦|•Šû[1å› žaÊ4Oṙ^ãÊTéõ"HUŽ”jÇí_Ážv²¯ÃŸòQõÐ5ƒF¸-K“4k,·ýãÕ¡ljèñÞÐ#¬JÒZ8„ifíY” h…éé½ÒøbªÔ«¾¯fèµrA8"“h‘ëÓÒš§i) Ö$“>RA®šan¢"#ÅžÛU†+•íãà ÅðuXòÿ…f±€øúÕ+Að+zA@Cf·¬•€Ý¥¤møA§\•¦>ò~¼³ÁŸÙ£÷±$ÿ5uáàð†m.)¦-üEõ?ž~Љb.€¬(ji7hnP©`æ+¶ Æ”65ý!6/øé•USsLñÁÁd6õÖøpó%£"›åÊÜðRçJR¡¢é‘›GL—Ïë$«0µÕ2QŠÆËxY4Ã"C˜Y°‡³Ÿ{4YRré몎cèµrt8âtœ”W€šTRá"ê8‚¹… -ÌȺY ò&%÷uéïï’{ÚIY‹˜v’I²)Ê"©Räïl­nœ&q—º>¥‘L¶ H\A©½”ªMØ´y13M<¦¿ŒèØF±ÊLˆ8ìhÖy„Œ8æÈ2.6e3ô¡¹¤¨>¼²¤¨’˜D j&8Ï…« ˜Ê¿ŒtÏ -ñ%醵iM|!MíD5u턨­)»|éˆÄØ·^¥ )…ÍûŸMÄ«©Ôªžý=.w\ Ð}ng]wˆ©S`·º°š÷c·…ýóÓ0þõÛo{ßïõÝÁL&BÈ@¡êµŽÃ4›'S”u’5« ·gSòJdù®Ò_<ºëÒ„JØ>9ÙˆÌd)usìfÊPžÌW³ó˜o7Û‚3˜¹ôæÅQ¡”ÖB*JEÚLZ)“Æ,ómEžàTøŸTèdÝòm zí€/”m0âu½î潬"8ÕàÇ7N¡Ú'˜›˜€}ÌÀüû˜ b)”ÿ[7>1Õÿdò³ã~ÿÓÄØRaFo^íi=Þï²ê)׆íRqKˆpš¦ê *ôtã¿‘7~«ÇÏ3~ýŸYÖ”J„ª…À CÝe¸ˆµ>! OªÑ–®¨Ã·å9˜Œ2*ž1¦«T -ÑJóp:Ø šœK*ÝÌo̼<{ÌŸ kz!¨‹m*é7MRBØqMe®‹JšýWÍ!’U¬Óëõ]]/‹`Pru?ÓšnÈõêy=®éq!Ѩژ)¬éþô¢ãç_ÿò—f’™U% ÔšŒ· æ–ˆmf‹á̺àðl¨pâÖl­<1ßf1š3Uºý½$!cÛÝH¦fÏŸÀBOÄ7¿TÄÆÖÄé‰ßPñL·ÛxÈßÔ:ÆðÙ4Æ à¥o3x\šþë7kŠ„¹7Agìz6„g3oop꘽!¢¢šÙjÑ:O«¤,CÇÿŸoÛwÈë©.Àªý|L³Ê+›æõ<¬Ù}âÔ_:îåJL)™­ÕYÝ$‡ç4AÀr4]#êS …Õ|ª˜ã¨í–؃e3U5VâXãDì™Î0`éLöÜàZþørÓuzÆ¥Ÿ6s¯êŠÃ“éÕýÿt|îE*œ)=’¶‚æ¶»gøo΂my8ßS-L ÓÐÃŽøFðæPÌïÑððB‡&vÜÛÝ$5õ£á߈•ªÀ“æ+òDæ_Ê`1ôÚmk8¢9¬rrY–ÍÑ1V(S^Š‡Ò—¢˜<‘`ñ£1 vå*Or‘(÷W¬BªŒD@´ð05ÁÜœ7‡¼2´êuᤙEž&%l²ï°º|އ\(dðTŸ)=™£0žjr%KŸ¹––… 7·yÙ¹?vSÔ׬’¬´©Ù_¦ÕEx€Ôs+DZaqÕ®x(”ÖÃáŒûø‹èÙÂ4©,èæÀg#X¸x&ïäD·5$ÄcAªåEÓ ³ ’±£c½¢±›.‡9ÂjMÞ,°HY%Eý*a(`¥¸,Ð`kg´EnN€¯¤\Ú¢¬á—šæ—sÝeŽ•CëgéE“(ûœYs6?S§Ô˜EYõfuTõjîɵÐ& !FUà56Ž:[Á™³—ªÆÀºÙrWÐÛžnU*]`ÙïhÛ9Ÿ=ülvÍjë/׬ŸpŽE>=^ºeôMrsyÀr¦c_(I@̃c‚&6º¸èq8Æå¨NÔ)œW ’¨“´.|qW*¬f^èpó…_|Òn`dÞ -˜ÚõÈNstJvµSòݪd ¼iw¨åé­Ázëvàqjš”‘?mevØárÐT‚" ´8ßŵ¤™þÔš$å±ßí£}Eph^ÃtŸƒÐt3[fÊh¿tÏàEkÎ0õ‹ -¹G;vB£.–:¢“Ú=FQÐa‰~C© ~D÷[ImÕÅ^8@€“Ë…î`«Ýg†Á˜'Úî è-yÔÀÚ9£Y¢…?U(WE¦ -õ ½vÀ—…?DʤšÓØ:y¥qÇT€B)<ÿ½âLãKÄŽ©o~y‡. ÁÜB3ÇÉÙ•4Äd©~%zžL^¤.½#E1e¦2HÑD1ïægò®ªHW{f$»:óºí&?:~Â+£UÁ½o|pŽÑŒCGrYt®tÐÜøUÒIDÕkïi -ö?&㮓¹3kNk?a½Vj^ÐoÔù×¢ðÎg|›EU${k?:*äÊ H³+"mt'm׎±A3ZÑ}"•¤'Óð*…wi£Ð§ƒ=¼IspßøÁæÔ†ÜNÄ0‚îyã”îïÝxá·WÎ)ú -žsµæt¾Ä9«e ˆŠ¤‚°ìmŽ ¶vF[:r9˜ä\ÍXi¿ÕTMÒ|-q¬ÛøÕ"ÉìævÍë—I%3ß¹PY×O®ºqrä‚B·¢ ]PÎ":~AÑ”N⯱ÔÁ=º±ßÌèB*ÉšL(Òþ™ãoÓÏs}ðŠ8{ËoȉPMr)\½©ßßôÀ'Ò¬{Tß}à[&GwÀWöêBŒŸkElë}ûSŒWJ`ÀèCütë0뫘[;£E¸%n®`F‘ä ßzìê\ïüxoê±·œR“'¢H*ú(šLêZ˹;òFŽq…©ÍÒÐrŒ`Ø•*ýí,è–›îà'Ïe‘‹,©É«bíêK%w^;Ð‹Š»?]:åŒ_¿þ.› üãj¹¯:K¢îÔÕàÅx˜‡‚¹…° -Pó² 0æCpK“m6Wµô^m/…·¼ ÖKã° yF¶÷|gÍ{Óô]L..dI#Bn¢b‚Ê€/ýí’oÙÛßÜð;Ø›÷ünëú‡÷ -̘8âÎ8ï p:Ó˽VØ fQÜâQü>]v;žc6¶¦n1Ï™d—Å…t{Ò"H°èâñõx‹ -ÍaíiI§\bÉUûf¹ª<·¶éÚõ Ÿ•‚ƧE‚]÷âzƒ‚ØÜB5®›àv ó`øÒ@"‰õPà·,î¦G¨¿«âÍ–”Ív‰>//Ô-îŽÄ“Ýï Åͦ™Ë¨¬̾†ìõLÊî`om¹' ´æ”*Ù%¶‘fò=ž8Q)‚}»T,tm^8ŠèߦXÈÚÑjÉð¸ -ƒPÂ5ÍêåŒRè$Ä­ d1ãòøòÑ]æÓý[}ëÙ3ö'V"G—Ô´_ë/\h½BÄ \®*»IC r„ñ - -Þ˜Ž L·¤Ÿ7Û;ïb§Š.Rªߺ…-ÒÚ„k -ž:8 uœ>¾ó<óöO<À© ³6Ú9Pî—Žs÷~2ïÔòOè±QJð/¨›ö„¢0˜ù§îÜŽÎýDBÊ4z%1ølµþ2GEzáj6Êö}ê©€8v:u«Og¡Àߺ é.Þvq’q«¶Xõs’avúàø`ä„ÍñzF.ÚÃ+HBã3îìu9“öanÉ™Y’,u‚… p÷òÈ¡CõGª*2ÙïþØË¤endstream -endobj -78 0 obj -<< -/Type /Page -/Parent 2 0 R -/Resources 79 0 R -/MediaBox [ 0 0 595.276 841.89 ] -/Contents 89 0 R ->> -endobj -79 0 obj -<< -/Font << -/F39 46 0 R -/F8 42 0 R -/F38 38 0 R -/F11 80 0 R -/F40 50 0 R -/F44 85 0 R ->> -/ProcSet [ /PDF /Text ] ->> -endobj -80 0 obj -<< -/Type /Font -/Subtype /Type1 -/Encoding 81 0 R -/FirstChar 62 -/LastChar 62 -/Widths 82 0 R -/BaseFont /GBBNME+CMMI10 -/FontDescriptor 83 0 R ->> -endobj -81 0 obj -<< -/Type /Encoding -/Differences [ 0 /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega /alpha /beta /gamma /delta /epsilon1 /zeta /eta /theta /iota /kappa /lambda /mu /nu /xi /pi /rho /sigma /tau /upsilon /phi /chi /psi /omega /epsilon /theta1 /pi1 /rho1 /sigma1 /phi1 /arrowlefttophalf /arrowleftbothalf /arrowrighttophalf /arrowrightbothalf /arrowhookleft /arrowhookright /triangleright /triangleleft /zerooldstyle /oneoldstyle /twooldstyle /threeoldstyle /fouroldstyle /fiveoldstyle /sixoldstyle /sevenoldstyle /eightoldstyle /nineoldstyle /period /comma /less /slash /greater /star /partialdiff /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /flat /natural /sharp /slurbelow /slurabove /lscript /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /dotlessi /dotlessj /weierstrass /vector /tie /psi 129 /.notdef 160 /space /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi 171 /.notdef 173 /Omega /alpha /beta /gamma /delta /epsilon1 /zeta /eta /theta /iota /kappa /lambda /mu /nu /xi /pi /rho /sigma /tau /upsilon /phi /chi /psi /tie 197 /.notdef ] ->> -endobj -82 0 obj -[ 778 ] -endobj -83 0 obj -<< -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /GBBNME+CMMI10 -/ItalicAngle -14 -/StemV 72 -/XHeight 431 -/FontBBox [ -32 -250 1048 750 ] -/Flags 4 -/CharSet (/greater) -/FontFile 84 0 R ->> -endobj -84 0 obj -<< -/Length1 776 -/Length2 1036 -/Length3 532 -/Length 1599 -/Filter /FlateDecode ->> -stream -xÚíRkXUFÅGÊ@¼ZgÓ VÜevaYvpAV7Xâ²^d9 ³34Ìn»-b™¨I™Y ¤ÈMSK¹<‚¨)‹¤¥hÈV^ÌLQ1Á[êãý¬_=Íùs¾ï}Ï{ÞyÏÇçEÇ •8½ªhŠŠEbÓhÔbp{Eøü0êX‚¦fëX¨b¹Ü¼f$Ä 2…ÔW!•!|F§Y"9…^a‚’ ( !04:68 LG‚8# k%I‚Øé ¦CÆq"œÀX°&â3àIMéi {ÜÆiO!dÒ9SÀkЦp&qš"-‡zÄ'Šænƒœ—ÃÖPq•‘$£t†ùÁ¤þ†ë iy  iF2@C㡆RÀÇæ4'Œ†¡¨šÕ‘¦¤’I„b?ê÷¸O¤«3Ä£ Kz™û‡:áòôá3'44JîýäiÁhA±ZKè3ö`-~Vs!1„Ä£"sDn=Ý%¹,œÂhœ ’Dêt £³ Üq•XÅ€ phÐÌ9öQ4Ë\2Ë€žfwõ—ŸäQãÂâäïJ›­B_ J¤œ2êdRtÙ_‰ó(â-#TÏR4@æ ìbF†;8C\JOk=Á ¡bˆ½…ÆW¾¹±rUifxÉ©²‘‚ôÉy;Vž8˜µ//PtíBàØ³LÕ÷ZøÒM×,×7‰].¹×#¾ôÁõÒKî•Ê ›5Î'«ÕÕöü8AÑçq£º±k o o,h8ò‚!ÿƒ+ö—;Òª¼»œÚ{ÑtpäžÈ«bY±ûõµŽ¥çZÜÊL]~ò’Ýy>õr.’Xp 2Îÿíâúoû;çÐ%´}{ãÄ„Ï{ÝÚÝœoNýùùú^q’ˆYR[„b¨ŽÝ}V“¤öõ%ÒÀ„ä‡ÍÁ;b·m·~¼¼»çœß”– -ç¶Öv¹{Zø;¹™VÞictv ¯>o§®”å?~‰·¿_·ÍÕ85hᗯ׻ï9ôËÝY1B‰«^kEÉEÞk‡µõóñšbCù8>>®£1T—ìeŸdÓ¸}£¾=‰²Õ¤e¯R±ü/|]’;ß'³£uÖ>y·XAŽª®$§; ?ïx÷V^æ½ü3seû ×á!?E/¾SÔtñt¿ñ]·¦ëkOþtÀW£×<ŠËIš¨7íªò¨s95òè†CÐ3ú•ŒNëªvLUõÛóp_Oâ> -endobj -86 0 obj -[ 894 ] -endobj -87 0 obj -<< -/Ascent 694 -/CapHeight 686 -/Descent -194 -/FontName /JFVSUH+CMMIB10 -/ItalicAngle -14 -/StemV 113 -/XHeight 444 -/FontBBox [ -15 -250 1216 750 ] -/Flags 4 -/CharSet (/greater) -/FontFile 88 0 R ->> -endobj -88 0 obj -<< -/Length1 777 -/Length2 1024 -/Length3 532 -/Length 1588 -/Filter /FlateDecode ->> -stream -xÚíRiTWŽ¢9‚ ˆZ|1$$@XB±² ŠPÀCæ… LfâdÙ)¢hi« .àÅ"÷‚¢,¥AZ ÒK¡”r¬XÀµÖã©þlõtæÏÜï»ï~wîû¬,BÂì<"ú8eÇesùÀ;((À‹Ë4àpVVÞ$P(û(È\77g(Ç€ƒ#à¸ðyNüIð&¤I$+¦€µ7k’ä<%D… (1”ÐBÂ! -©$6ðÄ0:yBB¡ ’ a3¸\€ B -ÄÀXgØOš -ÀEpyUFäÒ×­HÊhSÀzÊ& Ð&Ç’E û5= Ò^þ [o‹ûÉ1l@2)ÿ*ªw Š%ýE!$R9ID Äߦ®‡¯ÜyØ;s(† -=ñX ;®›ãôªŽÊüPDBPJ("&ƒSuˆ#oû ã›raè·.líJÛ×W;Õ  8ž$…€ó†>…¹o0‰*@‡Íápi"ý¾þŠzkš/.$€Çquqts˜ª -å$ qjj‡è˜^cJ' ¡ -]w¡ûθ¢s—§ù»U1%[T|b§º6KUìÎúÉ}î·äù¶phþ»a–azÒ pxU¥="âÝ3;ç™Ò´-Ì>«Ó°Iߘuä`ØŒáPäffecýÉáœ]‹ïKÏێܵ|Ü“P;ýËÕƒ\—£fû§•çù£´øôÖ{]z˾BF”òòê¸n 'ï›'¿úLj®ÒfÓȃ^t™ÕÿØÿƒ~±ÛeÖªL‰Ó@®Õ7e»üš{ûÚ¶¶e•(²ÙùÞ%aÛ®•8ï‘MkÁÞM§;aÝÏ,fO—Ï­õNÌHcTœ®^⟘WØ©yɘ[ùÑú?¶x /Øñè#£ÆŽ†¦y ”ÞŠEù³ ™snŸ\þMÛHT߇~—NìØ»>ï³¥+Fv_üþfmú¢Ä–“òÀùGb­8quva¬×èã¿#é:® ævôä3Ê}§ùh‰r÷IÁ†¡1ëÕŸ÷d2>l:”6¨¥^íŒL$$[’ò›šXŸÑ樤\WÕ(–v¤Gš¢àª¢²vÉãÈYó[{F_Y·û̾éõ·¯]Û³\˜xÉFœ•ôíØÌ‰Ò¶àu š/˜K ð"£~×ÄÍ[¤5vMT}ä`YaÙÝæÁv]•E¯ßà £SMÕ"Êݦ&úª«#f¤‡ÌÍ­±,ÝÔ—l£_êÜ—Ç2ïú.±†ÙrË…=½®e>ëÅm‘®q`ô“˜Ü ÉÁ%¦Êiî–ªDøüj8s~Ý![ÕhââŒÛc]:+Å×õ+#Ǭ»m¶vJªú©b½1'}49¸!Eå¥cÑtvhOŽOÍS¦–rÎëŽß³|û?(Š6ŒWŸKÙPêsZ_ÊQj²ø#n|Öc²`àF°†xfnþ]t‘Éñ”¦—ÙªýýÍR³z§KªË=y®«F‰–ºPSƒ ì¥:ùaŽ:£“ÚRv×à -û±Wè±\̶‘Ó‡dÞïžwdw]8ëÀ/ë¨öŸ)0Po¿å±½ÓµÁSºH6ëùU;$!0ï;*¦ÞS³rÇÑ­¾ÿ¯£áX|»GöÎ?|ÿ ü'„!ñŒ?‘ZÂendstream -endobj -89 0 obj -<< -/Filter /FlateDecode -/Length 2857 ->> -stream -xœí[KsÛ8¾ûWðhUE\|_¶jgj³å=ÍÄ®Êa=J¢-n(R!©8þ÷Û@7$A)q4ÃÖTÊ4>ôãë¨ù|üþc^ùQ{i–ûI{ÛÃMà=ÿéQ”øQœÂ³£sóÀÏ’Ä[[~z¸ùÛû0÷Xä‡Qâ=<ݨUæ§©÷°»ùw{w8+q»VÞ:Lcï¶•íF5‡}©ÙÝnåýæ=üÄg^îçI(„Þš3?ãŒ?ì«æñœ{·G)±kâE -+ˆxSÔr<=µz|ø€L½0r --ð„Kõ¢ü:”8­‘=´@%mãC3 -ïöýÊËBï–¦{ù—fv²ñNl6Ô¾¥ôÆö¢ÞVÃh6ªq @ÿ¶m¶Ô‰ -ÌF òM±]y<ón?½à_ÐïzÛì‰ÅPmäC]’êAÛŒùy“¶_*±—u„Ó¸¢4í×;Õ5LÂ%dÙß•ŸOUg9” Âz¡™˜‰ˆ¾b/Pv(Œ àvåãZ¤3›•/Ö¸Ú¹}ãüÑFeß^÷ÍÌ44Ò\Bšs[ þ¢Ï$“ ŒôŒœR> ­|ʴø­Wp³ˆ|‰E -mÝÌÞ“LkþPÙþ‹Úz5ôe-+çKËQPåÔø¢î[õÜÃRýÓ«š_u¢ñªbÐë¸u„ºhUͳê'Œ…ZÆ0˜3±Ì³\g")›'˜&š¾j›^½©džã†6+Ýu,T¾2«áÐþôü\¦—¤þ/¨þ1ÇÖJ¨ {H”Ò Ùó‚=ë¡zÞ“%ÕÊ ?™%äPÔ#7ÉZÉËH&.äÆpq¹;!Fï ³ðTPZ[p¿~¹€I"—„ER὜FK=˜ÂPDf;¨ÇB=˜êM´ŽEg|N¼hŸÔÓ°7Ñ&ƒµjƒmoäÐÅãÃfEȤ”‰!@”ý</*T¹ ùÔh•g"¨ŠübPc© ‘¹µ” Uø²`œovÞ4NKàVAx¯^£‹'›XD[y¨âSRáNõ×(lÓQÇ«êØ¶'Ì, °ñf£$û°È¢˜úDº—›OÙ‘°D>Œƒ Bü|ô&' ¶Å =L®`Ѽ^Áé®KYn|ƒæKµÃ-SE' 9´yI`{RØK5ŒâØT8C:Œ|"_‰õË^ƒ€ «:=Ø$$Gê3‹þˆ4LÂZœîÛFc(±ìOõ ®4ÊoÂíHÉ k±Ä -V`ŸúbS뺪x"]Êpí«á¤Ê=bfI²Ê”d‹üÄô§R1§Žl—êäØQº<¯/¹38;åÀhãŠñ=w­±ÔD£ùŠzMµc!#™Ý¤›ÇéFN|„Ü«£LN@¾”ª Vm`µÇ–RñØ”DˆHTjÏî÷íÉõò„M_í&'í¤*ºM[×:Äž­Üƒ²é@ªz=Òµ®"[ã(!¥ æßr&±,mé`‡NÄõ1€dõzÑ…Œžê8há=‘…*vze=g€d{2åBÚØ~Iuåp‘bw¼SóëªFù>µÀ®µN]*¯ˆXAÕ‹pz¡kvŠïËbúF¢·*ñŽâë  £¸Šu*)#);Ã0ž†¡"\+» ™wúÔ€íµN·p†Õù6Íý0×*(ôﮜ ËfÈh]u„¥Šo:MW©¡«Î*Bî܉oÂzÊbWXç_i•»ñiöŸÓ;¤(Ïü8tÞ!1Ø8•û -)ü¦­­ùò) -Œ"rPKô¨§ªÙÍÑ0øÚšj83ÁC("â(³[ó—ÜX ÁmŠoEËn‚\q‘s7¶¤-ºñ]ÿ"NºW Ÿ±˜\%û“]eœD¤hDèdþ}ø7¢.¯í+A§€%gŠSл3™ù‹ÎDCëÔµ®YžËF¨»tÚŸþ‘þ‡]PÜËNµÊñ¸”åð«æ²Yáx¥ÑÛÍjæ/š•†P•oPÈŽ<Ë)Ñ¥‹<ÑX(ò`ù—j™N[:>ÊqE‹–yžœE„æ“÷t —…µž=.äá 3׿¨¡D­"K;Ëõªˆê=±ÐR½æà—ë=·Žäzk]ìy3q{‹®kÜ)Ño³]¸X±›³äEñähý«Ó¯qi!þ~Äú¢¤&& ±’’Ÿçræ_ÀÚªç ¥ÆÌ,5ºèÏHÄÙÄT]ùŽ ßUþCÞÃñ²˜1‹þACþï‹™yš¹EÙ‹ÔÓ$|ÑiâX|:k<23ž‹ý" $ýÓcÑ ~ñ_ ä8(v{*X›!rQËRp’ð” 4× [¤ÿOb¾Ø¯7ÿql×·endstream -endobj -90 0 obj -<< -/Type /Page -/Parent 2 0 R -/Resources 91 0 R -/MediaBox [ 0 0 595.276 841.89 ] -/Contents 92 0 R ->> -endobj -91 0 obj -<< -/Font << -/F8 42 0 R -/F11 80 0 R -/F40 50 0 R -/F38 38 0 R -/F44 85 0 R -/F39 46 0 R -/F14 72 0 R ->> -/ProcSet [ /PDF /Text ] ->> -endobj -92 0 obj -<< -/Filter /FlateDecode -/Length 2621 ->> -stream -xœíZKo举ûWèhÛŒHñ! ‚Y$Ì"@²sˆ÷ w«íÆôkZêñúß§ø&%RîÅô-‹ÁÀ-©TUüøÕƒ¤¾Þࢄ¸Ѳ)DÝ ÎY±ÜÝ”Å3üÿ§“ ”#ÊüN<\0R¢šóbhøñáæÏ?ÕEƒ^ëxR±ª#!ЇÕÍ‹Û7«Í(¸=uwÅþ.‡Ía¯î´[¸#ºý8t§v8œìõã-~¼³‹»â×âág0…±·…±@K÷´¿:©:B5aN&ðe©IøòpWÔˆèÛwÅí7øS·Ý©ÏûÜjE+{}ßµ«öIÝÛÊ¡S\†/Áíä]©Wú¥o%1RãZ`JQUÃcŒÆÌˆ'ªª’ÀœºHÇ8"}·RÌænìʘ…­ÕPS"ÍËáH ÌÁÚýÊþü :)Èlô+í“ò"]jLÿx˜ÐŸ4¨®›Ã1Œžð ûÀ¾b@~ÿ¾"?-=h °sgBc·<ߦÞ`&R ­iT,}é_áá - ÿ|S¢ª©‹Wø]"Ü4Åî†Á æb{óéæï›U¶´MœÃ„!Êë‘wOíòËk{ZõSyƒ$7E)P#p#²d”Ý*`’Å݈„„òSF£¦‹œöÛuDgJCª2„IŠÏ¡˜ QÚôedÝð TDÑZþ‰g^¬ì,õµqä–ê?)‘W­°=-»•óâ»z@öÞˆÊlc4Dà'–5q†ggÖÊL¦6Áw²%üÕÐî»ß†<ß9Ä%äJ|´eù{wìN»óÐJžÉäË 6ÜOÝ·©ÇËlK¯ã±U6ë1Ä1Í{œQ.àf>F™\ŒZ‘?bÔÅè}6ª´® ?‡žχ #²ˆ>;Vf2‘©ˆäáÊ2¨7^Lb²* -sN£ß“FÙ"Ð6ÉŠA‰­GþÛÓ°‰"r³?nÛeÂeVJÁ®ã²U6ë2—«’\Þu§ç„{6¡Q#øpô2Ùp4"„ãá8ž - - ÊEÊÜ\X™Éd„ ²2å£Ù€’m‚ CwÍ$$sñ} µÊ¶‰ƒŒ`Dë1]Òm§%(Ñ:¹ôõ2Y‚mÑ´!vtØÙIúÛrÙõ½ïl.b¨ìRIjq—gè=%gÕòrDɘŒóùÝpÏ4[3`siÖ•ZÀÎ͆•™LG*ë°225`d“>.;~­¤ïµå“~è^ÿr^¯·Ëøýá4ø‹LÁ"”!Áùu|·Êf}'¬DM3‚6òU/·Fœ­p ¯^ÇW£kÖÕJ"&ïê~xI¸)0,é•ü4Êæ…þ…;Úm»]·`=÷ g)¤8†¯ªU6ë,¥ ´‰}éÚ£÷ôpL8 --| mþu5Êfe%A%#SGíî-‰z9Þ>Úµ_R¡Y`±¦F¢ÆWZ­Úò«µT –Zr9áªH|%W²yWë -•%I¸š­·¬./·^$Wm„ÙöÛÏCv³ÀׯÇ[ýˆ¨'zgPV¥tÕmpÈÔKŠîÇýò$CWÔLå»°–Îts¸B5wH+2F2ŠfÈ£5´Q”Ý×s»u,Ûmú];,ÉÇÎ%/UúšL/“M#òÿ=3Xúù™œÐÍšŸ~}8í’^TTNL4&5t×ú¥¿wÇx^m¹ôNE ¡ÒŠyó'½I­ü^:ûSï†é߯zGüpú¢·öÏöÉQO4üYè=sûàñVŸœÝ]ÜõÚ˜•=î=~¼SG -uì„Y)v»Í0tú¶L¨/‡³>XYVR[éÍo5Úcײ«`ú½çiDAYŽJÐft‚a¶úŸõü±€;^Q׿ù ½ûðasñQ)åÄC‘¦¨"• ‚Xa¥ûH­lhŸŠ‘X -t±"Ž¥úPe´78.ƒ€ª¨ÚTÒ'úòu³ÕÓgß{²üA¤gÙ³ki0Šæuh!Mqûf¯7{-·ùfˆpö:ƒy£Æ ¼ÚuC»Ö÷þËx‚|ž -¢Ö‘¸P6vå[·„ÙûËÓá°MQ™(¬SaH±ìS?Mªß¯úDÏÁ} 8K /ˆbQD¬WoG©uûˆT×kï‹HBU48¼•¥iXªÛqX*=KHDÓ(Tâܶ½ Úµzðæ‡—ò:ª¹Ïþ!ä2 ¢ü¿°¯Æ±Ü:´–"÷­á^šWzin˜mœí­pö Ñì-|÷IŸLú4á˜<>€ _ -äã´ò9<ý•KùÌûžÊÙr{ŸrÃÊ -²宬¸!J}Ï:02|&Xmzè7}e¾ˆR$)åîÓ×s|¦®J¶ÄJ¢|©=¹÷%Fú×S@ëJò§7 - íÁL·rf­³J±Ó1è¶œÙÛϧÃù8 -vXd»ÿÖzœ;æy7؇µY\€,MŽ~T/v¾¶!ñÝãÁƒÖ¿YÏÛß2¥Çr…xŸvwnKfÁa³t”Ö^JŽ/—Góg—j[ã«Í­}ÿ!{]1 é.Ýö‘E £Ê ú:ó•…Ñcy,±˜Z4ÇÖsíÉöØb=Ù`Š Þ›‘¶+{6ïfdh9*Œôa³0x™, Fäf,:F0Dý' -3©&‡°‘A¶™EÀËd0"— 0cÑ!0²˜@ 2øÉd‚VGÿñ÷34q6Ï„@&‡ƒ¹‡9‹‡±Å)±Áù´0¦)]h õé ‹?¥BfŸOì=h–QÒÜ£U×/CK›°#¤”¿_9”š¨§Ø¶Q_½²šd=H´„58q-Åá¨çþO©’ù„yQ_‰SzaÅMùXí"Ù2‚ªÒ·5jM$d½_š¹Y…K9f=È—.Ý Vu •Y˜òá:T]&[R%,F9,3X°Ž£ïØ’2ʶ閬AD#-6H¸c—B l ÑI ™£²öpŸºuwêöˤ>*P)b´}'–šJ¹ÕçćÍ^ýMWð+øPÍõ¶ÃêåÆv+fÝ(o¾:÷Þ6j Ìj0õ¦ÍRÞ’À5‡Q§"oø ש¸H©ôíJçîÙE“ÿ²°ñ}}ßnó!Hb>Oz™lž4"—äÉ‹.OŽ,&òddÐì1é»-]<õÊa¦r¨Ï“È<"^&‹ˆ¹‘‹‘‘Å"‘ÁO¦Ó~öŸ7þÇÔÔñ -)_K¦ààºF%å³à29p¬ÈàÌY´àŒ-NÁ‰ ºu½m3N.ä/ùäô÷àÅ!Å’ô·//“Åˈ\‚׌E‡×Èb¯Èà{ß8×Ǻz> "gšwHçe² ‘K@œ±è@YL€œßµp©ü=©ÞÍ|7¥5µúæc?/2ÙjlÂÐÏ =šøöÀ|Ì?5öËÍÿ÷0i‰endstream -endobj -93 0 obj -<< -/Type /Page -/Parent 2 0 R -/Resources 94 0 R -/MediaBox [ 0 0 595.276 841.89 ] -/Contents 97 0 R ->> -endobj -94 0 obj -<< -/Font << -/F8 42 0 R -/F40 50 0 R -/F14 72 0 R ->> -/XObject << -/Im1 95 0 R -/Im2 96 0 R ->> -/ProcSet [ /PDF /Text /ImageC ] ->> -endobj -95 0 obj -<< -/Type /XObject -/Subtype /Image -/Width 162 -/Height 189 -/BitsPerComponent 8 -/ColorSpace /DeviceRGB -/Length 6543 -/Filter /FlateDecode ->> -stream -xÚí{XUUúǹ)ˆÅH)©xWMT5ÔJÔ˜¼¢e¨©c^R2íæXN:A†yIÄ{jŠ÷tÄ æet2¼D9fi‰—¡DÅx:¿ÏsÞ§ýìÎ9”6óÓܽß?xÖ^gíµÖyßõ~ßµ9{·Í¦P( -…B¡P( -…B¡¸“HIIÙ¸qãomV×®]+é£cÇŽ½ôÒK•›7ož3gŽz³$T¬XqÆ ¿©)}÷Ýw>>>7nÜpùizzzÏž=*ÿö·¿©7]âäÉ“nnnçÎ;{öìÞ½{¿ÿþû¥K—fff Nœ8AŒ)bóÇûí·_~ùevv6‡.\XmÇ¥K—¤ýÖ­[/^¼HûM›6ýç?ÿ9zôèÂ… srrŒ¿þúëE‹ýãÿCçqÏŸ??qâÄÚµkïß¿ŸÃëׯïܹ“SWN0`À;ï¼³eËÜ››+• 6ܾ};…~øaÇŽ j´W¬X±¢fÍšfÍšU§N¶mÛ&X‰Êµk×ÖªUkèСØð™gž¡æñÇoÕªUµjÕ y¼S£F=zpvåÊäîîÞ¦M*ýüüþøÇ?FEE=ù䓿™3g8}òäÉ4îÓ§O™2eÆŒãrÜ„††FDD|ðÁ¸¸yóæO=õsðõõeÍpJ£FBBBâââ(ÐóåË—K—.]XXXTTÔºuëèèh†fˆ]»v©‹ARRÆÃnÅÅÅ”ñ˻ヒ…ëÕ«'†%„ñ/…ûï¿ÿå—_þÁŽfÍšíÙ³‡Jl íïÞ½›`ôôôüꫯ¨Ä5?ü0úÄ}p‘#Gêׯ/ —H¯T©’Ëq)´k×nÉ’%¶mÛ&ë °`X“¸’!XÒs``àÊ•+‰bÖ!5“&M5j”´ïß¿ÿðáÃÕÅ€Àœ2eŠ0hØ“(ž6mš,Ç¿ï¾û®^½J‚%ŽzýˆråÊðÀÐ2"ÙVZ6lôèÑ´„–/_.[>2/iÝå¸l´HÓ¦NJÈS`;GûŽ;RfPI¬N: ŸãÜÏ>ûŒ|Á²´Ø†‡‡³rÔËìQ›4i"›"O*!ê?ýéOØ—-[^…{?úè#j0/Œ*͈/r4®¬P¡Â!Cdásã܈8x8##ƒBjj*)õ¡‡Â)’v]ŽËŒKl’ô‰ß˜˜¨`Ĉ ÄP4‘ËžÁ¸ÐQ^^3VAÍÆÒfM2UÙ(~Ä)\Ò§Ð2¹8??ÿæ;„B9ågþã!ຠ—Q`¯e\+AæFfÅEœó‰ø2ábM}§P( -…B¡ø`Ö¬Yjkƒë߀€€’~OTX½zõrss“°(,‰Ë—/ûøøàeùmKaI¤§§ûùùáeooï‹/ªA,‰ÐÐP7;ðõܹsÕ ÖáC‡ ëR¥Jyyyáè¦M›ªM¬‡Áƒ»»»—+WÎßß¿téÒ8úg~Qܸ~ýzÙ²eëÖ­»nݺ¨¨¨yóæáå·ÞzK-c%,[¶ Š.((صkWß¾}©IKKkРZÆJxã7dS••%·3f˜oßUÜí(**’ÂæÍ›Û´icÔË­; -‹aãÆÆÍ -«â£>êСƒÚÁÚX³fþ{ÓòX¹re\\œÚÁÚX¾|y×®]ÕÖÆÒ¥KåŽk……±hÑ"‡¯ÖÃüùó{÷î­v°6æÌ™#ÿáTXûöí[½zµÚA¡P(Š[BaaáŠ+Ø)µoßþ½÷Þ“gWùûç?ÿùæ;)((ùå—o¼ñÆÍw’™™É¹¿Ø,==½N:ïÛñÖ[oÕ¬YS¯©oðNxx¸ƒuLL …#GŽ?~ÜfWô"Øi¶dÉ’sçÎI³«W¯²$¶oß~ùòåÏ>ûŒš &±ï ñeñk¦ˆ)S¦´hÑBÊŒ¸`Á‚½{÷ÊëB2k×®]¼xñùóçKªQÜ (ÿ-[¶80g»víĘžžž09Þ ìÔ©“Í®0Ö¥K—&MšÔ¯_ÿ‰'ž ÒP’qÖø2£Q£FÒ àMåYª×_½yóæIII!!!ýë_möAé|ôèÑÑÑÑQQQ.k7‰³gÏâ_;}ôQu¦£GÂåË——;0—.]*aþüóÏ÷r:%Šmve°#v8k|™7¬™Ž;²èÖ­t_\\|ñâÅ‘#G -Ÿ¤¤¤tïÞ+êwÞ‘³^{í5—5Š[BQQÌܳgO77·}ûö‘”q®ð0Q,mD"&77·råÊÆ3n7f%J2.5¾ ìܹ“ųÀøßn‚FÈO?ýt«V­h 7|¦¦¦Â,þøã+W®pŠhÄ9ôÏÎÜÐ:}úôž={d>;vìX¸p!sv˜vv6‡ŒK0c:_¹råúõë *kذáöíÛ-àå‰'ŠÆšùùù¡¡¡?üð°aÃÊ•+' -FqîÿÕW_íׯÎÅŰ4TÀG¬^QŠ#ų–ÌóœøÌ3ÏBa¤ž^x¡C‡5jÔ`Mʸ²¼ïvÀŠîîî/Íœ={6\'eLGŠÌÉÉ1DØD}jj*Ö#|°gÛ¶m -›+±µk×®y{{ËP½!¢ËŠòññ1ò©˜úÍ7ß4ãããÓÒÒ¤ìRÌmñâÅ0?¤-Z»kÖ¬ þÔFq˜?`S7vìXH‰ &Ý>V¯^Mâ&Þ ä0î] ¢¸nݺ•¤Q¶¾øåÆ$>ápa3ï1 Öc«$ª}.ÅÖð¾1»ìO¬’,éŠ?üá\‡œ"¼.û§¼ÿ~º‚ÿ…„ÙP¶²®pÎpæùÇÆÆŠÛ-Nd©“ôåz –†®çÎk×WÊ Î×V䣀€,Cž²™DØðàÁƒ)°‡½‹g±5BÞ‚žëׯ ð\êòa°:ô"I\<ëëëk‹9÷o³ßëË)²³ÙuwÙYAÚlϘ¶d[óüɸò‘G‰ŒŒ”¨yàhÓ·o_¶mä ×ÚŠFêСC· -g±5‡ 4Ƴqýùþx‡«-Z–ÔɱcÇþõ¯™k¸“¥ƒÁ6ú¿2…B¡P( -…5Àå­*ŠX\±¦¤¤¨,ŒÜÜ\yߪxùå—½½½}||>¬Ö°$~øá‡òåË»¹¹•.]:))I bIdff–-[VTÝUß’èСƒ¨ö???ç7˜(îväçç³ïòòòºï¾ûüýýÝÝÝ)SÜíxûí· äôôô¶mÛ.[¶,$$äž{îÑ×Y 4—>ûì³üñ¹sçÂÂÂT?ÙJÈÎÎ&~¥Ü²eKyׇ­„¢¢"£½cÇ);ܦ° "##]¾N]a%DDDÜÁçe·7–Ç[FÆ 8 v°6BCCsrrÔÖFHHÈ¡C‡ÔÖFíÚµÍ3+,‰êÕ«=zTí`m•+¬ŠäääÛ&i¢P( -ÅíÇ7 á¬þýûOœ8QÛÌÏÏÕ3víÚõÞ{ïQ˜0aÂçŸþ+†+..–—@¹ìÿVá ·uíÚ5g5°ÿ~”_‚‚‚ÁƒÿnQÛ¿Ù²eçÛ1eÊ”FuîÜ™z.K /¾ø"þ¥0jÔ¨_÷ŒÃÔ©SEöÁeÿ· -¹­óçÏ‹XŸ>}*V¬(å>øàNÙ633Óи³˜9s¦ùuÆï¾ûnëÖ­mvɬãÇKå¾}û222¾ÿþ{Z2sŒ)‚<Yì~WÛaÈ¿€={ö¼ÿþûòÄ7íÛ·o߯_¿Ó§O›û§·3flذA!“½{÷2ÜÒ¥KÜÖ˜1cDCà0O‡~˜›!ÕlܸQ~Ñþúë¯-ZdüÐé JVXX¸víÚÅ‹c iGíܹ“SŒk="â2‰ØœµÙoxÎÉÉ©P¡Â¦M›8l×®_Áf¿ '(((>>¾J•*þþþ|ÍY³fI¼›²ðK5ˆSÃÂÂDAè¹çž‹ŒŒ4hP@@NLOO÷ññéÞ½;f7úÇ•*U9rdݺu‡ F ýשS§mÛ¶={öôððX¸p¡íå¶Ú´ióöÛo‡æy:÷ƒ/D¿0CYó“'O¦=œP¦LÖŒí§¢d‡ª_¿þèÑ£££££¢¢ÄÅÍ›7gi :Ô××WþuÃr#ÓGhh(–Ç}üussÛdj<~ï½÷2UÌÒ¤IÉ¤ãÆ“§WàIÑè0²Ô$šxl¹ÛŽ–-[Ò•äÈ“e_®^½jôO›˜˜¹O¨¤Rú‹‹©'Ÿ|z±ÝŠÜ‘ƒÌ·òótÙÏòåË1‚Í.?ÌR‡gp¢ÌŠ5Ï"´ýT”¬S§N"õÆ““¶mÛ&«àw¹'qéꎻjuwwy¾/*&†} ·òåËÛìRl0°4&:z÷î-<¹uëV³@ÔJ´öúåÊ•;xð A±jÕ*‡<%JYFÿ,!@ÙÚU®\Yúß²e‹a1u¹y¹-ÍËË˸ÈAÈ˹¾5‹œE5~üxyl×®]ÙŸÈwyì±Çj×®m3‰’ÔÔTbüÑG%ö…µÈ/ÉÉÉÄÜE°;vLÆý-rVVÖƒ>h®áaUx;¿˜pnn®|Ä—"ùR¥J•by˜²ð>ÌoVÐr8—Bn¥,韸 Í¿ÿýoiÃŽŽ¸ BLL‡`L¶y·$·5wîÜððpãЊˆˆ0zÃÌœ~XHK–,‘ãiÖ{>¥y÷7â— Fll, #@×h¿qbnæÒ˜®eD¡ëgð¿’ÛºÉ~X–|’ß ‘ßÍŸ² 3Ò“ª%( -…B¡P(î"Ìš5K`mpìíí­×)ÖÆäÉ“ÝÜܬñþ&EIÆË%½æ@adggûúúâeþîÛ·O bI$&&zzzâeþšŒPX×®]“@øùùÉ -+aùòåîîîþþþ¸Xô¾T Èzˆ%–8€—ùKÙ|G¢Â—É÷ßÿÁƒ)ÇÄÄØìwúQ£ÎV¼yóÄÅ€X–޾ƒ/×VüÏ!oôsð²C½ÂJ0{Y¡^V¨—êe…zY¡^V¨—êe…zù÷}‹B¡P(îvŒ7ο9r¤h¶ü:\¿~]^þïQ\\<|øðÛüë¡UÁ - ==='Mšô¾¯¿þº‡‡ÇôéÓ]oÙÙÙ.[~˜ƒÏ#räÈ‚ öîÝ+‰—$´uêÔ©ŒŒŒœœ\“˜˜(•Î"]{öìÉÏÏ_¶l™¼yûöíÐá¹u£qPPPJJJ•*UÌõfq°’jd¸l®¤·œk`1A°ääävíÚ‡ôïëë+·^×x<)))$$D”\ -m­X±" >>žÅ_«V-yRÉ¥HWµjÕbbb:vìèåå×¹sçððð:8ÏjРAØÓ¹»»ê=â`.kœe¸œ¥·œkœa1A°nݺլY3ÞèÑßßÿÃ?´ÙuNð‘dbª{÷î6WB[,È|PB‰µáææ†kJ銈ˆAÉ©©©ˆkÜä0%ÌÈ -¹dÊ’ss®q)Ãå,½å\ãë ‚±Þƿʎ´´4¾!,K‹ØJ±2q_ÍæJh‹ß«W/©9qâ„¶”$ÒµfÍ -¬Rr„Ü/ E°Ú¦Ä -Áõ/ÚåŽÎâ`Î5.e¸œ¥·œk`1A0z¦CÑçtéÒ…-…=z¿¬ç3gÎÔ«W/++Ë¥Ðáo0ÛìÙ³ñï/Št‘‹i‹¯²RXXXê "àCéÓ,F6w– s–á’OÍÒ[%Õ˜a1A0"ÎáÙ1ÜÄ–)//iËÝqð6)òt)´ÅBåZƒeŒ[ùúøôEºHÓ†Îl/º¬Î¥Æx§Í.ò™à,æ\ãR†ËYz˹ÆÙ,{å•WD/ËD–7NiРûB :š?¾K¡­­[·Ô0ÅFBØõçEº`$ѹÂxÊü¨ mÞÙÊÆF.%œÅÁœkœe¸œ¥·œkœÍò»ãB@. F#+¹¼Æ„‘Ìu“"]·gq0çg.gé-çš[‚ -‚) -…B¡P( -…B¡PüðFùYRendstream -endobj -96 0 obj -<< -/Type /XObject -/Subtype /Image -/Width 550 -/Height 240 -/BitsPerComponent 8 -/ColorSpace /DeviceRGB -/Length 24246 -/Filter /FlateDecode ->> -stream -xÚíwtEÆ $41€éEÞ¤w¤)UPéUzïi‚ÀH/ŠtÐDºô.é ""M:äûÜãœuwóò&á>äì;Ù¹sËsgwg -…B¡P( -…B¡P( -…B¡P( -…B¡P( -…B¡P( -…B¡P( -…B¡P(Šž={6ú:t˜={vˆ«zðàAýúõƒúo»ví.]ºd-¹~ýz‹-ždµíÙ³'kÖ¬®ÿºqãF̘1=zd-üé§ŸòæÍû<úåÚ’O?ý´N:Ë–-ûñǹoÅŠ)üõ×_è}Í^¶yÚ´iéÓ§©~ùå—iÒ¤áîªo¯4f̘ÁhÊ1”£M›6þþþF½7n|áÂëù 8tè÷ïߪÎÓ§OwïÞÝV¸fÍšo¾ùæytaË–-p-›hذá_ý¦Dýøñc V¼xñb[á!C<¨ZƱyóæxñâYKòåË×£G9>yòä¬Y³¶nÝj͸„³gÏšÂßÿ}áÂ… 7¡ -»“ÂãÇûí·»ví’(³víÚ‚ R8uêTS!&iò 罬°Õ†p|åÊ•¹sç<·ÄDŠlÙ²™Ü„d§P¡BRó¹sç8X·nÖÇisæÌ¹víšœvïÞ=ÂÓÏ?ÿ|ûöíxßfòkê4jÔ¨ -¸öE¬~éÒ¥ØÑßÿT‰â¥ƒS½zu9ž?¾Oûöíåçˆ#råÊe;¿S§N"FŒ> Š™|öÙg¶BT÷«¯¾z]èÚµ+ -l‹A±cÇk¢þúë¯=0´>øÀq°ë¸qãŠ!+Â2°”Ò¥K›ŸÄ‘7Þxcÿþý6,eÊ”uëÖ=z·nÝ$ÜjԨѺukN;uꔸîøñãc‰‰'N›6íäÉ“)$WâÌ.]ºd̘îAÉ AƒÞyçܹss&i^Â?üßëz/+œµq2ˆR¥Ja­ÔöÝwßÕ ,‹ÀgãNt_;¹^Ù²e‰o½õÖG}Ä¿ˆhY²d©R¥ -Î$S¦L´Öû6gÏž]ND~%™#GŽPyçΉÈùóçw-Q„ÀÄ*Uª$þ Å@÷4h ã›"E -¨Îõë×wìØA¾³|ùr4j÷îÝü„»À e¦"Q¢DÂ'9mI nݺ¥JÖP³fÍ4iÒTDÉ’%ñÉóæÍŽÓ“Ù´+iÒ¤lذA|;Àâá¡âI’$=!NEˆDàæÍ›:tÑGŸ?ùä0ÕÊ•+þ/ÆÏÏïx œ÷2p­ H…¤ÞW«VmôèÑ®-±Öƒ-Þ‰ ÂP#B'f˜ AR$ -É›$ýÓšY‚‹CoÚ,s•åË—¯W¯ž‘0­uí Ñ Ÿ#WõíÛ×µDC`L9€`c,xZQiLþÀ°â3 É“'‡@0øï/¿ü’9sfˆ^ו°AE¸eæ¾ô矒MG•¡¿{÷nñâÅaeʔՌØÂ³6è†I!ÿ¢P‚B£FÞ~ûm4†aàÆo |ÉõÚfÍš½ÿþûÍ›7§m+W®”¶.\˜sˆ;NÒE¯)Á|TäÈ‘Åê³eËV®\9þëÚ#ç} ¾d…XaͱD˜^Μ9%ÆÑ†9rÔ¯_ŸÐSµjU -‘¼Â]»v¥N÷B3`4Rõ6Lqéß¿ÿâ@L™2Å××N9ãˆ Ô -D… - iÂùɉP]”—~úôéáÇs‚TõÛo¿¡0ض@0B Tøs’ þKÞqøða9öÞ¢E R`™Ðs½—Õ²œµa×ÐBû®-qö_·nì”öCü F™+#ÖW§NxW²dÉÌdNTò²Í0Ošúm `bÈÍC_ÆŒƒõ141g‰"ŒLõÈ„®êë.Z´¨LDOŸ>ƒ–-[’Ã+„IË%’Ñ»6˜ ÁHž\\Cæ©YA:´S§Nr~“&MÚµkgmŒ³6¡ORHmhø¥K—V­ZE“$¯ïÙ³gúôémJ•*¶ïzí¶mÛŠ)"&0jÔ(ºOÛ¢D‰Bî)¥×„W©™®¡É2‰Çpí‘ë}I ‰)’¼`#'NœààÂ… r>ž¸)žp´‡ƒV­ZaÂü7oÞ¼$Ybéøº zv€'dˆ?UªTÅŽ-ÚìÙ³wÿ <3jSBñÈ)Á:8 ¦‡«—k§NŠ~> ‡Ÿàu!lï¾ûîúõë ¸Ps—÷Þ{oÏž=0C¨Žë½¬tÖ†F÷ÄcJÔüǸ¶Ä`âĉVó݆DQAØ—™+Ö‡qáC$Ó‘üˆó¯_¿îe›ms•ú"åXÓøñã±}Im\K/3fÌ€*,_¾\ Þ öÎßwÞyGÜržsÕ¤I“œ%ª¨a¨qÁ‚ñá„yÜ@¬Áç “‡íÃC %C‡PxÆW<*%®„A6-•>|8C† (¢Ÿøm*ßm•ºÖff–ŸibË×®]# ˜ÇCdÍX±ÍHnâ¼3·^Ë]è ´MJœ¤ËJIÜ éª\¹òرc]{伯L84oÞ\f/±e"æÙ³g1()$ÂÊ”8Àx»uë&’ÇT‰§ 6´Þ"¨6/½{÷þøã­%¨ŸjŒ÷˜3gN”DæÈUQlh?—˜(Q¢sçÎaz¤ÐØÆHú,<÷ž/_>4‡ü×Ý¥K—Š+’äâÌIºå¡aáÂ…Esœ÷²ÂY›@ù/ñKºàÚ+—ã¾ðÔ•Ax‚ -5Z±b…™+“3Ñ^¸'à1Â+ÇÞ·²jŒÂs_ˆ˜dOÔCÍõë×'–9KTQÃàÞ1cÆD» …ÀÁ¢!wïÞåçŽ;ò/HÉ ³fÍ*Uª”ÌÈ9 Œ‚Q– “É%4êÀÜ ”ø…Ë%™²¾ñâZôɼçÅAºp¾•+WRÂ_"TÊÚ#’yâ¼–À!8Hø–(m |ê$]V*ضm[Cº’$I‚ówí‘ó¾Ï|…h!òJ‘'¢ž>}:—p !žh '¼zõª‘|ãÆ)m»wïÞçŸnÞ¹U¼*snä¤ÖO îܹc8ÏüaèôÆæOž<)¯þ¢`2+Ä/¨×÷zjmN¸¶Ä:“F=ÜERø§Á“ˆ™C½6oÞ¬6g_ ¢{÷îµÖã,Q„lݺ§mÞõb€ø9xð`ù‰4 ¤H>@†xøúú’¸6˜ Y4>Nœ8ø^4“(& Q’%JÄ7cÆŒ8^y–aàZ›Ì,É ÅŠÒÕ®];"mã.6ÎOÖ#]¯%d@«"M´]ÚfÌÇIº¬TÐd"Ä#¡p®=r½/yŠŸŸ®¦_¿~ &ääzõê/^œ¨‡U‰æ07ä¢E‹¬’'qaúôéòÔGñ -¡\¹rÍš5ƒ’Ë T(B€[·n Çp%l‘ÙÞwŽ?Eq­6¨Úœ ÷|‚A¸¶-d¤ËslìQ.^¼(ob>ÌgªÔC%®–H“ÌËØ -Å«‚S§N 4¦ôÝwßéÔ–B¡P( -…B¡P( -…B¡P( -EZ‹ßê»a -…B¡ðŒPYüÖó¿ -EøÀôéÓkÕª•;wîO>ùDVP -ž÷ pæãå§ -Å« Ï‹ßʪ8+V¬X°`XÐÕ«WÍjKòù˜m_…"üáæÍ›*TÈ›7ï¬Y³6lØÐ¿ÿ(Q¢˜œð¼_€+ -.ìܶF¡gð°øíÉ“'£G^¦L™V­ZeÈA6";v¬Yi³ª]»¶u_•§"\¢oß¾•+W¶æ ;vÌ’% ‡’•ßäøÜ¹sÖý>üÇìÞ½{æÌ™f˹µk×Þ¹sÇß»w(†Ñ͘1C?%P¼Ò€˜eù/l+uxXü:—8qbùü«¢E‹ÆAݺuÍvWuêÔ‘3Ì¿ -EøY|¢D‰Ì>ƒ‚ùóçË¢jE‹5«B)RÄßßߺ_@öìÙÉŒêׯ_±bE???ªºråŠ,#8M yôèQÕªUãÇOSi+^i9räÐa}ÄïyñÛ6mÚtéÒEÎ .]ºdû\š f;G¡x­0iÒ$²›W¥µ×¯_0`@Íš5sçÎ 9r´hÑ|}}#DˆŸìر£ùüA¡x1X¶lY¡B…T -EP¸|ù²¿¿ÿ+Úø-[¶$Nœ˜øá_¼ñÆyóæýõ×_ud/E!_]kR(^¾úê«âÅ‹¿ºíÿçŸ4h3fLÂcÇŽMâ3lذ;ww+…ÂLžåûûï¿/^Ü®]»œ9sÆŠ‹l®_¿~6lÐG<ŠcÈ!¨ÙðáÃU -E°ÐºuëÈ‘#c>o¿ývøèÑ¢E‹âÆKRãü×­[·–/_Þ¹sgY¶´P¡B={ö\½z5åª -ï‘{öìß~ûM…ózbÞ¼y4ùÊ8vìØëž -…7øæ›oòåËwûöíåË—·lÙ2 psÏüùó«d\ñäÉ“½{÷Ž9²råÊo½õVš4i6lH°–MR¯ ä©ß¾}û"FŒÈ_ò’%KªXЧ¢G7oÞäÀßß¿bÅŠR8yòäãÇ«pžŠƒ ?þøãĉ'K–¬N:¤‡'OžTÉ„c\¼xÑÏÏïÀ$¿²¥$„’?ÿüS…£Pxfìæ‘Í²eËÊ—/oþ¥K ÇŽ›8qâgŸ}–4iÒD‰}òÉ'&L8zô¨n^þ¦7Ó­‘"E’B‚ŽÙøF¡P<+V¬([¶¬Ê!TpæÌ™iÓ¦Õ«W/eÊ” $¨V­Ú˜1cpS²d½â•ÆíÛ·åàáÇ‘#Gv–+ЧâÇ,S¦ŒÊ!ÔqáÂØoãÆÓ¥K/^¼>úhĈ{öìÑM…^uØ"ŽB¡ð«V­Òý£Ÿ7._¾}“&MfÍšuþüyŽF…"lbûöíyòäQ9¼ÒxòäÉ/¿ü2zôèªU«úùù¥J•ª~ýúÓ§O?}ú´ -G#ŽBv°sçÎܹs«Â><~üøš5k¾ýöÛI“&­U«ÖäÉ“ýõW•ŒF…âåb÷îÝ9sæT9„W?~|Ê”)µk×Nžø`ðàÁ[¶l¹ÿ¾ -G#ŽBŠ8tèP¦L™T -Á_ýµxñâvíÚåÈ‘Ã××·D‰ýû÷ß°aÃÝ»wU8‚D‰Eå P„GŽɘ1£ÊAáÄ7–/_Þ¹sç¼yóÆŠ«pá½zõZ½zõk¾™F…"Ä8zôhúôéU -Ï ÊüôÓO=zô(X° Ñçý÷ßïÚµëŠ+ˆJq -…—øõ×_Ó¥K§rPx»wï®_¿¾o߾Ŋ#úäÊ•«C‡K–,¹víšF…Bá'NœH“&ÊA2Ü¿óæÍ,]ºtìØ±³fÍÚºuë \¹rE#ŽB¡°áÔ©S©R¥R9(ž>ܱcÇСCË—/7nÜwß}·Y³f³gϾxñ¢F…BΜ9“"E -•ƒ"tñøñã½{÷Ž9²R¥Jo¾ùfÚ´i5j4sæÌsçÎiÄQ(^[à’'O®rPü²oÈ!|¥mgÆŒ“&M’cÔ¬M›6þþþòóÆ7¾pá‚õü:t( ðcœ ê<}út÷îÝm…kÖ¬ùæ›ožÚ³xñâtÄËúC #GŽÜµk—µdþüù6Í\»víK1[†Æi&­ZµzY:ö‚ØóÆ;w"EŠ4tèÐIèׯ_ĈDzÚöìÙÔþ`̘1=zd-üé§ŸòæÍûÔjiUÕªUCÐ/ë-tíÚ—b-™6mZÚ´i‡[°|ùòÓçXÌ™3ç믿þßÿþ!B„^½z}ˆ—õµ;7nÜWý_BLõêÕÏôññiß¾½ü1bD®\¹lçwêÔé@Ĉ#¨Ý ЙÏ>ûÌVHðúꫯžÚžÌ™33Ê!舗õ‡R¥JeÛYµlÙ²ÕªU³Zʉ'^ŠÙþý÷ßbuëÖMœ8±ÿý÷/KÇ^°{ÞØ¼ys¼xñ¬%ùòåëÑ£‡ŸÊ-Zd]ÛMê¿zõê¶mÛ¤„cZnè¢m¸­pÖ¶nÝ:Ì [ üJs÷î]Jh*jó9 ~üøÒAØ„ V®\éTWTþçXNøå—_øéÚ*«Šz6[A·nÝjÔ¨a~Ú ÍV?ª~àÀ9S,W^&´¹5›¹!¥¥K—Ξ=ÛøN,|&Vºtió“n¾ñÆû÷ïçxذa)S¦$ÐGá‹4ˆGŒBëÖ­9íÔ©SþðÃh L>ŸŸô:ÄÁâÅ‹K–,‰£¨\¹²Œ=%:XÅËpð_\"™†mvPt†k d0šþù§ˆïäYi¡a µÄuøhÑì ù˶é¦þ±cÇ~üñÇr-ľvíÚ8‡Ûz gm8ÏH‘"a•èÀ[o½õÑGQxáÂ…wß}ó)P šiõ9â–¹ÄV3ÀÓ&Mš´C‡2dhÛ¶­M]©P" -{‘˜›$I’Ë—/ÕGQQnäÙl%J” Õ2?­†æ¬Ÿ¸@—M–Ê™®nÍÚ~l¦L™:wîÌ€"™ ÜŽq’á5kÖL“&Mõ@`2c]E2Û +`Ü9ÀíC®äBD„CKb¡²Ä)Ô›@ÏAI„¾Ž9ò“O>á cæs€ „ó^Öim"”m™w'&çgË–âl›©Ù²e&-…Q u :´S§NRؤI“víÚYëwÖ&³@RÈíè)&ŒîåÊ•KbYÏž=mKIËŒ%šç_@f8ó‘ê$4ÐÂJ”(Q sŽ=Z$öþûï㚸Š%&+ ª½zõ¢*×±pŽ8‘}6?[¶lI2×^ÃÕé¦!/ýû÷çFS’J í‡[Û×Å«H%S¦LAþ®ú€3±Í@¾ŠÀ-‹óÄí oÑ¢Ee¢`úôé6ñ"@‰¶\"ŒËÕ ¸Ìá fxlˆ45Ë©g¥ýòË/%ü8‡ONõ# -à„S?¾ÑÌ­AÆŒã:ܶ›Új#_€PI¢1wîÜB… - 18p \‚™ØËÒ_²3c&ÄY‚7âZq ´ë³É“ÿ"¢ÂÇqQBãÑ´ úhTÔ³ÙšY____Ò Sb ͵þ `­”Ðr¨õÁƒ]ÝšµýÄb’Yq}ûöuÕãÄÂMÄ!£‡‹@ÈâÉ«V­ -Ūˆ -*È"É$ äDÄ&œ!Xà©ê·ß~û"|†YAÔ ôè‰Lˆ¡«æ!5a½E‹Ð-I®]ïe}úàÜj³OŸ> 6Ä$ 7›6mrm›©¿wïÞ&-EÁ:vìH2NÂrS˜›Íœµ‘Mcþ²¯=j&‰ƸdɹQ'´ÍXRÕÿÉ@#±ks1Ë‚ ™B¬Ð _%(㜱)´$tAõQ& ]ÇÂ9âXAÁüÌ“'9¨^S“ÄB:3ÁçàCpµþþèfm?ÖA“2Ä.3®úÀ}­>¯(f̘A§HZ%Ð0”($ñ92oi/^}ݺuB]dvË)pt†2‡yâ…/ñå©J‹9¿¯´ ŸÌ&aåÊ•#s‘'MR?äVfj ?¼cÇ×á¶MÒÚjƒH ±ò_‘ ÊDbfäÇ?Ûã0ôǘ i…EŠ1=Éæ’%Kf“'f‚±4oÞÁícô‘˃ê£QQÏfk¦Ð#GŽl>³µškýH˜¨'Ÿ¸ -£sukÖöÐÉ}>øà¬[ò;N,|€Ò/ëZµUªTâ-Z4ùî¿%Y&5já›Ü/§‘™ÄsêÔ©(‰Lá*±4…Çyâ‘­¹ îhÏž=$SeÊ”q½—µ‘íÛ·'¸ØZÎùEFJr%×¶™úS“–ÂC(÷÷÷Ç'ì¶À*×Ú¬³@øOzzíÚ5¤gfÚ¹ Œ×ÃŒ¥9šåxçΈ÷‚Žî¥ÿ@zŽ2cÚøÄ‹ ‚¬zîcPcaä -2ižÉBÀ¾<*r­_TbòäÉ4I^‚Â<«èp­Öö gãd¬L’§>È}ÃÁ1 .,X° ŒP"SýèÒÀ™ØÄ‹Kcãu…º%pt-•ÃÐH‡z¯g¥°èüÑÖBÛðñ7mÚ´ø[ÈŒw-³RÔO;ñ±âúð·øpÚï:ܦr×Ú¬³@5kÖÄ(&Nœh&ä­ [Ëq°VýE•ióÆY€Už’7Á^räÈ!Aœ»<÷Qž¿x6[)*äÁü´šký´tH•*•<”qº5[û…»Ž?žKHvžjàáPÛZ”¸© &0‚VòD‘ ^z×®]Œ >D”Éß)a܉ì裀b\¾|ÉË$nĈ±2 s#îpæ¸qãdjõ,Õy/k“ðZä÷ÿ…(ü¾}ûh94L’w×¶Iýe„ÕÏœ9eƒ6øsSz4Õ’ÛL•8k#6Ó]ºt¡§8L:%3Éü¥f"ˆmÆR`öجY3z ˆGÒq<‰™#“øqD€Ëk«žûè:ÎÇ1BYÍOH,>ÍC¯A÷îÝ£ö7¦_´¾••—LLûx¦Œƒ^ªT)W}°Þ÷•Š3fL‚Žü¤³8jü†pck7ÉdrT±%pd+³¾øÌDæXD¼ž•öâÅ‹h 0–"ù¸mø¨œ¼LÚCSeêOê?zô(y1÷%Æ‘>Àƃn×Ú&Lhfð¥çp r4L%6ŸC!~Ø6Œ’`\ò‚49#õÈ3w«Ú`†YIÿÉ€H"$y裼áÙliÓ¦MÍO«¡¹ÖÐ|D-qÍÕ­YÛ'1¯5"áI“&=ÕÀÃz÷îmš$S‹G‘3gNFJ朷oßNØ-T¨PÑ¢E‘i2®FòÂX“?bwóçÏ—Ù¨;¹3ù5™&~ݨX±bâĉќܹsËd 'ɵó^ø.ê`И\]fŃj›©?LýX*„9Èüv‰%àE3fä4Û{˜®µYgŠ+&=%¤¨¼4Nœ8¶÷]S¦Li›=©ZìšûÆŠ‹  ¡GæèÌËtSÞ½éÓ§j,/wyî£DçX8ŸtCêÌO$oµký¦±PÈ›œóóó#ÖsQ˜.ÛÚ4øÁ)É£O§>XïûJcëÖ­ –yÓ ?ÏÏÁƒ;Å;lØ0y!„ñòõõÅ/¹ -CP'Ä‹TE¼è‰g¥…xGø/äM3Ûðõë×àòzõê/^œ fêÇ¥c€ $ÀmVªTI&¢Ãm½©³6ë,)­¼±ƒ“'ÚRN=µjÕ²ùø<¶`ôÇPà'V Ók6µA¤ø+ »äΆbÕGs Ïf+ÀM:Õ[¡9ë7”çffDnÍÚ~ˆ%¹ÿ¥ƒ«žjàá†ýû÷[?U»sçŽÉFe¾TÈ £í‘ÁÉ“'ÅO¢Æfò“0Ô÷Î{®m3€öÛôŠÃÄ‚Zƒ×sm¶<Ÿàüκ¾hú,} j,B±~žö_½zÕõ¿ "dÒ6m⪯-z‘FP'Utrô¬´^‚lHž\còv±õM™4ð~¸=ÔfKd>l¾Pðdd^¶øž±!6ÛôÚ³[»víÚÞ½{Ÿê` -…B¡P( -…B¡P( -…B¡P( -…B¡P(aOž<™2eJµjÕræÌÉ_Y)ñYðøñcë'ÞàáÇ®ïyÚ?a?:—…W(lرc:)±tïÞ]¾Dð^Ï B¼/I˜ÚÝC¡ð€Û·o-Z´téÒK–,YµjÕgŸ}æëëûŒo~ýõײ¦÷(\¸°mƒ‚K„¾øâ ³ »|ñôbà\^¡°à1bDë -ºK—.¥D¾TõRÏ­ -â}IÂÔî -…Ô®]»fÍšæçýû÷&L¸hÑ"a/XЄ ÌÂn®ûØÖØ?vìXÙ²e6lxñâÅï–d—¯;g̘aårk×®•…mœÊÖ*³:õ¹wï^ ²F¢²måÛèž—…W(l(Y²$lMVX ü*'sæÌÄYaÀ¹Ó‡MÏCq_’0¸»‡Báê5jT×O±®^½*æÓ¶mÛ8qâ¬_¿>ÀmߌŶÆ>¡'FŒ˜!*êÍ’ìX_ÕªUãÇo›‹}zÙÙEà¶Ó‡ÑóPß—$ îî¡P¸× ÝBçS§N;vìzõêÉ6‚7nÜÈš5küøññ½… -BÏþ»û¤ÙwÀ¹Æ~Æ ýüüΟ?ïå’ìX"çÛ^ ¢9—åwm•mYrÙ¢E‹€Àm¹¬[xx^ùßó²ð -… ÷îÝ‹9²<ŽD½q¼Â» <òÞ¹Ó‡UÏCq_’€0¹»‡Bá82hÛŠè¨ß‘#Gœk°ÛàºÆ¾yÓû%ÙÍÓÏð²U®ð¼òÈ–…W(‚‚s§«ž¿€}IÂìî -…B¡P( -…B¡P(B ýdL¡ð÷ïß——p -Ep±gÏž¸qãw©O…âµÅܹsß}÷]•ƒB4lØ0B„²t›B¡x*òäÉãããc¾U(^âÞ½{1cÆ$â”,YR¥¡P<§OŸŽ=z”(QôË…"¸˜={¶¯¯/'Z´hÞ—V(‚Î;G“I ¾¬Pw~ B Ètd‰…B=z7n\1™X±bmÚ´Ie¢Px‰³gÏF=räÈ‘"E‚2f̨2Q(<Àßߟ@=>>>Î…8 -EPèÙ³'V;vl___,ˆ £ûl*P¬X1L&^ ài1cÆ Ö² -Åk‹'Ožøùù¥H‘bÍš5™3g^¼xqĈ»t颒Q(\ñûï¿nJ•*5iÒ$²›îÝ»CÒ‚Ú´Z¡PXA É”)Ó•+W8 Ë>/X° UªTú0T¡pÅÀ«T©òðáÃY³fɾŸíÛ·¯V­šJF¡x*†* SïÝ»7{öìR8oÞ<Û¶# -…Bæúôé#«}Nœ8Q¶»„ž7n¨| -Ï0«æîÙ³'Gަ\—V(VÜ¿ßì,0vìXÙÐP`ÛLJ¡PxÀ®]»Ì¶Ô -…â©5jTëÖ­U -E°cÇŽüðC•ƒBá%>ýôÓY³f©Š`ñâÅ}ô‘ÊA¡ðüñܹsU -EðÃ?T®\Yå Px‰*Uª,\¸På P„ ,¨ZµªÊA¡ð~øá’%KT -E0oÞ¼êÕ«« -/Q®\¹åË—«Š`Μ95jÔP9(^¢téÒ«V­R9(!ÀìÙ³kÖ¬©rP(¼DñâÅ×®]«rP(B€Y³f}úé§*…ÂK.\xãÆ*…"øöÛokÕª¥rP(¼Ä´iÓÎ;§rP(B€ýû÷ÿðÃ*…B¡P( -…B¡P( -…B¡̘1Ã,­ÿäÉ“6mÚøûûËÏ7n4nÜøÂ… Öó pèÐ!îß¿T§OŸîÞ½»­pÍš5ß|óÍSÛCc/^‚ŽxYhaäÈ‘»ví²–Œ;¶Ñ¿èÚµëÎ;m3xðàAýúõ9øñÇ‘È`äï¬?¸¸~ýz‹-}S2jÔ¨F>|øeié!C<¦ §gÏžF2:t˜={vˆ«2úàŠvíÚ]ºtÉóx¹bïÞ½42Tôá¹bË–-ØŽµdÇŽF¶-[¶4ëâºÚ‹XâÕ«W[µj²<|øðñãÇÏhAé*½sšÒ³ß%ÄxÁ~Ò BŒùÂwþüù>>>íÛ·—Ÿ#FŒÈ•+—íüN:ýˆ1b0R®uN›6í³Ï>³¼¾úê«§¶'sæÌsæÌ AG¼¬?´*Uª_ýÕZ’6mÚnݺa“'O®S§ò¹uë–‘˜õÌ={ödÍš5 ðÓƒ•+W†àîVù;ë.~úé§¼yóZK‚¯¿þúÿû_„zõêõu ®]»öRT×7nÜ0õ2Æ;w"EŠ4tèÐIèׯ_ĈDzڌ>8ë‹3æ£G<—+hUÈ–‹ñ²þÐô Öd-¯–(QSÂ3÷ïßÿ7Þ€îj/b‰`àÀ!k@áÂ……冨=èêîÝ»Å|²dÉR¾|y96tôÅãûI'zôèQ©R%‘2!R4hЀŸ(yŠ).\ár ùË—/ÿûï¿ œ.]º}ûö CÛ¼yó¬Y³Îž=+u6mÚgµvíZBÏùó祛úùçŸåF›6múî»ïÌù¸hBÞ™3gL ^nõêÕæ'w”ÿR¾hÑ¢+VÐ0kýPmÛ¶I Ç´ÜXî’@H°ÁYÛºuëð*˜¾×xÚ»wïRB{~ÿý÷xñâYkøë¯¿pÎÜQ~BJñH‘˜rò„ÿàšwá?ÜÅ*á äóÛo¿ÁLà'D«ü­õ_¼xñÛo¿ÅN)ôÐ çxaï®ü’-Z4Ã+lí´ÕÔH9%¿qãÆþù‡“¹„ÎÒ~ôäèÑ£æÚãÇÓˆ«xZœI¢D‰^åötܦùòåÔäøäÉ“ˆeëÖ­Ö,Æ&sW}pö#*X° …S§N5ZÇËy/üÛ—_~i-Y¿~ý•+WŒ¶l߾ݳ>pwôG -9¾wïžgûu­íÈ‘#8ºI¿¬£ŒvÑ}ÚS¬X1TÔZIÉ’%­á»P¡BòSìÅÕ‘øy«v¹Ê‡^`ì´›åç† ˆh„6úeê§K—.0a‚Éëƒê…÷ºš&Mš ˜Ÿ¶vÚêq)§ä;Æ17…´ˆFÑ«0ƒò“/ÑvÈÑÌ€ÀEÂhFGn7o^ÆŒé#r ‘É“'‡ÀÃÞùï/¿üB&’;wîï¿ÿž¡ÁÖjԨѺukîÔ©S\›={v®%q?~ü?ÿüóöíÛQ£Fe4Q•âÅ‹cDeÊ”‰=:Cl³???k 'ghÄó_ôŠ ÉÎ>üðÜ9sò/S?éùÇ,×Â%j×®Íã˜:uêO?ý4eÊ”DU©ÍÀY›xQ¶lÙÏ?ÿü­·Þ’µÓ/\¸ðî»ïæÏŸ¿@¤3¶­ØÉǹ…‰tô°Ë±H, pE\DA:™8qb.§œ»D‰X%ì*”ŸK0§Á¬ò7õ$HÀ鬳rí…ëxq mpêÇÉæ§µÎz\GÊ)y)X%—ß¼y“šGJ3”ÆÀÌùW—.]P!”SîÖ6L!ý·*VöïßÏñ°aÃèlݺu>”ÌúàÚ÷Aƒ½óÎ;Œ5g’FIúoÆËy/+ÐÜ©µ„á3{¢ãÆó x<ø'HNÍ?~ìÙ~]kCPX …ü‹Bq°5zûí·éê;vlãůR".”Û‘B&K– Í1öâj‰ü%C±j—8åƒ/Âvp ÜšP…{' d :vìhêÇ~9‡JÚ¶m'NœRP½ð^W…‘Âå§­Îzœ#å*ùŠ+¯éãªU«è,‰aûöí„ßÕ³?ùm·,CF“ˆ}DâE‹ -g›>}:-[¶Ì•+ÎA22—ˆò£ÒÄ\©ŠÁŽdÂgH *Н#ÈR³Ì :´S§Nr~“&MÚµkgm ”LŸ*Am ¹;)¶œvâÄ ‰5õ£]&gÄ3†ÿæÍ›WH£†›$ÈÜÔV$k…0P8wî\(–؈IÛÓ§Oo›!§a‘#GÆR|}}Q-î"ÉH ™$I’D¨~‰8À]räÈa“°S>X1ö%Æ ¥AǬò—ú9'C† Ò ÚÏÝáN®½pŽDâ…S7ˆ_¸óÓÚNg=Αr•<#…]K^½ÁiH%S¦L¡ TÞ¡C¡ˆ#GŽüä“O8€oÛf]^:jÖ¬ e­xãC‚”)S&yÄÆ$Mš4(qêƒkß¡.fé~B³|Œ/ãåz/ë³T"ÆZˆÃĹÉùÙ²eÃ<=èòeËÌÜœ÷øTûuÖ&³LRÈíè)l÷ˆ"I,ÃŽ°&k%ˆ…Ó°#¤ŠMq,»M{qZ¢Ü±j—«|pÈâ×?Ädˆõ2÷hêçãCÐ=ºéÚ‹`éêÊ•+ÑóÓÚN×zœ#å*yFªW¯^\K%„!1ö;vÈÚõüäKYQ†,Ÿ@ù ³’é”ÎSë_@Z„‹Z³{[mè ÖmžK¹Pf’e3/D8Æm3œir¼ÔÂHløðáæ3jx ùp—fÍšY%ì*èmÑ«ü¥~2;B­9oÆ:{á:^d"¶ "ÆÑºµœUœõ8GÊUòŒ”i*>[¿÷Þ{½{÷–‰¼nª~ýúè$}”I!îk¯ @«QÔÅ VâÅ? ÀäõÒß -*¤K—ÎUV®úàÚwÜ”™Øéܹs‹-Ìx¹ÞËú$ÁښݧOŸ† â¾°ñM›6yÖÅÌÝ¡‡ØÈSí×YÛ¯¿þ -ç”çòø=I”dfquD!]¢•™ÇF¼â«Å^\-‘»@®ÄírÊQ'L˜Ð6Å;QKýEb“9‡4‡äÚ‹`é*êaÝfÎÚN×zl#å*y)™ê\N#a‰’”yö“/DC25tÇ%,šXƒÎ¾Ef}ýúuŽâ2c-ò—Ù'RãQ£F_¾| @>Th½oAïÞ½m -@n.Oh-$gΜè¡#‹—°š$äDžÝt‰¡äÜר‹«%r—+VØ´Ë)œ9b¤‘ܺsçÎ2k‡ŠBجõ3p-ü6}‘¯]{á½®¢ÛôW€J”±¶ÓYs¤\%oµ\üa…Üùý÷ß—<øÉ€WŒ¼ÅwçΓ [¿ -!4»f—ôâ}òäÉg¹;<_†]•W­o+°½Ú¿¿yuÙûÚlïá@Büš™yýS‡ÛU>˜¡­SFþÖúèúî·AWpáe=ž%½qÙæ'é»t þ`æ¨_!кlý>ÚUV®úàÚwœOPß"9ïºãH -fchží×{í:}útˆÕÏ{Kt•Â4Þ^j³=ÙaŽ9ât#N„–®zSÏS='"µ¾¶í½gS( -…B¡P( -…B¡P( -…B¡P( -…B¡P ²¼¹|Äjн{wy)Ôf‰rW„x‰øð´Ðºâu*=eÊ”jÕªåÌ™“¿²<ï³@¾Ç™[KŒ5iÒdðàÁò¶•«±˜ýB¼s‡ió³£ÁKß@ñ¼Ap‰1¢u1Ã¥K—R"_JºÂ,Qîij,žZW„{ܾ}»hÑ¢¥K—^²dɪU«>ûì3__ßgÜüâ믿¶­Ëä½øhÉÌ@Œ5*{öì²¾œ«±˜ýB¼s‡ió³£ÁKß@ñ¼Q²dI GÁ |£^V•ïÜ‹®[—(Õ%âÃåBëŠðŠÚµk׬YÓü¼ÿ~„ Ñ1ïɶßıcÇÊ–-Û°aË/x·ˆÍ'N,V¬˜ù9zôèâÅ‹[%À±ßٹö†¿ëN%Û·oŸ4i’³ÍÖú©î"‡Ña,Ünîܹa|GÅóžˆ;ö˜1cÌÒúèR½zõræÌéïïï\tݺDy@¨..ZW„Wà]Q9×o½T$”жß¡'FŒp?ܸ7û€`2Vc4Àÿ“¹ˆMãàBòÕ¿K€Û~fçëþ®;•4kÖìý÷ßoÞ¼9÷% XÛlê‡^&Mš´C‡2duÞ¨?}úô¥J•"Ä-Èú]asGÅ3¢B… -Yþ ëZLp2Y‹ƒO•*Õ‰'"GŽLˆq]tÝ,QºKć˅ÖáÕpPEëBFVx©HÎý&ˆ)ø[ùpÞË}@Œ[A¼# -`Güå^D–‡cqÝïÀì¥bÖðwÝ/)RDÖR5j”¬p+m6õsmÄ0)”úñ ò¼©Zµj¤]auGÅ3‚tþÐa]¹búôédܨÄjÑ·oßîÝ»oÙ²…<%ÀmÑõËå¡»D|¸\h]^ 6ñ°žO¦pæÌïɹß1ÅlUïÍ> V56½€%0áÃi6AdóæÍÆX\÷;;¬kø»î—ÎÛž™6›ú I²†¡Ì‡'K–Lê_»v­b沦YØÜ@ñ,@ñüÿ Y%Õ€ìXpB *Gú ‡GŸáEn‹®X–(Ý%âÃåBëŠðj88aÙ¡Éš¡¥Þ+R€c¿ bŠ,Œïå> V56@!“$Ib-tááÅX\÷;0;wX×ðwî—a»–4ß´YêǾ$ƒ“s:uꉥ~R‰Â6\&fwP< DŸ­0Kª - ²w!V@~-;û Ï·E×Í塾D|¸\h]^ çûï¿'m‘µ¾Ñ™=zÈÓy/ɹ߄ÌHOš4)Àë}@¬jl@ÊS¥J9¦y­Zµ"¿À¦ÄX\÷;0;wX×ðwî—AÈ€YI.O÷źM›¥~Ìú%Ù¶m›ˆÂ:Wã ³;(ždysIÀëÕ«å@Oäuç¢ëf‰ò€P]">\.´®ÇÀRÈv¡©S§F 0r^™[óR‘œûMS –$^îb5FƒªU«Šùøøìª` ÆXÜö;0;wX×ðwÝ©„x„qÑAB¤¬[nÚlêÇ –lÙ²Q.ÓkÖ¹2ˆ¨o8Û@Zp.ºn]¢üE.þZW¼êÀùã™m:é¥"¹î7ñ÷ßË÷û€ØÔØx¹ßë~ü´M ›6g=jû(Ï Ý@¡P( -…B¡P(ŠPÄôéÓm“x -…ÂK̘1ãYv5U(^7¤M›VÞS(!0YfG¡P<¿üò‹|L­P(‚…mÛ¶EˆÁ|P£P(<£uëÖ‘#GŽ=úo¿ý¦ÒP(‚…š5kBØ¢E‹fûBG¡P8ñøñã¸qãBÒ0™Þ½{«@ -ïqóæMYEí7ÞÐÏöЧbÍš5¾¾¾òñZ‚ ôC0…Â{L˜0X#æ#+Ó* -øøã%Á±bŲn¢¡P(<#}úô˜O¤@è¼´BáwîÜ!ÐDŽ9^¼xqãÆõññ)[¶¬ŠE¡ðû÷ï'Üh j¾¾¾˜Ï AƒT, -EP˜3g&óÅ_Ô¨Qcúôé… †ªÉBU -…Â35j%J”Õ«W§I“fݺu~~~²Z¦B¡pE¹råd“ëŽ;.X°àþýûåË—>|¸JF¡ðŒ»wï&I’dãÆ;œ={öôéÓ”è"Ì -…+®^½Ú§O9®S§Ž¬aþàÁ}cM¡x*–.]ºuëV9Nš4©<Á9qâ„ÙôV¡PXaý| AƒS§N•ãGéŠ7 -ÅSssœ(Q"³š~•£P<Mš4™8q¢ÊA¡$H O? -ïѬY³qãÆ©Š nܸÎÝj -EPhÕªÕèÑ£U -E+V¬[·n© -/ѶmÛ#F¨Š FŒÞl’«P(;v6l˜ÊA¡¢D‰òàÁ•ƒBá%ºví:xð`•ƒBøøøè‚„ -…÷èѣǀT -Epñøñãˆ#ª -ïѧOŸ¾}ûªŠàâþýûQ£FU9(Þã‹/¾èÙ³§ÊA¡.îܹ3fL•ƒBá= Ô­[7•ƒB\ܼyÓ××Wå Px¡C‡vêÔIå P×®]‹/žÊA¡ðÇo×®ÊA¡.®\¹òÖ[o© -ï1jÔ¨Ö­[«ŠàââÅ‹‰'V9(ÞcìØ±Í›7W9(ÁÅùóç“%K¦rP(¼Ç„ š6mªrP(‚‹3gÎèÖŸ -E°0eÊ”† ªŠàâĉiÒ¤Q9(ÞcúôéuëÖU9(ÁÅÑ£G3dÈ rP(¼Ç·ß~[«V-•ƒB\ݽ{÷ÅG³xñâ°GŽic_4ÛðfÍš5êÏ?ÿ ÅúCŒ™3g¶jÕê+'ÝwҳÇ¿,c2dÈÁƒŸ½žÍ›7Ç‹ÏZ’/_¾=zÈñÉ“'ñ™[·nµf1\BáÙ³gMáï¿ÿ¾páBÚC¨ÂĤðøñãß~û-ƒ.QfíÚµ ¤pêÔ©¦B¬Ï ¥ó^x§/¿üÒZ²~ýú+W®ÈñÅ‹·oßîÚ6S?w'¶J!Ç÷îÝÿ°iÓ¦ï¾ûÎÚ=%/ XÐMúuôèQk -F÷iO±bňqÖJð?F [°Eˆá—_~yÆú¹véÒ¥„0£\{æÌ~Λ7ïï¿ÿ¾yóæ?ü°|ùr×ünþüù -øì³ÏHiM!2Y´hÒøë¯¿‚*q•£×µvÜYbCš4i,X`~nܸñŸþY½zõµkלšã:ÖΖ;vŒã_ýÚãÚ*§;+V¬ H ìèçŸ~F bˆ«W¯nëããÓ¾}{ù9bĈ\¹rÙÎïÔ©Ó â?|øÐµÎiÓ¦1:!‹™3gž3gÎËŠ¿Þ#UªT –µ¤R¥Jü±Ð³ÿýïéÒ¥CáC±þ“L fkÔæÅ€A„!nÝ«W/¡gb /˜[ܸqÏ;÷ìUaÖÏ©°Ù7Þxcÿþý6,eÊ”uëÖ=z·nÝÄÑjԨѺukN;uêT@à2GñãÇÇè'Nœ6mÚÉ“'KV™]ºtɘ1#Á‘’Aƒ½óÎ;¹sçæLÒ(1Š?üßâz/+ñ 6XKðæ}•²eËŽ7εmR?þ*Z´hœ@ –Î?~|÷î]x>A°L™2ÜtË–-¶p㬠AåÏŸŸBþE¡Œ>Äãí·ß¦SÉ“';¶M-ßÿý)S¦˜Ÿ´0|ÏRÿÕ«Wñ*… nÛ¶mœ8qpÈr-²¥¿éÓ§Ï”)¥N:p 'k%ò¦H‘‚t56«…@&©³víÚ܈«³ÄUb \‰%ð±É’%Ã:\Kl ~aD¿ýö›ü¼}ûvÔ¨Qé½&î85Ç9Ö®-¡/8(´hÕªUÎ6åé5ÑÉZvr_ÃCB è®R¬’ÜHÑ A~.¹#Táúõë;vì`à $ÏßÁƒãQ÷íÛçÊ=š6mJ³¡FtÜdÄ&>z`J·nÝ"äÁ=¬q–Pn~rGùoPñíÚ¶m›”pLËM¾¶$ÜÂ)gmëÖ­C¶D|,ÝøIŽÚ°]€±6uøðáˆèÙ뇥àÈS»¹JFNÇ™ Ö‡0ƒ"ðAœ$ªbD!³åX5Îà,qJŒcôSÃ'%Î -ø.S§U—œšÔX;[båx®m°±>bw¢D‰BåñDÍš5!œÕQ²dI|$Yîˆã’ÄŸ†%Mš4 ðMx†F.Ä7kô$I’HS‰Sx’0šgi¹í'Ÿ|"Ƭ¿÷ùçŸúé§øùù„ó^Ö"þÁZˆ[Æ5ÉùÙ²eÃ:Ûfê_¶l™™[#5À¹q0tèPئ6iÒ¤]»vÖúµI”—BnGO/]º„sƒÄJ,ëÙ³'Þ޶Ж¢E‹Šx³gÏÎ tçëÇ‘.JGãåZzD .Ž› -c±xïÞ½Å%¢cÆ¢©ÓD‡råÊ8qÂYâ”ÃǺ)Á¸µ³Ä©r+W®Ä·˜Ÿx¹(Q¢ ó»jŽs¬]ÇŽ±&†r­kÈ‘é.\À{p÷ j8¸³ äà2)„aþ¢çØ‘° ,—A Rð1þKø#šÃ¾ÿþ{Wîªp-&ÃtŽèoâ£g¦ý@Öô]½pŒFñ_tÃCü;v,j#×Bª¡àyR§NÍЉªR›³6|{¤H‘ Xú[o½õÑG‰äß}÷]´:5µ­€Ç&VâQM üAžÞ>Kýxfø* -ϵd=¤í\Ë $t'V¬Xˆ‘KªU«FÊéœÄCž2dÀáó×|:‡¡~Æ‹aSr–8%†ëÆóÐ`¨ ÖÊ@;KœÚ5aÂÔÃü´ê’Ss\ÇÚÙ+ÇÃXœmp²>î‹C%]¢ýû÷_ظ¯¯¯XwÕªUÑöZ¨P¡‚¸&’<ÎêN×pžð³;:CÇ…ÀãBëׯÎÐ ™Ãɘ) Î;·hÑiq½—5»|ï½÷lÍîÓ§OÆ q>¸ øžkÛLýøX3w‡wìØšMðh¹)a{3ÁYQÝæŽ¢Û’(È`†’‰yZ[ Òœ€lŽ‘Ð)sø!®ÆKD6&OšChàZü’eÈs½zõä¿9rä ÚÚÂ7n -£èÚµ+ŽWÏ]¸„ Z݈³$(‰1Ä4› -%Õr-q>•! 1[:ºjŽm¬]["c-“¥®m€+2î„N¬Ofº¸/ÑêÙ-·,Î gHƒ‡Ã1dvzúôé´lÙ’;bÚ2s%&Ì%’滲8Ü)ÁH¸Þ›øè™)!1 ¸5j;räˆÜc÷ ÃgðBcÆŒá¿è¡Lfï0d“™›Új#ÑÀÏKП;wn¡B…$[8p \w²Yœ0%áf .É)wâúQ'"…\ËU’Cq-‘BܵðOäŒmš¼ÛˆbA’äZLÄ5ñÌÇŽ#³v–¸J *bQÄÓœ%NíB‡ (æ§U—œšãk×–X9ž³ ®¬ÿ*Oñ{¸;3IªT©":ÌèÏž={÷¿À§Á Þ~ûíQ£F‘~R‚!p¤O(×N:U¾&žÒNÒ=8cÕ3”8:s"Èž={  ×{Y‰GunkÎùØ,,]r%×¶™ú?øà™»“YnÊýýýßyçÝX…àZ›5Ê3¸ô”„é™Iî‚ó±6rܸqÖ£ñ‡èÃÖ­[Ÿ¥~„ ¿•Ì„üTžû˜k¡Ð2‡‚EŽÙFÛ°eâј@0pÔŽq¾ÉÑ7*t–xØÎ;{ôèÁ½Ä¸–XÛ4hù‰‡1NÍq޵kKÌXXÛ@ć‚»Ïž=KÔ¼ysÛ}ŸñÍ\Z Mdä/”É·ÁàB¥òÇÃÒ‰ž™ ÿýñÇm-„FNž<–.ï°yˆ¿´“-¹-TYÑ~2k(Ÿõ¦Ö\k3ÏgeÞ…Ÿ8q¢á0òÖ„­åŒš•°¡2»þ,õCÒ­a øU¼¹‡LehÈ(…0XÙ8ÃAº'ô w-9 aÑä€p†‹/:K‚’Ù+ÝÁöMZá,±ÿàãã#é˜M—\5Ç9Ö®-±q-[œ¬Oî*/N×Ìœ­ÑX™½GȘΜ9ÑpIÿIÍè܃¡!ï€Qັ2’—téÒeÏž»›?¾9šÀ§áçq¡$›ätxËܹsK0ÅÏqÞËùP ð-b¼Œ…LPÕ6S?1‘ú ÓM›6M˜0¡äË%J” ‚Ãè8ÍŒ©‡Ú¬Qžè/=%¤D \üÁöê•[ßÈ‚_Ñ~Üæ³Ôϸ#^x ¾”äÍ[s-? UƒûI<2Vø.k{ÌLÈ Ð$nÔ¹sgym+q•X¿~ý°Yò\X–Ìr;Kl€LÒ#™(#ó‡&°iŽs¬][bÆ:¨V1îœC~W¼xqÜ7Tž„cÆŒiOjæîxÉ&È»ybe•©ŒR¥JÅmp¡2ÕƒW¡©2s"ñÑ3SÂס`4ÀÐ3l÷îÝq&&ô=ŠX¸/B&YF¯d~†&!+¸ -™…y‘ÕCmHÛÌaòx{ÎáÐ-L%6¢K;¹¯•j"YäöYê'¸4kÖŒ–#ÒdQ~s-”ÌzfJ0Õÿ…¼^EØ%·"ù29¨ø‹ÌqG $ÀkUªTIž~¢ýüüpÎ4öØìÈY›y~*ï@Êk¢0%¢-åÔC¾`#º‡2o“ -àZB¹Ÿ¥þ 6Ð/d ëÔ©´^+Óqæ9ˆõ-bãb}'SÜ 7cÇΑ#‡¼0æ,q•qŸ>ø¤<ôq–8_J!M3?­ºäª9αv¶ÄÆñœmp²>ë} -Å«¨£Ö ¸ŒÂuã©ÑÖxˆ¿´ÊIfÈ× „W¯^ nm¶W7>‚×ÑŸ¥~äLË]ßè1 B69KœƒŠYXç%σµz;×6xÃú -…B¡P( -…B¡P( -…B¡P(Š0ˆ¿þú«[·nòBl»vížýÕñ‡Ú^Üz*œ/ÚéV -…Bΰ}ûödÉ’uîÜyÆ 3fÌÈš5«m¡ páÂÁZòÝu)`ݪ@ñJ&1I.˜L‰‡­²žÓV ºa"ŒãêÕ«I“&µ~ظråJÜ©|äºl¬sÉYJäÓ{9M^ã'xI%¶eTɧ8¾råÊܹså+ ÛRÀºUâ•@Ú´i#EŠ„¦™’:uêDŒ1(Nòü¶ZÐ aƒ ²~$e…ë²±Î%gq×™2e"E*X°`þüùñ«U«V?¾,nà\FuòäÉéÓ§/Uªf…Uâ­K[ [¨~†}À(0 -FV–[\Vè½÷ÞÃ@ä;ÛæÏo«…ݰ@ñ²qìØ±,ÿ…umL-[6³yŠA-ë\r–¸#¾ííÛ·¯ÄÙrÔuUØLLžòT«VmôèÑ–¥€­ Э -TÃ>~üñGØaÂ,É[²dÉ1cÆÈ—éÎÍ žßV ºaëÊŠ ¸Á¡ÿÂöµõ›o¾)kq[õÚÔ²±¶%g׎@ùI”p²†!1EVLu]F‚¿™x¦Y—6Э -T{_ ÎÖ¿4œü]žS€ -DácÎÍ žÛV ºa놊 ü¶ÿa£¨¨¬Ù+¸|ù2>’ïyÙØ€—œ•cÔxüøñð!öX¥l9ê\F?ŒÂ‹7FÍpàüñ‡Y -Ø -ݪ ÔW~S<ÎV¾|y”ŸR¡B”ŠÐ°wï^ÈŒÌ*;7/x~[-膪®/¨Y…ÿB¢7ÀÇÂ=dñ\™ÑxÚ²±ÿ.9‹ï5»Òƒ&Mš„¯&4Ú».£jÝ8rÏž=²D­Y -Ø -ݪÀu«EXãld -h2¡m$ÍWL™7ožëæÏo«ݰ@Õ5ìãèÑ£h5ÚáÇvP<áWž—5KÎbk\›3gN2ëúõësJèçç'YƒsUëÆ‘„6™â6K[¦[¨r†}ÎFV"oá]±2´Q’w\7/xN[-膮( VhÛÉ“'m±—ËÆBÈÉÙ­ß ±æ)†—Ë¨š¥€½nU #˜3gNþüùå˜Ð#.BŽOjó‚ç´Õ‚nX ¯ (Š×®›¼ø­tÃ…B¡P( -…B¡P( -…B¡P( -…B¡P(Š0Žÿ')ö9endstream -endobj -97 0 obj -<< -/Filter /FlateDecode -/Length 1790 ->> -stream -xœ­XKÛ6¾ûWèÖÝ6Rô %1Hz(Ú[hƒø–ö µµ¶P[ÚHr¶ù÷ÎpHêáMŠ‹…ùÎ çùQ7IÃ_"± -ŠREy.ƒÝyøÿÙR‘GB0^Ù eGež¡Çá‡íæåÛ2P‘ʳ`û°LfA‘'QQÛýæCp³=Ö·A˜e"¸éoÑžÂÏq"pÞÖg³ÔÞiÜŒHŸÍèOÕØà¼k‡cóˆÃ9?ÐNÏ'G'tÄ­¾"ÞŸèÇðì-ø©N|z×µ;CArF+¨r:á¼iÈéÎCwÂ…SG"ŸšöÀ´{ºIuè«stülÙü´µ¶6f”¹ŠÊ¬Ð†þh÷br,€‘•R‚ÖËRO2Þ~ywN‚»Í;ø³4lCïJYDe™Þé;Š4…÷{T¼›Î.ŽŽ’‰ pÞŒu_è¤+×»†Òë³1åO>ëÖ -j™‰×%<I£‚ü¡tjÒŽ«œõãÅ4är£É!Á{ÎðUë:-*û6Öcg`ß i·×+ˆ-²ÂÖ«¦¿]+k©ˆRáJ`c¡Ç´&Ôý¢K’ô{2Äj¬¨¥²(V¹¯•®£©ÄÖUœ5ÉcÀ¦(Ê()Wᤡ b‘D,Àˆ¡°u¸XŠSÐâ3ùœ8C1ç]J´$ŸJ»û7Ö¾[&=7Τ„ÐÝT*§À8÷©SEþjèR‘ABP䞣~4 ’ª`í€ÐÿjÞ­Ïû‰ùI§ç\ºMyXA¿Ø$¨“ I¼|Ð[ÝÉnùYoI­ß:>51{`Ù•ÍÃàÎ/ æ4‘Q–¦W³`~UâBšé±J<Àœ^ÌÛ+€9³(ËùÉókó—{f¤¹}à •æéÄ 8×½î¹Ò^`üäsË[,›²+ì$º: LêÁÜ££—ÞáÆÚ@ƒºí›áÑÄ5·^SÌê0‰zooÜ2/h½¥¿ü6{¦x¯?Ø…"s PãCcW½]îkxaÖ{ž~2ÇsÐFš±š&:+Âu#Çn9Z-v];µ@?6§,Só–¶d‹»3U,Ÿ+m¼¾ªÁCX(¶v˜æ:º²ü~°èÈ艭բµŠw¯~˜å‚Å`W»3C‘®µº‚ìgñÕo”{”¹Æµƒß?-oôõ…ù¯¿Œ …ˆ"q=Õ¦ù¼l¥±þ”RI.#—T¦>YìÁàŽ(ƒ‚õã8J” -Î¥™™œ6ïýjÅÌB–«É£ ®^*-±ˆdÌ/üž2ãð:Xÿý«W×õ…R Œäÿ£/3{V_hÚpVÎôÝA ºþóê³€`ãcÞ ÛLï} CÓœ`è¼}cKÒŽóHôæ7ÏÆnZ&³—ý®z¬î)~NéÙ u)LiRP·0Ï D—ú)¹„ÓŸÎ*Ã*ÓÉÀº¦ødÛáh♲U/Þ[h^µ³ìMp&4‘ÏŸ\vi9Ä®|wè‹!x–™…øjy`úöh­çóú³C&¢-(ép¨WòNf‘‚bÿå¼K -‘ð+ô7´â¿Å13 =n‹8N - €‰È" Ä_ÇyTÄÂűq…¢œõ4Vyµ>Uëýs.ñëøø½Õa¥Å•¸ë Ï>xäÐ ÷Ð*?‘d#rÏl‘¶£ îKßÕ7…*£T>ÿ¦p$s¸–*('ðª4dZ¹”Å»—ÂÞmþwÊ/ÿendstream -endobj -98 0 obj -<< -/Type /Page -/Annots [ 99 0 R ] -/Resources 100 0 R -/MediaBox [ 0 0 595.276 841.89 ] -/Parent 2 0 R -/Contents 101 0 R ->> -endobj -99 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 174.61 639.008 215.925 650.133 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/lwg-active.html#299) ->> ->> -endobj -100 0 obj -<< -/Font << -/F8 42 0 R -/F40 50 0 R -/F39 46 0 R -/F38 38 0 R -/F43 67 0 R ->> -/ProcSet [ /PDF /Text ] ->> -endobj -101 0 obj -<< -/Filter /FlateDecode -/Length 4041 ->> -stream -xœÍ[mo¹þî_±Ÿzvñ–oû’¶¸Á]›¢(îR_s@rÖÒÚÞV^9Ò:>ÿû‡’»¢d%VqAx—ä‡ÃyyfH}<áYÿxV*¦ò:+«š…Îæ·'yv ÿÿêG(U0¥KxNtδÈYUÙ,¢ð—‹“o¨²šÕ…Ì.®NhŽ‚³²Ì.'ï³Óy3´gÙŒg§×«õP:}„W)ev:4×ø¨²Ó‡ìêæg™(³Óò!ç -{†%ò’zšÛž˜¥ÐÅæîÖ+÷·³Œàà¾} qÝЮ›‡þ±uŒTÙé'ûÇ­Àòï8i–Ñ:ØYökvñ÷®X­ôsVkíDðî,«”%"J<›ÙðÚûÕ@IJ›¼³Kl©&Ú‘«À²í ë·¤î-­;l€‘ŽíÖSX]á,`ÑÅ ³L4CØ ³3ý5Q¾´ýDoATV}’˜©™Ï7~öùªŸ·wÃÆl¨¨ -3ºk¬ ‡hF\ƒ#2oî7­øl$ñÂIü!l›ÌÍ«û%òY×^ÞæÑ¨W¤Gy¼Òƒ£áᑚ‡•i%<¬nB VŒó ðgé¿ììLWíÚÓŠt6÷úÕ]ߨ9?ÓX~8vhpðµoˆ?Z-­žÍÜ—ƒ[Ȳõ ¡ê¯FZ ŠÍjøk™ïZ¿Š*^Óµ_BÓ/hÕ‘è¼ò¹—o6$¤>8+óú_ÿn¶æ¡'Z¶¡‰E\:kÁíÐ:ËÈvE £ÒSMºi‡4|ŸZ=ïý«åó²ìC³~¤®°¿¤=Î`o·ñ$6NG@E,Ëe¼x´Ç-­M¶ïÝè¡5Fmz^’ˆ‰z“²ÞÑ4ÇþZ{Uï6wÖѧ7ÎA\ÓËf¾·¯+ô‘+w¦‹cæÍ]Pù ¤½¢80º|dõ=×ë¶I4OCmߺÕÚ`,`±!”Ò:ŸŒ-8:[°WïB³b P|^oB8&ÿëæºììæF1[·7bŸ‰ -á##ĉÂÅžûeˆMBN\Ö5 -:0l;FºMg7Ïİ·îí¾š† Ì„ÿá¥`Z•ÞxWwÖ¿ÿ5eèZ€WÎ -Õ8!]Xå Üvëv>”¬HWM„¾°+ÖYó¾ñFEK³íÑþ5Û˜Z„V¬È‹1“Æ)L]‚Ý:Šâ?ܤÔ; ÄqÔºî×=½‘øÈBãM$Hq.€ 8_·¼Û~žt³ªD¿McÿˆáÓN -ŒÞø¹>ÞnÓÁGWÌèóTl/vN>Ùz“ÿÍAIçž[o/v••Çn§ @L{Ý´žÓt9sXœf›Á£=rþYpvë¾nú€ƒš€uz4[ÈÜ4ne9 Zí|ŒØ·À(UÂá Kû-?Cï–FŸ;MÞXo†Q`´Èá´öã=­& ç‘qò±â"~ÚÇvêÉ›u£F>ÂHI?Žxµ†©nWÎ8í’ÚáàÓÛ¶Y¸Ø` v¯ééuŠ€ã‘ÐñPmTuy¤k:ÞÄ›dÔ®0¾ïMcÊ榉bdnÞo¶-¤K1qµ ò…-xÑÆaÜv’&™gˉŽGê§;•éÝ ]m£¤µLUn+îMȲŽüJy©ÑJ0Á+›l›Žõµ{x¥Ý4z Ÿ¦ÝSŠàcÑŽUð˜~›)a ¨ÇLM*4f+S:–•WIÿV1.ù¡¡­`9ìy>/f5«>²»Á6ý&Ù¤ÍvC@ðˆ›hÿnv†@fûœ}šY`UÓr€Õû.BÈS˜ aabé3‘+V*9Ñ»éÏs¦ ž¢b¤IÏÊ/ˆØ,¢¶•`ð\³l¨9¦i‚¡X^„Íù0JE¹v&kÞ’ë_în©+án?œaµ‡W”µH®hï!*3–É®’vÌÓæþn”¬BÁ2%Øã|G”w¦²ÃŠW÷¾åixÿLC2\ƒ•Tò‰m9æåÈs…cåTÞ¸ŒýÃfžYg` R† ðzRø¥¸ü#–Ê`ZLïŒ4¬(Mp¿8ËŒßlF´Ü¤H ÒÌŠS.z¾pPÁÕDœKôphE¯ï­ùÚQ—Ì}„Ù§Üo°ì¸6¿€±c ò’ûè\ˆŒ„n¼<@ªªžH ÷oX£Æ×RÓ¹óÖâÓöÚ-«WÔø~éBÑ%sŽ8—Q(W- ÎØjexLº½-–}—=Ö £íB/¼$Ⱦ$(ø2íË™Æ/)vJ¦”;a›Bx¶B­È±™LÉwp` -Ì|³‹•â€äùÕfhâr‘é^)€¦žþ'v!²• ˜á(EH%ücUï—–õÁnDzÉÆ „øö0™'Ci̓Þ ‹W¯ÂNLÉ*€y¥3 ËÕ?+œ±YDm+œ¨2guifTá``X7ݰùÓ/ß½zµ7¯â¹IË'$9Ó9‡ù§žð"E±bZ‹§DÊs–Cä9P¦¼0+”™†ÙMöÿ¼íˆÍ"jÛ!º(˜ÈÍŒü®Þê0!TÍ*PÝ£pJÄör*´fœ×SNw X»ñnÓyÏ"„5S!Cÿ´k¿ùØiØ#"¢½å4lÍÉ;¨p麮èiWÍ1YM,2å¤jŽ|K†±™,$ÂŽ,½ª‹à<0 hå(DQ¸KŬ5f‡Ëv¼žŽL˜L TÍ—KQF|²!êÞ¥¸Ã + Øs ÛÍ+È*Ä~·[3©Cˆˆ³bÏÑ–ËI­Œý±¶ÔˆY\U¦ÂùÆH3V¨‚Vaj˜³(va!ð,*ŠÄÝ•˜DuÖÚ%!.Ù×n…ËÁ%GÆ‘Ô8#.ŒÃÑ—¸LåjA8¥Ó+ëVñÞYD—`¡¬˜ŠÎO’6SÊ8bâº'‡~Qf†³žo¢ž¥—Lt,Œï¯ ¦5©Ûchc·xú~>tãÒ¿]¸/èÛý°ë[zUœp@ûÛ¸`àRôzׄaø>ÞÞnAÛn³|\·[E×ú" ˆä¨ÜÒ -ùÊieƒª)·ÞÛuó Kc“Rî°u?Žgjžô¾UxÅŽàH›>ì6„ƒÑÙo篌¤©+ÞÚ*çDsüQ„›lŠòvÛO ¢_à°£pë®D(H¤¥¨‰¶J—Œãí|BóØ=5~–ûäÆOB½[h¸}'éãÐT¤¦3eÊæ>.Ùв#Ñ;E/ÊâãR@%ã¸y>‚}°þIVèŸñ§T…3]®ò9׬ÿ°¤`k QŽwg'|ôÍhËÁï/bߘI¹§: %@SÀ;ˆî9;¡t)¿Èf泃ªA_»Jå`íz¯Jå5–8­N}r¯Kɳ“¿Ùò-¼›—Ô«,šä9<¹½L ^2 mÌ5éø¸)ѱ šaõEoß0€$HÕÇZ„£¶w ’ƒä«©äÿ¹Úo\·€^ݰGì^çÃñHç7 -ùmÍ÷åK“…àø]*e»tº0±¬ŠLÖ%*]hÝyBVQ@d‘µf…>H4{2OGlQÛÎ .ÁÀ¦Ì]ì´ý£0F–?ákd÷öžç˜­ó>º‡7(¶Eµ›ÑýL?À¡ÖOøî.£}´³Yî@s{ ZÂÇE2_‹‡9–ƒ™T.öz˜ÒTÿépçE³Ç&±£Å„·*a#Þ^¯úñ)ñò¶è„Z:—Àðx¾'Ìëkä0Vg\ƒkâÉ3T™kV™o´Àtèu&8Â8ÇL© -ƒ–¢»~Éäu*Œé<š^´Þ–©¤¹)uì¸ÀÀõF“¹£/öu™œ_‚WÏCÖ™vŸ^L(l]JA5Œ‘e 3qo‡l ¦À»c”.G×7ÔîÅ]:ŸO‡ö’ÙÕw¢x¢ö]ƒ Cd˜V ;+8«Ê`,ïÜÍÁN)øžSŠäùD aJ> -endobj -103 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 268.455 652.676 347.121 664.631 ] -/Subtype /Link -/A << -/S /GoTo -/D (readable-iterator) ->> ->> -endobj -104 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 367.468 652.676 443.81 664.631 ] -/Subtype /Link -/A << -/S /GoTo -/D (writable-iterator) ->> ->> -endobj -105 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 125.038 473.906 201.324 484.754 ] -/Subtype /Link -/A << -/S /GoTo -/D (writable-iterator) ->> ->> -endobj -106 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 479.881 473.906 521.862 484.754 ] -/Subtype /Link -/A << -/S /GoTo -/D (readable-iterator) ->> ->> -endobj -107 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 73.413 461.951 108.947 472.799 ] -/Subtype /Link -/A << -/S /GoTo -/D (readable-iterator) ->> ->> -endobj -108 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 122.844 237.147 198.582 247.995 ] -/Subtype /Link -/A << -/S /GoTo -/D (writable-iterator) ->> ->> -endobj -109 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 187.928 225.192 266.771 236.04 ] -/Subtype /Link -/A << -/S /GoTo -/D (readable-iterator) ->> ->> -endobj -110 0 obj -<< -/Font << -/F38 38 0 R -/F8 42 0 R -/F40 50 0 R -/F43 67 0 R ->> -/ProcSet [ /PDF /Text ] ->> -endobj -111 0 obj -<< -/Filter /FlateDecode -/Length 3921 ->> -stream -xœÝÛnÛFöÝ_Á§ÂNÊéÜg˜Ý. ºEŠb±M l¤Œ¬8*dI‘h'Ùýù=sã GCZ¶T¤[©)rtæÌ¹ß¨g¤Âð©G7•Ò ’RT³›3\]ÿïûœKÄ…‚ëÂÃZPŒ´”U@øûåÙ7ÿ`ºjP#Yuùî,l" Rªº¼:{]ÿüñ¢b¬:o7›öíò¢ªIu>‡?LÃÍ—Ý|Ûvëí.Üx½\¸%oÑnðÅ9r÷ÝÜ]l/­sÿe¸úõ¢úµºü0J°T#Öx\žÃWÆÕùlÙî˜]¸µÞ†«·ÞíbÙÙ‹Úo¼‚¿¼iªs¸Muuþy7¨²§ñ;s·&„" ýÜÞ¿”ð#QBû57k`_Í—=bÝûd¿+8”õß5t6x¹.*a. µ=±lrþÒ~Šûç9ò>NZ#,šîl½šy’o€€ØâÝ׿’âØ›í•]tµpÄ[¬û'ݺL',*èƒèô6RÞ²Ænµº;½Xo<‹<¬š56i`5AÌ‹õj×moí·gTç`¼™³1#–þîòÝzéh -G1û4ç†×aGè“£Ôv„Ì’ÁKcÈ´‡Ë;`‡„;òâ*ÀjWî’@ÎfxðY—# ðv]ÛÍ{(;¿ô¦]9št‹Ùyº|wÙ+xÄNJ(D -h÷ ѯðì -´è‡3 Z¤«p-¸9ã…4þóòì糟õ€î¹3¾¹ý@îʯ©ýQj…"ª)Z*‚Ò = -R`ÖJ¶ÊY)­T0R¯æn©šßx»46üêz{öÆ©†Ó«Fµõ*,ëÜ­uøüÂIÙÆû øÛFjšù/.Û7û\„(‹Iq e9V@Z¸p_û3‰l(‚œÙ€góã„ä»O–öÐnçyzdÌ6ôX/B რÚ¹+̈>˜¹ïÂ×CÀƒc4spÞ·>ˆò÷ Déuù4Dùòº<ÐA¬X‰-g1‚ @ÖÍË•×ÅT€B £ûèøŸkÌŸ•bi - ‘äýêçÖá´;„9æ³—€Ö™BÔÅ.\µaMš±„{ëwa™ËÞ\ -• $›¤?M9Íƒíµ¿x•$Ÿau,ÏÉ•Cº={¥9‘Åðå~:YÐIÈŒ X”²Y~ÖL¡ÈxƒÍ Eçïm)5X?~ }ÂêÉÍ3ˆnó_T&°Ü.ºÖ¥½Ë”4Û2=¸ñÍ„MÒ#¬™B‰sê©2”öÎ]A—»u"Œ>ËS ®³,/Qà-èß#¢"M¦Ô ZÁ#굄¸2B!§6vKô€QqwȼÙ¯ùïÜåf›U¯Ñ%àœTÅ/ÆBHOÕˆ£P*àoÈx~ƒ-Mn²¼MŠ2~³mԲºRMÈ=|ifÙÃrŸ]b 7Ôõv7U³Ñ¡hs9Rÿ ’*ÖW~¼ƒ3ôÜ¡6o;¬à!D‘9Å‚µ<¾ºÚ…k—pÛË­KmŸ$‚ÖGÆå‘–T°Ô4ºÏÛu¤;p«þë}=#xbíÏiž¦Òœ†`éuÅy½q -ý¤(D : -Q¡Æåð|›ßh#ÞÍ·sK;¯ŽR"´1œ†u•Y¥ýÂyš&§)™úÓhù—·õ©6…͉âWéà)_–Óc-þû¿’&ãÁ‘Ùƒj4dÀ[¿õtá$,®ãêü$¼é² ¶IgMB~ä§ušQ2zhh|YŠoVK K&°§q„b™”p“€+O—$ÕW<ÿöÛ¾Œ^b㈫È›‰#Mks¹^-?¢¸¬¬Ì¢Â#ÿŸ\ˆ𙟹ô½öö¦¿³6ɪI,›Ïz®xÁÙqiŒÔÇÚè“âÙA`S’™ú†q©ó#RnJÎìdRÎ5FZ©Ã¤<,žŸ Þ}ÅSo±±Jäõ¶ñº!Á -ÖU\rpÍŤÚ/©“5{ - »Q0MaɃd]6ì1²®püÚâfãG5ÂTFq3Æ&ú~±Vºä˜’òêðbmëe±¶ƒ #bÍ‘`â±®öK”ƒ*"…pEÓ?¨"æOÂ3köLòvçþÌý¤– ó ³ù&ŽL¼öÕÄ~¬P9DÝ ¾“oÓ.™{i;\ „ǘ¢óU5O.|õËÔ –kWšúøu‘ààþ®ïÓv©2ÎsWÍíyž5e,ªyan)ȽAQ‚@ìBdv«A¼‰Z”œ! ×è3¸ÎbY‚ôö¹³ƒHZ³ÌÉ3ý·T…g]OWèã¼X–,Ž”‰AE¼H~1ˆgËT„˜Ç“•+û âî!D¼q£f.|îÜXRjµÎ 'Eã@’É3_5e‡SB%Ô)h‰uÔˆ‘Œ3ÒËá"Nìê®»zöl<¥¤"XÐDÓòÅGŽ&Xu¶Ÿ_sDS™æ¯ä} voNɨÉÝùIð °¦ðQ@Ôøâ!ž#¥É08Q,9Z‘º’b>9–‘µöÌŒ¹µIÅ5îÆ}ß¾`çmƒ¢©€ø—M‹åPºG£éwr`|æW³´<þ°èE!ß ó†1Îaq|ÐŽI‡éÂ.™žÖép4•$޶·¬ÿ±Wa8ÚùÇ®¶ãöÉC¨ Ð÷øG°;‘1ùd´Ûq¤3hÚì‰É2LpMZà -oBk -ùàþ­A˜³²Ü#48¹¡hªD?–ž´W.Œ^øãu¤ÜÈd´ ¹Ï ¨4>m÷y¾ó|]\¯Ê=$?ã<¢O&‘_x*mœÿT.ܺz׿u‹O}=àºzËzÙV‹Uœªþ4,õÇã°½ñˆË†£ÕéTµ Ÿ·ó]/«¹EŒ@…Éê‹0¤äâQ ß>¸YÌv£!ÿšc‘ÉÚœ%’‰†>lþ¨ð“Ïú£€Ï1yºØ7ÑIpCÆ-©ÞÕì[Æ“Ž[3«oLZƒN€6´aà?ÉJ¾¦zdøš 88«Ú5µü$ ÈÔÚ^j ÿÕ˜OJ Qš„Χ¥ü§Ã:ŸÂì]%{5èé M¢L%…1Çù˜ÉkÑÛt¢Cp“§à ¶bËá)@OB[sjè:ˆü‰ðMEþ°÷ ~'‘?z@£yL/Çä#¥eÅ00‰…×çž>-e5^´{X'‘ìq̨€@‘æ¨ýRèhö{Ô¢¼ŽãÆMû -DmˆÛWÛýâÞWEZö"{Œÿ0{2#mÆp£¦D–6I8·OŸŽŠlì܈b+“? ÇvêÅÑpþŒ¾™* á›d;üeëO&ÙýiÙþ¥´ÝN;Ös]˜zŸäº™—U¡Â1^z3¥óŽ•Ò¾"säkAX@+Œ™Ze“aØmÛ;Û°õ·¤ÄUÓxúcfɼCÍi©÷êÓk_îºsæÛ˜8›˜ SÂF«8KÚ>ÁJKƃ‚#БVæeANš}*8ZXu¬Pp$¶âG…—NrÞT8ÎO„¡6¢† UðÅöz<Ì9‰À<ÂåîË[£ÁL–DßO†˜b:ÖÈ#£!}=äžú—ʺhÔŽ’—ì3­í°ñ}ƒ!vq¬Þ À› ±(ôªi”Ã`™÷Èýš)äÌÈ¡2Ãî &92ø9=·oL`÷æâ/#oèdn"òÁoõÁWû‚Üð 1jÕÀ>%ËØX\ÜGˆì‹xIDò®ÛhN;‘„2>}ëâ¹ÍÛŸìqçM<†()½%QìV5T‚ç>–)IŠÍ )b‡WLgul8 ü»wle´•³'ÞÚÌÂÒPmß–»G ýê:Y¾§…ÄlrÅ{ïm1>5£BAdã†ù<–_3…—y72Ãëà)•(Œ—¡ÿycsDd±4ŸJ~’ÄÏ_–5ÐU»G4°A‚¨tQA f pÅö™ñDd1ÌÏ‹ÕuÞ1ó?Ðîú¢od&I_O»Ž‘„aÓ8§úk×ý mZ?ÁŸtÑŠïÀÜPc”¹†Ú.|pum -GxëYºhöæ˜!)îšä|¼ƒf‘‰òXh£ Œ¸Žœ³Ìpc ʲÁ*˜;˜¹óòÞíˆ&’AªbÍ¢Õ z,“^‘ù<Ö+¢4¾\ž¾!Ó¿…äÃñ#”¥m¢Ðòo¦@£u>añ¨ßåaÉüËô¯ó¤ÝÞÒõø«ÑˆºžÂžy -AX\²gœa_+ò+ܹT¡6æôk³ŸÎþ¦h -endstream -endobj -112 0 obj -<< -/Type /Page -/Parent 2 0 R -/Resources 113 0 R -/MediaBox [ 0 0 595.276 841.89 ] -/Contents 114 0 R ->> -endobj -113 0 obj -<< -/Font << -/F38 38 0 R -/F40 50 0 R -/F8 42 0 R -/F43 67 0 R -/F14 72 0 R ->> -/ProcSet [ /PDF /Text ] ->> -endobj -114 0 obj -<< -/Filter /FlateDecode -/Length 3477 ->> -stream -xœÝ\Kã6¾÷¯p.7zň/‘J6 l^‹Íaw2éC€Lj[=cÀm÷ÈêLòï·øIS{¬Þ ‚`вD‘ÅbÕǪú¨¼»Â‹þà Á+ë…5ª*¾X=\•‹7ðï_¾cb\ÀuæaážX"J±jóîê—ůðt -¸*­åâ=\—×õâኆ8©íïíÕOW?~Ô;N†Ǩæ|bpýZ ™+Û>î§°º(¯µêîëÛ«Ï¿§rQ£º¢‹Ûû+ÉPUò…¨Üá‹Û5Œ·üi³{³½1ËþPIË—× JËæppwþÝ·Ý5Œ³lzÓvß¹G¯ÚwO›®}hwæ­Þ¿ôziÚnvîN³^ol›½¿Ûïõƒav+3Lû`Er6wÛÖ·¦Ùék×ô;ýóÝS³Ý˜¦½éï÷Â7û‡Ç¦kît;§‡×××°·?\}wë5Ìk‰8[ú½d¹”M`0¹B½6ÕÛsZåHVgXžn_Z¡c>iy¼D&ÖòÌÚüþصÊΔIØÕÜkŸ‰\~ä™]w“BZ"Y‹DêW­5º'cƒÞŠo­e=ªD{S: Ê)ªæšƒélrTJT³dÿõš V΂@ãŠY@ªlë¦÷«ÒlmË´,„´óSÛzu8ž=Iëz¶ù»î&5À(`!‰ -þy8ØÉ³û.L{ùÒ"Paž|nÁpolÔ.þ 4jˆU¶Úïå&ŒÙAɆ³K®h$ â)êA„fçY¸ÎŠ ·#18–äu"aß5¿µÝ¡Ùþýç|ñEÿÇc¦àQ`˜þ<¹I¢Î -DÂ~“¢@¹~…e9êûià J‰¹Ér‰¬£Ò–˜ÚiNXÛWtvœ„U€°*¤†¦> ÐÕÌ#ÑTe -ã™d³M 'Áž`¿¥ó6“OZÁ†ËçÑu6)"eaÆS›7£È>‹Ï”Å~ÚžÈü)h¡$'U¶ÄeÛT%†ôÚ¹õ÷× P¥N0Á•ßÛz~·Š•ê¹-£Ãc¬@Å‹Q -ÒR6¡ÌÔÞUC×ìs{»¹Cæê~ß½7=Ãø Ýó›ùFoº³µw´™æ×\Ð] -§vå=- t¾Ú: -ƒx’€è¨LÕo7æúÂò¦º§@ðW1hóùyY!® È–wò¥Œ2¨&<(ŠCu½n·^¢!7wƒÐá}Ž„æ¾XP¡JÝûæÁ-ÇÁJ¢×R=²·ŽK§[„“X™ä…`$à²BDWÐxôÕO-úæ^ÿþ›ú]3]º÷µp5ÌÚÐ0Lî ç· ™NÉéY*µ’µýÆ>ž -†~ádw -*!À -—‡u!Û¤É$O€!Ëý½»ú¶½ož¬Å¸{°yúÎÜ]Y»5S¶lÓ‰Ÿö:X[ŵI·^Š—0b­ -6æu?°ó¶°zãf{å¸ã€ ¶(©¥²ýObÇûÓÑ ÷].¬ˆ"ŒÀ²†å¸(s"g•G>y;U -xÒN!´xýcè^&ƒ¼;ä¢"‰ínRhªÀBb©_YLê?‚î…½ ðÓ™fẛœ…Úûê²Jf‘%<ÿ³ï3B{ßGèÐðÿ,€Ö˹ØVWˆV“lWª(ÙʘJÓÓ—ã†ôz àì|JH)›¬X*e†¢t7pÞ|SáBë-!Æ“"‘m·Â QöNŠ›{Ê“fµ ÈÆÏõY »ã[·;†%uýP˜ê®ne#ñ¾yŠQ¨T’‹$HÚ6¾0ïkþOá”2‘óÃy”ÿ)¸á¼…CV•¨¬'ËóL -ÈÓÜ"äÏ8ÿz»¨çpB:瀱x“8tƒNHç\0–®;.œrFkh †ãx9…”¯<6Ÿ‘RDX¸K-–ëãÄÈþ¸RTH”©C¶.W1òåN° -Ò²ÍÃãvv~ÈÎDÅ;õ@ØkKÔeä°mb9nnrIwýy–ý/èû€q’N’Œc}¦÷TÒ€± :iô6JÄö]³éš1XoîýY’#¼¢¤B&7‹¸®³Iq S'èR…ްM‡õ™M“õ–0ÄÓ@Z&›õ›­5”æL².1´o:“þª»®þ§›?Ú’]ëžvQ-ÌWP|Õ¨©‘5ÎjWÔѵýÛ`ÙæÐ7¦Ü¦oÞÅE+Ùûˆ«U#Cki |l|0üÜqL·¹Ì²X ˆØÀÿÿ -h5k ?âAA'V˜ÃV(N+Ø™ sÕÐÛ8XEžÄpZç ¦?Gf“j3‘¬ 8¥¢BO%8ïuù=s‚ŽÔ%¨R‘0ø4³‡eÛYôv Ë5×q +Õ!b’.L†©r m_“R&Q‰Sùr¢¢Y,å#pèÓL˜"üÀÁ„ ÷G!VÇÂ)ùëÍzÅÅžš0gøG*Â8¨GÜߨ7“¬ßѵ«ðëÔG4Æq:àþ þCøð|OøÈ+LÑšÀ Ë;Kô8®Oßì}öïõYÂpšiH– ¬c|Ÿ–NÓª¢/Їw¿ÞøÚ½],¹×š?+KŒìm£ŠÔô\ © ±„ýg -8BR‰p5d6YBPÏ- ‰ö›/­çfmãKåЀ¥D$8>¦h>¯ЀÚÐê8K†- ¨¯¾¿^({ØeCۢݚFŠêŽv» ªI–ßkŒN ¿Gxí3-èµ§ŒR{z@Cí醾µ‰Å6TоŒ2ê,¡§›9ñpJèeãÐ ¿·š õ(%§nULHÄÔÉü3À7÷γ±%Rz^Ñ,ˆ[¶„ªã&|ÇÏ&'0<ÔðíÓNq<Á§JstÁ H=‰3!~ÿcê8'ˆA‚¨ø"–EòÆâŒÿŒoÖ„ÔÊp6i{  Q»“^ç}˜Éõ rÑW ¦·I™ $ŽÀ1ú¢ï2F qžI¸Þ&'A%F%Ä×ñ$Òo3›Øë-ÅC§»Ú©Ÿ`BÀI1i¢®·É‰² -va<≎}Ys}if yA™~;5|—Ùæ‹K¯ªqŒ˜iÞŸDHŠ*yFEÕ¶Ã+å €¶FA¤ÊÀ]V]Ù.-øÎ.mÀ‚qÙÅê–X¶ì×–ÎÃç ”&ÝÿTâ’þÏ0ô0ÜJÖÉ ¾¶×¥Çt”W©ý¶ý}sèGø -iŽœº¸,e¶QÂ=­LÈûVU¥ôñ´BªÌHÚ`6Œ”¡‘nn²Ã3Œ$Î"%ªk’Huêž°o`<=mÔ¬"¾‰Pña¾)÷dž^Ð ÂZY§Šmî¶9BxºusóZy¢ŠŠRµfÓ9€bdsùA0h)øútðôBÁ^%“¯Ñ†!‹"O V_Ä=<Ú#…“”ìñµyñҀ©Lí3')dMNZ€›ø‹Œ¾wN@]ÇÝç6ŸY`1Ú|N:Jö ›¯‘gl>¶ýÈæƒ9,a=Y!'%…¶ÔYCQŒï>Ao—ç·ŸT:y¼ýDÂ=Ëwu+u -Ò™âÔ7Óì} ›Î³ÀG…$ÉüïG*;ú³:üɨþáÑ;œ0wZ*=ðñG]Û?u» ×/½,¡ÜE(Œ{7W˜¶ûó<:U_ `LÏ òk3Oøz3E”j(9ú_d9­¥>M˜óü,Õ¶0Ê”„ô\Ñ}COn°¯þ+êºendstream -endobj -115 0 obj -<< -/Type /Page -/Annots [ 116 0 R 117 0 R 118 0 R 119 0 R ] -/Resources 120 0 R -/MediaBox [ 0 0 595.276 841.89 ] -/Parent 2 0 R -/Contents 121 0 R ->> -endobj -116 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 500.994 340.801 542.975 351.649 ] -/Subtype /Link -/A << -/S /GoTo -/D (readable-iterator) ->> ->> -endobj -117 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 456.155 330.783 491.688 339.584 ] -/Subtype /Link -/A << -/S /GoTo -/D (readable-iterator) ->> ->> -endobj -118 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 503.318 316.492 542.975 327.341 ] -/Subtype /Link -/A << -/S /GoTo -/D (writable-iterator) ->> ->> -endobj -119 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 456.155 306.474 491.688 315.275 ] -/Subtype /Link -/A << -/S /GoTo -/D (writable-iterator) ->> ->> -endobj -120 0 obj -<< -/Font << -/F38 38 0 R -/F40 50 0 R -/F8 42 0 R -/F43 67 0 R -/F14 72 0 R ->> -/ProcSet [ /PDF /Text ] ->> -endobj -121 0 obj -<< -/Filter /FlateDecode -/Length 3418 ->> -stream -xœÝ\[s·~ׯ`_:RE·ÅÂuÜIÚ$£¼Ô±=Sw¬<ð&›ŠtHÚNþ}î ,¢Äµåñd2^-±ßÁÁùpppùý OjøOC¬–ÑJÔ4|2¿9«'oàÿŸ} Æĸ€çÌ•ûµÂ-¢«2¿Ÿ½žü¿. ä/g5¢²|„ça)'7gL´ˆanÿ^Ÿ½8ûõ^ß8 5TŽ‘ä¼P¹þ¬AæÉ–åT¶-*Á%¢B*q?¼<ûö'ÚN$’ ¼¼>kjj> 7|òrõÿ°Z¬.Åä|w‚ΗóƒùsµÝL×ðH[69y1‘+2½˜P29ÿ`þYv¿ÞÛOèäüÒ¼?,íGVìv§ À‡ÏÍ‹åïïW»åÍrcÄöNÀÕ¹¶qo¦‹Åê`_nýÛÃÖ¡ü P -UÅG¥Êï®S Á¾Ûp^ÑKÀ;=lwW`‹—¿œýøÒ72ç1ÒL:m|ŠÉT¿¨1t?õYIÚ§ì}„"Yêù‰&¦øPߣÕ¢ØõxLl×ûQ·ýïv˽1CÇ´iÛÂnØ$Ôq`'¬„˜ÀO”Ëòó¥íÆïM¯Þtú—êP¾S/ŒW¤*PnšqTpÂJ*УšÐD…{ˆ±cZר+ -5cËMýðÅòfêœÔZj¾ï«©X•b:ŽšNXIM|†%KÔü~¿· -Æø$/f¹®rúJÄ¡{Æú~ûÌ(»ÝªùvÔãªÀ £hý`Ìp"›€òms‡±L—o†ø¤‘-jëÆÕB©‘h¡¹ ôšZ‹­,y÷̓ A i¡ªI9×ÉéY9aUGZ &µŠ?"„‡Ýô :Óõ“WO?>üù.ÃŽ:êŸÒšžìÒæŒÈ#ð‹ë?U?5Õ`©þYî«™ö›µó'Ü ¾ZXû×Y3ˆ2vZtI¦«²¤$ÈIæqÂªŽ´žyh ¦Sã fˆ²65O†½9F-ÐÎ(°2D.PÝ´)Äé›á¡eœ.þ׺ ù1¸nî>UÎ(E”ÄÆ![¦iլ fÌP'ü³ØÞ¸@óûù\‡=åð4 -ª;á©yï¾~m*YÛn†vQ}ð€¦¶:õlóÁÊl`Ónh¯ª5~ó.߯Ó¨VºñW«ò|=5zª?Lô¯ž “¼_B9T+JÕ*ž7t£C)Í;Y†Á5xf`Sß«¨ð -Wäfk%.–kèðÖ„¡¾‡ˆ× crkÌ*X“ÖZ[õË<úÇÚWýöB·¤ð!¶¬*q©'JÐoÔôJÛÇc‘J0µ"`‚Èdníô΄;N³ÕµoQ¯£ùåz»^ë7Ð `}\™îòÆXþadí¬ä½”¨¦u–Ðûx]éJˆÂ¯¿"À}ªkAûÃôʘyá‹lÌc· -mnáç“zª Þ.ÝãÞ6ŠY±/êÅî—7ÁÝ”¡M±ÕÜV¡:¶òÞóËMî%ićél¿™Å¸â†û&Û7I „މþµÚ¦ÚJ}s2%ƒ5Wû¬À‚D - †9 † ÀÕp†8>qŒ²²ªŽ°Þ¥BoÕÑ×1tuØëøf±º¾^î–AõnÀ,¢t$¬NX,qO¸!‹ Sñ&AÀÅ=]÷Ü©”ñ&ÚäÙf ¾Ènùn×íÅû¥Ïvéò Æh> *1Óc|Ásèð¦ìVu[@}þ¿åÜ´?]»§ˆiÅ ÓªtÇugˆkXÐõíîFI"a¨'G™½ë“; æ¹oҜۤrέÁÉN`I|44é"ëçЋƋÌwÏÓ<šíU.ÛvunGõ8›Ö™Ò¦Ù´LfÐϤCšOáå™ÁLvÍæüBH‘M´µ h­NÞb'ÕTõ•ùìaºÜ˜‰6.)âF“ÁWK„©¼O¦ «¾ìTrJªÍJ+b&˜¢¨.íòÇûäÚXÈH*YE(ouš*Và–L°hUZÍWÐ}…Å¢縤D…Bð‘4vÒŠ:›´[¢òPÖMe×ΟElâµæ`ût˜5ù¶B/u1ŽÂC—úƒ’ÔÂØÎ|0ÀLPÔ0‘…lúŒ[´»ˆDJ%u}çž -üÐ\Ï%¼zÁ)àWòü±ÀYßO¡A„|Ÿ5ˆ‹ÚõÀ¤±&Í«‡xÊ´ù{Vø»•–¦ÕôO¹ -Ÿ=õßÕ~p*v_|»Z/;ªª\þÑ£VCæOq˜V/ïRá£Gù -]ËTÕ-îÔà°q}áØ@•–|™I¢9Ö©ï`ŠQÛ»¤¿:áW¿03 -šÏ›[fb x“›£M=1¥¼g±a^ÇÃ49?7oPÝÊî<-‘<-0^€=FDTjÇwQ3¼d»Q€9®K`å¸.‚5Hu‡™à+×¾‡›w=~›z/·_•¼¼#àQŸ!c¼­Jœ„`ÉéÇhÂ{¸ü—ŽŒ¹/…ÑÉ–]ú$ Fª£‚‘ þ´Á7 p½oFx ±È8Øœ{y÷Œ[2$ûÎSeÖûÅ(àï5Þ:•(Ïu(Ä5¢¸ÆÍH ý­7VǸE>ʈUë½"B;YÓËM/-Ý×éz}8`Dµ^ž.w%£ -FMM}¡YW¶Aeh‘$?ú¨®rã;m Lè-P…u8—@©cu…xCûÈŸ2Šõ½èõæ·ÛqcDb)º¶Ïõ1ºyº™¯ËѾ>½ælV©YlFÑÈ …ÖvƒC¬Ðß®r~[¤ðQ6cðqŸÁ™Úœ£´ jßÏjïž2Q¯¤—¨³¨÷»7öáùÏ]gÔ…«Néb"Ïín·Ûg†DÃVÃSŒ™Þ±çåðnY£FBOS´¹#8#\«^€x{ê¦é¯`üoÛü^Ç@Xê]ç]Jæ) -œ*…“¼=Nâ ÞOÀI£hä8©Ðþž“"…†9év£x–E…ÀRÃFñ,éa)ÚØMHXZ–¢0a̳C´cçÛhÊ”®:Åû<K4 ÿs1QÛIv«Ã4ôËQÂìv¿+G_3?+I=èRÎX,Q7xB1±K$G‹Ò¬nˆ¢:ÒÇ ¨l†¢b°÷ ¨ÜŒ ªgaÖ2Ûns 4댣°e°’mƒÅúf3vYÙ¯*“×8è=y•ð;öŠñ?ÉﻬÛ0ÿ2aVk9€KƒÙa£šþi»[,waW´¡#'Íó­§³»¹´Meœ†ù -ÙƒsDšbú›ˆµu/ýýôöÒGalŽ="°ŸŸ=FQرGÁ6ž="}g=jÏÄž+FÁ¸¢€ÖsE„öé—Ê£4ÌÁã®!F@ÑbJ†¨+d/ü´—ÆË±E?Êr -7GÜÏOãhìø¢`ϑ¹ÊEƒ¥Î8ˆ¿®å葌ֈóâÞ,B¬—§~r”“ñã8Y7çdÜÏïdãh윬`ïd‘Â]'{zœ“‚øÓ8ÙCdödòѪ”o6À’!˜¸Œ¨hÀíá¹ýfBTÅÇ5Ïí7t¤ Þl#<êfëµõOºÙÀ‘@Úœ9ˆÀÞrµAÓè³tÇ]m°³‡¹zʪMX  ©[DXiÈ:æN+¬êHë¯ò3h&Õ@ç–ú|‹=^ÖÃ'´ÌHðŒ¬2º– Æp¥ L™a¨ VD„DböÂÍÆãôcŒk8ù¾…»nÞ¯žp;DIQ+‹÷-`˜6IæÎ]\ºÃRËÝ6=~5[Ûeî ™K ‡‹l‰Õ …»Ç¬83o 2AÜ2Ü”°»ÇõLÔáz•|6×#°FÂmv`¬ÜÍúå‘çu¡?IveoFщòή ƒ*½*A¿|á&¹š$õ«gQG…ιT¹{¢½s³V§Ç:çÞ7æúÛÄÜžÕ‹¡3S²ÏGÛÞ&X{›ÀS¤ÖˆêNtz‡v¶—40KI¯×ø0W7 ¹êÿ;ÐöR´½T™…ýÖ=÷í •ÌyHgìÐ=îË_ö/òÐ?µö‘~2·,èò×[³î»Þ©Q«oÞ¸bá’W¡½ÂhÖ‘˜Ú‰”¹ -”Ûtþno¹‚u¶ødâ ËR]û‘]oö¼Šô•Of 16’™l DHŠ;û•ýzö:> -endobj -123 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 320.541 179.827 393.988 190.731 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1519.htm) ->> ->> -endobj -124 0 obj -<< -/Font << -/F8 42 0 R -/F40 50 0 R -/F38 38 0 R -/F39 46 0 R -/F14 72 0 R ->> -/ProcSet [ /PDF /Text ] ->> -endobj -125 0 obj -<< -/Filter /FlateDecode -/Length 3991 ->> -stream -xœí][sÛ6~÷¯`ÞìÝ!î@6õLwv·Ó¾l/Þ™vš<È’œhG–Inì¿$. "t¬SO§Ó -A‡ßÎ÷áàBðà ®jøW’!VëJ*„àÕâú¤®ÞÂÿßøŒ ĸ„ëÄ—3Nj¤„¨f ¿8yñ/Ui¤­.®NÜ=FRVË“_«ÓÃq~\U3\.á*5|Öþ½ºžoÏ*¢ªÓãza?CðW¬:ývëJß™ßSUÃåürsV™Ÿ¶¥î‹K¸0†V›]kñãó³êMuñdu@ˆ%A[t·¾TÇ j,|‘µ¿É|ë®væ~œW§ÿí¢Yý÷Wq ç®)÷Þ¡LbÓ5Âu€ös -G„b_$í£@œS_æîKóPùûþ2æá½üÇBl»X¥Œ1ŽÑ‘£ {3F5’Ú# >ÛÂÇÕ~~ÜííOþyá¹€±@„ ”B„`Äð‹7ðåHóÝI¨VÕG¸‡µ®®­WÍ›“ŸN~¼rÆfk ¯¢°%1EáŽ)ì÷óõñðê—ó—/—ë««Õ~µ]¸Öêc†°A´dk+‹˜PÓJ}Àwï“ÍÒ¢IÖ3J© Çe²ÁG,„ï6eRÁ݉/²_½ßGºaÿ5òc¦!Õ™»[/Ú»mó3+NÇæ/Z®lËá¹²ð¥í÷WîÊq¥¡‰£ æQ&§E8FŠ2 aË;Q¦Ð `tBËC'€pÜö¿ã'îþµ ¤s1×üª3íU[¼tÖ™’R*}ÐÑNeàºF\U’¤¤²UòÏÛV™ö«ÃÌÖÎ ß5ëþ°Þmdg ©"9Ü÷^8ky7 q"~´ñz¼iø•i¨‹³ -˜Ø”¹H1_R`r)œµ¬DQAûðõá°jÑ׎\/¾·´\ì¶Kûéqm>oýÚŽÍ7áCÿ8¨f¸Œ $¸™_éGa‹ ÊÉ~Øò#|Z! ¡’iU#©D%k‚¸ ùäzÐñå.nÇIÑ1þ¬ž9°˜C;+£ýe<Þ aóßÇÖw )1îAs¿sÇ˱¾LêÐS…êÏÕ¿‹ùB>>½ W¢Iü2A/ %Û8z}zûú,èÁ`™@ÏtÞC˜‰ô2àB¤÷À%"=ÆöûBÝÕù}⽌§Q¼«§ïpA`“‹w)aüN¸·_íw™èæËD®Jw±³9÷oí?6réÄeóïfå²øã.=n$+‡áçån·ÉªŒÏT™&ò¬Šœ6M3Lø1…æ c¥uº4I¡MMí|¸iªe uf'óͪC´¥÷«ÍÜdU6©²¨]*yï>_Û\.w×óu;(JŒ5žfšÈó4rÚà{}:ÿê«Ëu†æ²ß>k\o‹$HM¸&”w#µhéØV§gþr×|pÝ›BÏ2uöôÒ]*aôÁ³ôd5p÷»Ñg“ºÑ`¾ ={pSôŒà>=Ëøè™i"OÏÈé? =ËÔÙc÷žZ ¤prX¦4¢œV¤k7ìÿö*½|wÇ!î’ë˜ -À„™€y[ÕéŬ Ò:³cæB®ué¦#ŽïÌ•6º³ “ËÕÆ}öc³¼d«ëæ#ÈȾ^,Ü -ÑÁ}vqV™™ö–|ó^æu˜{sßúõÂöosó°â´m>®ÝjvSâj·ñËÕ6ÚÞºïæË¥Ïµ]ƒ -wÚ¯>ܬ£õ¬ë•[“r+œ3Q#&eo‰ãº…Ó[ÔjùàªÍëÊõÊ—HÁW -q=miI*Ä€2÷ -ÝÄo>Óâ •^ÔÐaLÀÙâ—šª¹—8¢¤¿š<¶¸0©¨:÷}ÐâRk-ëæ5ëùñ &®Auq!'œµ¬Dʦnc'þíAZ²†e£†<K ÈO«ÐR„wÀ£FÆŠûõâ0ô™J .ÕpÎZÖg -¾š^3ö9¹ªæïûýêÓËgœ FJyb¸ZcyŸ¾¬¼"”M6M}Ì$›œsF÷‡‚¯²#AKü`üa©¦c~l—ø Ò #`]°ÿÏLÓÉD—ƒNdÚ‡šŠ}öƒYg,Ð^œ»‹:Cù2øç3ø©Í’I„ÿÕØ~—äl“ßz²;6"ØN µ ¼\í;yG;ßÔM+6NF³ÂQ¦>ž¢rPh™]…äŒÂ_ô#óÕYn”j¥#X/#=´)éˆÐ>†v”ñ9hG¦…¼vDNßÄãî^âQÆ ¼xD|iêQ¦B"õ˜6ÅõÅ«‘Hìš®™ˆ xxœOI<‚õ2êÑC›Ríc¨GŸƒzdZÈ«Gäô$÷ZQnЊ \¯Üó/L+ÊTÈSÌ40GDfו9VHñÁºòù”L#X/£=´)­ˆÐ>†V”ñ9hE¦…¼VDNOGz­(7hE®×Šî—¦e*ä)jEMÆÙµm^ ÄëÁÚöy~mÛŠE0_F,zpSbÁ} ±(ãs‹Ly±ˆœ~ö:¥©­^1Š`ÆŠ?ªúÏü}À3¦kve©™fóÁ"õy~‘º%FÇ|žõá&xÃ}žòÙó,×DŽg±ÓÀ³DŸãYÌŸ…gO£?37#8ý¢ã™Â±¨Ab5¥?ë˜/óÜÏ"¸Á³2>žešÈó,rºÛŸOêÏÊ`þ“gã<Ò}™å™Ðˆ16˜ì˜ÔŸóexÖƒ›âY÷1xVÆçÀ³LyžENwû³óiýYÌO*o¤¼9c²+¶üψF\g×›Íf®á#³), Æ‚5°,ÖÓ¬‹¶÷,{Še Rd zRt!.-Ä×ö µçù~§ \?óÒ‡«†/Úø`ƒ—ðƒ†1ÛÌöVa _Þ‚K÷×Ü]øn¢S#ú»ù$b xŸ8mÁPÔo»Ù –ÁPîTƒ&)Lû›¨ní¶f_›ìæÇ䉠ûŒâ¯îbë.†ÁŇ’Dëá) ýcI4 •~r§wÿ×{í¦¤#!HÏõÛ‘¯5€%&Ä -Åé\ª)¢ù‡…™9üˆd׀Ƿc½ˆâæÐzÅà~Zr aô’›Ãè%7Â4÷îy«º9Í-„×knoJs#¸Šîdѽ›"ºÉc¸~‡è¦kˆîíDѽ{¨è -ÔÇÝŽX¤iÊSŸ™‡óß(§¨VÃNöÎcŒ’»}å;÷ç¯í«-u‰ìš§Û÷¸uÙg8Ú-éfûݶýôýÁ¬0Áśѭê0tC¢­Âþ wÚ—ˆ*}úf ¾¼ú¹ß”MkD8Ù"­÷/^¸XÛ¬Á'ûŒjîzÞ|ÇÜI^®dó\B{yœ¿u»ë^pW×ï7íÙzí({±™¼ û4B[[~dw8îoš3Üš¿Ö‰ÍfTªŠóŒË¤™‹ÌAaÖØ¬cmØ!(‰DmîHdÔŸØ5_Î/7‰N ø„Çe:cY„M‹*ÜCèÚòoNC— -n›I”k¦Ñƒè¨yÈ"®Öà{`M´¶fcÊ0Ï≰Ɋ¿!vk„ TÐéØG3l7û´]ìW׫í1ÝÆ¤†_R¢pö|›)QhÍ:Ö†QhÜææŽæÌªo©Ü òЋ2­±Dbm[¿œH` -†¨,T»ÎX:庑{Ô.« ¨T¡ÚuƲdõæéÉD페<”À”1$ë<¯vûóý2ÁÇ'P*¨qÎØ¬c-Á`‰¤4w„4SL‘aÂ`ÌÉÊ@tƲ ­Q ùjb‚#cÂH ‡V8—Álå1ƒôÔB÷0§…ÑvòEÀY[Yl*Ýœ";¹É©ÄˆèBMîŒå!JLžžhòÏÖóš| Î,q/×Ëõ~µ0;á’ÜpYƒ$7»Õç^YT°6žEq Ö)]œË¢Š@ôYT¢Ë¢bˆ úŽÊ¢4íG 9Ðn2¹^©YMç¬Dk,²R­xª^?Gˆ9d‰öF\1Gö0š6øf§TBêöоÍg§ÁÚxvJ5ª=Úùb±Jɰ'o |¼|ž¼¾)ä-Ñ“7Ñ‘7†˜ ï'¤‘ŠzÍBµëŒe¡S!  ¾Gí2è0•e :cYˆ@mDE²v?…{ˆæ\Ó/#åwÝ}ö)Äfþ­L|ã‘uf|ÍÜÔr‹®ïÒóöĺ‘xß@WwjŽ(§ATIöèµ)ºcÍ:Ö†ºƒkÄ¥nö\(fëøn&¯I!„ÖX!—HpÒCØ›÷ê¿Ø‹°È`æÔÎÂAš' ÜÑ(ïÝó~ëÎa~\^ט­ü ÇwÉ™FŒ8UV31l¾Ø¿µ?~ÓíÈÛÒ³NñÁjRÏb‹þ?ö€—ýÝÅðýƇøšõ1ÕLËkCíÍa»2Y€Z@GF±âÎ(„1 )8ƒ|o\CÐ?÷äs¬¡yÇBçZKw ¢¹²Ìsû­æ–Ó{÷ý±]~šò‚óÜY3}‡Š/‘~Ã=ϲ˜§´”EhDĤ£o2]Ÿ56ëXv}æ=!PXš÷ðàO²˜pòñB[[y|‚"h˜ž£ð«ŸÏ_¾üm¾¹I./Ö¹šoi³P[2˜ÝÅGí?®»ç‹­Ò ÷3¢Y“ߺdN݃þCßO³P§¤%ÖØ¬cm˜–PѬâ›m5Ú'£>eoc¬æµI³e•ëCì’t³Â’\‘ö‹î¡Èà<~èÓ¤ê¶D{3œ8€Â½¾mx·Nþ5eƨendstream -endobj -126 0 obj -<< -/Type /Page -/Annots [ 127 0 R ] -/Resources 128 0 R -/MediaBox [ 0 0 595.276 841.89 ] -/Parent 2 0 R -/Contents 134 0 R ->> -endobj -127 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 260.354 488.876 287.807 499.725 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1519.htm) ->> ->> -endobj -128 0 obj -<< -/Font << -/F45 129 0 R -/F40 50 0 R -/F8 42 0 R -/F43 67 0 R -/F39 46 0 R ->> -/ProcSet [ /PDF /Text ] ->> -endobj -129 0 obj -<< -/Type /Font -/Subtype /Type1 -/Encoding 130 0 R -/FirstChar 45 -/LastChar 121 -/Widths 131 0 R -/BaseFont /LLOMPD+CMITT10 -/FontDescriptor 132 0 R ->> -endobj -130 0 obj -<< -/Type /Encoding -/Differences [ 0 /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega /arrowup /arrowdown /quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /visiblespace /exclam /quotedbl /numbersign /sterling /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /dieresis /visiblespace 129 /.notdef 160 /space /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi 171 /.notdef 173 /Omega /arrowup /arrowdown /quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /visiblespace /dieresis 197 /.notdef ] ->> -endobj -131 0 obj -[ 525 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 525 0 525 525 525 525 525 525 525 0 0 525 525 0 525 525 0 525 525 525 0 525 0 0 525 ] -endobj -132 0 obj -<< -/Ascent 611 -/CapHeight 611 -/Descent -222 -/FontName /LLOMPD+CMITT10 -/ItalicAngle -14 -/StemV 69 -/XHeight 431 -/FontBBox [ 11 -233 669 696 ] -/Flags 4 -/CharSet (/hyphen/a/c/d/e/f/g/h/i/l/m/o/p/r/s/t/v/y) -/FontFile 133 0 R ->> -endobj -133 0 obj -<< -/Length1 1024 -/Length2 3799 -/Length3 532 -/Length 4487 -/Filter /FlateDecode ->> -stream -xÚí“i<”}ÛÇe Ù²d g–¬ÍbÍR²/Ù²–i†1ÃÌDv²Ë¾Œ,!EÖB–”%Kd-¡ÄX’,‰B²TS€4Õ¤ @µˆÀa1$D±€ÍpÔZHª“ÿSÿL~Ƀ1ƒyþ‘þÏ6ý‹æ‰Æþ[‚óôò% ñ€)Äcÿ)½‚üÓ)öõüç©!†Aõ±®$pª‚(ýGû\B‘ 4îð¾È_a$ñO#Ôîý²6117µÐ•ûk®¿N-`h,Ášä… Ë1ôo¦v &Ž¥ -©ï__Îÿ¨¦‡…ãh¬+  ¬Àðx‰…ºATR ‹@$‘ê ÂâÔ+µ37ÏòÇX•”°ÉË ‰ý#þ+Dö7©`øÿÀˆß -€‘¿¡Fý†ŠØõ7T¢Öú ©¥Ñ¿áYŒù ©u=ÿFꆂq¿!µ×oHÍŒÿ ©™}~CLø ©…üþFjfÒ/ü×1^¼ˆ#PKŸQPTTTÔ5•›ÿ[fƒE{û" ue¢ªªö+ -÷Åã‘X¯Ÿ‡º 1 -M])$’ˆ„³LŒáàî™õQ‚ôІÊd|Nf—Fô·F>ÎÖ-Ð8þß0hÙàŠärG—sf¬W€(åzíÀî+pä8W7LaŽÓø²ÓUÚžü®vÏ;1‹¢ó^ r_&Å¿Oûµ2T™,AUï -¬ÆÒ?x;¶¿äüjf‚5 !¾Áâœßl’Ž´ý4}»owEW„›(é9á”óû`B }jÄã=[¶Z\¾)© š¿˜5!`7LȇÂOÏœRLy–MàH*ÓŸWʲêáÉ创ÝÐÄ)Ê=WÕŒºÉÄûi÷OÝ¥jè` ù&,S-ÓÉ™zt4ÝÅô”(ÂÙŒ[‘­Q?g ïÕð£E§:õÒ« –qˆ,æÎwÝïì8e].)åå\ÑŠQzm命²(Çà­"@G Aå2ÉpŠí˜›+ÒîH˜‚9¸C.aCgêfX6ÏÓ -Ú\g¹‘ºùÔ°›žÅõy_°hƒAÈÁШ&¤£Ut¸ÂyuˆåƒQ‚´éï6JO=°sƒÝ6ß:pO œïœÀ%Q/!™ã¹Ü¢øRÚ?kÑâyX²ÇØYníÎfamrV×!ojöع¢£w¡~äàY‡* -)Yéíäîº*™Cn‚½øòx¤±»½µiw*.ŸÖ˜üô²•€*‡í¡ü«ÚHzŠù¢ÎCº¬äŸiÄmÎç÷>8•}Ö_F’5µÝ"sÄïÑç f"g„µ²ÓèðºÔYäÖÅQ~õÙ·®.fÀ9ž#ãë_ ö®²ûRÔÐóDÎj-ðª©Vö臧keK¤xÐg%Ñ4fÝãÀï7Ëo÷>®ﱬI~WÚLžyšj•é*V¿’ç`ò–Käžk„æËT'ƒUÙvNÇÃ笇ˆÄCò#¯gélSq&<µ-¢ã ±/Ë‹¬%93É%%"gÎñÉw‹5¶žØAWÖ¾E^¾yb[`rzÕ4¡!n·ÛÊ>ÆhtN˜jy'>×öä–ó±å§kt -nL!ÚS§CB¶+躚nå'ÎÙò‘r÷[w¾ù&ØFV½>f#CtwLŠÈƒwá$ßäÓ·'8ÉQ*:Ø5UfÍ [N¸Þ€Ö®#ù×:›0®i÷¾¾Šf¿ôáÙ?³ÞÑs ¡=úäòª7Æ™‘¦K¶´õ_ø:;ºóÊU/¡Èà‰ßgÉ®e÷Ȫã“ÑõG²3§è³z«SJà0´€×ÃÜsŽ(†&a%ÇîÒÙÇ×í&Ç'¥ÂË´Á:_b,·qí -˜\ŽFò„¿L뽌M©ç}m_{Gåd}hGºísˆ^윭®Ñâ‹›”7IŽÖÏ‹–PþïdWÅË çhó;'ÏË1±ž¶`«×JU¨¿8)˜X+%ÎÞb¶R“¨MžÙið?|Ù¶`Ê™4hëØ†‡?ëá2¶ ¾ì‹;Ü‹ñˆ#°a‰N· …ÞRëò67><sRø9Í¥¶Æíf½Waþœi5Ê}*O3ÃzûÉÔ׿ÈHWSÄ®—ƒ…ÒämÆmw[v ‰ëQ¢‹ ˜Îåf¤_P®xëæG·¡Ì„Þ[>bd1ÁÖBa×èžBÓÙœÝ3•µ‘Œ2BC$”³òÙBƒo¹T0¹©5n#ts…k;pè£Øu×mÂ4…\(뀅Ððî¤2ÖÜ–Þ%O²Br%]µª^P¶E‰_n©EZhÀ‰u’+J_ÏÒÙ½v`‡Ó?yÜc.ÿ6I|í FÚ2ÚRåÜüšéíjò„HWåáÀ$÷ýa8q0ÓèSŦ:”x‚ภZöåR¥c¢8÷Ù–w7Ž2ÑÊ_è¹{‰7²9OÐ@ *‚Bâ/{Ú`þ½¨îwÁ•„3ÕöŒ}ŽRbå]OôÎ|×ûi×ÌŠ»ýáŠæç©{4~ò2Â-­{Ì:eǾ;rA§÷j“ÈÛ;V ·ëæ“@ip»‚š|‰ME”afWç ødUE½p1´ÅÖû2äæŠG”ÈJ|)ÔÚîç„Ï3».ÆåIŸ 3¯½Û£ÈÅ1\)½t00Õ’J¹£¼Šñkøx“<^J䥹³$ùêáþ¦^+v~O=Ø}bÎç¥Y²Â•’ÔôôŽ÷* -=0í6C5_eþ6õ°É£ôxRÝcû$‹%.Ó1|¬IhX蔘f­žÑÖd08òÐ)LAà°Ï0÷ Ô¨Ž,³¼Ñ&Ãy¼m¤ÛÑÍ.±v}UÞš”õf‹ fœªs}‹~v½¬Æßã>oädúÇ ~St/¢DZZ:j­°Òj Š _k/¸]ÎK^e¿L,ã `“+ÙJ¿RŠ’— CH2‚ŽfÑ«ñôù4<-vé¯Ój÷ç³. 8uÖgnùÃÃÓ%ߣ ¶¦¸R´Ú y#Nó¡ºx>Xóc-£lÖxbOêžqCˆTN&»Yç{úšÖùíᕞ´Þ³Ž¢?̵ZìR¿ÝK‘Þw&… RuïÍ ®Ç…Ñ õž@aÉâÂSipšæ¤{óM -]Ý •÷E®‰19ÇlAÉe©ì:¦ ¶u,ü¦ðk ªU*ÃÆ×66Ä—Ø@ ¬MW´Î«É[µwŽgmœÒv#¦T@G(£ÅœlíK2‘üާùcä¿!+N'Ðd]`ºyJ3®ºÁ‚‡8t¸};3gSÕº÷e5\ÀÖÎZW¾'3AË[sí³©´EÔ•k¹¡Úu.ÌÑ5oEfíŒý-*¤W'¸ÆàßO´É?•rôÜ;7óxÉU²1×"sî«{œ—Òî8§í¹’¤Olî•øYˆ)ÚÁ~­J:Ú`µß]zq$sÅÙŠ»LmN¯þ”›ÛãÃäôp ,H.+¾§¬‰ÏzÝt Q!Ç^W¾óe±Cwa:Жßû¼ôxÕÞ§#ž›cÖªEŽ2Ž%½ÞغÅ=’w!ëÑ4ÙQÒÆ-Ìž €½m+¹"ñœgÇOîY‘ØaoqF|îjLÚdà•ÆÓBǹÓV„%¶,,ÿIðo‘ŽAÂðœ' ïÁò_Êóû¤endstream -endobj -134 0 obj -<< -/Filter /FlateDecode -/Length 1519 ->> -stream -xœ½YKoÛF¾ëWð(¸å¾w¶‡ —´*Z Î‘h™€DÚÀýõå>øE«]–äì·g盎Ÿ8JàŽ$C,Ñ‘T Á£Ía‘D;ø,ˆq 㑇±‰”Ài"ÎÌ× QÊ£X -Œ¤4&?­ß}`<‚Y‚Fëû…Öˆb9‹õvñW´Ü¤u¶+«—¸.ãºJ¿fÕ1ݯ¢ÏÑú£™´³1ƈ Cßμ[æuV¥uY9óŸ× áin–J–°y‚9Ÿááh\$ˆj}ƒ1hê.ö‹ßŸÚ7ó`q;[‡a5x9x¡¼>~ÿç77ç¹RAà½è<\=Ø$W*$’šŽoÄÝ*x_µS *b,Š] Ø9ß²*k7‹vÜ¡‚hô{µYEGKXÂÌB+à»´ÛîžšÍoî¦+X(ZîǘhAÄr3bJY´Ü6S3;õ.Á¬¹.²mc@5˜Þ7Êý¾\EDÁ{O·Åë‰`¤±þïrhçŸÕƒ3¹^ïÍæÅœðhùƒ›ë Á Æšsïµ{o“ü°qe3Ú”¬[ç_ö™¿U—Íœ—›*;dE6OÂSq'…¨¼2˜-TÜb†2V&ÊÄÜa­ìznë‰M Äˆmzk’ŸÄˆh6$˜î‚ÌbBÝ„Jo‡ª¬~® -ïý÷ï‚uAGÆÙþ6êâ­ réî/Œª´Ø–‡×%^EGB2®MS+nÁN]^å–/sï¹t³ÉŽ#j¥æa29‡5IŽq„°›Hò`§Ÿ‡ŸÃšäi’`>à×;Žá‘Ï b4îÎÅpÆfs$7 ¿ò|u`qíô|ÅPƒJz:lb&~lšaj1à7‘‰ˆV=ôLØ$Å à>Åt’ V`Þ4»|É·y•mê¼,Fó³×1”/œé¹„Ü¢W2TNJ˜‹•< à å)†^Ë=†Z?C^ñ| ƒ´ 'ÖL’iÑÎK~±ú7’™…bÌÅ ™>ÅÿW2÷eõ-­¶c'²=!©@‚^‰+î€[M=&¨˜ ”Â9É\üØ4AP‘¢tÀ°¯¨Ú!N*å¬ÃÃ!D‚Ã÷Êt`qmäØºØ¬(|‚] (J…’3Qt`Ó¥ù|‘CŠ]@vê-%’ÏõDÂÀIre¶ £E;Ÿ0Ìæ’ 4âOŸ9z°i†Ê¨$†}@AF0¬ y±ûü •a’ )¯¿P¶hç+Ä *|;ã1­ )GÊ£yØ9°iv vÊ즬$$:5E6Mê u@±+`¨*áé[*¸|®G%ìÅ•B -«™>;;hç¾;¹NƒâñõSÎêi‚lš ; -û §|²éSî•>Ž/á¸HÁÂóÔƒ´³õ 7­F~‰T\Fž‡¢OïSC4ö)^Xú^§8ÚΩ‚@«rW¥‡SEåû}|_6jªÙ6€ƒŽM>d¢éÚÂù-!AAÒØçñ«ªÝ¥Q5]ÐÚöIݯëŸ`§õš˜¢)‚ÒºáII-/Òª™ÿ²¶-Õ—Ç•I?75­„æy^û)»RY4÷7náÇæ*Ùö®m3ÓÓ-º$›Î.Ö&”Ç -!Œ(ÇÓ@Û­¹_íÜà×Ûn¡cãÖºÙûÎËð¬ -ÜðáX%rˆ#Ü'0h{“©eû(vÙwS˜”Æ?¿°[þaý|c=ˆ›$|Ì{]r»ep’{Ô>Þæ6&Âýú!Lk ª.ÊÓ³…éÝ<¸_Ø(DÚ ­ÒºÍR±“cå"ÇEˆ%“îó¿Sóñz ýü*íý»·újÑöÿï+Óʲcpœák/zAu¬;jêµÛ5¤]núý–çÍMýò˜é„B¤( ÑÙ?.@Ê!\††³ˆ[““È€cÛðqv-ŒOãd”#«}Züs8cendstream -endobj -135 0 obj -<< -/Type /Outlines -/First 136 0 R -/Last 151 0 R -/Count 6 ->> -endobj -136 0 obj -<< -/Title 137 0 R -/A 138 0 R -/Parent 135 0 R -/Next 139 0 R ->> -endobj -137 0 obj -(Table of Contents) -endobj -138 0 obj -<< -/S /GoTo -/D (table-of-contents.0) ->> -endobj -139 0 obj -<< -/Title 140 0 R -/A 141 0 R -/Parent 135 0 R -/Prev 136 0 R -/Next 142 0 R ->> -endobj -140 0 obj -(Motivation) -endobj -141 0 obj -<< -/S /GoTo -/D (motivation.0) ->> -endobj -142 0 obj -<< -/Title 143 0 R -/A 144 0 R -/Parent 135 0 R -/Prev 139 0 R -/Next 145 0 R -/First 199 0 R -/Last 199 0 R -/Count -1 ->> -endobj -143 0 obj -(Impact on the Standard) -endobj -144 0 obj -<< -/S /GoTo -/D (impact-on-the-standard.0) ->> -endobj -145 0 obj -<< -/Title 146 0 R -/A 147 0 R -/Parent 135 0 R -/Prev 142 0 R -/Next 148 0 R ->> -endobj -146 0 obj -(Design) -endobj -147 0 obj -<< -/S /GoTo -/D (design.0) ->> -endobj -148 0 obj -<< -/Title 149 0 R -/A 150 0 R -/Parent 135 0 R -/Prev 145 0 R -/Next 151 0 R -/First 154 0 R -/Last 160 0 R -/Count -3 ->> -endobj -149 0 obj -(Proposed Text) -endobj -150 0 obj -<< -/S /GoTo -/D (proposed-text.0) ->> -endobj -151 0 obj -<< -/Title 152 0 R -/A 153 0 R -/Parent 135 0 R -/Prev 148 0 R ->> -endobj -152 0 obj -(Footnotes) -endobj -153 0 obj -<< -/S /GoTo -/D (footnotes.0) ->> -endobj -154 0 obj -<< -/Title 155 0 R -/A 156 0 R -/Parent 148 0 R -/Next 157 0 R -/First 163 0 R -/Last 166 0 R -/Count -2 ->> -endobj -155 0 obj -(Addition to [lib.iterator.requirements]) -endobj -156 0 obj -<< -/S /GoTo -/D (addition-to-lib-iterator-requirements.1) ->> -endobj -157 0 obj -<< -/Title 158 0 R -/A 159 0 R -/Parent 148 0 R -/Prev 154 0 R -/Next 160 0 R ->> -endobj -158 0 obj -(Addition to [lib.iterator.synopsis]) -endobj -159 0 obj -<< -/S /GoTo -/D (addition-to-lib-iterator-synopsis.1) ->> -endobj -160 0 obj -<< -/Title 161 0 R -/A 162 0 R -/Parent 148 0 R -/Prev 157 0 R ->> -endobj -161 0 obj -(Addition to [lib.iterator.traits]) -endobj -162 0 obj -<< -/S /GoTo -/D (addition-to-lib-iterator-traits.1) ->> -endobj -163 0 obj -<< -/Title 164 0 R -/A 165 0 R -/Parent 154 0 R -/Next 166 0 R -/First 187 0 R -/Last 196 0 R -/Count -4 ->> -endobj -164 0 obj -(Iterator Value Access Concepts [lib.iterator.value.access]) -endobj -165 0 obj -<< -/S /GoTo -/D (iterator-value-access-concepts-lib-iterator-value-access.2) ->> -endobj -166 0 obj -<< -/Title 167 0 R -/A 168 0 R -/Parent 154 0 R -/Prev 163 0 R -/First 169 0 R -/Last 184 0 R -/Count -6 ->> -endobj -167 0 obj -(Iterator Traversal Concepts [lib.iterator.traversal]) -endobj -168 0 obj -<< -/S /GoTo -/D (iterator-traversal-concepts-lib-iterator-traversal.2) ->> -endobj -169 0 obj -<< -/Title 170 0 R -/A 171 0 R -/Parent 166 0 R -/Next 172 0 R ->> -endobj -170 0 obj -(Incrementable Iterators [lib.incrementable.iterators]) -endobj -171 0 obj -<< -/S /GoTo -/D (incrementable-iterators-lib-incrementable-iterators.3) ->> -endobj -172 0 obj -<< -/Title 173 0 R -/A 174 0 R -/Parent 166 0 R -/Prev 169 0 R -/Next 175 0 R ->> -endobj -173 0 obj -(Single Pass Iterators [lib.single.pass.iterators]) -endobj -174 0 obj -<< -/S /GoTo -/D (single-pass-iterators-lib-single-pass-iterators.3) ->> -endobj -175 0 obj -<< -/Title 176 0 R -/A 177 0 R -/Parent 166 0 R -/Prev 172 0 R -/Next 178 0 R ->> -endobj -176 0 obj -(Forward Traversal Iterators [lib.forward.traversal.iterators]) -endobj -177 0 obj -<< -/S /GoTo -/D (forward-traversal-iterators-lib-forward-traversal-iterators.3) ->> -endobj -178 0 obj -<< -/Title 179 0 R -/A 180 0 R -/Parent 166 0 R -/Prev 175 0 R -/Next 181 0 R ->> -endobj -179 0 obj -(Bidirectional Traversal Iterators [lib.bidirectional.traversal.iterators]) -endobj -180 0 obj -<< -/S /GoTo -/D (bidirectional-traversal-iterators-lib-bidirectional-traversal-iterators.3) ->> -endobj -181 0 obj -<< -/Title 182 0 R -/A 183 0 R -/Parent 166 0 R -/Prev 178 0 R -/Next 184 0 R ->> -endobj -182 0 obj -(Random Access Traversal Iterators [lib.random.access.traversal.iterators]) -endobj -183 0 obj -<< -/S /GoTo -/D (random-access-traversal-iterators-lib-random-access-traversal-iterators.3) ->> -endobj -184 0 obj -<< -/Title 185 0 R -/A 186 0 R -/Parent 166 0 R -/Prev 181 0 R ->> -endobj -185 0 obj -(Interoperable Iterators [lib.interoperable.iterators]) -endobj -186 0 obj -<< -/S /GoTo -/D (interoperable-iterators-lib-interoperable-iterators.3) ->> -endobj -187 0 obj -<< -/Title 188 0 R -/A 189 0 R -/Parent 163 0 R -/Next 190 0 R ->> -endobj -188 0 obj -(Readable Iterators [lib.readable.iterators]) -endobj -189 0 obj -<< -/S /GoTo -/D (readable-iterators-lib-readable-iterators.3) ->> -endobj -190 0 obj -<< -/Title 191 0 R -/A 192 0 R -/Parent 163 0 R -/Prev 187 0 R -/Next 193 0 R ->> -endobj -191 0 obj -(Writable Iterators [lib.writable.iterators]) -endobj -192 0 obj -<< -/S /GoTo -/D (writable-iterators-lib-writable-iterators.3) ->> -endobj -193 0 obj -<< -/Title 194 0 R -/A 195 0 R -/Parent 163 0 R -/Prev 190 0 R -/Next 196 0 R ->> -endobj -194 0 obj -(Swappable Iterators [lib.swappable.iterators]) -endobj -195 0 obj -<< -/S /GoTo -/D (swappable-iterators-lib-swappable-iterators.3) ->> -endobj -196 0 obj -<< -/Title 197 0 R -/A 198 0 R -/Parent 163 0 R -/Prev 193 0 R ->> -endobj -197 0 obj -(Lvalue Iterators [lib.lvalue.iterators]) -endobj -198 0 obj -<< -/S /GoTo -/D (lvalue-iterators-lib-lvalue-iterators.3) ->> -endobj -199 0 obj -<< -/Title 200 0 R -/A 201 0 R -/Parent 142 0 R -/First 202 0 R -/Last 208 0 R -/Count -3 ->> -endobj -200 0 obj -(Possible \(but not proposed\) Changes to the Working Paper) -endobj -201 0 obj -<< -/S /GoTo -/D (possible-but-not-proposed-changes-to-the-working-paper.1) ->> -endobj -202 0 obj -<< -/Title 203 0 R -/A 204 0 R -/Parent 199 0 R -/Next 205 0 R ->> -endobj -203 0 obj -(Changes to Algorithm Requirements) -endobj -204 0 obj -<< -/S /GoTo -/D (changes-to-algorithm-requirements.2) ->> -endobj -205 0 obj -<< -/Title 206 0 R -/A 207 0 R -/Parent 199 0 R -/Prev 202 0 R -/Next 208 0 R ->> -endobj -206 0 obj -(Deprecations) -endobj -207 0 obj -<< -/S /GoTo -/D (deprecations.2) ->> -endobj -208 0 obj -<< -/Title 209 0 R -/A 210 0 R -/Parent 199 0 R -/Prev 205 0 R ->> -endobj -209 0 obj -(vector) -endobj -210 0 obj -<< -/S /GoTo -/D (vector-bool.2) ->> -endobj -211 0 obj -<< -/Dests 212 0 R ->> -endobj -212 0 obj -<< -/Kids [ 213 0 R ] ->> -endobj -213 0 obj -<< -/Names [ (Doc-Start) 214 0 R (addition-to-lib-iterator-requirements) 215 0 R (addition-to-lib-iterator-requirements.1) 216 0 R (addition-to-lib-iterator-synopsis) 217 0 R (addition-to-lib-iterator-synopsis.1) 218 0 R (addition-to-lib-iterator-traits) 219 0 R (addition-to-lib-iterator-traits.1) 220 0 R (bidirectional-traversal-iterators-lib-bidirectional-traversal-iterators) 221 0 R (bidirectional-traversal-iterators-lib-bidirectional-traversal-iterators.3) 222 0 R (category-to-traversal) 223 0 R (changes-to-algorithm-requirements) 224 0 R (changes-to-algorithm-requirements.2) 225 0 R (deprecations) 226 0 R (deprecations.2) 227 0 R (design) 228 0 R (design.0) 229 0 R (footnotes) 230 0 R (footnotes.0) 231 0 R (forward-traversal-iterators-lib-forward-traversal-iterators) 232 0 R (forward-traversal-iterators-lib-forward-traversal-iterators.3) 233 0 R (impact-on-the-standard) 234 0 R (impact-on-the-standard.0) 235 0 R (incrementable-iterators-lib-incrementable-iterators) 236 0 R (incrementable-iterators-lib-incrementable-iterators.3) 237 0 R (interoperable-iterators-lib-interoperable-iterators) 238 0 R (interoperable-iterators-lib-interoperable-iterators.3) 239 0 R (iterator-traversal-concepts-lib-iterator-traversal) 240 0 R (iterator-traversal-concepts-lib-iterator-traversal.2) 241 0 R (iterator-value-access-concepts-lib-iterator-value-access) 242 0 R (iterator-value-access-concepts-lib-iterator-value-access.2) 243 0 R (lvalue-iterators-lib-lvalue-iterators) 244 0 R (lvalue-iterators-lib-lvalue-iterators.3) 245 0 R (motivation) 246 0 R (motivation.0) 247 0 R (page.1) 248 0 R (page.10) 249 0 R (page.11) 250 0 R (page.2) 251 0 R (page.3) 252 0 R (page.4) 253 0 R (page.5) 254 0 R (page.6) 255 0 R (page.7) 256 0 R (page.8) 257 0 R (page.9) 258 0 R (possible-but-not-proposed-changes-to-the-working-paper) 259 0 R (possible-but-not-proposed-changes-to-the-working-paper.1) 260 0 R (proposed-text) 261 0 R (proposed-text.0) 262 0 R (random-access-traversal-iterators-lib-random-access-traversal-iterators) 263 0 R (random-access-traversal-iterators-lib-random-access-traversal-iterators.3) 264 0 R (readable-iterator) 265 0 R (readable-iterators-lib-readable-iterators) 266 0 R (readable-iterators-lib-readable-iterators.3) 267 0 R (section*.1) 268 0 R (section*.10) 269 0 R (section*.11) 270 0 R (section*.12) 271 0 R (section*.13) 272 0 R (section*.14) 273 0 R (section*.15) 274 0 R (section*.16) 275 0 R (section*.17) 276 0 R (section*.18) 277 0 R (section*.19) 278 0 R (section*.2) 279 0 R (section*.20) 280 0 R (section*.21) 281 0 R (section*.22) 282 0 R (section*.23) 283 0 R (section*.24) 284 0 R (section*.25) 285 0 R (section*.3) 286 0 R (section*.4) 287 0 R (section*.5) 288 0 R (section*.6) 289 0 R (section*.7) 290 0 R (section*.8) 291 0 R (section*.9) 292 0 R (single-pass-iterators-lib-single-pass-iterators) 293 0 R (single-pass-iterators-lib-single-pass-iterators.3) 294 0 R (swappable-iterators-lib-swappable-iterators) 295 0 R (swappable-iterators-lib-swappable-iterators.3) 296 0 R (table-of-contents) 297 0 R (table-of-contents.0) 298 0 R (table.1) 299 0 R (table.10) 300 0 R (table.11) 301 0 R (table.12) 302 0 R (table.2) 303 0 R (table.3) 304 0 R (table.4) 305 0 R (table.5) 306 0 R (table.6) 307 0 R (table.7) 308 0 R (table.8) 309 0 R (table.9) 310 0 R (vector-bool) 311 0 R (vector-bool.2) 312 0 R (writable-iterator) 313 0 R (writable-iterators-lib-writable-iterators) 314 0 R (writable-iterators-lib-writable-iterators.3) 315 0 R ] -/Limits [ (Doc-Start) (writable-iterators-lib-writable-iterators.3) ] ->> -endobj -214 0 obj -<< -/D [ 3 0 R /XYZ 74.409 771.732 null ] ->> -endobj -215 0 obj -<< -/D [ 98 0 R /XYZ 74.409 572.707 null ] ->> -endobj -216 0 obj -<< -/D [ 98 0 R /XYZ 74.409 572.707 null ] ->> -endobj -217 0 obj -<< -/D [ 122 0 R /XYZ 74.409 380.976 null ] ->> -endobj -218 0 obj -<< -/D [ 122 0 R /XYZ 74.409 380.976 null ] ->> -endobj -219 0 obj -<< -/D [ 122 0 R /XYZ 74.409 226.603 null ] ->> -endobj -220 0 obj -<< -/D [ 122 0 R /XYZ 74.409 226.603 null ] ->> -endobj -221 0 obj -<< -/D [ 112 0 R /XYZ 74.409 399.127 null ] ->> -endobj -222 0 obj -<< -/D [ 112 0 R /XYZ 74.409 399.127 null ] ->> -endobj -223 0 obj -<< -/D [ 126 0 R /XYZ 299.753 741.844 null ] ->> -endobj -224 0 obj -<< -/D [ 78 0 R /XYZ 74.409 632.045 null ] ->> -endobj -225 0 obj -<< -/D [ 78 0 R /XYZ 74.409 632.045 null ] ->> -endobj -226 0 obj -<< -/D [ 90 0 R /XYZ 74.409 548.071 null ] ->> -endobj -227 0 obj -<< -/D [ 90 0 R /XYZ 74.409 548.071 null ] ->> -endobj -228 0 obj -<< -/D [ 90 0 R /XYZ 74.409 438.081 null ] ->> -endobj -229 0 obj -<< -/D [ 90 0 R /XYZ 74.409 438.081 null ] ->> -endobj -230 0 obj -<< -/D [ 126 0 R /XYZ 74.409 544.363 null ] ->> -endobj -231 0 obj -<< -/D [ 126 0 R /XYZ 74.409 544.363 null ] ->> -endobj -232 0 obj -<< -/D [ 112 0 R /XYZ 74.409 613.526 null ] ->> -endobj -233 0 obj -<< -/D [ 112 0 R /XYZ 74.409 613.526 null ] ->> -endobj -234 0 obj -<< -/D [ 56 0 R /XYZ 74.409 164.748 null ] ->> -endobj -235 0 obj -<< -/D [ 56 0 R /XYZ 74.409 164.748 null ] ->> -endobj -236 0 obj -<< -/D [ 102 0 R /XYZ 74.409 406.43 null ] ->> -endobj -237 0 obj -<< -/D [ 102 0 R /XYZ 74.409 406.43 null ] ->> -endobj -238 0 obj -<< -/D [ 115 0 R /XYZ 74.409 193.897 null ] ->> -endobj -239 0 obj -<< -/D [ 115 0 R /XYZ 74.409 193.897 null ] ->> -endobj -240 0 obj -<< -/D [ 102 0 R /XYZ 74.409 462.947 null ] ->> -endobj -241 0 obj -<< -/D [ 102 0 R /XYZ 74.409 462.947 null ] ->> -endobj -242 0 obj -<< -/D [ 98 0 R /XYZ 74.409 552.125 null ] ->> -endobj -243 0 obj -<< -/D [ 98 0 R /XYZ 74.409 552.125 null ] ->> -endobj -244 0 obj -<< -/D [ 102 0 R /XYZ 74.409 641.717 null ] ->> -endobj -245 0 obj -<< -/D [ 102 0 R /XYZ 74.409 641.717 null ] ->> -endobj -246 0 obj -<< -/D [ 56 0 R /XYZ 74.409 715.942 null ] ->> -endobj -247 0 obj -<< -/D [ 56 0 R /XYZ 74.409 715.942 null ] ->> -endobj -248 0 obj -<< -/D [ 3 0 R /XYZ 74.409 789.665 null ] ->> -endobj -249 0 obj -<< -/D [ 122 0 R /XYZ 74.409 789.665 null ] ->> -endobj -250 0 obj -<< -/D [ 126 0 R /XYZ 74.409 789.665 null ] ->> -endobj -251 0 obj -<< -/D [ 56 0 R /XYZ 74.409 789.665 null ] ->> -endobj -252 0 obj -<< -/D [ 78 0 R /XYZ 74.409 789.665 null ] ->> -endobj -253 0 obj -<< -/D [ 90 0 R /XYZ 74.409 789.665 null ] ->> -endobj -254 0 obj -<< -/D [ 93 0 R /XYZ 74.409 789.665 null ] ->> -endobj -255 0 obj -<< -/D [ 98 0 R /XYZ 74.409 789.665 null ] ->> -endobj -256 0 obj -<< -/D [ 102 0 R /XYZ 74.409 789.665 null ] ->> -endobj -257 0 obj -<< -/D [ 112 0 R /XYZ 74.409 789.665 null ] ->> -endobj -258 0 obj -<< -/D [ 115 0 R /XYZ 74.409 789.665 null ] ->> -endobj -259 0 obj -<< -/D [ 78 0 R /XYZ 74.409 690.191 null ] ->> -endobj -260 0 obj -<< -/D [ 78 0 R /XYZ 74.409 690.191 null ] ->> -endobj -261 0 obj -<< -/D [ 98 0 R /XYZ 74.409 615.817 null ] ->> -endobj -262 0 obj -<< -/D [ 98 0 R /XYZ 74.409 615.817 null ] ->> -endobj -263 0 obj -<< -/D [ 115 0 R /XYZ 74.409 698.407 null ] ->> -endobj -264 0 obj -<< -/D [ 115 0 R /XYZ 74.409 698.407 null ] ->> -endobj -265 0 obj -<< -/D [ 98 0 R /XYZ 443.801 512.815 null ] ->> -endobj -266 0 obj -<< -/D [ 98 0 R /XYZ 74.409 510.601 null ] ->> -endobj -267 0 obj -<< -/D [ 98 0 R /XYZ 74.409 510.601 null ] ->> -endobj -268 0 obj -<< -/D [ 3 0 R /XYZ 74.409 461.01 null ] ->> -endobj -269 0 obj -<< -/D [ 98 0 R /XYZ 74.409 552.125 null ] ->> -endobj -270 0 obj -<< -/D [ 98 0 R /XYZ 74.409 534.234 null ] ->> -endobj -271 0 obj -<< -/D [ 98 0 R /XYZ 74.409 477.994 null ] ->> -endobj -272 0 obj -<< -/D [ 98 0 R /XYZ 74.409 285.918 null ] ->> -endobj -273 0 obj -<< -/D [ 102 0 R /XYZ 74.409 752.845 null ] ->> -endobj -274 0 obj -<< -/D [ 102 0 R /XYZ 74.409 609.387 null ] ->> -endobj -275 0 obj -<< -/D [ 102 0 R /XYZ 74.409 430.064 null ] ->> -endobj -276 0 obj -<< -/D [ 102 0 R /XYZ 74.409 373.823 null ] ->> -endobj -277 0 obj -<< -/D [ 102 0 R /XYZ 74.409 207.245 null ] ->> -endobj -278 0 obj -<< -/D [ 112 0 R /XYZ 74.409 592.646 null ] ->> -endobj -279 0 obj -<< -/D [ 56 0 R /XYZ 74.409 673.13 null ] ->> -endobj -280 0 obj -<< -/D [ 112 0 R /XYZ 74.409 378.247 null ] ->> -endobj -281 0 obj -<< -/D [ 115 0 R /XYZ 74.409 677.527 null ] ->> -endobj -282 0 obj -<< -/D [ 115 0 R /XYZ 74.409 173.017 null ] ->> -endobj -283 0 obj -<< -/D [ 122 0 R /XYZ 74.409 343.664 null ] ->> -endobj -284 0 obj -<< -/D [ 122 0 R /XYZ 74.409 191.782 null ] ->> -endobj -285 0 obj -<< -/D [ 126 0 R /XYZ 74.409 503.765 null ] ->> -endobj -286 0 obj -<< -/D [ 78 0 R /XYZ 74.409 749.114 null ] ->> -endobj -287 0 obj -<< -/D [ 78 0 R /XYZ 74.409 654.904 null ] ->> -endobj -288 0 obj -<< -/D [ 78 0 R /XYZ 74.409 599.803 null ] ->> -endobj -289 0 obj -<< -/D [ 90 0 R /XYZ 74.409 516.294 null ] ->> -endobj -290 0 obj -<< -/D [ 90 0 R /XYZ 74.409 461.991 null ] ->> -endobj -291 0 obj -<< -/D [ 90 0 R /XYZ 74.409 392.48 null ] ->> -endobj -292 0 obj -<< -/D [ 98 0 R /XYZ 74.409 572.707 null ] ->> -endobj -293 0 obj -<< -/D [ 102 0 R /XYZ 74.409 226.188 null ] ->> -endobj -294 0 obj -<< -/D [ 102 0 R /XYZ 74.409 226.188 null ] ->> -endobj -295 0 obj -<< -/D [ 98 0 R /XYZ 74.409 177.281 null ] ->> -endobj -296 0 obj -<< -/D [ 98 0 R /XYZ 74.409 177.281 null ] ->> -endobj -297 0 obj -<< -/D [ 3 0 R /XYZ 74.409 493.276 null ] ->> -endobj -298 0 obj -<< -/D [ 3 0 R /XYZ 74.409 493.276 null ] ->> -endobj -299 0 obj -<< -/D [ 56 0 R /XYZ 74.409 563.596 null ] ->> -endobj -300 0 obj -<< -/D [ 115 0 R /XYZ 74.409 642.215 null ] ->> -endobj -301 0 obj -<< -/D [ 122 0 R /XYZ 74.409 747.601 null ] ->> -endobj -302 0 obj -<< -/D [ 122 0 R /XYZ 74.409 600.951 null ] ->> -endobj -303 0 obj -<< -/D [ 98 0 R /XYZ 74.409 442.682 null ] ->> -endobj -304 0 obj -<< -/D [ 98 0 R /XYZ 74.409 250.606 null ] ->> -endobj -305 0 obj -<< -/D [ 102 0 R /XYZ 74.409 729.488 null ] ->> -endobj -306 0 obj -<< -/D [ 102 0 R /XYZ 74.409 586.03 null ] ->> -endobj -307 0 obj -<< -/D [ 102 0 R /XYZ 74.409 350.467 null ] ->> -endobj -308 0 obj -<< -/D [ 102 0 R /XYZ 74.409 183.888 null ] ->> -endobj -309 0 obj -<< -/D [ 112 0 R /XYZ 74.409 557.334 null ] ->> -endobj -310 0 obj -<< -/D [ 112 0 R /XYZ 74.409 344.872 null ] ->> -endobj -311 0 obj -<< -/D [ 90 0 R /XYZ 74.409 492.384 null ] ->> -endobj -312 0 obj -<< -/D [ 90 0 R /XYZ 74.409 492.384 null ] ->> -endobj -313 0 obj -<< -/D [ 98 0 R /XYZ 74.409 320.739 null ] ->> -endobj -314 0 obj -<< -/D [ 98 0 R /XYZ 74.409 320.739 null ] ->> -endobj -315 0 obj -<< -/D [ 98 0 R /XYZ 74.409 320.739 null ] ->> -endobj -316 0 obj -<< -/S /GoTo -/D [ 3 0 R /Fit ] ->> -endobj -317 0 obj -<< -/Author (David Abrahams, Jeremy Siek, Thomas Witt) -/Title (New Iterator Concepts) -/Subject () -/Creator (LaTeX with hyperref package) -/Producer (pdfTeX-1.10b extended by PPower4 V0.9.4) -/Keywords () -/CreationDate (D:20040716154900) ->> -endobj -xref -0 318 -0000000000 65535 f -0000000009 00000 n -0000000236 00000 n -0000000371 00000 n -0000000688 00000 n -0000000887 00000 n -0000001077 00000 n -0000001272 00000 n -0000001469 00000 n -0000001656 00000 n -0000001849 00000 n -0000002044 00000 n -0000002205 00000 n -0000002378 00000 n -0000002584 00000 n -0000002768 00000 n -0000002932 00000 n -0000003095 00000 n -0000003252 00000 n -0000003416 00000 n -0000003606 00000 n -0000003815 00000 n -0000004009 00000 n -0000004203 00000 n -0000004399 00000 n -0000004588 00000 n -0000004790 00000 n -0000004994 00000 n -0000005194 00000 n -0000005406 00000 n -0000005630 00000 n -0000005854 00000 n -0000006058 00000 n -0000006175 00000 n -0000006332 00000 n -0000007444 00000 n -0000007596 00000 n -0000007816 00000 n -0000011527 00000 n -0000011685 00000 n -0000011972 00000 n -0000012332 00000 n -0000022473 00000 n -0000022630 00000 n -0000023027 00000 n -0000023519 00000 n -0000038957 00000 n -0000039115 00000 n -0000039377 00000 n -0000039693 00000 n -0000046969 00000 n -0000047127 00000 n -0000048311 00000 n -0000048617 00000 n -0000049031 00000 n -0000059033 00000 n -0000061954 00000 n -0000062145 00000 n -0000062330 00000 n -0000062514 00000 n -0000062674 00000 n -0000062904 00000 n -0000063134 00000 n -0000063363 00000 n -0000063587 00000 n -0000063813 00000 n -0000064042 00000 n -0000064171 00000 n -0000064329 00000 n -0000065443 00000 n -0000065691 00000 n -0000065974 00000 n -0000075026 00000 n -0000075184 00000 n -0000077006 00000 n -0000077210 00000 n -0000077436 00000 n -0000079083 00000 n -0000083909 00000 n -0000084025 00000 n -0000084154 00000 n -0000084311 00000 n -0000085472 00000 n -0000085496 00000 n -0000085702 00000 n -0000087414 00000 n -0000087572 00000 n -0000087596 00000 n -0000087804 00000 n -0000089505 00000 n -0000092435 00000 n -0000092551 00000 n -0000092692 00000 n -0000095386 00000 n -0000095502 00000 n -0000095642 00000 n -0000102355 00000 n -0000126772 00000 n -0000128635 00000 n -0000128772 00000 n -0000129001 00000 n -0000129119 00000 n -0000133234 00000 n -0000133421 00000 n -0000133592 00000 n -0000133762 00000 n -0000133933 00000 n -0000134104 00000 n -0000134274 00000 n -0000134445 00000 n -0000134615 00000 n -0000134721 00000 n -0000138716 00000 n -0000138835 00000 n -0000138953 00000 n -0000142504 00000 n -0000142667 00000 n -0000142838 00000 n -0000143009 00000 n -0000143180 00000 n -0000143351 00000 n -0000143469 00000 n -0000146961 00000 n -0000147100 00000 n -0000147333 00000 n -0000147451 00000 n -0000151516 00000 n -0000151655 00000 n -0000151888 00000 n -0000152007 00000 n -0000152170 00000 n -0000153357 00000 n -0000153568 00000 n -0000153808 00000 n -0000158410 00000 n -0000160003 00000 n -0000160080 00000 n -0000160159 00000 n -0000160196 00000 n -0000160253 00000 n -0000160346 00000 n -0000160376 00000 n -0000160426 00000 n -0000160558 00000 n -0000160600 00000 n -0000160662 00000 n -0000160755 00000 n -0000160781 00000 n -0000160827 00000 n -0000160959 00000 n -0000160992 00000 n -0000161045 00000 n -0000161124 00000 n -0000161153 00000 n -0000161202 00000 n -0000161320 00000 n -0000161379 00000 n -0000161456 00000 n -0000161549 00000 n -0000161604 00000 n -0000161677 00000 n -0000161756 00000 n -0000161809 00000 n -0000161880 00000 n -0000161998 00000 n -0000162076 00000 n -0000162172 00000 n -0000162290 00000 n -0000162362 00000 n -0000162452 00000 n -0000162531 00000 n -0000162604 00000 n -0000162695 00000 n -0000162788 00000 n -0000162857 00000 n -0000162944 00000 n -0000163037 00000 n -0000163118 00000 n -0000163217 00000 n -0000163310 00000 n -0000163403 00000 n -0000163514 00000 n -0000163607 00000 n -0000163700 00000 n -0000163811 00000 n -0000163890 00000 n -0000163963 00000 n -0000164054 00000 n -0000164133 00000 n -0000164196 00000 n -0000164277 00000 n -0000164370 00000 n -0000164433 00000 n -0000164514 00000 n -0000164607 00000 n -0000164672 00000 n -0000164755 00000 n -0000164834 00000 n -0000164893 00000 n -0000164970 00000 n -0000165074 00000 n -0000165152 00000 n -0000165246 00000 n -0000165325 00000 n -0000165378 00000 n -0000165451 00000 n -0000165544 00000 n -0000165576 00000 n -0000165628 00000 n -0000165707 00000 n -0000165739 00000 n -0000165790 00000 n -0000165828 00000 n -0000165869 00000 n -0000169442 00000 n -0000169503 00000 n -0000169565 00000 n -0000169627 00000 n -0000169690 00000 n -0000169753 00000 n -0000169816 00000 n -0000169879 00000 n -0000169942 00000 n -0000170005 00000 n -0000170069 00000 n -0000170131 00000 n -0000170193 00000 n -0000170255 00000 n -0000170317 00000 n -0000170379 00000 n -0000170441 00000 n -0000170504 00000 n -0000170567 00000 n -0000170630 00000 n -0000170693 00000 n -0000170755 00000 n -0000170817 00000 n -0000170879 00000 n -0000170941 00000 n -0000171004 00000 n -0000171067 00000 n -0000171130 00000 n -0000171193 00000 n -0000171255 00000 n -0000171317 00000 n -0000171380 00000 n -0000171443 00000 n -0000171505 00000 n -0000171567 00000 n -0000171628 00000 n -0000171691 00000 n -0000171754 00000 n -0000171816 00000 n -0000171878 00000 n -0000171940 00000 n -0000172002 00000 n -0000172064 00000 n -0000172127 00000 n -0000172190 00000 n -0000172253 00000 n -0000172315 00000 n -0000172377 00000 n -0000172439 00000 n -0000172501 00000 n -0000172564 00000 n -0000172627 00000 n -0000172690 00000 n -0000172752 00000 n -0000172814 00000 n -0000172874 00000 n -0000172936 00000 n -0000172998 00000 n -0000173060 00000 n -0000173122 00000 n -0000173185 00000 n -0000173248 00000 n -0000173311 00000 n -0000173374 00000 n -0000173437 00000 n -0000173500 00000 n -0000173561 00000 n -0000173624 00000 n -0000173687 00000 n -0000173750 00000 n -0000173813 00000 n -0000173876 00000 n -0000173939 00000 n -0000174001 00000 n -0000174063 00000 n -0000174125 00000 n -0000174187 00000 n -0000174249 00000 n -0000174310 00000 n -0000174372 00000 n -0000174435 00000 n -0000174498 00000 n -0000174560 00000 n -0000174622 00000 n -0000174683 00000 n -0000174744 00000 n -0000174806 00000 n -0000174869 00000 n -0000174932 00000 n -0000174995 00000 n -0000175057 00000 n -0000175119 00000 n -0000175182 00000 n -0000175244 00000 n -0000175307 00000 n -0000175370 00000 n -0000175433 00000 n -0000175496 00000 n -0000175558 00000 n -0000175620 00000 n -0000175682 00000 n -0000175744 00000 n -0000175806 00000 n -0000175856 00000 n -trailer -<< -/Size 318 -/Root 1 0 R -/Info 317 0 R ->> -startxref -176110 -%%EOF diff --git a/doc/new-iter-concepts.rst b/doc/new-iter-concepts.rst deleted file mode 100644 index 8853e3e..0000000 --- a/doc/new-iter-concepts.rst +++ /dev/null @@ -1,799 +0,0 @@ -++++++++++++++++++++++ - 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. All rights reserved - -.. _`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-01-13
Copyright:Copyright Toon Knapen, David Abrahams, Roland Richter, and Jeremy Siek 2003. All rights reserved
- --- - - - -
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 509e8b4df8a5f185b8ce3c85a5e6bbfc72c2fa6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71073 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 diff --git a/doc/permutation_iterator.rst b/doc/permutation_iterator.rst deleted file mode 100644 index 11fa6e1..0000000 --- a/doc/permutation_iterator.rst +++ /dev/null @@ -1,37 +0,0 @@ -++++++++++++++++++++++ - 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. All rights reserved - -.. _`Boost Consulting`: http://www.boost-consulting.com -.. _`Open Systems Lab`: http://www.osl.iu.edu - -:abstract: - - .. include:: permutation_iterator_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_abstract.rst b/doc/permutation_iterator_abstract.rst deleted file mode 100644 index 578b3ed..0000000 --- a/doc/permutation_iterator_abstract.rst +++ /dev/null @@ -1,4 +0,0 @@ -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. - diff --git a/doc/permutation_iterator_body.rst b/doc/permutation_iterator_body.rst deleted file mode 100644 index 0f838e7..0000000 --- a/doc/permutation_iterator_body.rst +++ /dev/null @@ -1,15 +0,0 @@ -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 b493c7a..0000000 --- a/doc/permutation_iterator_eg.rst +++ /dev/null @@ -1,67 +0,0 @@ -:: - - 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_iterator_example.cpp diff --git a/doc/permutation_iterator_ref.rst b/doc/permutation_iterator_ref.rst deleted file mode 100644 index c29f285..0000000 --- a/doc/permutation_iterator_ref.rst +++ /dev/null @@ -1,126 +0,0 @@ -.. 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 63d2261..0000000 --- a/doc/pointee.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - -pointee and indirect_reference - - - - - - - - - - - - diff --git a/doc/pointee.pdf b/doc/pointee.pdf deleted file mode 100755 index dcf28b9c380385908eff020edd782508167e7cf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68096 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

@!`bvVARE)bgtqX6+3& z>c!nwyw{kwvD8iH>*0&Y+ub}dWcI(6Gel0leHYHg^j`efDzCSn<#_ut4U*qh_A*({ z>s%{QoU43o#xu)?l-BFjOQnMEc1=_Xeb#eLW8>A;H$Ke${!;FJ#>E?M3SwL_N{hqJ zSMmo6zpcIhWb z&2OoKU;2iw6S@l)TFSn<9A76n*QD~9p2J7ZoCuwaCO8foe*y#iD^}Z34 z4;}H^`ljvWBRSo<^5vcf3JzraNWLk~9XluF-i=wWHDaBvxtCuqKm3CCxK}Gn@U?&D zox1lF9+&igzGvR|Wb*f%bKa{z>$<)7m)s)zKG`Zs>wNd3+IE-QnoD{6XI<%D{oL%e zSzA(A=cPsL9=q$eXl=d!xS#RY<-}a?L+x9)$$Qq#H!@b`Ud)((ip?zV<*aiBYxG0B zdZU?aHofOEem+m*>Uzn|MaBuv`q#}%{fn9--p;<1pC|PvWOr+d+my^-kxMfc9ZzHR#YYG!}B@Q!M)N<=zym^`3 zMBe>A_vG#K4`15j_E>#)-R+vdo)@=Nbk9mzobDEPGktV-5yxRC9$%GPW`18Z_MFQ& z)5#lgh5z&BJ9&L|U-q5Rci_L98NV_#MD?&a*Mi-P@0b5FJX9klrS9%#6uww3bcgxU zncwz4=4LG6uPHzg6@6m5J^z{{$ChsBTbd zny}!W<{~`{6>Y^GvCEuuzJBeQb!D?kQ`OAh?YZoe{ypyHIsSFF_Uy9giQj+q|5>LR z)8%{ob6o7LHKtapUX)BeEs-1IV^z26@*H{bUw;zs7aS~J^mfIox0}T#TwuF=U>E

MXYf{}1!u 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%0AhW9L|Zse1e1w%WoU%GT@eXYY(K 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 diff --git a/doc/pointee.rst b/doc/pointee.rst deleted file mode 100755 index 8e0e6e4..0000000 --- a/doc/pointee.rst +++ /dev/null @@ -1,84 +0,0 @@ -++++++++++++++++++++++++++++++++++++++++ - ``pointee`` and ``indirect_reference`` -++++++++++++++++++++++++++++++++++++++++ - -:Author: David Abrahams -:Contact: dave@boost-consulting.com -:organization: `Boost Consulting`_ -:date: $Date$ -:copyright: Copyright David Abrahams 2004. All rights reserved - -.. _`Boost Consulting`: http://www.boost-consulting.com - -: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": - -.. parsed-literal:: - - template - 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 -neccessary:: - - 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.html b/doc/ref_problem.html deleted file mode 100755 index 5cafc68..0000000 --- a/doc/ref_problem.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - -Problem with reference and old/new iterator category correspondance - - - -

-

Problem with reference and old/new iterator category correspondance

- --- - - - - - - - - - - - -
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)
-
-

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<X>::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<X>::reference and the Lvalue Iterator requirements -says that iterator_traits<X>::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/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 a867521..0000000 --- a/doc/reverse_iterator.html +++ /dev/null @@ -1,281 +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-01-13
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. All rights reserved
- --- - - - -
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 041a4b2ba3fc23e537a0951253d7b455762f2f6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68047 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 - 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 36b93d6..0000000 --- a/doc/reverse_iterator_ref.rst +++ /dev/null @@ -1,137 +0,0 @@ -:: - - 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 bd8dc8f..0000000 --- a/doc/rst2html +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -PYTHONPATH="c:/src/docutils/docutils;c:/src/docutils/docutils/extras" -export PYTHONPATH -python c:/src/docutils/docutils/tools/html.py -gs $1 `echo $1 | sed 's/\(.*\)\..*/\1.html/'` - - - diff --git a/doc/rst2latex b/doc/rst2latex deleted file mode 100755 index 795610c..0000000 --- a/doc/rst2latex +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -PYTHONPATH="c:/src/docutils/docutils;c:/src/docutils/docutils/extras" -export PYTHONPATH -python c:/src/docutils/docutils/tools/rst2latex.py --documentoptions pdftex --stylesheet=docutils.sty --embed-stylesheet $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 5200a7d..0000000 --- a/doc/transform_iterator.html +++ /dev/null @@ -1,330 +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-01-13
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. All rights reserved
-
- --- - - - -
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 b178155f111db1632467ea6f919e2c879fae77c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73219 zcmY!laBIOiwLVFj6p32;$QB zFD=Q*%u6j+FtvaP_$B717Au&WLwF#yzWFJs3i_eNsW7!%`k_Id3Lul65{pw6G&H&F z?6~y9GE>V_ivo&L(^894^O94GK`KBJ{spOdj>#pN`FRS41}0E*LtG>D+)8tDk`nXs zQi~KcLNYRo6*7wz3R2QSQX_N}!cvQhK{|}}3{4D8Ep-j`3=NXN7NzE;fIJ3rKZpi7 z1L8rDTZ_5$y)#pa6`~c4K^7^PfPJN43JQ)O1yiu?3b9=J&iSQzB?=}WheOQ+smC;r zOW!dsFTVt2AVjYz*jO_#2@WF#hz*ut5kmtA1+mT$Ao?QCQU?D>VLy%BVYI2D}w1T09 zp`L+(p@JF6dUI0+V*?{SV{=OdGgBiyb0cGr%HYzZ5^$>W$;`{<(su;KH8h<;qMA!T zSOJtwAZbM-H!(A(B;P6}u`JagDL=osL^nA1q;RA zFg7sLGch+sc*ERG&&gA$S=;(%PiGPO({ilJt%ch?s^LYJ#$kdxa&^!3Zj%k_vzNTAF~u_ug8%=HY+%@xcbo-i>s)H60URxmT6 zh9_{QB2bA!vD1x=4D^hROcl%w&GjtJOchKl%=C;5Efma*Ec7f4$;!$|5kNQ*feS>E zeE}*y!DSS*K(e&ZGd5B%u{6;$vNTgLGB(yTGci>#H89b$G&aSVh=LXL-Sb28x%6EW zG)jsR^NQ2*i*j`{OHzvxOY)0!i!1Z;3yL#~(UQF($Z~4A*xUqMU>cbk>zP{`DVSK8 z>KU7Xi(0G&C;=B2r52WE7NzEbihguggQ^;8x!TlJ&(KuC$jDsJ($Z4F#LP_3z!Y~< zA>ioT{FKxjj6eoeiPUngv8kS^xtW5IiIJYAxuJrI2`Gt^ohBmm}4M~Gmw+G^x>%YBH`y@g+hK6Qb`r(-=B^kvEhEPX=+MXa&74*Yg zJR{sgw4Hr}49&UpL1Hec#mPmP1ts}K3WgBBA=(yTt56*Wa|V~bOJ*9p`3h=_>ANT9 z<|ZoWyQJonBr52KWTb*9pTyjxltcynh)f0jfJ_Db;LLQ8qR@ik%$)o@1^s{wkVJ8& zg1&!lYI>rAep;G>ep;r2ep(KQ4Pt;;DfuNisl^~=P*#?LetJ=2S*n75VsdFos)BxU zViCx^q@q-iU~XbEm|Fx2G5zG!l+2u*L!gR0aKf5H8M1EY48S zcXUU#6g6uApC`pkJw=U!|a*nwJ7j z6{)!pI-@i%J+Y`XHz%>QL_xnKGY8bsOUXivP(Fl=saq+n`jr~p%CY-*xlY-*_hqGMsbCU8*)asjAM>{tv= zOlFoQT>8$51s;$LV`gE@r4K3{LHSwN(9#rAUV=LP=;f$qNn%cBvSVI)PO5?dmws?b zYHpZZj@F>gVa_>lf)4>z8OkOmfT2NmVccc{&KGIsps7{Nn?MGE?EIf*5yE~&}+DXAdyi%W`96LYyL zZoQpUX)~qz_wmglnp&z)9=KgIFy1y(@psUsBNC>mCne0=A|;HcNmOen{`T9J(>`J8 zgiT_y(Tc4uLXq8TjvANFEB5n0KY#!I`2E-4|NB?GfBo0byViNf9696Uce^o%UuuG9 zh~*3$AJGe@jt3tw_{g17)LZAxxG}_L=92cMO{*AqI$IcTnW#H3avcZ>5fxm;9b`1k3joIy4cix@Q9JTe;; zFE;up{b1l*pv-<`%9$6eMpORecl_GAgR$4a;Hc34>HqDP{4YxGtY|vFpZSD~xs>P< z2DKFS2~NLEzbO4!ZYF$z(O>!BE7K)OoE3A-PIfXdU9k79;Ah@r{vx4m`J*|E?m7pV z|0J?|^6l?RIP5xS@WAp)A)u=?zV% zoEI9nDLnrBHT|=G#tWJIQn-$PFFhp6*zvIZGQX1sqrjK@M{bC-{5C%*@mKMI{|W{NnR+J`2E~8P z1{w^Ce_MKDKKY+`;rx?xDr3iS{}oIQE9^h)KfY?Q^S5tPgF{%Jh)h|?5acP@pso1w zzht`Sq1~4qoNXN>xmpiRJY~PeLaLQ%(hB=`Gd6DAe?##64SkNPW{bXX=ae~7E4+(x zBR1}@i;F)QC#fd8d{^|c?{fPqDil&Irgau9KYb$hnXhQtYLmAb*T3A$OkBU7NzPpA z@0s1a)0*z&FXegXQ+>;Kd2Fph!_PTsk3Qe?EwN2`7vTK%z^gq*mw!IbpC_swb1MIQ z%)1$<4JTi6u1}B_y?Ht3Y2@8Ga;un*ODqx8IlMm9Q=@AE-|`*e?i#KAm9l;v$+E9` zKbCW*@2}5#BD{0rvAt7|*ICy+=bHWYtqkA1uGYQHIx~MVaZO!vWY4^mk2No=!&2=k z-mT}lxGHG&lXce}98W!woVB+80NdrmTthusi+3yW$C-;WuA4^G^bjx|?skQg|k9D8pcz3I-_?)80 zou4=7-kyC`_ZpX?wr#81!F!gXGg~)5eg67=mu}6;YHxR?oB*5jC~vRDufIuM^7wjj z^{?{tlD|af|M|=R)v>l{%bNXOP2E@3gMS{Ga^&l|&u#9S;Y%BI%OAH*|6_!C!hKic{J;*QGiN%vPCcRTS?;hl@l z`{2Tzx85c%JD#sN!EotxZS1S)Yt{Q@t8(uA z{qU2c*UQ*Ao%7%}+v~M2gAN#-xa?~hE*9y`R?Uf|Caj2liyhzAFf((eQz_r?Xk=6E_DW`>PD_mxLdRD#f!L3t;^*nu1+vK zrg0|0ewXX6%--N)5m5aE8=6X$zUA;?x`;j_{cdz!I zFjj7yaPL)P70Y(n3A)SMm);kX+BGjz+{-)C`uCbm@3@~!F4F#Gd3M9{Qq2|7%l#Kx zUOypp_HJiE;(LJ$zVfq<_!zL-HoaZb;d)LX>+h^Z3#y z=Z)Tv`5XT(PwAHw@%jE~ou=$Hy9eUUmM6a%#n1MAxLJ3Wbd^=HM{2z8z|+Zh>ghbK!v!CTmcM&q@N3h4iThdgy+01xM#UFBsa$>8{O;=5 z4L=Xbx$f4V8K$=R(3&#LXr(=Jy#ZJhEU zNn_*8lWY9$9J>(yx%D-BeXL@j+5S20^UEtu*H+|| zJMqvoHsOn2muLNYwSC^D=SJ@<6*d3ydqq^7TC*l)^3SKIwGTF#)~Y-*d3x(m>-~0Y`_^}F z33E}!s$IFck?f%hQ>OLuR6o1Dm8~}Z+@0-S{(qg!jdxy|bSR|d=Jl#Y=DSzvO%<5_ z>Rp@n#07D3&-N!?l!(g>dsO6{Uh;F-V8XC=azo%1GQ($yiYiNEM$Vam~X#1krTE= z{bysl>(+B->}}h0wJVjoeg52!O0&4Q^T{8%>HIU!96!F({NC2xO5Y#J-qB$@98+-h z#&t`!i@m#}RPWdDUEFp0ea7a_iB`r^mhmRx`yUi++ZKL#Z|>(ittG#wht!LnzWMo8 z{Gtje7j>1EQrTY1!1c*ZOrLJu`>@3Jf`|b_#nbc4%l*@(lubF6=7wDeXWzd};ej@7t~= zVJ;V@ZgX!pw%?FYWLQ?v*`XPIomb1Cqq1>ZFc%MXt|W0{20&#^mvZU52ZRlm1N`aI5jpKR>-xAD@!k|pOqKFr_G zTmH+EE;;SAzdp?%Wu5q3J`yG4# zl)ANYsWa{G^H1+BEWE$_fz#5!Nv4~gKYDydK4Z_q?27r-?P6(p*~y20^d;yolWShQ zQ1;o=P1|0X-BntA@?@X(rP+qNRrO>$e4RfxUXA^) zx6c=1V!XN*T=w0+!69v`K*@cZr90O7{mxC^^L(*H(5nN@D|kK?mc6(o{93$I+-G;e zjhLT1f`7B8`|sYp_wKU#c?BJl-=#-g=}y0Sc5kh5^!`PCu`Rpr-xrREo+`9v)v4Ca zQ|(>Ur(0~F_9A80Z?2+u+tQ!x+F)j6|Ja==w99Dq_3h3sJ+}KUif8rNTPm)I2)uWc zO0GQR(*Z@-5w*1Frp*81d**Vf5T@7y_LxjbQw)Cz%b z9F{zJ8m3eJufF+Wk^FqezP#1GaXWw8N^g2*aVstGAtd$&}0;{Lx! z?4Ag{4Scm_Lfe-aQ;Qb*B+M!C_`Yhj9Bb*KD86Y)Uw3WTRG)NFMtni|l(*($p%-sl zu6nw$PvEIy*}vY zHQPkF-zAivamC#W)BhUaZN*@kn0LXRG3TEaYml`P03L1m^!3fhW%s@SB3u8kC z3kxF!b5qcGC`i`C7{&teEX+Uyp9TsRW+0b>M6hF1Q%eOiV@q&v984RTD;S#^DuAc8 zj4c&lwu5L(QwxY%(3F?4rGlA(xq^wgiGqo#iGqoVIam&23rGgkzlZnb!2t*gFMNG@ zGnBr(2_zOEeR;I#!P=QOG&Di#&6_~=!+Y}vhLG;Op`n?Hf~5&~bQ(*4J}pfjJm{wH zsPC-rqVKBjsqe2Jq@Sptq@S#x0`BOi>u2a^>gPZ^`~~`jkWRmTseYw?6-w716bC5D z1|$Fr21sw;P{Gj95;QoR3K|G7QZO?$FyMlY1fcf)&5cYgx%3J4{ilS-Tz>uO-OIhr zC5j>wrMzA!D9A1mf9b@**)qw2L)9bD%FBHv7l((tmDXP6z1kl7m#n$EIMh%7y`NqA zZJ*8aS2cc0Yt9)K*WPDOrPdRwvZa)wA6>36_VuI{lre@ma05Gy5wXY;t8&2ZSeP$PbY@C2V2 znFlQG3mE$X(k+^NzUcc~aYzU$d|tm{a{u%F{WS|U^4DlG{Li1w#IVLwUFDE0b3xOg z6E3_HB1|=|o&L`o{Xa71^6|TO8Qy#h|9OAzul28sK-mT^Q-fks%@S=b?1J9dxynkiemFE1r z%(Sg=KW|6Ys_e*nmxX@KpZU+ugz2zghH=mH`>Fp={X6^Uzri+ZjUDy}+<0!s73L^? z`}x*6a!Q0c}1*?18=;)kw0Y;YlqW>cQ-EnvsTh&71;Zm|0ILU)qjdP+kV-runS!M zF+0V9A#iRzM|Ii{^OIf-F24WN-b8gY{a4KKJzmdI&Hu@~v%8bgW$r(RHI*;qJ9N2! zGjHUZ^WVX;<%6|6@-owf*P#=7Wo1y+WAyPZ0ON!KiO3`IL)vZ&=&b1{lEHQNa)0W{H_i+rgeCDbp8#E5K>Url>M?l zeU|crIJ*GZ(uOHBX3XFztE+caw9^m~Y5ezB`FP&v{gQ0Q-`R=0;%}XBw$8;#+tnNW#b37v!8k{vwPO9{=M>sUTN^*E7xr`V-9y7Jvb>njMY}Z zzp6Z5^5g2+xkBfQAC}zsaji6^)%$crR@$!F?ygrpH16=pxU|=6k?LZxKN<5>g>`z` zSa-Wk+#@{8+Rg0uh1e&PpDc^H`S?$RfNkxovr>OKef@q`&iA!6dGR-BZcoRYkn|@} z-_k1moIU?`?0X@-?VJ9!(@xW8W&Nvre?F)3n$&9xy=zy*f1SP|!hZYU!cODzU+@0U z$lEKGBDON>w1;)!ETv3EH>dbuR{Pig1;pn?Zst{xIh(E{@3+hB;#vpGu*cHh15Eo= zukgJ}%9sthMZ}WlHr2pZVq63mYuYJKJWR zzv93t*q>4O$k9JZh;e1izQr4y7W`3cbidSoW5rReqrD4N53@by$y#-y(B!4z^!u{n z`&H+3ES0LLt9DTAX;|7i>(!R$e)E1@4xgB^mF-XO-e{%bH(BuvpZcVz1ztX?YXQoXkGI>fg6e-;)nEyl*Vp zbwlrDb3%%?{F*yadSOpm=6e*Fq(AsqYq?1}v2mAVwUL(by~XVg_m;n6{xVC`bz#`A z0WBbFuTC=1N zccmDIJWl`qa}}?{;`xH63(M}l67O4*F#Fr_d)Lpj=uT(;p0Pi0mv8Iet|`AanjXtu zT**GGTIbC7g+Ck`jvY7O`Z^+}HtqSobII4a3OfD51^pvyUDy&&an8K5A=;oc&$Z>_ z2`hDr$o;27gQq_W-75Fuk-DQwz?$oG*FLwq(p(XyIPDUbUM zv-MWG%St81lFbuRcd4G5*`v}oPcrDq;$7lDUsWAvYRgR(^M3j_`OU25y^G3kNPauQ zwqHAvLuUKp<$Z~1EsN7M{@u2>F6H+;Cw8K`+sJj*df)job8Dsb1p+01-JBO>`IGhW zTyL+e-Jj=eE^^vs?c(fM#&_J(u%Z6DdVa0n->tA8z45L_dpd-&%S zGplvCH+;0)ILp++^pEtt6_0B@?r&ao-Ze5>n`!p_Dyd$&~QSnoZM0deTGQtiBgyv2Xt7JdOv` z9J*iLoWdjHu&X?O#rnF1GTPbqUde{!E;`@dI`8%*>%iX=wBLP8`@H1C-Rjs9{X^eY zFl>Lbx93Y>ke~CueQy5}c2BNWcqGVqw`cd72P(7W&Gql=31=qd#4$*(eV(~LW3R@# z9pe7?8hGD6QI378$^YH`Xrtl1cMH7@7gsj#E?@Y2O|ir3o3|U@FXv}_viIuOTk`!6 z*(}$6et!Ih&8v48r`$C*J+&+*Yoo3GE#Vgy@~m+QWqgm{+`4#Q)?0*g(+h!2sUJJy zROU=^otE)*kLI)(^9{>9vZT5Totpk{dGhg4t?JR`PdBgKGruErR@ThQdJoToFGRzl z)r=g@ntxpKAZX`d%a*FET|ox!A-@B8vW0wk;>4z?<)8O*JpFH{=){1w)hXJRH!2=~ zEPT3qX|L$+Zz9~^`xZARZQ9Ur)MWc1e?zB5x7Y6unCmU>zc1R#J?d@$gwIcXuU(eP zn|@y^y<)+#wO+SZE|W@gyqWVcG~`#|F+;w+*BzOsG$;O1YI4*+aVT)Zi4)!H%1?Q% zi@!SU+S$$4y`Sb7&3)GS#xr%sHKx5c6__^**6@G-@~|_#pS?cB`utz-lS{me_N$+| z@NIsHa8DA9Z?rkcs{&PxxnERGX z9}81CS1oxuW9eLxh*xLWcUER`fA2gPc4pevx<7ZGh)uK%?hcYv>oHSUIWOP(EJs-*_6$M!vt4ZJXk(Z7v#_TFZvAo2aLa|#|<7^@!;cUZjrhNM%1pPXIDNvU{MhC7F! zD%Eb|J>=)@)aW)jzfNvj{*8%K?Y3I3e0eqR-?hN1t4{NGFFF1!)vKob{iOq|KE0_@ zP@XYwQS!nT`R7mO>SitIk}toqLwd`t^+I11eV3RWY`(Gh#_G)TUQG5rcW2t)vum_9 zyL#$FZbtpPJBzh;KNZV=JbT_vbEXqQ*&o>-N!HX^7_YFtoik^#f!XQS(?4fh%$C#n zzA1Z6Yg=ckbDrRiipkm~hZbx;+kfa>G1Iws+x?=xxwg)}ul+`3W#s!zZ)W-WQxoRB zm(%_FsI+Z;-)ZTb!!JKty-+m2AQ`NCL^bZrzx&sA6)W_|GHYw`@`_E*KhmAHK75NG z)69aLmyb)+ra2$F{e01*Q>*xc_nepAykM#OikX{Ni|f71>}M`tB3*kb`*R9guy}j_ z`E{4?H7am9tx-r@+I;ip`|>rnw_jc=^CRCb*XR6=2Oot>6iO$jzF#f%iRZN8DTUmH zHZx}^*Pgs(bMDgZJ6FCN#yDNBkh#BV(zoktrQ(Z%?(X2~GFRt;OvwJ&-yd$CL*4}WtPf0@etS^6?{4eGs& z`ul_4y|*Y=>6>hrmZ+vv#v2)~IOEK8ncmZy->p18J)dtel{IE{j+f^qt;pQ1Hod#2 zF8HzRMC?@CdbLX*vZrfo-|6R|@bB!sKNkbKd+csXZ7poQ>$Ufd^p47+bykm8t2)i{ z3A^demB(AMM<8`h5u-`f1x3HBVV(iX8+JTC^l6X56Un?EKYwKlt!rlbclOn~-Tfx2 zo%>fi#MO8iy4b8>c`m3kuP5fx`s}WS)giC0@#hz9Ezp1OXWr7Y_TkDW|2n4b-+raA zyK=`>v*liUlQwE9$t?(-vU&R5m5~PXd{w8quA2AI#fl^8@2AwKadoV1uR6P!xS#8m z-L^KHUpMn#&Lyd*@j5|%x6^}5zcM{zk@(W4{`y{pkMF}tuk8<+eOYU}!=CZ5;;PK+ zDo#J8G7m1yz8e$s-{AM!tACFCJQR_6^KU1A*6O>W&u1Ju<~V1CcZs*}OWCMy1-sdc z-mNG}zUs^LqLcZJXzrd+|0mbDT)f*A)=pFl&?PR`Sl8sXd*)&%vsQhm6QKmMpu{?+Sa zzXRvZ>N&{O=1|=$_w{Lrvf`1p&rd&o`H~(gxi&3upZn)$>%Yt`D4&vBm?5!$Z_}R? z59i`7`+8#QGiRK9^ft(M%gN&m)l=rJ6IeaFAn_L4W&RC4-r^d+d~$8pT;6GZtKw^u z`26nAZ03En3nuUAIq)dWJ-6cAYu1 z=gboBiyp;Vv!}AeWqmQ2^7@C|LamaJ3%VyKym9fiKFG2!Zl?0J>34NMEL@-`H8n19 z@rZ!`uXzwsZpvGb0jprIO~3u zN9Klib$@xgD^`wlv-@jCKm?#_+JtrnkCxjyY&!&|q_WnUTn zi_cvzIz1`ec>auswTC*w!(Y$2lFP2{|0QiL3yaCNb%#2Z9)GVUymWHqB)<1*k#Y`e zWv88gdNj6o=9*|F6V}+%%0A01lT3`<{%~zkY^h%6^>Yq~u!nb1bHko(`kE_lxBYv$ zN@@Qg8_u;8!~?ILeL3Zvf}o>uM#c4tf6mo0wVJ0gPlYVIA|`v*tVCntq{;suO`f`M z&f41xZnYoodOR;{rPuCl-YH6%zm`sO`Dh>b?1V_9+&P*KB8Dz3{o;}Z= z&t8+3g|#1-i)W?31F;tuuk!01^Yof=zp3+F zTiCCk@;8^trC3~lsS|f-U0O=Whi<8m*M-dMe@t4o>zKwj|7GVrzg^ol;dI_3QzpN1^7OghQL+zava5vl z%$1)PQFm=q*RIV6zI^O4IxqLA#<8ca?#)XGH9od_1 z|Et@va^}OIF4dd%t^IyPqLo2gZmPe~V$RPVHut-z$`CYSNOES;>lj9=_s zMtVx~kE-Q93}-g$y^5DUwV`!uFW*bzVXl7)8Fuz&wFx1)Vt{YqM{|*qP4Rl_rLtuJ-s*aQ|``5T-Mrc7x$LWp7P>o z(Dg01J=Bz5e1EebXw$PJt`o~9e40NiPb{8ikz#&~j@??;ZDOw!5*NM+S>m17oFDw9 zyuALM-tK+UT?U7l4FkC+zqgotZj}$`5M?`d+tm`r)Z9Czef;vsUNbZL#v+hOS7Fb*36c?0yxp z=|bn`YZ>j4d#j{oe#AV%(S`rXzk9oOJeFUxEq>v?V5yB~)7e~pbL!5q5xFtTFu`=5 zTB3V}$94Vb)_&&te6N;CEGXFbcZvbaqi5Hw#yUY|OO6DrUtO1>C@3DX=SuGOYe(_wy#&1Iq}V$jf;OsmOtOgc>Db(*=2km zzV39rF`do*^qw25mi5)K-Sc~*F=YVP=|7OXZ&UrWM|1Kz+Dx>2U zviYh1oA&J5`BLW_>vP;MNiJ8J)w$W4=bwN+W4pTB)(tb`o8Be!9zJpU)7|a+Q|7Yv z_3fHM19m>C_Ab~sVNTR<#oWx*TUwUfF}>;bPSciMI)mNjnEMV%yB*Uf zc+5?TK5h8;S(UF3eTt=L}+yNs%Tv-X**Yulfco)QjIEddwG7k-+xYp2BtD}}%pGt)RWKjIY+Zr}MtWby3NN84ZWX+I1+%I7ez zbQ;^8gk9pdSFZWNA9Xn^bnE+_RuaDVGApj$G0`qbxc}DT__wYkeG8uTte--CtSp}N z9^?9YD|JJsO=}j{n)L+|VjsVLanI+v7M#ea!pZFedZKKX^QHk?7z2kga4md zPfhc91ueH->%O?`0gqPBZ_bj5okw+EtbW)MQqAWc;qkLSLc3!r=e~VEV{H0zLmaLg zo{{%K=$DFXW%>3)oM+b=PHNtMBVp?6HMT2_Z%ul+Bs4cwNln~YDVr&=*X!7i`v)y~ z?f;$dstIjLd-cbGU#ag~MPFw9bM>Dc{3a*O=6r4w+v%xU^0ms~wAK2BHqHqvBmREa z(wygV^3?*CLWga;YJYY9j;mO|_@i$BnR&;Bj(S~hCi=TO#ruww@4ocSXXW&s#C&F>LV3?iwVi#-)-DQs*k>=b zJzu}=Lwzpy`{K{HHt1H)?k?}n>A3ZA+Vwk26;!7`JHNPZcBb5uww_}J@4m=YE1v&b ztpB3xZI$4&D{L(OmLH$4kY_j`k+eU;Q^e-v&aY9z@dj&sJ{c9Z7q2v`H~i`PSMCk( z^EvL8k3YKIW7Us)`{wbv8cXiI49a&JcTS((!o6MAdG>U!&NH7lcQ>&AG0gGUyz0)O zt=E%nJ_Q<{iu!lp%bS<1pJrx8O~}4b{cq~tgGGtq$$dK0&Y$1<*nI_qrjA(co>RNz zr*=6%ceoV0=HjJQuUB`poD6Ma3@x3I`Jf|u_FY#6-=`0nJtn-as9Npicr|r`=)KNg z)8DQ8u|cr?=#1Oh>B46Y{}APURc+$F?8UFM=QS2H+jdP_aYTaIXTi5cpFgj(G&*v% zC^=Yo#_zoJ?=SW&T-542x1ixmP%(>gTyk0X;m>xmPZyLsADX{1bje}yqgz)^owfgr zOQ+BVJ=dq2HkQ4Ksd9~9_oXdx>d8!Z5#*4{dTw|3k)PYD-yg;1?W+G6zxo{SdFgI;f>9|vG>~Cvl~~u;FqkDtctb%CVF<`u7?t@4@~D*^!R#g zkCIH$v_}2?n*;5_6y`kgST3_J;^!+N?`3gS50)*C;G3);zToP{+u0&9&!obt#V*vE z@3EeJ{e5xIq`)1WyMm_odmT79eL~f&ZFMJCzBQjCe0koE1gq^zlg_&~`h|Sx)@V`W zwvu)^YUda6;Eu%RTP5}!>_?o>-#-(T@a7~7&!K)>R+ErZZ;C&)e|mWEWk=bwdY%cJ zIS%`X%4E&UXLxisJX0>FG7ct@CehEMnj|`~1<;HlYjhQnO;i zZ0|pa+?CREjy-FpIt$m*bE2i{AIc_OUB*}c^a6*Q|Em3_JAS5lPQDvG`+s9g;YsG* zp5}RycUkWGIG?zdE0;Ly!WH%R_h;_hQ+w%Ka*M*+cT>CDLU|RH|9+S!!ujzacbMVx zOotpJ&iHOQlRpjrnGW_93rIZs>35^x_l2CTKN2*%_ar^eYSR&Si`f&L6gp}1mXB99 zK5vWved<(b-1nCI?3G(n|3}`6nqwH^{ARjiWMtF#P{Jp$AQ7qs-8UhdH@~xq`RF7(k|m zktgUO8*UKWVvIogL5_=7Ff|3S4ak_FH@2`;0AY|`BXbJ{V`F0l5N)7fYJiDBsvsDm z2EsN_FgLeQFgG<&FgLJJFgG$%FgG(%FtadJFf%n)FaXPdHqn`aH&mM$fdUnx2c*V8 z!Q9vk>;te)Q;?a423XhQgPmk*reI=X0@eVcjSb8oPBk?HI~>e6vH-I!jE%wSVERmr zEEJ3_jTDS6O~9T81sg~VWHE>aVUU@KIek!=gM!$`hD)Eg_4&{_dB~hTYJ_5)(l@h2 zn$bsJpKoLeo6$EguvD-#!?i*`Efcbj2ebtR!UFGCfo$N>&j9b=(Jx3X%FIvE2W{H{ z?b-ot+JWrZ0dLuXE(u61(Rb8$g02g2)A!K#)c4Z&(f8L6&=1lN)(_DS)epzAQXoq| z8|!L;GW~M>3XC-apgk2RYX(39uwaI-889<2hpiGYQZO{IFvhWHz|hd#3>4~wb_{Gu z4T(8>Z3Q<=`-648&IRS=<-B~o&gSpl$*E)%lym4YHaUNA*dTC6amVeq$#bKc3>UNc^OZO-{wTUTXhTrrt>RM+vDgXDzC(#F=@yBQpUBAe&(9yoXCm|CNc zv+_$Olj6;+mYy?rGO{wf`SVAHL2`lR6Q)nX51t7K-(WB|WJ-uz$%<>qjJlpEk zJ~ADVZPeQ)mgdKhYHTjOKv|`|btbcea7rR~$>%i24r>brlYcu8i!NX+Vck{1pc^^i z=1scR{J)gK;Gm-G=*M@D z!Fz$I(P}P^AYP8bpZ}d-@1J~nhqc9u8J7Ph|C{gjH~(;2-!{H`|FfA+2)=p8R>G*! ztkbCH_un>D{71fd>Vlqu(`#+?6rH+P-7QN^fxHRrBQ4ntTP z-?{_!M;ra7{nurDd1t>!L}{tYl9DBo|MxEYFBNROxwPo=C$|6Uuk9!QKl-L#;*zX* zwElr=Gmq+SpO}Jow0brJyE*@XGe?h}k(T`Q&7nj3!D+q?rJGo) z7#rdQ62rvQCrCdLV_2g8k3o9^_a}SqQ|A~Hwr={X{!RZ$67z%?E}C4 z7ybJ^>!11=)`YDLmR7U=b`~&4-W6(aq z`9uC$Tf~maf0EDJu9R;sWc+9PSUz{c?$h%b?%V6}EwFE`R47ZUPpMSMdQ{Jmr24VF zf^p5HdX7n6ulODBEcx%eN5FWdJbFER z{&VUO{h{9yVfnvRKzlk!@|U>NnmhlTI;Q@P=h*n^2e)F_y!r{uNl(9uJFVIC->GBj z`TZa2?fFzx9OCw!k(ppF`RVvK|LZ>)|JeNb_y7IOTYlTly>qD4Ji(Wc{P^kfKjBvn z-DTbM_0GRiHs^D*{wHcjpE$|FQpKn{VR~JI4$I*;m!g%ln3i-e(|&l*(K}*$T|nlW zzyDZOOAI-0EiCc5`19`i^HuzzkvB4S7wmpA&;Q6e!`Ql4!bZyvo|89v7GGxTQ@*+8 zR_9l}O;h%kADFUzq5F%uy2atg?_5~5dH=r9C9lN!pUvTw6s1MS92E zJ#M8u0Xjw^ek%8yT28_kd+Bks8U>aB!D=^vK8Wto5Y@rl*z z_m;Om)kvw<%PKQ}kbTd)KK$!cF1z^}pI`PV9N(Gy^wr|1;}4gAF55rv;YX97Egz>u zDAn|c8C>|^uqvcpHAwupIC~`Dy{UEiulL=bukfn)2D@iQ=9RB{ckZ_b+%6Or3!LuX zw7lD!IpD(k#usa5_2rjjNXJdg6}M>Pc9PZQxmoqrU*%=YK^|+_s+_mK4U?|?l_}di zebuJ3oBsF)nwW;o+;04%-HYpZP?Bxm)PR}$=UJZFd6`F7XRoGHl73FVdyRzWqb!*{ zQDtXd30~SQ*?!z&mdVjO`A<6ezoh5wNOhUBw%C*@bgARKuJ`Za^u*g)B9o2dFT`3e zky>8hy)pGXV51P14t@zIiao=C8k?T%c8$o71JfPsrPFN<>&I`=r3aUpwC$ zMo7uLy}Pt>gXm(%yS1s8cfDA)d1GSW>^vdCTV3DI-(Af4VNZY9tjFd{E*Kx$y}Gt> zF~^MEy~*|43>s#cRQ-O^ol~#BG{f#t^NW-JlEwOV{n#5&6VTRRn(q)E@_(u1QGJ!W zQZ_vguM3C8{(363Nhr~{{OnK1{cPe=XPdvQs%1VW@KMRRxz7QcM0ZAF8@E?J|}j9E@cpJ;0(%`OT3bn`*Aim!KV z<%Z@xv7SvilMgM=mQk7A%es5+ltW(?uIX=n|5EPh+>0lkD`lUIxyk?Kb?J%31sthc z_IvT&(RzN{!zi};@p-B5C!}>)?@#REn;E<|fAj6bie?^X3vvH5>r21QlFE_#_VoB}wx3oK zMxs0y9e$nt{lwU=PbzIonAcAaru*~aRlbIQ5xw>LQs)QpsZUJBbq}_!`?QI7OS06v zX!&=B;mg(1pMSmAxn+M`Q-^tL{NliiOkYfLG~Z#x!1q;7`_p$Esoef%YS3F#*&8obU)mm* zqLursqIJcgTal`+``!otV^9eRzISf^oDE$Y&Ref3>O6NLg-!g{7vl|$W|3bqzTC;a zbtS(2_{@NHjF+^S53eh{ll<%R9jkq7)*YYX`emm}#CHF4;jWkVM<2G2^}XE6%fqpS z`|_r9x_g$q-WqB->#!6{_A{H)Yjg}h#}%iyH*9pOI~}rnee}umVVex@-l#qE;JZqR z<34T?Z4nOT6@Fb7+RU|$Y%Hy@&GGhMDhu~)G@XA={{P$!Y#N)y&10V>9eJ7d=Gx8e zeZO5fF1_9VzqHj>;BJ5Hc`LE^8hPO#6t17B5-whTR$faeaY6Rw%exL|87A&7eaU;( z$mh>27E!S`S5}AY{hU^oQT#gQTYH|h+W(ZaW$Z%bv0vk?r)>2Pd;FnHt=H6Z{`=E= zB)cw3SQx5bDE(Jpd8F#+W=H0lW&d2mK0p5cR`fDQo76_uwjJExV^~+IU-ET1yy4)K z7M)+Srv^-`PWkuYrj?Y+o$Y(|a?Kw!e0unyFR8+-UVf5=&59puVokI@+F8#zm2gBq zbMFKFtBF^vzjJS7$~XRYM@lrZXwAGd6`tG@h&cp76dg z-mXmQ)uC6@4YaQ+PE@x1k+zoq_u+jFUhFoLPS5$wW4fN9IzGbc^e)CG!M|oEHv+dZ zT$!-*p6(ALTlbA~Rdwh6o;;(?wQ!w{eBa$4|1P%Qf7;+V=iT$wKV$W0|8;Zz8vo`a zr`saYPs`t{>`{BN=+~-~%TJ~+k+ld}?_BXA{_79*OsTgX>_?KypC5Udsj?!9Stj&M zv@cWsKEZ?>$JzpxACHna)uoy4zFX02;I;cD>*t;B&%E|6+Y~(cMAONHTT9s22Iu`) z_GEo)cAM`0z+OEjrW=P79ZYrh-%g*__jy~M=eu_g+&POD=p-C9V2%0x?D^)!5qloV z)oP#KEN}BQY&Tzf%e#*+?5CVLw);}*@qEvwl{XemOI(#9uzL0Mm?lFbD?_=5l_B|e zugLZI{dl0`(f&}--}H+~+k_6c%&m`BxQoiY`FTgP{?1zkE8FY0Hq@zJoHw&__a1is z^g_0)n?)NN8+{9vtJ0Z2n>~)bxL{}6`|FAd&xEC=f@=c4E-%ruop`Kc0{<>WS&#G} zoxY8eeoZZKRQMfb=CtE{DT~>RV=JuZ&ns8%4|IKJyZyop)`d=|=3c$a*7oA}!N~R5 zEPjt(=d*5GYr!q_!!Pxa>I=c8<<4BQnWi*7-+exOzjxE^cTUsVpZ2aetkrFLuxtO` ze6G8{YVs#4<#dOqR;d5D|K=mx+j#$FUZ?yNrTxywv76N%?zDaABcr35exE71cl|u2 z+3z!5{Vaqc*ZwPd7_?z>hp(mDlF5c4eZtuG-a}sB-U4G>h%SL}5&)FZkY+d$; z#aixu==%P9SkHZ#3x|HauiVqHR&LqS*tdE$`%AmZ96u*8T0P>6-!EQ%;Oe6dcXzYZ zO?iI!XTjBnm-P~@^7`J-X1IAcZT$?d<9l>27u}zCXWKlNE7{9c4MW#=rY_5~@rkat zOFVtBg42JNcS+3O3;sH3)(%`BaycB@w#WY8aKB>J9@TeG_q)3vxLc|w%YJ!(?BwO4 z3w9c3Yb`H-^JlZb*2RTZGafNozweNk_uTWz3iIP>>c-!98#Mfj+&eE_HSi_#j8h>C zc6OOFoaalJIisy0VA4^KkF~{jA6*W0>M*!CJE&_`nU(vxZ*xo&7o3YO(fhnrE64l6 zhgDqnX3w+ZIdFNgdrQ$igVhtWGN*+7{}Y`rd1aBJbxDQbx2iX>rK0iL`=l&d~=Y|4T-aX3RvvU8jE}eII z8b^u?`%A2z*v_3VdhF;&Q?Gwwx0Y4KoQn*6bJmJM;Ol>(KQ}f19w_^>X0=mqhF?y? zk}&;+LJnD%uXJn8`(*M>%2OuO@qpHcD{IUD%7hr6cZ=KZa_h6>7q^*{*8kh9QTopO z-_;^feaq#+;`t}lXH7WsX1Bk;LCLJZsdACs&wBQ?HPtbBsV_Np;hTt=!K1)^8l~<$ zD(@HN#|wYd&`NwG68NMj^zNBw5tTB#UroOr-_^R}VAQq;@^8AFe)jbrUV8dT3Qyp| zrYCY{QM;vc-#*QIdrFow`+8;aPv#q^uFLF`DmpB5T&nco0xQQY>&_p#Wj%ApmfnMF z_}+#boMha$IQ#9QH>z2S(*vr6l;_Vi)>xMNprahY9E(tRQF-=`RR6?UxLdXO}=%_==jS|P4{-c_hyT$Si!$U z`Jai;V*MN$4S$2YyPlI59B?hJ(-*TY?gF<^Q)e_8LRiZOL$eD zn;y>Q(;I6iy+JRdxmGea(NL7#Ip%uLZw{G z>$C`wlc$~P=DE4aT(xsPd2efk@k(b9=;+|kaL#&`_h7X z)_W5bKPy&*eN~c7O1uzg&pJUo-&0*?x4p&V)4bMie)h6^#yIMyy`Au4&hiw)<{jTB zs&ea2me+YAP}6OCzvm4{f5Z_Rw+*FETRqmwzM0PyHECV=g_>XUJ={$#cJDbYJU^hv z>|^1b)=tM43m!h5cc`Z6_Qa>cO~&6@Z5P{fu{DaRd=;Mg&CgKowAM-A z^=46Z%U(wsv1OjV@nZF#9TyzM_xn6}cg*|Qos<7}9r~wR^~T`t$_Y z*nIoZ!*pVAp8Ro(rocMnF+-q<5 z|2kY>&|AB>Z9$)M@+JeP&Hmfe=Qw+KzcApk7y0<4>yTMf(j-Nr((q%ccePYre)JZd za!`*=+A}z8Zp-@%vQG7!7p!eRr0{H8?i3ta|35NCYq8VHK;z3*3RCmKvX4jho=N)l zu2MJbx~{ zX7bL7A~Cl%MSgR1mn}Z^OS61ZhrFrA-E^NxGi#5(xbo@O>C7ije*87QYPzB0c1Pik zU3qGUjd{^aSu9e3_+@2x%P-d?x3Z^ORTax6A;%qQ_M8d~*Ue0t%f zBiqxN8}_~kn!NKRxBnOAMdIc&SwF~54*AT^_rZ2z&QY;BzZC5MUGVLz^JYoQUyyEc zxn%L5;}tQAM<;jirnBCCAhCD%m6RA|@5hbOn+~jZ_#OK??AlM>^us?pEE9!lDkO`i z?M>d)EN2e-6(rSG8(dJ-ci1*AM4*a_c(C&Mk;|$~te)%4i0m)w#hZa}1wO z-eF^Sik187!|lyZuH8XjEF9|;!(W|@)Lm#EAA5x@#m~<+V72Vqi0}J~rqxbbDW-m| z?e_+aHh;Ch-TMy&a&{@K{kgPmLr2Di;2K<=OX$r}9^4K=3NZ znlsDgee5nowVj$RBH|zyz*pvb!a;nY&ko-pGs#-ddHw$7lS;Ro`Q+Jh<#y1N`)1K= zFDj;|U6(YwY+pF9vs|_`fW2JvvD|IJ&L47K3op)E&+2}A_UWpY>Mpsf)zy8KJ|R0Y zx1X-Q_%;4x?$cz?#qT=Jj_kKh>yQ2RSE|PALBsZ^=U=O{uIUR=KI)$6b3*$ppMPG< zmHkVCZib0peWIHw5VYaPQ<*@onYn(kTViczMc4dcvF0sM^EtUcmOs09$=|~1*CH|( zYn1k^&WydK`+e`~)ulHYY>m}gU$1-9bR#joA<*)6gtb)sk(|0f?=nB3-Xx>8%BPbp zW>=g)lx3b+n|#Y-MQi_My-%sT^Ny_dSlY92-=PJ!e%bBMy^`0&&7S|VHvRjY+|R*h zzDs*Kne=^G99PRwIVs4#j_q&s&h30fD?2nEm$A)W=ASP1`S6ak16;9rQZ?bV?QW&7 z?G~+jtQq}BecImu?~+%s^FqvA>z1t!*~tCR#s8Sy$;N^emS1ZbbzcX@9#`J_reAG~ zqWb;4;dM_maxE6!(P;d$DJF`;LhWO4fW(n(`TS$aKAS7qA6ifHyL(Sz`?h4=quHCk zc5|rgYFR!1aNTP~5BA!VaVqVbH0Cksny)A**I#B5t-tZ>JKwsq%NH+Fg7kbeKioHt25Q72aAVQ!XEG_0Z0`ZLT}{ zyyuj>WK&DL^5wv*i_d1ARH%85@sXZ!YaY}~?ks@k#2^UaiHuX|4& z{PT6Ky!hUm|6jjTIQeI`p5w8aH(A9z-V4i}jr9CwFE~DVFaC91|AwdOv6>rlPrs>J zezQMe*V^Fh)NkAmrRyV)e(8@DRSj2d`RAa51aXacHTeFQa1?#i3DzKt7BX@9b-h7OiAZlWTw}&#+xP*!u}D)(Pvj`G|Nsg%l&IOKX<~eJ$i0y zI1;ybMH>cM%67a=jz2teAH!qs-EoX;^O%aeGME0mJ|%5cz|%|TzvmjHf9bgwdrdOf za?*R3*QRq1mwedTknSxk@o8a1IbVL$!`5jc8}C2mUScwH5CzJ1lT5}nr(HRe}O`rA3Jve;9$_jX?&`OB;d$|Gi7MDy-T6`^!?z zH7_@;Jnm`0r)Jbs`DISzz6=KuHn`)IYwr&l#oW__%@^`6)6 z%n!k*_xk*v#GPDZcJ+7P4R4DVGR2Qi#6t8)*y=7;k+#b*N-Zl@@iWaxK2g(c%a@j17uCLkPGk=-mjic|M?K1ssS|Y;N znfo*1!o$Eu^X7$h9I|5Z+b(PLb*=1`EmbO9$g?cuoA`CU*}vFcsTh4(SfLyoQD5^m z;pVH=iecBicS)QH7q+)wq*tc$%z1}SKbQY9k94y|n`6&OIsW^>Gh@f^Lz)YpPs-ln za?8vs##jAvp!vIBN_Jm1z1(qfW5Eo5hb0-kO#$$$IVSOSY2Rc3!+CzT0Bf zaxd-c%4VN$7^Zw>ZR1*Pq4TEkgdC%K$fPBOKRZ&c?#m5uu)TNgr`^APer0*rmOm5b z`YXw`cOLaL>5ThSy}zhGZu6YfkmI7sp+797b+$?{M3?+7o_1INQh~`Gi>}r_yXTzA z=Ps{%yMC^@slU#ZH_tqeSg7pME0wpMQgdD6VSZDog~jiAPbHSBzB)Gf$KPEVZ?sP@ zmolBvf2TXHY3e7n+Q6-@N}P}0Gi~h*pT$2@MWW{Q1FzD?Iie?u|0u`TWgVH-G9hWp zuHR8MS7J17b}SMrGL_Ld>KE{Z`>Z*;N$*yVR~k<7YKA?s=Y`t7OuRC0UEG}64*lhx z??b957)*I_UP5u#g2Su6Bu{dV%oW@&&JbSquuV^8Vz8rqv}%S^*^^@lYiE^Qlj8mT z)uJb@XZ=$H>w5x*qI0jyM!&ylb^lSwMiHrmW!dHPc+N$=5DYAzaPvp#ovd6jm&xI) zBTY}V_8<5#x8maQJmG_-r`9dJdHe^D?=GQOGqrb|ZD&5#OCCmPRo?O@%_lZue$p;PO6Z$b_|dDwR-z5 z*2VSz|K!=SMo6R@IEAPRWVU_#(EdDGNThpv#6uUwun66ViS15z((E(8lr7G-sF>2G z|M#%Y+S%z-d%o<>Y?~(B&T#X{c@r6}E!P#F2&=2K+k&JP>3n~4$6>di7rVJ0hPb-q2!>R$wZD&C$H5u(b=9{oQ8Q-c?a6DI zJ^5p~+pha3JKjEz&vD-Dn@1Bmg;`jwLV@^OHIx8sRZ%a=UM)Q6BJ12Lt*1;QPUtjL}Q~dPI z>kJj9!zQOw=Dyv0@!dhy|G#HP+Pm5-oYf7<$;t*HzA5^cY~955;#bOj*N6Rq)4%4{Ezu0C*tq}e0=wn0=5PLN z3q1Yj(!t}?w9VqB6y7Y?IR50psW;a&r%ye$;kTCO%WHbeji%YfSqbI!A6d51&nri= zH}dp3#u@Wp;vy*okbbk|!y!*AMbLMs9OetNHe*S%>XTN#~R~?wH zru(I}?6z;xe4`0P_Y!~9TxFPjpSSqfZQVBJn??T{wyLi+mk43Ip6cj0wQ@^+#a6!f zC#ILwHx|gxTr_|3?Pt@k_*owN_Hyc<>L>ZFGn2Nxn|M`S;l#s#~XYVNdhY ztyN{!i@jFq7Eb$Lr+xpHT*Sdmi+>&UN`KINspa$8v&C~yesIm%sxD!fTeI)tl-++m z2VT0h!+Yj|eRal%Hp*_DllyPx^H?R%nJX_btm|B@^r=^4^{gd)(*i7kra3eqWy@{B_}js@1_+EeUS* zzWWxcAK&9;>uKt@SWBxY;&K$5efQDHBC9TIEjyE$^F!Hk*2&+2QOkww7=B0zYA}XH zy}a~7;_p?(_c!;i=y-7Kz=ubP3+`NH3JtiLp8VP8tP^{5jSI7D-l_Vx=O#-$+!(3z z{F!uS((JtsM|*#t%dJ+qk*EGBMJv5_Q_YXEd0SSU>3Ls#!r6M^(-qf#JXZL-xIgLA zceQ@xdKuhx=ABPr_dK4&_hu#UrY`L>crbGr&+O$jZ92D?KG2Bz+@aOg`NOy< ztf8skhFqy{tOFyTLYk+*VP!k^*q3#(*R~yc$=s7brDIZxVsOB~E>(l2+>St#bSI^vAGp}s7)rIoii|4SHzx%c2 zit-x-_4C_LUvIw#mAYAb_e}^W`dhH!`w7$IjW!E4z6-OS+f?`F!}4&=o~z&0xSy-Y z$kbhYRqWmy(Y(k0*_VsI=KNUF>vOHu=kn7VxuFl{)f8+yZujh)(b=nCe4f5J#1r@0 zWX*4*M0w4H(;uW~d3Sp2e{{3_`np+O&2Xu4%F%VyAvq(i9B& zI%Qwtw|QG;KUwhU`>cI0B#f+Yy}rpKGWF5L#+)C*P8UOM|GbxykI?d~zkaeY^X`mI zB@g>9=5A^(EYHabHT$9b<(2m014;597r6>7eVO2Ar}?xn!ixRN#pOHNcCEgU|NH#u z>+vPR0u_zoj>}!+Ll!qTwk$fbqblwwYL>v{GsHonYH{+MXhl zerbL${-)x>_wxtayvJ{LJ>Hh(Gw)&gdJEmKaEsjqi&ifGcr|KgbjkyLZdH!j`wKpv zy{hTd+IFu0SopHzkwI=tijLNEoq2RLT2pjuyVVuDb5|6F^-`+z_s;0a2s~iWu<-55 zg?6vGPVgS-77SKhS+hQBVuakJsRfTkzw76<7vUQ$QSRi zSta#;_umD(0;hd6ty{N7^>fVSsl{#b@oP^lI;g>gd$1FP1VrHec&Q54? ze|@j(s%P3nLxt*(^ZxLetDa44)cw1}v-Za8e~~q>D_DR3E)nv(sk-BnNdA>yT;_kQ z9-j6~o9FAi>}4^3UQ)t-Va+JPOyO-)!xeustxVJrd^u(NQkRAOYt*&+{BE;;y_S3Y z?A49lb{!8&#J+i+`TFeI$H`Uelg=c&JepQDW&YNC-S+I04$m&rV0!8&HI+4a_$>#tV@s#h>0X`|_B|>qBSETdV*5(T|Ti z*!#E4^Z!|4xj9DXSK6k@KWvT$P7Pmssj*Q`IPjz{Zw&Ks`4rKewF&E=-TWE%{mksu z-zF~3f4*qXp3}S9fBOD1_Fu8OdV7ET?e}}yWB&D9iUe{LKYvou`uu>vch-0R+P}&y zzshEiwntU0YdjnnLVEu*J&bW`E||onMHXoDUmKO`ZsM}+m=-9#j09$iotggNBz2r*}uzLQt|?VlKizeeJ*V_ zVAWR&y~5sXar6@Zx+#ki0(WtyPJg;hyf=4|%k+y&Qtz6*m_7YWE?-c^{kaSGl^T~k zJ~-p_#ts!C$$CVkZ+*XEZqY_%2D2?6nvTD? zdiTe%Vjl6gdY0nGE8lF||7hQBxxU&URgY8MCv4t*Jw5gQgM}dpuN0(@3v1}lnY7}1 z_40z?u;ZDoeG{iFXwE!$QSq$x9f71r+NNiPb>Av;RQ+=Kv|CqHaB@;_IOpHY-BNCr z!gEVQQ+8PjI4`ttE;*X@T>J6!ql?T<=LzlWbvCII_M4}C`Piw?^7hI4zsnw%x_>#_ z%`l_xj`yT}N*`S=7l~Va@#kzwNpL)P|K_BlRk>Ryr}gPaU3v7$PssML{VGWpUZ=*I zbr!rox^`O@daTsss!m(Ciu-g}qT6kj=e0go{m({<`y{p706Y4hqEjhFq8v)cDC`Sk+hSJRF5Hl1A|nL2xZP|CTJoohc`;F0+zzO+rwbM2*+ z*^l2{?<;?`aJP%_6w5hYr4cfFl=Jd?>(hGwNtONMHCMWKQ_@3A+VdI9=^b4C-%b=S zTf5P;a+cM_PMM{hJgY5RV=VzOKvzgUD)rBdYb#r!d5 zqGGo9Imnez$+s&l)jQ6YXty9PSgr#Gfj>gCFFIw{Twe}$k%LjKF!sS@*lydbR zyq{B=Ajvmn@kA%CB*(icC+1e4$(qEg>(8%{q;4dm;Mt`#B~kawq1ifA$!aaC~8+MTv!rcJ(o-1D!@|bxjLopV`QW?>Mp9pfIa=`nO&uf4PJ2qfax*AKYn;}&OPT!7f!mg zQ~zgn)!qcHPx9NiEkb=V*WBvtH2Nv{?BKK&UZ3ATV_Ed>_`b+fGE+Dz=I;A17`E** zquYD6C0p{;4;-$`_DK337|L<6!7#l2YGbLP>blURzrk-dKB(Z=34X!Oy7xs&Vt2^K z{=45=zO*bqy6j!L(pia9UmbR6KbgFK&6doP?dvDGJrSNaabaFe+Cr0@Dsl736e+j4 zK2D2|n|^vHpZ?&j$@!_>argYfZf4FtYOC<q)6<>61daw4v4 z7OvHQz_5LH!$%$#R=J9s&Gy`)Qr~RPb+x4M^7{)YF|fRvlMhF5ONe8>- z#29ptT_Wt36QlzdjSa!qtsot^=pEtW;~t^y>>Cn-<-kQ_Bd~hJeh#o*sIGH`-nK%s zYfci2it@`#3l#Lhj1=(g8{o?E8KyD0CfZvBQY_3891*QV*5|s3!)Wj0dO$deby8k38F*&;!av2Tk4vi;9!;i&CL6kORI>hPv0Efb36&7@U+?1i7arwI~yO?+w^B7&oAx zBoTVwf&$J&Lo_!LzAgn^z=6uAXa!RvQ!oaVjs{Q`OpF#Z#2y$4vH`?~(J(fQk4!_@ zAQFU;-3rnL;e%xGVce>4%OINv-%bWD@ zDDa(8Sa+O(3lsgS)S`TB`_9rb%To1=GbA;qFT zv{cl0)A!W(1D{?Ssvo8wp&yBSl@p8&btlI0w#Zx7ia>YT=$Gna-LPg1+Qo>xVGS$* zi%9r}HSjhx2oJPj&CuKgwto%vlv_hXBLh=Vn}WasR( z!Fz#G>hPg6atmH&FfuvqiC}#6?HfbyezzS=CJpNx#LE|`YHP8x9}r4mWSqgg)-fSu z+x{6(4uyEzj?NUJ?7Q9Zm}wzSJihF)WxctuLWkzd`i^*Hqu5f>zQ3r#{s) zzuw<`ddJP%t7lmL5&iex=WqVoG(Lsu_5WW!eDUB38{;m9DYCkadJq1;TgClHe2&ot zp(oEi++X`iz_@xstHq65avTZ&r?VDKWvpbxDOH zzVg&O`O5IGf8hVT5M$;>#i%&H|1N)5f4@KL@%FZ5$623n8l<#8o6dYo@YlcZ=8yl+ z@{!7Un8C>u&1_Lw!I-9}mln6;!dvE0n}%{327wzwFE|;hoEmRN9PAT#A;4gwzK=oM zUHr;^ty4!?6PnF#&$j&Y^#AEcY#S_hTRJsNd-iR=Zym$zna#pmKBQgv`tSDBH1-Xa zGj}o^{N|v2B7geh`aAWZ|K(>3OC1u8;-9ekZoaV9{>gi1zs_g2+TFUix%p;(JNtpO z$4^t3S^jUUSh#pWqs)JYhs+yx-kQDh)}OKkC+<0jAHUzm&~R3e=a2hmhnI?S`)^k+ zxFaAf{y^S#!HKZGJiYzA8tX(){Oy+uhzZYF`R`&tMEHW=@@p<^+Q9fYXXVZP*#9V@echQ){6E93{!OS4eb3K1_rfoJ z&b4#S$_wqXxgamZmH55ACFsU~#f1|4`FYsCMMcK;{>B342#cK+ z3#40^51c>u?)Ut=TMjCun=jZS^5x2g&7X@4|GkacvD2a7^2z(>%wOdGY~RM@sPC(A zK{%svm&Nl8#V_~F)@p7!fg&755K)y$6%@d@+8Z%YmZz*1eUv;bNakvZ9xPZ zx8VO(6Q_KAo3+KzkYU-r9kY9n*=%0*-8uA%k95VxziBJ0lY%#|-FBTj?O7uC(K#Qb zFWzeqvc1&Ou=*YU60Vukr8wN1E}fk}W#gNehuY0goo-lqFVW|m~SRiS-`JT)Tw0#yGgwZ5Hj zp|&dYZ0XI~84Z7WZ0EJDwkdz}<)ioebF8)h1kdvEpS88D>zDtl;s4FFwPo)59}9JV z{SM`}Iy*(_$0z0|XC1}<-SIqj{r3X?ILm)mQcrGL^HU;JPUD(Jtp3K+%SCR8AFOaq z(OdD|DI!>Uep1zE#;)Ib`H9cApO&$&C=>W-S*XvYyx3c<=KHTTRlgmcnl{b#&btxn zwx{*v-(x}-T+f*#CboYt=qmfPDgWBRS7#RX&5EBjujt7KpC=DCgedg!-PwHN#r;<| zUw7^}v+O~2{1c0C*;ge;R&(tZGp~u~{j&AvoZ}z09H*DBS!AK4=g=CD#)a>`cOGLmv2;4X zr~b6)&EYpDZ1-}dcW14f&hXmJ{d}6CVnStTs^^E5nJiNp2cg-fil*KTuNICeIxzcDQoRdmtP*A@mFif+^A~@j%?lTF>}p<_h&?H zawS)OxV&XS+J`3n%@g`Fv)>2o+jDm9t0ncN#S3q{z3csuy(^qibZtu1;>MMXbJmFJ z%{E!_E~8odd|YAA-FQ8d$wHTVr@UI3oe(48Q{~INIIF@ZEF?ZRec9=YUdmZ{{+9DO zkALwsQWNuI-XZ^SdO_43@kNURWA2~UIrDzPv+2v8rYXr5e|)=ed%k!@fTR*n$~OJz z-ibop?mDLZs&niYgj?(Q)_BY*ElKRyuDIx^mEga9Z;H=mFE?4QrT4Y&Y4q%nXR)b{ zW@>ZSb*NyY3& ziPStku1B8??G_)5@7VS1^sT20`_^AQ|HD4?r;EaIu7fS_#cEY2*KFUpYt!Y5!1((< zr{q=kUdY{c$#~o3n?ePSf`R$wZ3Zd4ganoEDGXE>c)!fDJ<8Vj#&i9k7asmIk zs*1u+2DdNi)95_3uzKPn4I@dRmPwc8FP~pDc^|{A?{(YCBlY?A&XFcit%JYm^CAEn4)(_I=JSzVP}JkF=szrmj7!(6)2$;(|L3 zXQnTnI-4h==5}Y@&y}xVbYA>c+0zj(-4yn)^VXLzhf3ugKW@(u_imia@b|>egXv4x zyq9|ayl>srUn>utp0sk4UTVuZ0}T)N@162C5uMkIa`#H*Fz`>FKHaHf~tyJ1IH3jKMqbj`t_TkBnZrtUDjsQzZ-j^4Y|0;m6&Rl(;x_4kE;*IOrC zG4tzS_vQ87#`ykW?d@CPb@Hojn%`fdc1g{3YGhMa`0{AyRPIIAN6JMN0?)pb_^$Ye z_vD_BOkeCPia&K0D^A{oZAp?{-l+*h4R=5rTB8jIEH3l_2GW}gXf{mt^JSy#b( z(&d{qYdb1~eto(1Iyd#sd~HdiO>R~Uz5bgXnzZk|n4GBPy+o|h&s&CJAumt(5l!1_ ztEtl*Lyxrbbh+KSD?inUS6U$Wof#-d4? zv)3gqO6j*RYML3M66;sI?TE}|ohp6Rte-|FHcSm$+PZe9zDWJ-n+-byud*qr9FOhr zHRF3AA9QWbS2x?#+foKP%a$Kav337;srUS*L;Y*{Z@gUe?q8|Gl~nuuy>e3V2SOE> zPA}X1(BkX~w`1Fm?5Ozs(OdqGTa~!@>W${x+~&uhne4HRCzVxHXXF1v=I8&)6-~)G zap?HP_72CSS;qF2N}sZ$t{G2OW&gOG`EJj>zz^^J=I6EH zZ6CfCocW=)G;@!Bx7W8TbB9zvZ(0({9^J`xwDEyQ9k^yHOFOnqywczs7%)9jlv&r@!^D?HpcFaB7X z)c-&4sy#Io`={UMIxnWPrZW7@Ub^xS;$r&Vl!?|X-??rT38uY2o(w&tQaTuZN79J(4Cc=h8QnI-8nKY8qX z>{=dNxBBoo)~*wWm#w|)Syp$e*Y}d(+)Xju3txZp$SnQrspRb}v|= znOrY_@5$|J>|3lu=iS&-{_3OPtUga}XYV^kmx@IbUX)DoduO=a^+1SxzVPby?d$Kj zW^6ecoIb~60&{z_uFciuuk9y%Pjk-=GfA#9j11EI?*myk_Fnceo<51KLvNzsl5DlJi%O4FEHnP@!!HBnvocag?z=gu(WQ$M#@hCba}DBC6^VjMQr!Dza|X^!)e zr5}PoM!EABx3gv4bPQ8!FAHJJQ~z3V@8c4_-PxYc zcb?98xz^zWU$KTzg>}N2GkS|&em(h0z5V9xh_`}w&9k)J)^;~rSnoc(?dkNV6<1}# zKE@gfu^h=bp0I6Ul+lz2lRgD%T@vu#aYOtM`vN0N?;Xthu0725mQa?s7a?gkZ`1SO z*EW2!<$E)V7ra}$;LiCgIab^nE=pOJzxEbQx+h=mly-7Tg};%^u{9@K_su#Vrz*Mb z(y7`-p7FnLRs4zU&${yb_wsM*cJl%gl>gtIso)saq42WIzIRQbXWhDsF?Me{8;a## zOwFvEmhOG~)E~WzS#6oNFAp#G=)A4bW%xo zlgQl&@i|8)%}-r>{eNcK%G~R>p6kuibbE#{3@_} zeb30NRc(EDTH$rJXWE*#Hy;1Q_Qzhv`iq$IcV^({-b+E_&p4D&p?J ztaFy@ESI*I&gnMVx_&=T- zEc5)u?ws0J@HgwG?fT`5?*5(W5%)VsXvqxL$y$dcUOw5G z{`$_URoTCPnQNy1J;?v-D3_gEeC)bk&!jduseSXmem4AB`}=2?awmO`-g1Fcv#{{3 zc6@K(6ycDbh!gUat(|+Fx#f>vj;emR#6G=ll^^@smz%Q-i`1M@_$uHjyIXKd zY;KvJOPkoflE)wAN*ZMQOeaU>RK0hKHuYWoD<<>f+hZSomjpyb&aXOkJm%)2@?Vpu zCx}cwkk_VeWf?2Wv41|(MY)LiitnE5o6CqY3vceV-1*iajJe6qY-vDh)`CSx?AGqE z&HWdhmA;s@a#qsbe-r+#-+jA4!z0_td5`|FB#Yu-%O?BEcAd=busZbawE@rVzft^F zPy9FB*}G3?(E%>uJ-5|st$mE;j#MaLyLoN1R>^kN@MPC*DpJx3%1NF_Rgcyx1^d62 za@(L%sI1U5;x@B1rnpTz8T?_m}RV)xPNo2@O% zxBvI29YS((8(&y_l;I8EDC`wfGxK8I%De44ze*j%=W8a~99k7}Ed8kX^V_QpzP4_^ zzM}Qdwf33c1(@uw1Ycq7b-tqCW-l^#?au4dPndU$bNtD7Nj`J=h`Z#cZ{21$Qzp4= z^$umZAGZDax9(L6k=uV*ykiUeQuE5>ajWaelCl z&wAVspLubD#jNZcgQv{pmD6TC>lWX5*yMSaI{%;Jhch|O-deLd8~(} z;0`{wH2&IocRR`RiM`Gqy5a{7oE@h#9#uJd{d+}*R?&jwsJMpity@=J(f*Kg zGoY-fsOo{WOy%n1*Kf#7_V%lh^7*qUmkl0?&!d%S$uvwyVoE7 zo5!zd-r3QYAEt3bp4;TynyS#tib2;;vcyjVC1FLGiPc0Wt-_4b&P7QBYZ=j;!e zs^6LuyWC!7Wxpg`TXxjttFYK^_Cm8w z7maSN{}N|%``Odozt3FKS8d6U{Q> zlFOT#c=+kX_V4p1CrxGKzdJ$pq3$=0pgmgoT^Bi16s^uzR4k9VbmN$CmemcJH&Jc= zv8$iot@+ZqP{H=i?$r-&^!GAv|JCB>!hSFKfP~q~6oG%&SU5F$IwSPBSi0^^KiWU% zy8PvD#_mb=MKjs$KK))@?TLb`r>5`ITX(^)J6;@cnYC~I z^Cy>f1n$4F_Qa;N6v=A4DeVuqj;Oy#Q8e#*Y3{%htDf9@Ol{xuf_d}q$7pv{yZ0@O zoh$n>H*mG5Bg_2@7Qg>leOUEEPQ`nVZspaxoP1Zx;(ZqF(%Gx>;!ZW=bC!Rm687QZ zJzsvRMy5_(!Sr*%ucp6k9hEs%{kb*#TA60Mrl#&zYRS6c=-z4RBBZZU$% zJXzympLBiFy%j6p2l!`AigtZ3^IEKT_wlWF_yxtZHykb6AXQMp`QYuhx&K8%y(b8t zaM|!EmbqH*?Vg=qCfNU+Rr}tEF`?$<)L8S^o@Zw3{CLzCeRkzazv~PaB7Djuy9@aA ze*8Ez>q$;jS)+rdX>V9%W#r`i(KxP| zr3GrH%M8|@FPHzkdXK{PY%a65S<3Qtr@myroc;Kj{$3mPz$dfUhQBV6V?Svn?riz~ zq*h+{;j5;p{ExrRk-l^@g{y9j%qR1mJ(_uQjrtkZG73wy?D^f4^yMaFi-r776`KvS z<9_KDOcc*%-E)rX{pR~u8w=(s^XUb?>tCMrK&F4{siJsA&#ASG3yx3ah`X7(BWUHr zC0C^Y!dacgtNlSc$P9MJVi0QS}8GVPRyIVNV zvN`S9yW;v~`GPgItCfAWi`K7GENJsR+jTi1pT zr8Ww6T+BVUp8l#-+2m69#OZqcmbd4f1;0dDoSM{aId|gj{@w9+GQJ!z-_~>Ule>i5 z+W5%!#f!7=9+`e2uxY{nU)v;SO*7zfF#Z>L;^jNVyZ3hma+tNdy|X$0i~W92)lpw5 zqd!)gb*Av1TF>#m^Ne@g>Tj_hn@(13jX0mt*|Kp*(^TQy)wc~aPF{2oI5TU>hQG;P zo@WjgayNGEY@WN5b;H>hW6NgqG}XB}p${H!yqaLP%1(IV^Vr}J-C*4Uw#4O&B+eJ! z+4o&6?bR)Xh}B&D3(}9LPL??7bw2y#<7N7j&eu;dOZji5(HB&`xmb_`DF9@FFc<8^q9@vw#@f6J2W=?XN1jPeEssig%`SC>dyFN8XuTv8yH#sOk`ba z{Vm(WyGvgGGCNfiQogaS(f#(z^qd1H7Umm^hAKS_(pFKFHOv=#Cbw64YmJSOZC%vs z89z4JGz&#OJ>2_ZOI62$cbPKxSdMMmckAQwwey(;D^{DnXW|gN` zGOoIFz^1F2cNSat#hQ574_a;`D&E)#N zDSruk=O{L(bKml6|wP(6n~NhjU7R_u@H@jp)&T3P9xFV8<hi=5PLIx;bZTihbw z-&QwiXLESX{hvwwrWtp|qPc}Safb?;YWDtVe7D{A)oGJ3@94iV;)~zzePewrZ(-8e zcUdOv%(YR0oh3VuK78SS>R)w9rQF&6(|#J)KMHzkExiAh#m96{-rS{<<_}J<|GRRE zS`(l9jdzvpDdsGj{xV@YWAK^*6s)ZnpY9OLxxO=f7G$yEgy(*6;uG^u_h_E5fAs z%2cjs{N&|59==;Tp!My8m3xY~&;8Af|C{l=qRY4_HiAns{nNx(a|{0#J*+YgFMO64 zB+kG4aY&%7!iD__Y=6tu|7cvuk&Y8NSML>Q+TFEi!}9wF%$94P*KC(wnw=|Z+)*s; zZMt&PY;lEOYZv=(Xu7dMF=(Mf&(h6N@tvy@-IBt0^l*HWdj3hMaA9Mfk(Sr$Nu5(P zuG$IsZb_>M{xSE%EX`Hh4x6^lXMgEdz{fsU!0y>ht>xGKW^}~!crJ7Q;MAm6y=_0o z)n-S|bb;z4I%ocFlQoZ<`p!UppZtr*vvyrt{N8L%ht=oyHEiwMQ}%AX5;4-6M}7Os*Eb}X6g;y-C%Txj z*Y1`)$i=>C=ZTBTBLC!Sj^>oo+{`by_@p9mv^kZ*ehj{?6SNNu9d+Q+ZD%c$9AqozfHf=4Gmn z_37+L9=3QhSpojKZaqJy@7f{ngo{eNA84;M=XuJZ`s{=C3nB4qD(958S@6!enR=q* z?*FP+wby1Y$hSI~kz$~lKY4)-|EBK`xF7y`6!ZLKfLg(3ZGi)mChhE7oU-)toR#}d zT)Gxxk;HHF@`Rtgf^252Vpy2(>B8e-q8pFpR-LUl+m&5*`lUnWIj!Isd$^Jx8Gnr1 zJCk+(U8bT**WaI3U0W*?vQs)xC{*NMz|o2AzbEO+FOgHq<9?CC@uqaW!d2dr)9;;r z+iAbgKX5^`OTX{;=#1J6A9IhqwR@WS+WOneAC)k@t31QLZifuvl)WXiT~CGnl)=2Iu*0D=6;oVeDX=#89AE;7cziSF|K((PvD4{MbL<2o9S@(33~o|yxRD!pB(mY@iB(0q<>_+aIptTXFGL?pEY*4x zsxmYBxv|Ck7nR3T%JUo5TMU$pvQ{0<;tami=~pqgRK;h~@#;e6r&@)6e*bOTBX4-C zm8w2^aAfhqd8}{L{pOmteYv^7c2Cv9gp_>4o$KztGg|&c@2-C0baS~g)SnIjP2_cFTLF8Z*1crY83L*6B(6{quRePvFVAC-;6% zReu_FxP1EU)hDh9DzP4JveDqUzay_%IlTXggl>-1x?}^>499q*Q$?$OUizb_x$@kZ z3F|UAzMd_g?2_lV!0{M=^kv_6AGY%sn4kOZk&O?D*sbg`k=e!IymDn>@|-&o7b}k# z>b*SncliOog`%E0(`FPD#oNd`Sna(Z*faUf&oGXh&6i`s(pT*f z={#3LTf5<r3=1KYIK+ zxLzy6{!ZWaJfo&`y?bq2tRAg7y8K=hyIAJmfB(XDZib!@U9iA5@@;ScPkh(C^-(uh z=`&eN|J}Wi>-Wb+B?)%sOJh%kJdIkoa#faRRa)4z8Tnhx9am3rV{d!@al1sD#q}@O zOzvzD`x2V6T zxY@B>mgmyLNqyBh2j`z?xxQcIx4BCE-tR|+vZ8B_2}Mo)T5j%sSl2kOV8cZw+c#&Q zeEt47e8cZWdsc{MT-j}dM_UKY45Kn2{qBBE3OEd z*KsMnob)v5!E~R-;KHrUV%#lzs(i6 zc6p`Q<*)5eUSE5^Tdp!|`P*}L)f)E8tQCWUxD}Zg&#``Dx%vL69j`^nq6h2i*W`Y` z*7<=weyj0HE`{Rhy?4&lncos`e7kaYUHp_i33GRre~Ek^_Dx#;=@;w$26^A#w`Hw4 z948)ke~-SCygFy=gf>0hW%Xw~gKqyk@TojnUh`|kmT$EuO@FR5NS+|YbaFqhu};FP z$*d2*y77gc3YolTtN%{Jr8(bjJ8@PON89YX{oCS>pT4R%i(mN>@ky?p4nm7U?i z&P$PhrnznP@vF(JvM_nvH1F%jr)StjZkZkays)n4nf}tZZT=deb39L3ygK{n(lS2A z4-+HL?DlycwQ`BTE9)aRd^az?{blg;TL-qKs#xaHrwbr$lsJ1pI7^@KE}p3U{xzaalm`t!V%3l@Ca z5x7-QJxACyLs`;WJE+>-Un)`a^z4{p-m_~i&RWtg+4kS)BHKOt?L|o|&eqJ3)UaHX zC$%N*T*98zmd_U@?9|PFUboTNGx?@t*@AZyCX`HC|4=5>Xvgo(EBx0h#VktcKX^1* zcG{ogJ+J2qzVs?A*te(Vz_I1w4#kU)>~;w~%5Gb%w|~hA>9QmNm|p|Jb&_Cd>YWI{#R_U6-;Pk-KqgkKd=DGyW-aA zFAda6+i+&rZ^O#_qKwO>N*~`3IK_8k_taeV)7z$O@1MQ)Xzm{m*6>wq*`Hs=Gnv2H z9b@uMFWIgucW<(V*MXRz~3fq|E9s8Zd{kJgK`-hrAQDvBsn7;G$P_%kGT|0#1hm^e%P z->oHkl_YOJb6X_JDybyWbn^pq|I!c7Z3XA3oOf2WdddGyrzh=Y{bKk1Skti0Arm<{&(`$&znwU{xwFrz^U3>_GRv3V zXu7k-vTOfl+3&h@-mh2W^o;9CmU#C02t!tNP}K3_E&EeGh3(lk^QTsb(&mGE_Nm`+ z?#cLE{O{6?m_uCVi!Jy1?wGVMIm_qx$~WxF7bY!vzsp>O^;>}}_an*LgO}&OxNp}a za_48wNf~pUA9q4LlT4m7Xq0C?m9!82&RzX=t(OqPoBb2=4{)TPO5m@w+#23h{KVx$ zT~>OErRuyM&i}5wtGBLPJIy5~{?CTRM)$*KwtubAp6n@cFg`2hSy%OveZAo=S1s4s zs+?$)joKHUBe7c2Ev#QNzHdc`LFm=el7e|*A3vx?*j$JdPJYg-WGwUC`PTOnEc@oI zw*U2W?=hVj-`bcrGj{&svd;Qwlo@;|Zr9=Chrb=$HY4k}<(Gu8s6+F!PJG_5eeOx` zj7{w;_N`3&@knD`y3Dn1UAMh=E-w1E*0b1ai^nZ~r)Ezf#rjo$y197gUUN8S^sTzb z_iBjU$}gcYcemFgiS3?^bmVxbEHSND}eK2Mbs(A{mJZeBOXR}XL+7mS`5SvBttI!@XVBwjA8|2(8Ve!7s>=W zhI+X8Xgm8lMHm`k+$dvgreL5D#D%m231k4sb&1!EJC?+p};!Dd5fOJfVLDpNCK2yJPiU}9Hx6%>-Vu4Xag(uc35H?%Z?gaBkMJzCIUT}y9hfP6WN2~@w6Q+|a)w1Tdw zv4Sq>f)+zVV@n0l?KiPp`dF6JJL|jZhk&n4NzqT$Pt(uDdQnP+ex)YFd2X3GsS3uR zi)T=x1|$IUE@X|lp@N}-sVQuUIp|g!BOD9PP0WmpiCAwwxzc9J@7u?9JKf3@wYD$y z+%_}uO=Q}e-EX|V%}g{(lSt;idHqexg^1Har-XzSX>=}eNz#f8O7T4TZl=}#;=bo| z?B_pU|NQHn@Alt+|BAbR{_D>5uYcR>rlcvhItbpmV8vqN$)&~{%x2O%ahri8gBmaE zT)VZNF1sgfVA(TGn{zGCfhkiG7!KWMp3ul-P?;LJW0Qsk4_mWU3oLV?ABKiB!}56HZ2S7Tcccu7Hm z$06~qXM^-D=5BV!I?GGPlQ|j=$tO_}i}J=UP0 z#*(FLa`oi@ww3i=uYWu)P+NCz|C9Rim+`OH-HV9%P;bO>&+ea!iJ*bnf(tHx?1OVJ z)X#7hD)_Ip*uUs#;$6WCei^BTe}ad8y-aAnpkb_Y@~-fK9gqH8*#9`g=GA<$6}i82 z8H(f*mo86L`8dDwUz|zt(MO)s4%*e9{CDc#*$w+=-jY=^<0xqGa$abVrS$dh=hGkM zk8b(+jzvVw-&UaLQ-k)z7g9Wn=J9BqWK=X@=yqS&%uph5)zC%CUm=Rb`STuyB&S%!(cBtW3_{!eFJ|XJ*dxlfY0+$$< z{G0#(zQ^A92@9A#)=K}8{%@PDGD$#0NmZTO3HGZ0-4}DE_=|e-hAYACZtM&1IzC>^Qa*J?_s+A0q0_gXjtepF zxU6Iwb;(z1cU-A~`~H&)j^2G^{zbI@dcy8f?fKoMeTjYs1?~s*SK5C0v*29OlKiTB zulMd`n7;Fm_ji_@{ZFOY&;R21-xHUx`@YSm+Q7bRU!Lwx54~CTbno?WIsGX!Ix{2d zlIDmkdRfMi@k*~_V)%xuCyz%SJ#N;J+Ir^Z=bF_*4?a$D`1a0SO1yww6xej=Xqf`F*x_{;dIC zw{2tJ_+Inpozgq+gUOY<`)3z;K7HN3EPTz%T>geVigA~YsxtHQ`hWMXdH4Bseaefg9Y3v__w?ny zsB3SupD&B;%P3Z+$}4oEcVpe{4DYG!UBu^2U?^oHdtF9SaNNf`8Vszsh-9CeQRI*weaO? zOP#heVa=9F6>DYPj`g^1;=Z$ap52eDp7icW$=cUfULQHF|7%ri z;m$W-Ja(*OdR6QgZ(Hs4q&44kYqW*z_sWbli;wR-@2Q)4F3|Pi(g)FI+KO3;Y6~x~ zSsx`9v7l)09nGnaqYG>;zUMvtq9VE6J1qLtbB%30^{1Z1ygO$f^CR+KbF7w*ILG=O z{oAFg_WG=OJ?+%_kK(q1PQlr`x2`)ov)cE-#B0w(rWA15UiZ^jc5tulj9 z-QQ`2J05nf@bJF7PUeF9r=H_)pF5Xz^sG!RmA}HU`_su>(;k`I?E=l)U!SvB>7=Ha zRy%o(QJrbfv+lhebDt-s3&^WV+?3Q~W%=GY^Q`0{ZdaDt$*G~Or{jhC)r{8FxnGQ5 zs>@b>e`mUo>*0^g2Ukah{@tZ~(tAemUZL|U-SJL#;@)dloVw2aC4=L{{-3EmCpN7S zbnn}CN$Sn6btw~VOqcyR@p1Fwm%Qw=ufAwHIrSIg!q@6d+t{=3uQ5~6N}uf?7qszq z)YN6ERV9W6G3JE^aYg}Yn`&-GUCG$NW>RtV)SiG%60Z$*F@ENZ^7{YqBhPdzyGJ+5 zSAM?jzIeC!pXyILHuBGp*`txH@o|;nfv~IBLp~`6e>vqjL;uv0{@SxKsalbTpJ#8k z+GSuNXFvPz)(>+`W2fFeD{|I#_Cdv?I(GLzbN&loru9sELPt)fqN9P`p)(VgPE|Z- z=lt~dY6&alb$7Q<7CY7b&dGWDqvGqe-hCR$8F`uJm)Dtg&Dg9}Cn(ePFtPW0qG-wI zZn^xIFX!p9NZEO2ESzH7ekG6d(Y*Kj6Yhw*y?omD@4?MF<&*hlQ{H-rSliv#>2tf8 zKI22F>#iTmvPF^$w^VL&dK%g;6z#j*YzAh?X=!Ej z`QB2~_H5JL{hpH*%@;mCxh-g~dyd@m30ryJ^+p%}kl3mA=+JC-7G8rL9`{b9{%@v!hr~jAmRGrigHuZUW7O78W_#bk6->em@?044Cta7RGx_NAVI@1@wvOjk$RkUmm zgZhe@(Jnld6Zy4g)~d{R@(2m?>w2F1>DVHf-+Df#+yPwDNAJeJP-8VM*vh(Mdh564 z)~T&OCLir7ou)AN`cIkOlC~>vle#laYTdY)Gp$?ahvYnxbbUJKW!KbMtX}F%TV9_? zkh<`@Z!@F#{)wYAIy<3=f;fbC;lxl zxnfdfJEuqB-!8EW&mLKv)14q>xT8lf`OWJe6QVE7+8=gGcKzHV-z@81C3l`k-}daz zi+xH*zB+$<#+s9?U%X{&SLsvx{bC>YFL-mPaM8hpx(cyH@&7{){wOrMYxOka{Dv)E zCGl^&Gne09snl(@Vag)cUcGY{k^*G>ca_bz(-RduxchT%`?)@Yh}798DK&LluikXK z{`$4F`rhTLj^*>y_g)efjqct3zN5OphIie^t2d5a%P=Wg?LKGef{ZO?k4o-eTBr9S zM1J1qUtJk%k2Q$AZ?%2M&(t{k($TM4^JiSI{@%%Y{N0DbhN_qTVOz2q(zeEZJ;Jju zv5fD$;rw--Y@(U0(`!0ID&?YAs$QAosTsQ^LQBv$wvK06{KL5P?z=Ay=1VPA@cNc> zSV}1TUFhm*`{vKwyvNw)q;^21>Xr(-a8nP}X`jB#?JmB4UE`~xV%v0KqfasG(tf8O z$@h7c`r^`)bsOAoP5js)&siA$vhsp6bHCB*f*g~hCoa~0@3#_uGP|)t@b&eM8_u%N zznti{+cd-7N`LP4PgWT&5;e77cQ1c3HSWCi#^*i%Ii7gjy;a>QRFoaPDWBs-N#DD# zr`Wb@rrdenfBDIeWlS%1$^<*x4?jK6rG3(-NZYy(i9i7^~bNxw|>c3FF*E%Qy!FIiBsss4rP!wnTXlg#d(NKZd&J)!ZD_ipYL>bV!A zd`$&U>F=0xbN9T;j4YFiO=lM@)4E-h+rN5NPuTY#;!EELJ!@*&(6ZC=Yy|T(|7#mA z+lZ}xR#T~^l+GjjuB~swhq{kxNB3@8Eb1?v+RiNj!u(GR~^1tTBh*kFY`m?z1{6Kmg%c@uKG0V`R$G^+_M&kapzsS!*SiZ;mN~( zm0NCga+^=={Tp2M?Ts1#c?Zj$S3Ax8B|HvoTJPuohHJ&uTD1+X>VL0nmM}TH#;*6= zkHlL?3iE!f{h88VYv!q(ByD(hooL|W3+L01-8VC|xLw`3KQ?2&`kgns@`E#3_d2>w z4l{aF+btvIX4B&-V{M-Lib+%#xi>eKq#8G*Z${bLUA-eS5J` zLefaJYDdk%9fqd*Dc0}fnr6HaX|>CL*D~?Ca=vSGb$Y>HGhto%%Q|McmT#Petc_&v z-`v0d(#DdrPU$h*+l$@9Zq+~gTlt?~uKZGmCTf_|JhKTkBXs_6`es7R)TKsmi8i&ek!KWkULlk3IPTlLr5#OqJIr0Z5?Uv=6A#i`b)+!zi zwQaMk-W-0Ma_dd4(vB^)(_!c6aOXi zqem>q;uDw6gSTmW)zx%5O3P2pTQ<|o!EpQX8{4xrL|?^69bdQWsuYjR{|&c;rpV~c zQdW0;bML|vp7+o0%C~Kjb}K81bNJ5Ux%a8W^4T0;CH4!dDN5IVUARyz=0kU6HIZ+lxnJDqJ9?2N`^kKFJ594h|6LpO@-A&$)NHk;Jl#)v z+E`}@C%+qLe~fw?W1|}6T80HFP|8yWp-rSxo1mHu}kQ!cw2BKWmeXz6N-Gl(w{Y5)sDIM z^wi}KX@OsYHr#wG{Yl!rtoPO9OMPLralKE1+Fx#Gxo>7__3K9E^Sotpm$Y|V{+csm z$(kLOnbNs!>YHpH%T}BUJv2=|ZRQUC{@NSg7Jq0u>Ysg~aNdazudh2SHeait`Fy5A zjbr0wm6`W^Si)2m_c?I>DT5aPPf!Ovc;}MdmhJ1yO+CVXHC6Q`mKul znh*Q^FIoHN8J#}3neC*{>Py_Qg1tWv$S(2tp}0P=F=;38|_*tLa>4 z;&p@h`3=9LEBAERzm)iRR=vS<#pc%nQuXh+R`Mj&Z$7?dQR%i1E)1Uz2_*el7U=$T zlH+;1fh@eF76^9cym80(F-g^Dl z-DT_I%9we(540-9UODyp+n?jYPd{$yzx2+GE&leI9V|v^2Ra&^Ot@YyzjU8#e}%S& zz{&betDLf&*#-Knb|$R<+VY?M@d`WJ@>e%x)_-Q6x!S5uzw2|Q-uo+UhDqDqF0QGW z`rS6jLiCn$v%K8ftMB&2iwG1yw#rZYxUT)+H2aC33Q`5={2V|Rph*%%pQ6<*6H!maOQKD<@8Rgc~5(# z<)*@y(_;8(y7nHQWp9$Dl6&*_T9>R=+&b@4-E#3Y_Pf2`mn^@2c#C0xX-?_y3r0Ji zd!4x1wyW-0LcVjaW3S=WUPEDjz0Aqe&)jE~zdSYZ&#U;GMSnu<&oq2^BmMtn`0Y>E zZfa`%yYb;sRIq1{^P7iLgwO2o-LXr_ydq?M@oAa;60%zgc4c)dBusoZYx%*OsttSe z*V$AF&FMY;OKW5C`QmFbE3HC4yY{xZCN1rf*yVCwb5?5o=PQ0aM-QC~dEFFzRnq25 z{f~x!@elsDG+6V!^->Ys6WbZL;6KwA53^I4BbT6&K-d5jQ6rb&^Ndi=PO?N9ximCG zj9h{aWV3f831x!w1TN2XcQBq0K@`e7#lPOP83S^EsGSInO1i!<&1%GO87US zNlPEzm|CO}*`=ZwV=Z_yb^QvRR^^v|=PbXMSl8eCeZBVX{qOVd|E`?({`t>6^PY20 z-L@t0+R@;1&21t^v63sBt}q#-ZQJG%%CNGj!C|3x9d&6HXl*(*#FGE9Und{tyv z#lf(0;nKcKLDw4`7&shtu%6MVnBetq=M}j>cjriUsQ;??H^+2gvZu=&y_pV7j7Q!pDxID1 zg8h+hXUQCEhvmN-tP>~n{J+UuoM+AV;MX@bvt?!*?8SCX-f~3fWJz@W`udf1>+dB# zi9aL5KlKH>g<^;Rhsx#&mH++}|64heQPTaO@X0gcjh7fUglJupKU5>-A%k4mL=)a{b)r|19XijrR*>os6mv9Fz|bZP@*{L4(2X5939K zJD>Gklo%|2vZr_j);W|i`2A&^8MH+{fVtsv`G@z5uUuaIgH=nJF*Ve*lws*AzKjKd z2mi;F&GPy3jnVfDqX<)@#iC`~gpd9VSg9~`-{+E<-oGZ_?Ksohv_QV2nTI!^z+GAI zPK`*YMAC%&pS71Ot(IH(X;)=s?ET<<9}c>N1v$=Mx&2Ya%)@DcyA1xzJfCyr=vwA2 zt4$rl=C;Y}SI4J+$v^*d*SV$aHg*p-Ov-y^|5|mk+&+a5PcEMJ@74(GzW4Flp_Jp% zzB9ega_^k>>DRW;cNSmL`Rcb%^y_|?j0`J@Wt08f-KU*gNcE$ga?aA50Hi=7i;mb{#SD(zj zt8U=;G2HiS!3@u4&WSf)f6|Xve_y}Cvi8x3nCGv{UrN6T4~;DjDEzxr*^KYQU024( zTz3nv?lJ$x&AU=~f9IvJ$8|q<-LDg}UOgvTanUuU=DD0-{kh|k{folxh)>uw@43#T zfO{WagopCCP0A{s$*dUlDYSBr2DefDop(`l)IRn7-z{|S(dJ^`om{<2ie-iyyx$4W zTI;wk>E!7X-1}w2e~TSrpWbw8;jXfD_A<`uf?5yW6?a9qCtdreqkF64t*wX~hpk}9 zyjRx+Ew{0nXKY&M$9u6Uel{cdbgc-IDeLe9N}1o932euruUB3=HPLc;t;V#(-m<5f#mQTDEAOb_H_h3;CuhD;{51V1XT%#-r$!xJ z#4mb3)#HDZ;@;&|CI6ED)~FRs6}wpblA+2&VbhDPeV;^E`K)VrDO|p7bxcmWs^vu{ zwP(gxuWnCBq}!&E z*c#ZR+rw%J^YJ=C`bq!y)d3tzl*9W^pNlyzm`#n`&9H=%qcmngK zFH^5+V&M{hhFX6WS6ciH_Q8=Sj}C(=UNBXT@_mRwyU?i zG_l`0^Lp?e=BNDg@7%RxtbXumA;Wu@)y?c{U9)N`A{ElFO4hA-C<^u1L>#xj>MhD2Y2BVuk-axbJhJn2 zg|q2}w|`IcPk9?0A0|JA@5{W*`&`jE)0gaIl8DeRm z?2x3Z;Eh-9d~;t$OweC{Blp-QkGi9`*uI9C@YLU)9~wGy!}$&FdDB#Hvub@Rs$ZHu z;dos9#`+oQ&T08ERx{rz?zkqeVf9w?gxY+AxW8%zu4`7rZ)Upn@kzm#&kLStSIzfm zw|gNcJ!Q|5H7XT0b@{%j(Ft>X`R^Icb%!$sdd4foB|Ng{f2E@F?xw*mj>MLC-gjmjeGwIVV{;_# z;)YLCviE6}?my`(vp`^H$fUJ;r78UtxtA4k_Pi-cKKk*1llaQ?o!3&%?^|6wH^^5v zJ?y>D9j?{q4*8jOOHVUBT=Ob+Y0d0aDt_M|A2F}o{@QZ0?U(SF7ki^F*(~8*J#&G# z;evZNP3Q7N*SW+W_B{OIrJpYI@haVz45qeSpMgPZ<2cI zzr-Y37Y0f`(@9p>OZv4_`jbxR?X(wM#_Hcv7kMT+t+XrGIVOE>@ssYVoLhfpu`K;` zcv9A~!j0$G6)xVo?aG14>+n`gp78*V|v&RIfe}nzHvm;)jE`FV#7O za5eq?6t>X3ETCvo>1$QqtbIaa>I+%hq&M8xOML8SchBt33m4zosXMxNZR}qjvd4%e z^ij*3GWW({1(zKRCp?=LhDFJEiJ#+fD(b1tKJQYyFRlG%*gK)!PbG90mrp;j^pV|5 znZ(TJ&9B z_Z%)&5PoHRzdtb{%d7RNi{Yl{`y)2~RGyc>x;Db8Z+3Tuxb4H;4w6!+K#=QRgbcBFFmxj`tMc{ zTYb^fN#VNVrA>?ePMI~uHYs+Cc3A6UZc6^R;&CIv3I9q-+hw! z`QUoizbY@QoKt6%93CYH_O%;CbG!%-44h`Jlv%Qc=YZzDzJu3a>Fvrnbiz`xp#OaI zci#Ii_9_&$O?Vj99)7ob>-_6qEc3e`TmNh73+JBGo4a1D@tAR;)_T*6E(61p zMu*e`?fefEe!V-lxSG9FHgDc>7H93(l2?6O(koLL&neFQ{IO$*IZ)RG)bB&? z6oTzSbse4qb#pWGN{bcr3sQ?R^HY*j^GZ^SQd1Q4b4zndG7EAl72pRQ<|dY8DCnnT zmSv`-g6PED{Ja#1U_nl4G1MF|1>!5{gN{tiNkwLZC1DZ>8z2f{CPR7oB`}4_`303l zB?|ia1*v&Sr8zmNB?|g5I<>Ggvn;W=GPj^4za%pme0*$XSz=CVUUI5}eo<;#PHIJQ zX;Lvr4~$okS_J0jq!t&a7M3RFD8SBDgz^fCQj=3tQel#5`8hfH-XDgCYgY%*!t-$w*BsE`cg9&M$@Wp>Bq{6|6cXDF?}#l%yPFn^KZ;5SAt7 zKn^~JX+yWNJQdYS2p<##`9&p}`FWu5Ehx&&O;ym(%uCD6%Pgr>&`-@t%>^Cxsh?k- z2Rh}qq$o2nFFhw!K_AA-%qvsS&r3~D1esBslUSUgpr4yqP+XF)pkJDoS(aK<3^F;j zBD1(8HLoNS#L3A|&rD9t$pfXG)ZBuSN^m>}r4=P6my{MM=zGFhIf*4DnaQao`32yl zUyz!Yl9^lziPxOef(!+HM+JQ+1$}1)eHR6NR|S1H1$}n~eGdhFPX&E11$}P?eIEsV zUj=h#3C6gWG-NI}1(v?#B*Br^wk8Zev-jjgnt{QM$FJc5}};pEiJoJ>$~ zrhzgMgaegIDoRX-8U|)Ug%k7ALEP-r5{PLCK2!nZ9OA^Hl%yPJ`U0hcGAKJGDF@0$ zIz_o0bcAz8K~a86X>y5zeot*1{O~Vo9>?UKF3LM_I9{mh6XU6;%GRK+6zn191qi361qmypxM+? zc!OABS4ajU-%}2MmyP9)*G}$F%v!Kxd(=XK#8YuU_f4^To$Teb@b7^IQw+1%E*+SE zNYR&XiC**HXMYs^R!n8yZO5}rA;rnaiLuevs{M4i$QN^tspbnCD;N%*P->J3UXdWr z=UKBr)NG%f@}8xRjgE%|cJmj%&1OqrImwcltni>d>HF0e%V+s^s+lBM&OiNpvChO= z`#Mkdm}jo1H0CHMH#8sMOfc!q6fA4L;l=PM&|!kb6^0dwvY&UT9Npl~AnmI(A=u=S zby(TliibH{CcHfQTX7$A_r)1JS_}TH-|(1yNBy?FKc4@8`_3=((OcP=#=WbBUo*ST zZP>h7;p6)w36mn0w%N^dIPm;)tjw?G2`e+DCi&byv~gzLnx`z*>>Q>6ZC9=bZQ7|B zIJ52j=gE8cLPTp0N`E_5@x^oR&7Tu4Es15Bry=-;^N&{3$=Y4(H>xb2BOIIiQhWC9 zTAA7;r(GWZW1s&kboVN;tW=zRo#WJw?W!_wtM2wqeE(*d{a4NSttQ#u+uXFb8~wU? zPCh5?digCCY4_@Sb2+rp>Mrid>+IaBm= z%G>bwKYp?lgxuTp^6ICbhYwqCe0RJfL@qiuSNw*~o`B1@cH9!GH;!7PAH6Pf^F0gG ztJ@xnd(KS*v^d~BY*8%$MVr&$(dV!lbk~ctL;5=cv1QMJ85rkifw;&;bo=m z!8u=C-X%GQz4(0R^3%iF{?Q8_i(R==ol~{7e8!7Y0dt%8?^;sro|$sYSZ?{t?UvzL ztHqw#MJ<*wNjl`u*?4KP$1aJ_b>=32oi6X)(ruV==X`rjaN7RAzd~0m-J_j8{YA#1 zr1npmll^vn$=SI+BKu(H=dE6|m1`=eS?}Di&pAHTLcc!KKzN4qe`j7Pmc>(K9WlPSMpobG;s3uyBxtE%csr= zSKK_0m3P;>M5}*c%_mHjrTSd(dDnmGR=$wC??$J45ojq&L?Ud!a zmJ}6k-7;;Tchm*jM=vVk^ZKJNdYymm_r7*f?4_u4SLfa>N&Tn7|L(TsR#j(ir$;68 zc5R=@nBu;dHC9kxaDDd_=H<<4suL|++n7CaTc0@IDcl>kaNk-(>-F|YQjbMf$HbfN zHdLwkyCCVW!tRN@rQCx#-9*)UXQx>nUF0L0{$=SOZq~cz8#9+q zb-lQ1vMw*H(4DhMJv(Bj>Gof~D>eJ#9IdSz?B+|~-*o6$#kBHAo%cWMrB39x*zv~k zUIx2b#WB~}-hqjaw!V8SntAtW>*GUhy0>|bto3F-n!n30FCs-Eb^q~2r57JJ2dceY zuCipshA6A6ORS%|%urZ-Zrkx=Dkl4aDhsFXJiY!-wAre2#+`R|pGi>J`#5T~$z!+A zd#c&4_w9bGG^uj${5UsvDW7IRj->9kn*WUlc|9}xOv~0M+n%mCa_ZNdliRHIqn7yV{QUpH@t^n)e~uF(0*fWR zIxk*4F@M4vuZ@@;d*tl~ZdfM$^dWVSf{}@lF{n`i-R4p;XKz&WgLBE49>ci zno{B@e!S4qT>Z7z)s;80=eJL`*d?)X6f|LuP-|Zaj;axY*v3-#JgbG)$jkJ z-W(V06Z+Avd{DqUL}iK7oaGmvl}&Xq|L}i#Uz1^9gw}(qBtx|>1;td6;#QWacD^3o zDqbuXxYkTiauTjD-&*xasGEb^r9dk7ZCFdtlqCw2RCnE4_fLH7dOf9ui%O?X{rWE8 zZk&suug8{sdl-(rX3Kl1zJAlQ3wA5?7TsUGI()VK`dxQL-IP=X)j5T-BK^Fjs<*72 zu|Tfl$jWI#>I=+|3HnjYs7P*(eDSGi& z`x_-Cqp1IpIa}+dFdd$DzI3W&+s(C!@%Cjb>py9=w zsTTQG>|eBrulmaMsX3{=hHhHEYmeNQKh^EAKYi+1v$IR)2?VwLsOqb2Qr!@$^r%O1 zX2kLrt*?&7?fG`+(Te2$Jzu-uPZMr9}2zU`BYZT}YQ zed5>W`zkjxW0&*KZ+T8K6P+GLgx#N@(`E3)XuZvjaD&QKpQcq6J_p&V?$IIcmM?Cs z#xh}}Yv#2i`U zOw^S9o0nbSlu^@3*JxcGEOafeFze8_C!0B~1%6rU8RfBJ>zkzMyIZqsr!QH! zK}A%fb(x_+*_}x`XD4+e+r^eN#ccSzR4^er<(X3UYOOD;wx>R9TCl47Sj;_t7SqeQ z6X#}xxbIc@IAd{d%i^_Fl`matisQ|9zSeyAQ2*vvmnoN6E{5nxUB0N(Y4*(6=vj2~ z;mpI5ANj1cV|^TaPr09c`FxGP^Tp*4S(Fr5yz~qwIIKD^D(o&>{lsxekA+mH-sxSM zQo`$f@2xtx=<7OXj%}9lE&=~c4}4sFXXl#$)4mU-VKe@HIhirz=eLFXX8*mEJo(;) z8@5(c7*~dxPn~$-+pc3FJJtpKSf~)}a;!|cy=f`u8q>%PLY*ST8$UQ-dlG!L(_jkE z>fkv-4QsL|sp$9>^t?1_+o<1Xc;;fljNhwvG&1>la;G24z04vqu{oFXdf|+V&|h)wW|@;^y0JhRMf!M51_-v$Rs8 zww!MdcI!AJxoCmYn~$7}yfj@5-)}SWO1-|-Uh~GB8#ivR^gFJhBrus<=y;!+!14aV z6@e`qCR&8Qzis7kDNO0kS<|;)*G6ke-G5|or$UuEV%_H4GLxvQ@20LP>2|%`=iDaY z^x&4ZaMfM6dk4k3a}&8P)!z4CTl0RdfZp~g(cE}nJu zamJM!yPt7eOmJGLd{Tkp*&dEW4Q zx6^qCBr=7l&DKb5Rc;3-m z#{YE3yxV&ovnkazK3?@_vFDXVMJr;KPsu*~uz~r9=hBJkTQ5{I8EkrTt#Arcl_xuLw{+)OC%C58DgWoAJG4gfWX#1*2JFZOnKWXL%U%^$+4|6+nxun@R#`Rn9_gR zC-~M);om1`G~G08y)HQ^MQc%sy^)~nl7kB{d z&Ewr?Afa$|;{}cR-zs*PZBD$In49~fYMZQe_0kDauezgi&1Ea!pMSbld86LR{Qlo% zZ`vkGCEVS7)^2rn`S)#SR{frC_oPgHbHJJmqj_uC-^bl5DalvyKC=F^tk3?Z%O*dT zE-wuCKeAHJ?n}ESSMr*G=b6K5F%Ts>`7MRTEof7j( zRBAoPUrlA#Pci2$L5bmw=p?7ts^1=S&V4O9qw=`h2d?RlFCV@8M8c-;)#JNg_ubeL z%sNNm*vF0~JMEt(gru)k@4pi|w|rsY-1q$RZ%Io$m9s7E|8MfpcsiepipIfore%8a zHhG&l9a%~qy}R9c?agaFKZg93>{s>{sXlrg==kvYXFItrA*G}NY> zfr6s~Tc#KvzHQWPo0nLj&3Rd+RaUWF^5w;-i&xIaaMu0%^72~Ayx8!x!~TK{6K^ng zzMG-j<@a^v1cl^_2d|yGa62h3&P}DH_@}`qtF-P2R9hO{zMPq}{Y+AS^o-9!Rr@Yj2dOOi{kn&@p?$V<>HX(>6#|4zf>(Y1|M@ZV z70!lqs|lSp!ThJSzs+csJj~hD#hUMYUSM(Ehugolcl%BD>?v+i6LOO%%KK#PTa~tX zmIvdB2`sZ>z8yc1tMhVyzCpt`?e8zvA6H&-eeUXQ{N=*OGWK@4zbNdGil5Z?_ShWx zUmGsOe-V6e=5zUzpE05T_NZT4vUUOgeyIqTai_1wJl^{h; z>wn+>KHIhV^v$c6Vz#&nNZdO8;mpk9eZ_Nc{wX>rCh~t{>qM7JX^F4eGS-S+=NB(2 zY_G5PQ(kh#MXUMsq0?T4URi6!L){+k-Y%{m-<@`Gf?M~|+qb#ZG%ot?HJBxsES8_I z_iyWtKc8CvZjFkOv$I`icDg-u&+)UntMB~XQ}O%n(fRk5?X)<| z#{KNdc<7FunT)=c$`I{r%V6M$?5I z3$oO%F>NforlRV#LNELJ?X&Gy-)(675x4iD=Yf2_)ptK_xVx9(>*@S`zfN)e>HhJF z|6|i5Cj(dU>H6_%p?`kuxVxVJ^;NT9tbM*FZ zyVCYmYa_$5Wg2B-_a-GBujuZ2`(ax4x6;)&_vcUB?Z1A$ncwE?Vg8F>m5NW^%Dvch z72mC^jT2Xk$G0_mC+&efD43?rMuRj^J5WvKGFc<+1Xdv&Vwa)FXX! zS3YaG#(g)y>7z}8dB>abzpDTKeGi{`?gJl($a4L23T!6EYjrP5#mrjy(cNzQmQ}BG zc=ww|eS7e0M|6FJTv&XoV~^0vo5ls&or(r*A2o~D$=IybQVtVnQEW2w(GX;G@fV8c zpS5Xo7h`o8Tb-+);jKvw3?6zvoDN%OMx3q`;yALZ=hj9JDaP2Fl9mtG@cp@WYpZeU zvfmr0uNUMMy1J^-Vd*>1hkCtdEhj8lse8We%=Jv4xf7EmS{#}-IL|urWcF<(TNbs8 zmws<7^*Ubi@ONeIr5j)Od2Bc~NB7|JTE%Tfhdp^2GFLr3bG|2jV#L%y>ub_I(*v!O zeOr2j_C?;+oBxh~>DI1USN6odez=!;S(aH&ju&t}Z{I?X?~bkHw2;}FbV8zCU8zcKAM@J4 zZKm#R?d7rC8kc-c{IA8P`lPsFvpHw`%hlqFN3~y0yxJ6SM!M8x(P#4wMy|i_{a+uO z{5kWM`|8^2-M=>V)D+yEk$G&{nln#|cQ}PCE0}lLX0f7(-iwSzo&t5vy=k4A+NB@D%dU0)>!C(a$b380@omjE<3;<#gZCEfzNV-@M~=Vp zp_qic(Z*+@Q?oi4>(VB=s+ehUuM=H(=SzxVic^e$TGa7>IW-avtygADP7nLE;cvi% zHimpIiP^4F6K||AX<6v_Z>PyR`#n-gfkw?M?D^XpuW2-2%35$duE=QprK{!_Ke0M( z%=_i}w_~!%tc+`gic?+q%pdUnJ$vhJkG0zjncN%2KhjS)G@fW}l6&>*Ojw{wSn3t7 znI+9lr_XVSN7}R33rtyCu&nY;BL6DRJD~@on`4*$I(n;NdzuD=(e(dmI{l4Vic3@W z+)h|$zPfs~b&9ar9-aJY@8{U%nxC@&bGlue`$J)8s|wE!@fo`9&MSmf9cp&oxpTyu zzn}42W6G7{&mZ@Hc{^|RTjx3dZfBo=T>7ANKHL7(yH zuq1`Ly|pk1@UplR$I8E`Bxh-iKL6_7Z{Gz6+H zbe!7cJKg>lPQPkryM0?1??a6I>k0s7kEy(*35VKYGv{~TZyYKAu%FS7yH@Frm zKNk#DG1JmISnIw_dzIk#)+v!5#=`B5H!RxOo-Q%8>`&fo-&o=-%N>B ze0Nqq>`+x%S!sK)&Qi!EN?+tgO1in1%*s_uOXu(^UluM{r?H)9uE@GIUQa|WzkPbp z&*t#AS=;ZJ_4_XsGZrep`5{t8IJ39YEy$JUx$Vs!m6-(>PhI;_{6RdU_tWwN)7O5m z{xer>LEJvKo99*TG<`dn+?>O5jX$4FxmWdX{|%)SjB=AIcCd^emTO&qcTOS>=|1^M$*!W=*_s z$#mlFb#u4Bi=TJxW4NA<{g+vb52eNZp0q(*?ZA|~oDX=y&NDsS{(i3F0p{C>ZrwVu z{P?wnQc7jjKg^!U{Qi1Z&Fa8ZZNoPc z7ue^?GtbZ4v(4Y^_u+Rhckv$0+>qb1BQUb+aT=%5@2j@8cXldm>Z-ohT3Vd@`^H-5 z9ea2ENyc78?d*O$0`Q4RKk=_Q*_u4k! z7MkwREMz;Mv%6I6Y5J`wv4f|c?%zE%w5ncu{W8bp*Alw?+xb-PnXHvzubR8$9Mkuz zjHQ2He29;InPJ74edg92zFjLEluEdz@(X=xZD;9CPK@w4{T_KkHL-p!vVeIump zciJ3Zmfa>b3~yE@KX=ZR|Flp)32V&o#mPM{btv{KU0_$=0!{m)ZVi8 z?a3hP#U;1R7w_J6@1*$WG>f<&_alGsZE?FPc1O1ORZ;AnE3rRkeEKrym6`f+q;(!Yo(;LE3v&{n>jDT;_j0C|8i#7^3l~pr8+AzES*_{+~P@Cy^ALFK}XU=8ZDZIsbJo-W2D;?7pTTSN% zeDXPZ&%R~eY=7A~H;O{y1J(92gzF_;(K@E>t}{36)A#Ms>o@#fYkv6Lx<#Rl>ID`1 zZH~MyeUwwV|GwHfqieT2?=KYy$znG4-S}tUYzsxJNy%&5&$G1zxcp+S`K!+?v0^7P z>r#KNLnn7#VrTVj)(VM!Kf%MA<;n6N5@CmUy)RdrEffkqpnh5JsZ`?DuH-(ovwIEJ zbRJGFeg5Zpw=1vywrKgH^T&93|1v#|zFqNgN?gzT6-NV^eQS?R5HPRmN-c7UbbWj3 zXv1ggh4lg%p}HF%voSGk6I`UeFk`yi6W)2R6Q}I9S$X@cwUg6xw$ni|B}!btKwyKQ}6TIZI3r?G3VRs zVaJ(&VZXzgt?4%BY?Ng^LUq?N-D)_oOMSBNfn~FUu2)JP6}|>D@c;Em1vF`mBbp_-0_0`i{3xlub2Pigws;y?wC! zqq29L*IP!fS(%YsrwkNLYLp(FIseb=u<&Z5tfTpoZxVI--o$RMikh}))8R?(kzIy& zb&lRUuJd%o2V=eSnUqVnh658JPW#s0l4=6_+~%!;@v3*|D@ zWWS{a2_MdVy-%%Y?(exS3ZQCS-S#chp`BhBwiJBOh^zX(XRm+cw_8iEy^Gb@ zd9D2Qg}Xkx9nB8yELz#zQhI(etFuSrBIQ|Erg2?+`uwY0f$(}ew%Z?PJ14JL&uCtI zXxj~z8}`AA-g6)14qca0)0lOww%wTVq|l@(UF8ST*Y@ejT!uU^yfKII+9 zg%1lQ_dnOMpClb?-_DTZy-~a2V60DGa7X6-{V&?CD0JIAy7Tz#w1BA^qULK>ChS#} z*?FjV>*5UF?ttRV<53J-Z_fC8bIG2c|L>p6Xg;9pRhi0s*-_x(wU$L~bzQX+%Bp|l z-^T|p9<;c}?*rdGSpPSjWU{?Ecz7?lT`GUt+sHtH7*u<9X#g zv2*p!erLWdT6#sfWAlB(V2+#G4|jj{wNTx_rOUYgu+*fpdf(W*^pIEcX!Aj4nnTm`=N%7B8qRHA@xOM9o2buut~m^wXukSpMp;_2xdfmVUo*>S$pR&dUyrixf}oB5&w_>`EyyG3l%PWQ2Z!OQ^RfQ z6j#a2AFt0IUA;XtaB`YTBr zw%_7^Hfi^M^XV(Ey<^?>Y~RrX4LuRl8Gj-~9Ev zqt(ynP73H^NmuX;;7!}9!M>-b@zCLOHm7DBm6^iK^7-nc3*YrhIvOB28kG0rGKrOv!b@;SW?c)Xg{=27^$^FsYaW%GO&!1K`TdtWN0Y_IkhUJ^v zd4^X%-lw;czdHI%{B9k8bLSVXA+2dYvR^$F6>9p@oSAiE+K)3GQUdee^8S9{QjpCi zYoPE;x7Fjgh60x;M=F2o@f{|1%0Y@5D?a3L9hK<1aA*@>^B%+c%WvhM^=YK^CcfGb z@{Z$#(`@T4K@+UGHg@gGU;Hh9%G8NwldWw}w1g)}Hit7M1(u#np6!3VRrgVXX*xLeEJFzFEGABGPxG{f{rn^ML#0Pdr- z`OELh+IBNAQ()cEytA|4-d%ipW`7yW*WYh%c^qv2Zgzd2+Lil}7n^xk|Gs9k<*vk{ zDPNx_Z~k_kZEI)E5>ZE{$(4864zVo`J0;~N5PvIo%_gHu(_WYfC^O}Uun3xU8#ov! zKHp<{Up<#CWX9Qz5eyz|GfTy~_ikEqlu27fLHl`hOwq9g{5+Ben|(Jn_x@e}cGpX( z+Y@wh);!63-eRBsy}qQ^?CzIaYfm4Uyw|2#wd1FbV^O1u_qHYJ8(KVWt9Va{QS@qm zw{P#By}vF?EK~k7$;qCjXxf7>EO89$-+lZm_UW|zYZy1?r~7y`~sc5XE>aE$_^NFvDL{RiZ3y~l6%U> zxkjVpPGqZl;> zMLO=b@^9|h;%nx?xbBIpHy7_Gt2J4?*Y_JQahLu(cmJ2A(HwuW_gmG~{@$^F^W(#D zcb-(O3HWd;O7GpqiSt&^{@mdnXAL#iTgZVgvkee#=DqfV&t zZS4TI6VVG7@ZQ+Bf63mc)YK)pcj6f5sEO1HZ(gd=F#VeGEp43@i$ona?G17{QQ1?v zYtuF(4)w<=3E7)=hOJnY8d3f3uH3b2Z$oqcKkxW=t9{?sHF~buj?#R$()JXrn(3UY zxv0qQsX^*0uX)E;#zkIR9aHe(&jyc8XC!Wzy^!7ZTz$`)$b9RU2~LMfei+rio%bSV z*Tx{T?VEe8qblm2Xx+a!rz4yF?BBzASIzR@m94&fviyF=VYm4A7JGLV-Q9mPw%)wZ z_RYHo`3ipxiX&P17K$FqdMI@o6my-i86UVW=3n{!_G-qmpD+Ckk2Kaat8(44C=hZ~ zdE&YEg3$6cJzIKpS1$PJxR-wMO0_l}CTh++dkn znZx6p*TrbYabWqg8+ivC^A}}EHl<2lefZ<>>+83k>i;=w|C>LeTu-T>@aL;g@g9Bt z_RD6=qT2tS%V(O(vPYsU=INyqpQNspRV1D(pV+&_*KJz%H7So;wN1|tK2x53^qJD_ z<6`b+TAqj7d{b;y&$V5znIRj?u*k)B#ci3(&z$_{RvBLI`{HAmtN)2-*<44-8Q%n) znlisDN-R5@DEM+lS$_Z3JFAv^mh+mFUMtj|`ao$_?uC$whlQ)d!`yBOEs;LJX}IAV z=cQQpBl_;UEbEi}nWYwd{35yL>#0rGjQCzIZQJO(DM8>!;(8^24&OK*K_>-)hcX*n zrDIQ&-8c9e#kq&MeW{nl6|Z-^4J(6q-SfN30wRtdUh%N)w@!+zU%2FyUQc#ro_6Z?GYth7b;qNz=O1nGIna~-vP{MJ=CwH<``7*y zo?r2MkLPxay|RYBw=RE50S>mD@u=whQw##4jio=7e>YBuUQCD>ABqy1YVh}R<^gGC`C)Z>bG zx$0a{$>{Ns%i@N>t!2?$LRJXf$z9zQ7_?N(X5qvgyZ^nhn9k0`<1O}T`%=f{X-3>@ zjucNy5K5ZD-28ockOJF;(+tJmHhh_$63fPtds$LIS^CU^5;>XKzQs9r5~n^q%l~bq z_}(A#e|Cnc{rk1N?6hQYfU#t~_QyFt{GECp*;mwS{WENc`LpqEyiM?*=4~&396w>U zeY*an-$onOusBu7mH0)<#jW3Y1BB_`+07r4yt}E*i!! zYm&ZdxliV#58Lrho5gFN3Y665vM64>@k=6Zi~P2K$CH-EWnMe{&~UlM*Ykzb^bYU3 z^=69ibhXFNo-gvBk`{SR(|3{i&T|2?9M7kGnR}w?(i}GFsm}yFSD91?oH7cZ)uO0% zE^L-j5ox-R=VB{Fjv|LH$fDF-J?POOs7)8zl)o;GpYNo8ZD z#!VX(`716*N0cx3cIJMV_2|0M_tpQ^&WUmyZIIaHke?RfZ83R(kM*lsazJ}CpzT=bX~L$U^K@a&;E>9KR0VxVd*3lH zFTbQ%AzH!I6x3V?&D$ZS`b4J=MJcI8 z3enI*gk!nD8%MbGoxwte3WgAuC4(mQj4Vy{EDS(LP?+nPTNo-B8=C1ESePpqnOf+X z8G+{>gG-Z2z`pd!%**D|cLYx`Lj3Ir-XOsR+IJEfm9HWRD+zCPgj$#*>w6Cb(y zY-Zi&5S=40mSJAI>bc{_r!Fg!mv6e``Rn!f4_aP}Ox{^Y@Hln4w?9AjKIYGJCUwa_ zhdUQ^q!|gey3E;}@_EaNN$fxVPhP%Yit;IzHOjMB-uCTuXzejNAmn-I_x=7K9$la2 zsIGh}EErw_kO zn_A=Zt}gCR!F5gtPN4-c$E!>BC`-W(A4$s=YP93Q(h@WUi4nF$6daV*0fM&n%`Cb(%%wWITSgb%f=oNnIf)n{aHP8v_;zHV+)kn z&3R?^b+6Q%Fy#n$ynKnqm6fW##i^B|cO;Zg&M2;qeaHLozFOOA-9Kj!a-IGrVJgIu z;I`9VUCXOc;_$pBHaUyuJn(wfbY|x46p6qIt{0dDo7VH#p4Q>r(VMLQn88uRZ_0`T zIRdqYv6{{n9D3>B>+>SQ6nd-=?>oY0d@GX6#B2t0P;YbKgwBT#B>wMu?=Duvkl~pl z5$b>b_olU9YEw>rD%-5@ul_yd{hEWz9y~e})}L3=y*Y7%U$RIW&jj%WmTaOKg|SO4 z(lQU^rm&wecoZ@B#DpbJP8V?9TV!*3?Yuj8TR!z`EmAt^kmS(Bv#)V>-Q2Eekx~WH zt34!`CNv2bt8mvfinBQOJTe!$Xf#_q(7{fmLSfP8L${>wv_{-r7k=OGo^+hRl)}o= zzXBg-YAMK^6b}(F4k}YU642todr|zLh+xo7kL&zVeZ5EZ_8wjC&DmGL;4^=vs><1i zZ+HR^uG3c&*=+JaY^9omg(LedxA!Xz|F&ydNQsK}lzqJ%6FBj4(!LcFItqT8nH8Q% z%XLz`ck_UfaA(X_Rlje!q9MW)d>Fs}I95V)IhH+>VGF*UdT8Y-hoZae zXF}Oj+M{$I1~?h&tmjcatj#;4cX5ZqTDI+B4D1W`ZqQkfA1YR|ZH5l_t}5J;yOSsWYgyY?jB*pFJ;c-sio7pRd+#eY;Y^?u}Y`)z8!0j`9aTn)P?v zad%7Zl_3neTuYd~zf@Pg{c#WfQD0BNjGdOZ%#YVz{bAgnca=N$|HXY-t?yc4v#V-aY*2ki z`KbnFS*_ixjE}NTiJ!!0vrKsD`XKAuf6O=ZM9z7&fA!2`C@yfkBcdqBZz3QO4@W1W$hvHMVl@P$7ZhZ?|D|*#pNaJAa~-V_`$C+N#ubrB6_n!C-G=z{X4Wax}a zw$>lh>x!1y>?oS{Y*nRvTAO5WeeC{v`wH%z_ilfPonCAd{PX*+t&+zKXUD&)(-3@p z?&THFrLX1xuF^8^uiLwR-YVw_KbAG6ni-WW@NI3M`t@h&+dSu*eQrjaJEo{xnw*={ zk==f_4OHwbm%BR0v3-KGvR_TJskQCFU*+qz3xW!siOfo3NeW5k@!bd3pX_J+WB2~N zV9!F^2UjIHE?h6aoBFS5+uUyL_TIVst@1Aa6KXj6r>Szq_v^DeUi>vxU-UWL|Hy&( z`DaCMRhuQoym$O-xgmFzQJQ>uz_E!3t{>Z+I*sj)lHQaF53hE%y1jASnqE@!BJI=C z>)Q`sjjJj-dtiEVc7Dx-S)r?T>!lyFHvSMWcaHGs9=~&Sm%@&_9ox3^v~gcV*~j;f z7C+PbQMYPmu}WFebFT*OP5b2?ZwMtY9rLtbyrNDw>(IPQE(Lc`*7H_(EnWeebc)98MsshC;ORm>$-27R^{f6DO zyByyBVqx=VzSdmSD|Jbd?fbWmcP!eI=d-pmC_dCWd{;@QS=-ll!m8e92leWB4_ysh z&iFIK%KSlw&zA_(i9D0FJ(_1NFaPzR%VO3}#h@){Ma3lwrqIP;KA;`i z=AagA5NK6dX5^X z6=7zOF>ORc4y+Ail14~kQckKuewqTTEvpG@?12pgsj;yEw;|p0L-M)wT@*A*Kw5P3 z({z)e>)!MX!0kk+E5Vk*^g&$-8k-IRwNA~To`bfdVXh1)N-cwj0>sJSRyvaB%|K>= zjMczwvMLl;=H(X@XBHzI53&cO8pH9h_O33hy{ik;jOGoH17IdVy#ehdI4YQd+N79) z4fY1u|L~B9L<3UDgUkRKi_IHFpd$;4z`Ng(yaKWdq=N{rARB<@9gss{ra-*|N>1Qd zF^8riY_Vbn3I~{X%pr*k$vYr3K*nP8PHuimY7W99U|T?HiSP(SE2p|K;CTX}rdUWtC05%3BgYHgP{|+VBnj@z&m(=2tVg++Z zupuHFEC4gnJ2M5;n>Gg}fFP7Lr(hwNGSJO3Aaxop`N_J$C5c5PnhF-+^d z1vpv31@sIw6~MRX1Sx0~B&Mh88EPt6fI=O{H_}wF0EHloZ>*_c0SX5g-$YZv0vw16 z8qi|`w7_P7{1}8J1~LciNhC3lSr9)V^qOcYSVG+lH_ud4!4m3hxR{xyf+aXbVksmw z6)d4%z*c@LSVH{+mIOK066zs%X@@AVAelo`!4m36oJv3eX$kc-7Db5Esi|NI4F|l+ zz~(^%2a7`F(nnLl5WIsvNCA|u{b6$v%odPqkQY#c(<&@6yC_5}K#bOph>TJ&H_VC9-A^AJt-W3rjsSGgB-UgHj^0 zUK2>tKz225&7f3^tQkE2POQzK^o*hz

5xgVH&&W=t=e8d&NXnPBlT$bY12h32AUCN3LG5XhNNt!`L2269XfpdG`aMhK}Q~e%=SqPNsUk_&n(GM$fztxEhjC?r)X1O()lrxuwggc;~r>X~SA>3gSE zmgg6x6eH}(%+GU4EJ;<+aIrEnFfcJNH#9M@Ff=egY4cSSrKWKiC>R=;aT&mYf|;qQ zv8h6u0z%AE0W7PK2NyE}?MDI$B8eFrnqa6iH8jEyGdDEE5VHi;|ET5}8dzf3YiI;& z@}Q|R0W}TL#LPg|Hkz0PsI!SGW@KPufbJF}BhX>#XzGkXtuZt)Q&VFMy=I^S4o#f} zD9@sb8C!ySv#4Sw2B3l!P0ZK;BMi*V%uUhlHMcOvaEpZ@=)y!)^DIn2Z88)wLsN55 z*9lF`5_C{Ks+gG(sELgxW(GPj2}R7v!qf;o9T-`dftvHE>MSkH%+UN{Y+z_%fgxsQ zg6>}vLrV<3CPs!B_L>-BrWX?gmP0Wozoj{Nvl9&lb7?_xw8ltBc6LWJ6 zdrb{2K;0=6^Gpp5KzEU%iWym$nxpyG)Yt$t@Pew&*vJAyorxtz9yB$_bhD|ssR?>G zn_@{rW`?GQ=<3W2&5Y6WubH7aXkR3X`^-#CF~ZNx#M}Vg&1NQ+puLNzdQA;L`y5fl z%#A=@O*AoM(6UN2F%u&UH=CP)24K+CnHr*}D>HL5P{EI;&I}{3nwgs$V)(<{!T>#u zo0(gHTK8z?Sz@FOGYbQZ^3Tk|05o5Ws@KBM5IygkSr{2$_}9V+(_RZ>BaC>nFvci5 z%`8l?s53Fc2rCOyO#fP#g3b~}b+e@rXkZad%-9G$&zM;ngStj&>P$e}V9~@(4KVy+ zX^K&Hnpv7*hO?y^MtNmsX^v4|nORzZdW&fGT7bqW(Zno4dvnpnK*J0uV&(=082QcI zzz`$e%nb}N$}n>SBO~;*W^Q1FQ6`!j7-Qr?a|08MvdP@Q1Tz#KF}2(zQ4C^0i9wTKHm=9F2L3T|BJ2j%CND1iDaL0tNtd1?8e fTY5o@FhIk*#h@`Ea7)D8(7@1)OI6j?-;E0Zm93q7 diff --git a/doc/transform_iterator.rst b/doc/transform_iterator.rst deleted file mode 100644 index 362db85..0000000 --- a/doc/transform_iterator.rst +++ /dev/null @@ -1,28 +0,0 @@ -++++++++++++++++++++ - 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. All rights reserved - -.. _`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 4d40536..0000000 --- a/doc/transform_iterator_abstract.rst +++ /dev/null @@ -1,3 +0,0 @@ -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 a6629ca..0000000 --- a/doc/transform_iterator_eg.rst +++ /dev/null @@ -1,42 +0,0 @@ -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.diff b/doc/transform_iterator_ref.diff deleted file mode 100644 index 0f2d704..0000000 --- a/doc/transform_iterator_ref.diff +++ /dev/null @@ -1,202 +0,0 @@ -Index: transform_iterator_ref.rst -=================================================================== -RCS file: /cvsroot/boost/boost/libs/iterator/doc/transform_iterator_ref.rst,v -retrieving revision 1.3 -retrieving revision 1.15 -diff -w -d -u -b -r1.3 -r1.15 ---- transform_iterator_ref.rst 21 Sep 2003 11:13:46 -0000 1.3 -+++ transform_iterator_ref.rst 15 Jan 2004 00:06:57 -0000 1.15 -@@ -1,3 +1,5 @@ -+.. Version 1.3 of this document was accepted for TR1 -+ - :: - - template - class transform_iterator - -Issue 9.37x - -- : public iterator_adaptor - { -- friend class iterator_core_access; - 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); - - -Issue 9.43x - -- template -+ template - transform_iterator( -- transform_iterator const& t -- , typename enable_if_convertible::type* = 0 // exposition -+ transform_iterator const& t -+ , typename enable_if_convertible::type* = 0 // exposition only -+ , typename enable_if_convertible::type* = 0 // exposition only - ); -- - -Issues 9.37x and 9.12 - -+ Iterator const& base() const; -+ reference operator*() const; -+ transform_iterator& operator++(); -+ transform_iterator& operator--(); - private: -- typename transform_iterator::value_type dereference() const; -- UnaryFunction m_f; -+ Iterator m_iterator; // exposition only -+ UnaryFunction m_f; // exposition only - }; - - -Issue 9.41x - -+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``. -+ -+ - -Issue 9.37x - -+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 - ................................... - -@@ -34,27 +65,55 @@ - where the type of ``f(*i)`` must be - ``result_of::reference)>::type``. - - -Issue 9.37x - --The type ``Iterator`` must at least model Readable Iterator. The --resulting ``transform_iterator`` models the most refined of the -+The argument ``Iterator`` shall model Readable Iterator. -+ -+ -+``transform_iterator`` models -+............................. -+ -+The resulting ``transform_iterator`` models the most refined of the - following options that is also modeled by ``Iterator``. - -- * Writable Lvalue Iterator if ``result_of::reference)>::type`` is a non-const reference. -+ * Writable Lvalue Iterator if ``transform_iterator::reference`` is a non-const reference. - -- * Readable Lvalue Iterator if ``result_of::reference)>::type`` is a 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 ``Iterator``. -+concept that is modeled by the ``Iterator`` argument. - -Issue 9.41x - --The ``reference`` type of ``transform_iterator`` is --``result_of::reference)>::type``. --The ``value_type`` is ``remove_cv >::type``. - -Issue 9.37x. - -+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. - --``transform_iterator`` public operations --........................................ -++-----------------------------------+---------------------------------+ -+| If ``Iterator`` models | then ``filter_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();`` -@@ -80,14 +139,30 @@ - :Returns: An instance of ``transform_iterator`` that is a copy of ``t``. - :Requires: ``OtherIterator`` is implicitly convertible to ``Iterator``. - -+ -+``Iterator const& base() const;`` -+ -+:Returns: ``m_iterator`` -+ -+ - ``UnaryFunction functor() const;`` - - :Returns: ``m_f`` - --``transform_iterator`` private operations --......................................... - --``typename transform_iterator::value_type dereference() const;`` -+``reference operator*() const;`` - --:Returns: ``m_f(transform_iterator::dereference());`` -+: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/transform_iterator_ref.rst b/doc/transform_iterator_ref.rst deleted file mode 100644 index 58f6f26..0000000 --- a/doc/transform_iterator_ref.rst +++ /dev/null @@ -1,171 +0,0 @@ -.. 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-01-27
Copyright:Copyright David Abrahams and Thomas Becker 2003. All rights reserved
- --- - - - -
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>()
-  );
-
-

The source code for these examples can be found here.

-
-
- - - - diff --git a/doc/zip_iterator.pdf b/doc/zip_iterator.pdf deleted file mode 100755 index 424815d3144ae81b84f1afa60cb723ebc2bb42a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70909 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

?PkNkPwsNa=9^d4q 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::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() - ); - - -The source code for these examples can be found `here`__. - -__ ../example/zip_iterator_examples.cpp diff --git a/doc/zip_iterator_ref.rst b/doc/zip_iterator_ref.rst deleted file mode 100755 index 340fdc8..0000000 --- a/doc/zip_iterator_ref.rst +++ /dev/null @@ -1,152 +0,0 @@ - -:: - - 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/Jamfile b/example/Jamfile deleted file mode 100644 index cb49f1a..0000000 --- a/example/Jamfile +++ /dev/null @@ -1,20 +0,0 @@ -subproject libs/iterator/example ; - -import testing ; - -# Make tests run by default. -DEPENDS all : test ; - -test-suite iterator_examples - : [ run reverse_iterator.cpp ] - [ run node_iterator1.cpp ] - [ run node_iterator2.cpp ] - [ run node_iterator3.cpp ] - [ run counting_iterator_example.cpp ] - [ run filter_iterator_example.cpp ] - [ run function_output_iterator_example.cpp ] - [ run indirect_iterator_example.cpp ] - [ run permutation_iterator_example.cpp ] - [ run reverse_iterator_example.cpp ] - [ run transform_iterator_example.cpp ] - ; 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/function_output_iterator_example.cpp b/example/function_output_iterator_example.cpp deleted file mode 100644 index 9c06319..0000000 --- a/example/function_output_iterator_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_iterator_example.cpp b/example/permutation_iterator_example.cpp deleted file mode 100644 index 7e8ec57..0000000 --- a/example/permutation_iterator_example.cpp +++ /dev/null @@ -1,62 +0,0 @@ -#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 522cb9f..0000000 --- a/example/reverse_iterator.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#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/iterator.hpp b/include/boost/iterator.hpp deleted file mode 100644 index d3844e7..0000000 --- a/include/boost/iterator.hpp +++ /dev/null @@ -1,59 +0,0 @@ -// interator.hpp workarounds for non-conforming standard libraries ---------// - -// (C) Copyright Beman Dawes 2000. 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/libs/utility for documentation. - -// Revision History -// 12 Jan 01 added for std::ptrdiff_t (Jens Maurer) -// 28 Jun 00 Workarounds to deal with known MSVC bugs (David Abrahams) -// 26 Jun 00 Initial version (Jeremy Siek) - -#ifndef BOOST_ITERATOR_HPP -#define BOOST_ITERATOR_HPP - -#include -#include // std::ptrdiff_t -#include - -namespace boost -{ -# if defined(BOOST_NO_STD_ITERATOR) && !defined(BOOST_MSVC_STD_ITERATOR) - template - struct iterator - { - typedef T value_type; - typedef Distance difference_type; - typedef Pointer pointer; - typedef Reference reference; - typedef Category iterator_category; - }; -# else - - // declare iterator_base in namespace detail to work around MSVC bugs which - // prevent derivation from an identically-named class in a different namespace. - namespace detail { - template -# if !defined(BOOST_MSVC_STD_ITERATOR) - struct iterator_base : std::iterator {}; -# else - struct iterator_base : std::iterator - { - typedef Reference reference; - typedef Pointer pointer; - typedef Distance difference_type; - }; -# endif - } - - template - struct iterator : detail::iterator_base {}; -# endif -} // namespace boost - -#endif // BOOST_ITERATOR_HPP diff --git a/include/boost/iterator/counting_iterator.hpp b/include/boost/iterator/counting_iterator.hpp deleted file mode 100644 index 7b772ed..0000000 --- a/include/boost/iterator/counting_iterator.hpp +++ /dev/null @@ -1,215 +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 COUNTING_ITERATOR_DWA200348_HPP -# define COUNTING_ITERATOR_DWA200348_HPP - -# include -# include -# include -# include -# include -# include - -namespace boost { - -template < - class Incrementable - , class CategoryOrTraversal - , class Difference -> -class counting_iterator; - -namespace detail -{ - // Try to detect numeric types at compile time in ways compatible - // with the limitations of the compiler and library. - template - struct is_numeric_impl - { - // For a while, this wasn't true, but we rely on it below. This is a regression assert. - BOOST_STATIC_ASSERT(::boost::is_integral::value); - -# ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS - - BOOST_STATIC_CONSTANT(bool, value = std::numeric_limits::is_specialized); - -# else - -# if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) - BOOST_STATIC_CONSTANT( - bool, value = ( - boost::is_convertible::value - && boost::is_convertible::value - )); -# else - BOOST_STATIC_CONSTANT(bool, value = ::boost::is_arithmetic::value); -# endif - -# endif - }; - - template - struct is_numeric - : mpl::bool_<(::boost::detail::is_numeric_impl::value)> - {}; - -# if defined(BOOST_HAS_LONG_LONG) - template <> - struct is_numeric< ::boost::long_long_type> - : mpl::true_ {}; - - template <> - struct is_numeric< ::boost::ulong_long_type> - : mpl::true_ {}; -# endif - - // Some compilers fail to have a numeric_limits specialization - template <> - struct is_numeric - : mpl::true_ {}; - - template - struct numeric_difference - { - typedef typename boost::detail::numeric_traits::difference_type type; - }; - - BOOST_STATIC_ASSERT(is_numeric::value); - - template - struct counting_iterator_base - { - typedef typename detail::ia_dflt_help< - CategoryOrTraversal - , mpl::eval_if< - is_numeric - , mpl::identity - , iterator_traversal - > - >::type traversal; - - typedef typename detail::ia_dflt_help< - Difference - , mpl::eval_if< - is_numeric - , numeric_difference - , iterator_difference - > - >::type difference; - - typedef iterator_adaptor< - counting_iterator // self - , Incrementable // Base - , Incrementable // Value -# ifndef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY - const // MSVC won't strip this. Instead we enable Thomas' - // criterion (see boost/iterator/detail/facade_iterator_category.hpp) -# endif - , traversal - , Incrementable const& // reference - , difference - > type; - }; - - // Template class distance_policy_select -- choose a policy for computing the - // distance between counting_iterators at compile-time based on whether or not - // the iterator wraps an integer or an iterator, using "poor man's partial - // specialization". - - template struct distance_policy_select; - - // A policy for wrapped iterators - template - struct iterator_distance - { - static Difference distance(Incrementable1 x, Incrementable2 y) - { - return y - x; - } - }; - - // A policy for wrapped numbers - template - struct number_distance - { - static Difference distance(Incrementable1 x, Incrementable2 y) - { - return numeric_distance(x, y); - } - }; -} - -template < - class Incrementable - , class CategoryOrTraversal = use_default - , class Difference = use_default -> -class counting_iterator - : public detail::counting_iterator_base< - Incrementable, CategoryOrTraversal, Difference - >::type -{ - typedef typename detail::counting_iterator_base< - Incrementable, CategoryOrTraversal, Difference - >::type super_t; - - friend class iterator_core_access; - - public: - typedef typename super_t::difference_type difference_type; - - counting_iterator() { } - - counting_iterator(counting_iterator const& rhs) : super_t(rhs.base()) {} - - counting_iterator(Incrementable x) - : super_t(x) - { - } - -# if 0 - template - counting_iterator( - counting_iterator const& t - , typename enable_if_convertible::type* = 0 - ) - : super_t(t.base()) - {} -# endif - - private: - - typename super_t::reference dereference() const - { - return this->base_reference(); - } - - template - difference_type - distance_to(counting_iterator const& y) const - { - typedef typename mpl::if_< - detail::is_numeric - , detail::number_distance - , detail::iterator_distance - >::type d; - - return d::distance(this->base(), y.base()); - } -}; - -// Manufacture a counting iterator for an arbitrary incrementable type -template -inline counting_iterator -make_counting_iterator(Incrementable x) -{ - typedef counting_iterator result_t; - return result_t(x); -} - - -} // namespace boost::iterator - -#endif // COUNTING_ITERATOR_DWA200348_HPP diff --git a/include/boost/iterator/detail/any_conversion_eater.hpp b/include/boost/iterator/detail/any_conversion_eater.hpp deleted file mode 100755 index 25fa644..0000000 --- a/include/boost/iterator/detail/any_conversion_eater.hpp +++ /dev/null @@ -1,19 +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) -#ifndef ANY_CONVERSION_EATER_DWA20031117_HPP -# define ANY_CONVERSION_EATER_DWA20031117_HPP - -namespace boost { namespace detail { - -// This type can be used in traits to "eat" up the one user-defined -// implicit conversion allowed. -struct any_conversion_eater -{ - template - any_conversion_eater(T const&); -}; - -}} // namespace boost::detail - -#endif // ANY_CONVERSION_EATER_DWA20031117_HPP diff --git a/include/boost/iterator/detail/config_def.hpp b/include/boost/iterator/detail/config_def.hpp deleted file mode 100644 index fcdb9d6..0000000 --- a/include/boost/iterator/detail/config_def.hpp +++ /dev/null @@ -1,135 +0,0 @@ -// (C) Copyright David Abrahams 2002. -// (C) Copyright Jeremy Siek 2002. -// (C) Copyright Thomas Witt 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) - -// no include guard multiple inclusion intended - -// -// This is a temporary workaround until the bulk of this is -// available in boost config. -// 23/02/03 thw -// - -#include // for prior -#include - -#ifdef BOOST_ITERATOR_CONFIG_DEF -# error you have nested config_def #inclusion. -#else -# define BOOST_ITERATOR_CONFIG_DEF -#endif - -#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ - || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x531)) - -// Recall that in general, compilers without partial specialization -// can't strip constness. Consider counting_iterator, which normally -// passes a const Value to iterator_facade. As a result, any code -// which makes a std::vector of the iterator's value_type will fail -// when its allocator declares functions overloaded on reference and -// const_reference (the same type). -// -// Furthermore, Borland 5.5.1 drops constness in enough ways that we -// end up using a proxy for operator[] when we otherwise shouldn't. -// Using reference constness gives it an extra hint that it can -// return the value_type from operator[] directly, but is not -// strictly neccessary. Not sure how best to resolve this one. - -# define BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY 1 - -#endif - -#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \ - || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x531)) \ - || (BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700) && defined(_MSC_VER)) -# define BOOST_NO_LVALUE_RETURN_DETECTION - -# if 0 // test code - struct v {}; - - typedef char (&no)[3]; - - template - no foo(T const&, ...); - - template - char foo(T&, int); - - - struct value_iterator - { - v operator*() const; - }; - - template - struct lvalue_deref_helper - { - static T& x; - enum { value = (sizeof(foo(*x,0)) == 1) }; - }; - - int z2[(lvalue_deref_helper::value == 1) ? 1 : -1]; - int z[(lvalue_deref_helper::value) == 1 ? -1 : 1 ]; -# endif - -#endif - -#if BOOST_WORKAROUND(__MWERKS__, <=0x2407) -# define BOOST_NO_IS_CONVERTIBLE // "is_convertible doesn't work for simple types" -#endif - -#if BOOST_WORKAROUND(__GNUC__, == 2) \ - || BOOST_WORKAROUND(__GNUC__, == 3) && BOOST_WORKAROUND(__GNUC_MINOR__, < 4) && !defined(__EDG_VERSION__) \ - || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) -# define BOOST_NO_IS_CONVERTIBLE_TEMPLATE // The following program fails to compile: - -# if 0 // test code - #include - template - struct foo - { - foo(T); - - template - foo(foo const& other) : p(other.p) { } - - T p; - }; - - bool x = boost::is_convertible, foo >::value; -# endif - -#endif - -#if BOOST_WORKAROUND(__GNUC__, == 2 && __GNUC_MINOR__ == 95) \ - || BOOST_WORKAROUND(__MWERKS__, <= 0x2407) \ - || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) -# define BOOST_ITERATOR_NO_MPL_AUX_HAS_XXX // "MPL's has_xxx facility doesn't work" -#endif - -#if !defined(BOOST_MSVC) && (defined(BOOST_NO_SFINAE) || defined(BOOST_NO_IS_CONVERTIBLE) || defined(BOOST_NO_IS_CONVERTIBLE_TEMPLATE)) -# define BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY -#endif - -# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) -# define BOOST_ARG_DEPENDENT_TYPENAME typename -# else -# define BOOST_ARG_DEPENDENT_TYPENAME -# endif - -# if BOOST_WORKAROUND(__GNUC__, == 2) && BOOST_WORKAROUND(__GNUC_MINOR__, BOOST_TESTED_AT(95)) \ - || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) - -// GCC-2.95 eagerly instantiates templated constructors and conversion -// operators in convertibility checks, causing premature errors. -// -// Borland's problems are harder to diagnose due to lack of an -// instantiation stack backtrace. They may be due in part to the fact -// that it drops cv-qualification willy-nilly in templates. -# define BOOST_NO_ONE_WAY_ITERATOR_INTEROP -# endif - -// no include guard; multiple inclusion intended diff --git a/include/boost/iterator/detail/config_undef.hpp b/include/boost/iterator/detail/config_undef.hpp deleted file mode 100644 index 9dcd1d5..0000000 --- a/include/boost/iterator/detail/config_undef.hpp +++ /dev/null @@ -1,25 +0,0 @@ -// (C) Copyright Thomas Witt 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) - -// no include guard multiple inclusion intended - -// -// This is a temporary workaround until the bulk of this is -// available in boost config. -// 23/02/03 thw -// - -#undef BOOST_NO_IS_CONVERTIBLE -#undef BOOST_NO_IS_CONVERTIBLE_TEMPLATE -#undef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY -#undef BOOST_ARG_DEPENDENT_TYPENAME -#undef BOOST_NO_LVALUE_RETURN_DETECTION -#undef BOOST_NO_ONE_WAY_ITERATOR_INTEROP - -#ifdef BOOST_ITERATOR_CONFIG_DEF -# undef BOOST_ITERATOR_CONFIG_DEF -#else -# error missing or nested #include config_def -#endif diff --git a/include/boost/iterator/detail/enable_if.hpp b/include/boost/iterator/detail/enable_if.hpp deleted file mode 100644 index 45428a5..0000000 --- a/include/boost/iterator/detail/enable_if.hpp +++ /dev/null @@ -1,86 +0,0 @@ -// (C) Copyright David Abrahams 2002. -// (C) Copyright Jeremy Siek 2002. -// (C) Copyright Thomas Witt 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) -#ifndef BOOST_ENABLE_IF_23022003THW_HPP -#define BOOST_ENABLE_IF_23022003THW_HPP - -#include -#include - -#include - -// -// Boost iterators uses its own enable_if cause we need -// special semantics for deficient compilers. -// 23/02/03 thw -// - -namespace boost -{ - - namespace iterators - { - // - // Base machinery for all kinds of enable if - // - template - struct enabled - { - template - struct base - { - typedef T type; - }; - }; - - // - // For compilers that don't support "Substitution Failure Is Not An Error" - // enable_if falls back to always enabled. See comments - // on operator implementation for consequences. - // - template<> - struct enabled - { - template - struct base - { -#ifdef BOOST_NO_SFINAE - - typedef T type; - - // This way to do it would give a nice error message containing - // invalid overload, but has the big disadvantage that - // there is no reference to user code in the error message. - // - // struct invalid_overload; - // typedef invalid_overload type; - // -#endif - }; - }; - - - template - struct enable_if -# if !defined(BOOST_NO_SFINAE) && !defined(BOOST_NO_IS_CONVERTIBLE) - : enabled<(Cond::value)>::template base -# else - : mpl::identity -# endif - { -# if BOOST_WORKAROUND(BOOST_MSVC, <= 1200) - typedef Return type; -# endif - }; - - } // namespace iterators - -} // namespace boost - -#include - -#endif // BOOST_ENABLE_IF_23022003THW_HPP diff --git a/include/boost/iterator/detail/facade_iterator_category.hpp b/include/boost/iterator/detail/facade_iterator_category.hpp deleted file mode 100755 index 463e001..0000000 --- a/include/boost/iterator/detail/facade_iterator_category.hpp +++ /dev/null @@ -1,209 +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) -#ifndef FACADE_ITERATOR_CATEGORY_DWA20031118_HPP -# define FACADE_ITERATOR_CATEGORY_DWA20031118_HPP - -# include - -# include - -# include // used in iterator_tag inheritance logic -# include -# include -# include -# include - -# include -# include -# include -# include - -# include - -# include // try to keep this last - -# ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY -# include -# endif - -// -// iterator_category deduction for iterator_facade -// - -// forward declaration -namespace boost { struct use_default; } - -namespace boost { namespace detail { - -struct input_output_iterator_tag - : std::input_iterator_tag -{ - // Using inheritance for only input_iterator_tag helps to avoid - // ambiguities when a stdlib implementation dispatches on a - // function which is overloaded on both input_iterator_tag and - // output_iterator_tag, as STLPort does, in its __valid_range - // function. I claim it's better to avoid the ambiguity in these - // cases. - operator std::output_iterator_tag() const - { - return std::output_iterator_tag(); - } -}; - -// -// True iff the user has explicitly disabled writability of this -// iterator. Pass the iterator_facade's Value parameter and its -// nested ::reference type. -// -template -struct iterator_writability_disabled -# ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY // Adding Thomas' logic? - : mpl::or_< - is_const - , python::detail::is_reference_to_const - , is_const - > -# else - : is_const -# endif -{}; - - -// -// Convert an iterator_facade's traversal category, Value parameter, -// and ::reference type to an appropriate old-style category. -// -// If writability has been disabled per the above metafunction, the -// result will not be convertible to output_iterator_tag. -// -// Otherwise, if Traversal == single_pass_traversal_tag, the following -// conditions will result in a tag that is convertible both to -// input_iterator_tag and output_iterator_tag: -// -// 1. Reference is a reference to non-const -// 2. Reference is not a reference and is convertible to Value -// -template -struct iterator_facade_default_category - : mpl::eval_if< - mpl::and_< - is_reference - , is_convertible - > - , mpl::eval_if< - is_convertible - , mpl::identity - , mpl::if_< - is_convertible - , std::bidirectional_iterator_tag - , std::forward_iterator_tag - > - > - , typename mpl::eval_if< - mpl::and_< - is_convertible - - // check for readability - , is_convertible - > - , mpl::identity - , mpl::identity - > - > -{ -}; - -// True iff T is convertible to an old-style iterator category. -template -struct is_iterator_category - : mpl::or_< - is_convertible - , is_convertible - > -{ -}; - -template -struct is_iterator_traversal - : is_convertible -{}; - -// -// A composite iterator_category tag convertible to Category (a pure -// old-style category) and Traversal (a pure traversal tag). -// Traversal must be a strict increase of the traversal power given by -// Category. -// -template -struct iterator_category_with_traversal - : Category, Traversal -{ -# if 0 - // Because of limitations on multiple user-defined conversions, - // this should be a good test of whether convertibility is enough - // in the spec, or whether we need to specify inheritance. - operator Category() const { return Category(); } - operator Traversal() const { return Traversal(); } -# endif - -# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) - // Make sure this isn't used to build any categories where - // convertibility to Traversal is redundant. Should just use the - // Category element in that case. - BOOST_STATIC_ASSERT( - !(is_convertible< - typename iterator_category_to_traversal::type - , Traversal - >::value)); - - BOOST_STATIC_ASSERT(is_iterator_category::value); - BOOST_STATIC_ASSERT(!is_iterator_category::value); - BOOST_STATIC_ASSERT(!is_iterator_traversal::value); -# if !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310)) - BOOST_STATIC_ASSERT(is_iterator_traversal::value); -# endif -# endif -}; - -// Computes an iterator_category tag whose traversal is Traversal and -// which is appropriate for an iterator -template -struct facade_iterator_category_impl -{ -# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) - BOOST_STATIC_ASSERT(!is_iterator_category::value); -# endif - - typedef typename iterator_facade_default_category< - Traversal,ValueParam,Reference - >::type category; - - typedef typename mpl::if_< - is_same< - Traversal - , typename iterator_category_to_traversal::type - > - , category - , iterator_category_with_traversal - >::type type; -}; - -// -// Compute an iterator_category for iterator_facade -// -template -struct facade_iterator_category - : mpl::eval_if< - is_iterator_category - , mpl::identity // old-style categories are fine as-is - , facade_iterator_category_impl - > -{ -}; - -}} // namespace boost::detail - -# include - -#endif // FACADE_ITERATOR_CATEGORY_DWA20031118_HPP diff --git a/include/boost/iterator/detail/minimum_category.hpp b/include/boost/iterator/detail/minimum_category.hpp deleted file mode 100755 index 74cef63..0000000 --- a/include/boost/iterator/detail/minimum_category.hpp +++ /dev/null @@ -1,116 +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) -#ifndef MINIMUM_CATEGORY_DWA20031119_HPP -# define MINIMUM_CATEGORY_DWA20031119_HPP - -# include -# include - -# include - -namespace boost { namespace detail { -// -// Returns the minimum category type or error_type -// if T1 and T2 are unrelated. -// -// For compilers not supporting is_convertible this only -// works with the new boost return and traversal category -// types. The exact boost _types_ are required. No derived types -// will work. -// -// -template -struct minimum_category_impl -# if BOOST_WORKAROUND(BOOST_MSVC, == 1200) -{ - template struct apply - { - typedef T2 type; - }; - typedef void type; -} -# endif -; - -template -struct error_not_related_by_convertibility; - -template <> -struct minimum_category_impl -{ - template struct apply - { - typedef T2 type; - }; -}; - -template <> -struct minimum_category_impl -{ - template struct apply - { - typedef T1 type; - }; -}; - -template <> -struct minimum_category_impl -{ - template struct apply - { - BOOST_STATIC_ASSERT((is_same::value)); - typedef T1 type; - }; -}; - -template <> -struct minimum_category_impl -{ - template struct apply - : error_not_related_by_convertibility - { - }; -}; - -template -struct minimum_category -{ - typedef minimum_category_impl< -# if BOOST_WORKAROUND(BOOST_MSVC, == 1200) // ETI workaround - is_same::value || -# endif - ::boost::is_convertible::value - , ::boost::is_convertible::value -# if BOOST_WORKAROUND(BOOST_MSVC, == 1200) // ETI workaround - || is_same::value -# endif - > outer; - - typedef typename outer::template apply inner; - typedef typename inner::type type; - - BOOST_MPL_AUX_LAMBDA_SUPPORT(2,minimum_category,(T1,T2)) -}; - -template <> -struct minimum_category -{ - template - struct apply : minimum_category - {}; - - BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2,minimum_category,(mpl::_1,mpl::_2)) -}; - -# if BOOST_WORKAROUND(BOOST_MSVC, == 1200) // ETI workaround -template <> -struct minimum_category -{ - typedef int type; -}; -# endif - -}} // namespace boost::detail - -#endif // MINIMUM_CATEGORY_DWA20031119_HPP diff --git a/include/boost/iterator/filter_iterator.hpp b/include/boost/iterator/filter_iterator.hpp deleted file mode 100644 index 0edede5..0000000 --- a/include/boost/iterator/filter_iterator.hpp +++ /dev/null @@ -1,135 +0,0 @@ -// (C) Copyright David Abrahams 2002. -// (C) Copyright Jeremy Siek 2002. -// (C) Copyright Thomas Witt 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) -#ifndef BOOST_FILTER_ITERATOR_23022003THW_HPP -#define BOOST_FILTER_ITERATOR_23022003THW_HPP - -#include -#include -#include - -#include -#include - -namespace boost -{ - template - class filter_iterator; - - namespace detail - { - template - struct filter_iterator_base - { - typedef iterator_adaptor< - filter_iterator - , Iterator - , use_default - , typename mpl::if_< - is_convertible< - typename iterator_traversal::type - , bidirectional_traversal_tag - > - , forward_traversal_tag - , use_default - >::type - > type; - }; - } - - template - class filter_iterator - : public detail::filter_iterator_base::type - { - typedef typename detail::filter_iterator_base< - Predicate, Iterator - >::type super_t; - - friend class iterator_core_access; - - public: - filter_iterator() { } - - filter_iterator(Predicate f, Iterator x, Iterator end = Iterator()) - : super_t(x), m_predicate(f), m_end(end) - { - satisfy_predicate(); - } - - filter_iterator(Iterator x, Iterator end = Iterator()) - : super_t(x), m_predicate(), m_end(end) - { - // Pro8 is a little too aggressive about instantiating the - // body of this function. -#if !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) - // Don't allow use of this constructor if Predicate is a - // function pointer type, since it will be 0. - BOOST_STATIC_ASSERT(is_class::value); -#endif - satisfy_predicate(); - } - - template - filter_iterator( - filter_iterator const& t - , typename enable_if_convertible::type* = 0 - ) - : super_t(t.base()), m_predicate(t.predicate()), m_end(t.end()) {} - - Predicate predicate() const { return m_predicate; } - - Iterator end() const { return m_end; } - - private: - void increment() - { - ++(this->base_reference()); - satisfy_predicate(); - } - - void decrement() - { - while(!this->m_predicate(*--(this->base_reference()))){}; - } - - void satisfy_predicate() - { - while (this->base() != this->m_end && !this->m_predicate(*this->base())) - ++(this->base_reference()); - } - - // Probably should be the initial base class so it can be - // optimized away via EBO if it is an empty class. - Predicate m_predicate; - Iterator m_end; - }; - - template - filter_iterator - make_filter_iterator(Predicate f, Iterator x, Iterator end = Iterator()) - { - return filter_iterator(f,x,end); - } - - template - filter_iterator - make_filter_iterator( - typename iterators::enable_if< - is_class - , Iterator - >::type x - , Iterator end = Iterator() -#if BOOST_WORKAROUND(BOOST_MSVC, == 1200) - , Predicate* = 0 -#endif - ) - { - return filter_iterator(x,end); - } - -} // namespace boost - -#endif // BOOST_FILTER_ITERATOR_23022003THW_HPP diff --git a/include/boost/iterator/indirect_iterator.hpp b/include/boost/iterator/indirect_iterator.hpp deleted file mode 100644 index b90bd6f..0000000 --- a/include/boost/iterator/indirect_iterator.hpp +++ /dev/null @@ -1,139 +0,0 @@ -// (C) Copyright David Abrahams 2002. -// (C) Copyright Jeremy Siek 2002. -// (C) Copyright Thomas Witt 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) -#ifndef BOOST_INDIRECT_ITERATOR_23022003THW_HPP -#define BOOST_INDIRECT_ITERATOR_23022003THW_HPP - -#include -#include - -#include -#include -#include - -#include - -#include -#include - -#include -#include -#include -#include -#include - -#ifdef BOOST_MPL_CFG_NO_HAS_XXX -# include -# include -# include -# include -#endif - -#include // must be last #include - -namespace boost -{ - template - class indirect_iterator; - - namespace detail - { - template - struct indirect_base - { - typedef typename iterator_traits::value_type dereferenceable; - - typedef iterator_adaptor< - indirect_iterator - , Iter - , typename ia_dflt_help< - Value, pointee - >::type - , Category - , typename ia_dflt_help< - Reference - , mpl::eval_if< - is_same - , indirect_reference - , add_reference - > - >::type - , Difference - > type; - }; - - template <> - struct indirect_base {}; - } // namespace detail - - - template < - class Iterator - , class Value = use_default - , class Category = use_default - , class Reference = use_default - , class Difference = use_default - > - class indirect_iterator - : public detail::indirect_base< - Iterator, Value, Category, Reference, Difference - >::type - { - typedef typename detail::indirect_base< - Iterator, Value, Category, Reference, Difference - >::type super_t; - - friend class iterator_core_access; - - public: - indirect_iterator() {} - - indirect_iterator(Iterator iter) - : super_t(iter) {} - - 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 - ) - : super_t(y.base()) - {} - - private: - typename super_t::reference dereference() const - { -# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) - return const_cast(**this->base()); -# else - return **this->base(); -# endif - } - }; - - template - inline - indirect_iterator make_indirect_iterator(Iter x) - { - return indirect_iterator(x); - } - - template - inline - indirect_iterator make_indirect_iterator(Iter x, Traits* = 0) - { - return indirect_iterator(x); - } - -} // namespace boost - -#include - -#endif // BOOST_INDIRECT_ITERATOR_23022003THW_HPP diff --git a/include/boost/iterator/interoperable.hpp b/include/boost/iterator/interoperable.hpp deleted file mode 100644 index c13dd9b..0000000 --- a/include/boost/iterator/interoperable.hpp +++ /dev/null @@ -1,50 +0,0 @@ -// (C) Copyright David Abrahams 2002. -// (C) Copyright Jeremy Siek 2002. -// (C) Copyright Thomas Witt 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) -#ifndef BOOST_INTEROPERABLE_23022003THW_HPP -# define BOOST_INTEROPERABLE_23022003THW_HPP - -# include -# include - -# include - -# include // must appear last - -namespace boost -{ - - // - // Meta function that determines whether two - // iterator types are considered interoperable. - // - // Two iterator types A,B are considered interoperable if either - // A is convertible to B or vice versa. - // This interoperability definition is in sync with the - // standards requirements on constant/mutable container - // iterators (23.1 [lib.container.requirements]). - // - // For compilers that don't support is_convertible - // is_interoperable gives false positives. See comments - // on operator implementation for consequences. - // - template - struct is_interoperable -# ifdef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY - : mpl::true_ -# else - : mpl::or_< - is_convertible< A, B > - , is_convertible< B, A > > -# endif - { - }; - -} // namespace boost - -# include - -#endif // BOOST_INTEROPERABLE_23022003THW_HPP diff --git a/include/boost/iterator/is_lvalue_iterator.hpp b/include/boost/iterator/is_lvalue_iterator.hpp deleted file mode 100755 index 4938151..0000000 --- a/include/boost/iterator/is_lvalue_iterator.hpp +++ /dev/null @@ -1,150 +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) -#ifndef IS_LVALUE_ITERATOR_DWA2003112_HPP -# define IS_LVALUE_ITERATOR_DWA2003112_HPP - -#include - -#include -#include - -#include - -// should be the last #includes -#include -#include - -#ifndef BOOST_NO_IS_CONVERTIBLE - -namespace boost { - -namespace detail -{ -#ifndef BOOST_NO_LVALUE_RETURN_DETECTION - // Calling lvalue_preserver( , 0 ) returns a reference - // to the expression's result if is an lvalue, or - // not_an_lvalue() otherwise. - struct not_an_lvalue {}; - - template - T& lvalue_preserver(T&, int); - - template - not_an_lvalue lvalue_preserver(U const&, ...); - -# define BOOST_LVALUE_PRESERVER(expr) lvalue_preserver(expr,0) - -#else - -# define BOOST_LVALUE_PRESERVER(expr) expr - -#endif - - // Guts of is_lvalue_iterator. Value is the iterator's value_type - // and the result is computed in the nested rebind template. - template - struct is_lvalue_iterator_impl - { - // Eat implicit conversions so we don't report true for things - // convertible to Value const& - struct conversion_eater - { - conversion_eater(Value&); - }; - - static char tester(conversion_eater, int); - static char (& tester(any_conversion_eater, ...) )[2]; - - template - struct rebind - { - static It& x; - - BOOST_STATIC_CONSTANT( - bool - , value = ( - sizeof( - is_lvalue_iterator_impl::tester( - BOOST_LVALUE_PRESERVER(*x), 0 - ) - ) == 1 - ) - ); - }; - }; - -#undef BOOST_LVALUE_PRESERVER - - // - // void specializations to handle std input and output iterators - // - template <> - struct is_lvalue_iterator_impl - { - template - struct rebind : boost::mpl::false_ - {}; - }; - -#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS - template <> - struct is_lvalue_iterator_impl - { - template - struct rebind : boost::mpl::false_ - {}; - }; - - template <> - struct is_lvalue_iterator_impl - { - template - struct rebind : boost::mpl::false_ - {}; - }; - - template <> - struct is_lvalue_iterator_impl - { - template - struct rebind : boost::mpl::false_ - {}; - }; -#endif - - // - // This level of dispatching is required for Borland. We might save - // an instantiation by removing it for others. - // - template - struct is_readable_lvalue_iterator_impl - : is_lvalue_iterator_impl< - BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits::value_type const - >::template rebind - {}; - - template - struct is_non_const_lvalue_iterator_impl - : is_lvalue_iterator_impl< - BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits::value_type - >::template rebind - {}; -} // namespace detail - -// Define the trait with full mpl lambda capability and various broken -// compiler workarounds -BOOST_TT_AUX_BOOL_TRAIT_DEF1( - is_lvalue_iterator,T,::boost::detail::is_readable_lvalue_iterator_impl::value) - -BOOST_TT_AUX_BOOL_TRAIT_DEF1( - is_non_const_lvalue_iterator,T,::boost::detail::is_non_const_lvalue_iterator_impl::value) - -} // namespace boost - -#endif - -#include -#include - -#endif // IS_LVALUE_ITERATOR_DWA2003112_HPP diff --git a/include/boost/iterator/is_readable_iterator.hpp b/include/boost/iterator/is_readable_iterator.hpp deleted file mode 100755 index 60d6ff0..0000000 --- a/include/boost/iterator/is_readable_iterator.hpp +++ /dev/null @@ -1,108 +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) -#ifndef IS_READABLE_ITERATOR_DWA2003112_HPP -# define IS_READABLE_ITERATOR_DWA2003112_HPP - -#include -#include - -#include -#include - -// should be the last #include -#include - -#ifndef BOOST_NO_IS_CONVERTIBLE - -namespace boost { - -namespace detail -{ - // Guts of is_readable_iterator. Value is the iterator's value_type - // and the result is computed in the nested rebind template. - template - struct is_readable_iterator_impl - { - static char tester(Value&, int); - static char (& tester(any_conversion_eater, ...) )[2]; - - template - struct rebind - { - static It& x; - - BOOST_STATIC_CONSTANT( - bool - , value = ( - sizeof( - is_readable_iterator_impl::tester(*x, 1) - ) == 1 - ) - ); - }; - }; - -#undef BOOST_READABLE_PRESERVER - - // - // void specializations to handle std input and output iterators - // - template <> - struct is_readable_iterator_impl - { - template - struct rebind : boost::mpl::false_ - {}; - }; - -#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS - template <> - struct is_readable_iterator_impl - { - template - struct rebind : boost::mpl::false_ - {}; - }; - - template <> - struct is_readable_iterator_impl - { - template - struct rebind : boost::mpl::false_ - {}; - }; - - template <> - struct is_readable_iterator_impl - { - template - struct rebind : boost::mpl::false_ - {}; - }; -#endif - - // - // This level of dispatching is required for Borland. We might save - // an instantiation by removing it for others. - // - template - struct is_readable_iterator_impl2 - : is_readable_iterator_impl< - BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits::value_type const - >::template rebind - {}; -} // namespace detail - -// Define the trait with full mpl lambda capability and various broken -// compiler workarounds -BOOST_TT_AUX_BOOL_TRAIT_DEF1( - is_readable_iterator,T,::boost::detail::is_readable_iterator_impl2::value) - -} // namespace boost - -#endif - -#include - -#endif // IS_READABLE_ITERATOR_DWA2003112_HPP diff --git a/include/boost/iterator/iterator_adaptor.hpp b/include/boost/iterator/iterator_adaptor.hpp deleted file mode 100644 index eabacde..0000000 --- a/include/boost/iterator/iterator_adaptor.hpp +++ /dev/null @@ -1,364 +0,0 @@ -// (C) Copyright David Abrahams 2002. -// (C) Copyright Jeremy Siek 2002. -// (C) Copyright Thomas Witt 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) -#ifndef BOOST_ITERATOR_ADAPTOR_23022003THW_HPP -#define BOOST_ITERATOR_ADAPTOR_23022003THW_HPP - -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include -#include - -#ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY -# include -#else -# include -#endif - -#include - -#include - -namespace boost -{ - // Used as a default template argument internally, merely to - // indicate "use the default", this can also be passed by users - // explicitly in order to specify that the default should be used. - struct use_default; - -# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION - // the incompleteness of use_default causes massive problems for - // is_convertible (naturally). This workaround is fortunately not - // needed for vc6/vc7. - template - struct is_convertible - : mpl::false_ {}; -# endif - - namespace detail - { - - // - // Result type used in enable_if_convertible meta function. - // This can be an incomplete type, as only pointers to - // enable_if_convertible< ... >::type are used. - // We could have used void for this, but conversion to - // void* is just to easy. - // - struct enable_type; - } - - - // - // enable_if for use in adapted iterators constructors. - // - // In order to provide interoperability between adapted constant and - // mutable iterators, adapted iterators will usually provide templated - // conversion constructors of the following form - // - // template - // class adapted_iterator : - // public iterator_adaptor< adapted_iterator, Iterator > - // { - // public: - // - // ... - // - // template - // adapted_iterator( - // OtherIterator const& it - // , typename enable_if_convertible::type* = 0); - // - // ... - // }; - // - // enable_if_convertible is used to remove those overloads from the overload - // set that cannot be instantiated. For all practical purposes only overloads - // for constant/mutable interaction will remain. This has the advantage that - // meta functions like boost::is_convertible do not return false positives, - // as they can only look at the signature of the conversion constructor - // and not at the actual instantiation. - // - // enable_if_interoperable can be safely used in user code. It falls back to - // always enabled for compilers that don't support enable_if or is_convertible. - // There is no need for compiler specific workarounds in user code. - // - // The operators implementation relies on boost::is_convertible not returning - // false positives for user/library defined iterator types. See comments - // on operator implementation for consequences. - // -# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) - - template - struct enable_if_convertible - { - typedef typename mpl::if_< - mpl::or_< - is_same - , is_convertible - > - , detail::enable_type - , int& - >::type type; - }; - -# elif defined(BOOST_NO_IS_CONVERTIBLE) || defined(BOOST_NO_SFINAE) - - template - struct enable_if_convertible - { - typedef detail::enable_type type; - }; - -# elif BOOST_WORKAROUND(_MSC_FULL_VER, BOOST_TESTED_AT(13102292)) && BOOST_MSVC > 1300 - - // For some reason vc7.1 needs us to "cut off" instantiation - // of is_convertible in a few cases. - template - struct enable_if_convertible - : iterators::enable_if< - mpl::or_< - is_same - , is_convertible - > - , detail::enable_type - > - {}; - -# else - - template - struct enable_if_convertible - : iterators::enable_if< - is_convertible - , detail::enable_type - > - {}; - -# endif - - // - // Default template argument handling for iterator_adaptor - // - namespace detail - { - // If T is use_default, return the result of invoking - // DefaultNullaryFn, otherwise return T. - template - struct ia_dflt_help - : mpl::eval_if< - is_same - , DefaultNullaryFn - , mpl::identity - > - { - }; - - // A metafunction which computes an iterator_adaptor's base class, - // a specialization of iterator_facade. - template < - class Derived - , class Base - , class Value - , class Traversal - , class Reference - , class Difference - > - struct iterator_adaptor_base - { - typedef iterator_facade< - Derived - -# ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY - , typename detail::ia_dflt_help< - Value - , mpl::eval_if< - is_same - , iterator_value - , remove_reference - > - >::type -# else - , typename detail::ia_dflt_help< - Value, iterator_value - >::type -# endif - - , typename detail::ia_dflt_help< - Traversal - , iterator_traversal - >::type - - , typename detail::ia_dflt_help< - Reference - , mpl::eval_if< - is_same - , iterator_reference - , add_reference - > - >::type - - , typename detail::ia_dflt_help< - Difference, iterator_difference - >::type - > - type; - }; - - // workaround for aC++ CR JAGaf33512 - template - inline void iterator_adaptor_assert_traversal () - { - BOOST_STATIC_ASSERT((is_convertible::value)); - } - } - - // - // Iterator Adaptor - // - // The parameter ordering changed slightly with respect to former - // versions of iterator_adaptor The idea is that when the user needs - // to fiddle with the reference type it is highly likely that the - // iterator category has to be adjusted as well. Any of the - // following four template arguments may be ommitted or explicitly - // replaced by use_default. - // - // Value - if supplied, the value_type of the resulting iterator, unless - // const. If const, a conforming compiler strips constness for the - // value_type. If not supplied, iterator_traits::value_type is used - // - // Category - the traversal category of the resulting iterator. If not - // supplied, iterator_traversal::type is used. - // - // Reference - the reference type of the resulting iterator, and in - // particular, the result type of operator*(). If not supplied but - // Value is supplied, Value& is used. Otherwise - // iterator_traits::reference is used. - // - // Difference - the difference_type of the resulting iterator. If not - // supplied, iterator_traits::difference_type is used. - // - template < - class Derived - , class Base - , class Value = use_default - , class Traversal = use_default - , class Reference = use_default - , class Difference = use_default - > - class iterator_adaptor - : public detail::iterator_adaptor_base< - Derived, Base, Value, Traversal, Reference, Difference - >::type - { - friend class iterator_core_access; - - protected: - typedef typename detail::iterator_adaptor_base< - Derived, Base, Value, Traversal, Reference, Difference - >::type super_t; - public: - iterator_adaptor() {} - - explicit iterator_adaptor(Base const &iter) - : m_iterator(iter) - { - } - - Base const& base() const - { return m_iterator; } - - protected: - // for convenience in derived classes - typedef iterator_adaptor iterator_adaptor_; - - // - // lvalue access to the Base object for Derived - // - Base const& base_reference() const - { return m_iterator; } - - Base& base_reference() - { return m_iterator; } - - private: - // - // Core iterator interface for iterator_facade. This is private - // to prevent temptation for Derived classes to use it, which - // will often result in an error. Derived classes should use - // base_reference(), above, to get direct access to m_iterator. - // - typename super_t::reference dereference() const - { return *m_iterator; } - - template < - class OtherDerived, class OtherIterator, class V, class C, class R, class D - > - bool equal(iterator_adaptor const& x) const - { - // Maybe readd with same_distance - // BOOST_STATIC_ASSERT( - // (detail::same_category_and_difference::value) - // ); - return m_iterator == x.base(); - } - - typedef typename iterator_category_to_traversal< - typename super_t::iterator_category - >::type my_traversal; - -# define BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(cat) \ - detail::iterator_adaptor_assert_traversal(); - - void advance(typename super_t::difference_type n) - { - BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(random_access_traversal_tag) - m_iterator += n; - } - - void increment() { ++m_iterator; } - - void decrement() - { - BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(bidirectional_traversal_tag) - --m_iterator; - } - - template < - class OtherDerived, class OtherIterator, class V, class C, class R, class D - > - typename super_t::difference_type distance_to( - iterator_adaptor const& y) const - { - BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(random_access_traversal_tag) - // Maybe readd with same_distance - // BOOST_STATIC_ASSERT( - // (detail::same_category_and_difference::value) - // ); - return y.base() - m_iterator; - } - -# undef BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL - - private: // data members - Base m_iterator; - }; - -} // namespace boost - -#include - -#endif // BOOST_ITERATOR_ADAPTOR_23022003THW_HPP diff --git a/include/boost/iterator/iterator_archetypes.hpp b/include/boost/iterator/iterator_archetypes.hpp deleted file mode 100644 index 8c09328..0000000 --- a/include/boost/iterator/iterator_archetypes.hpp +++ /dev/null @@ -1,500 +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) - -#ifndef BOOST_ITERATOR_ARCHETYPES_HPP -#define BOOST_ITERATOR_ARCHETYPES_HPP - -#include -#include -#include -#include - -#include - -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace boost { - -template -struct access_archetype; - -template -struct traversal_archetype; - -namespace iterator_archetypes -{ - enum { - readable_iterator_bit = 1 - , writable_iterator_bit = 2 - , swappable_iterator_bit = 4 - , lvalue_iterator_bit = 8 - }; - - // Not quite tags, since dispatching wouldn't work. - typedef mpl::int_::type readable_iterator_t; - typedef mpl::int_::type writable_iterator_t; - - typedef mpl::int_< - (readable_iterator_bit|writable_iterator_bit) - >::type readable_writable_iterator_t; - - typedef mpl::int_< - (readable_iterator_bit|lvalue_iterator_bit) - >::type readable_lvalue_iterator_t; - - typedef mpl::int_< - (lvalue_iterator_bit|writable_iterator_bit) - >::type writable_lvalue_iterator_t; - - typedef mpl::int_::type swappable_iterator_t; - typedef mpl::int_::type lvalue_iterator_t; - - template - struct has_access - : mpl::equal_to< - mpl::bitand_ - , Base - > - {}; -} - -namespace detail -{ - template - struct assign_proxy - { - assign_proxy& operator=(T) { return *this; } - }; - - template - struct read_proxy - { - operator T() { return static_object::get(); } - }; - - template - struct read_write_proxy - : read_proxy // Use to inherit from assign_proxy, but that doesn't work. -JGS - { - read_write_proxy& operator=(T) { return *this; } - }; - - template - struct arrow_proxy - { - T const* operator->() const { return 0; } - }; - - struct no_operator_brackets {}; - - template - struct readable_operator_brackets - { - read_proxy operator[](std::ptrdiff_t n) const { return read_proxy(); } - }; - - template - struct writable_operator_brackets - { - read_write_proxy operator[](std::ptrdiff_t n) const { return read_write_proxy(); } - }; - - template - struct operator_brackets - : mpl::aux::msvc_eti_base< - typename mpl::eval_if< - is_convertible - , mpl::eval_if< - iterator_archetypes::has_access< - AccessCategory - , iterator_archetypes::writable_iterator_t - > - , mpl::identity > - , mpl::if_< - iterator_archetypes::has_access< - AccessCategory - , iterator_archetypes::readable_iterator_t - > - , readable_operator_brackets - , no_operator_brackets - > - > - , mpl::identity - >::type - >::type - {}; - - template - struct traversal_archetype_impl - { - template struct archetype; - }; - - // Constructor argument for those iterators that - // are not default constructible - struct ctor_arg {}; - - template - struct traversal_archetype_ - : mpl::aux::msvc_eti_base< - typename traversal_archetype_impl::template archetype - >::type - { - typedef typename - traversal_archetype_impl::template archetype - base; - - traversal_archetype_() {} - - traversal_archetype_(ctor_arg arg) - : base(arg) - {} - }; - - template <> - struct traversal_archetype_impl - { - template - struct archetype - { - explicit archetype(ctor_arg) {} - - struct bogus { }; // This use to be void, but that causes trouble for iterator_facade. Need more research. -JGS - typedef bogus difference_type; - - Derived& operator++() { return (Derived&)static_object::get(); } - Derived operator++(int) const { return (Derived&)static_object::get(); } - }; - }; - - template <> - struct traversal_archetype_impl - { - template - struct archetype - : public equality_comparable< traversal_archetype_ >, - public traversal_archetype_ - { - explicit archetype(ctor_arg arg) - : traversal_archetype_(arg) - {} - }; - }; - - template - bool operator==(traversal_archetype_ const&, - traversal_archetype_ const&) { return true; } - -#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) - // doesn't seem to pick up != from equality_comparable - template - bool operator!=(traversal_archetype_ const&, - traversal_archetype_ const&) { return true; } -#endif - template <> - struct traversal_archetype_impl - { - template - struct archetype - : public traversal_archetype_ - { - archetype() - : traversal_archetype_(ctor_arg()) - {} - typedef std::ptrdiff_t difference_type; - }; - }; - - template <> - struct traversal_archetype_impl - { - template - struct archetype - : public traversal_archetype_ - { - Derived& operator--() { return static_object::get(); } - Derived operator--(int) const { return static_object::get(); } - }; - }; - - template <> - struct traversal_archetype_impl - { - template - struct archetype - : public partially_ordered >, - public traversal_archetype_ - { - Derived& operator+=(std::ptrdiff_t) { return static_object::get(); } - Derived& operator-=(std::ptrdiff_t) { return static_object::get(); } - }; - }; - - template - Derived& operator+(traversal_archetype_ const&, - std::ptrdiff_t) { return static_object::get(); } - - template - Derived& operator+(std::ptrdiff_t, - traversal_archetype_ const&) - { return static_object::get(); } - - template - Derived& operator-(traversal_archetype_ const&, - std::ptrdiff_t) - { return static_object::get(); } - - template - std::ptrdiff_t operator-(traversal_archetype_ const&, - traversal_archetype_ const&) - { return 0; } - - template - bool operator<(traversal_archetype_ const&, - traversal_archetype_ const&) - { return true; } - - struct bogus_type; - - template - struct convertible_type - : mpl::if_< is_const, - typename remove_const::type, - bogus_type > - {}; - -} // namespace detail - - -template struct undefined; - -template -struct iterator_access_archetype_impl -{ - template struct archetype; -}; - -template -struct iterator_access_archetype - : mpl::aux::msvc_eti_base< - typename iterator_access_archetype_impl< - AccessCategory - >::template archetype - >::type -{ -}; - -template <> -struct iterator_access_archetype_impl< - iterator_archetypes::readable_iterator_t -> -{ - template - struct archetype - { - typedef typename remove_cv::type value_type; - typedef Value reference; - typedef Value* pointer; - - value_type operator*() const { return static_object::get(); } - - detail::arrow_proxy operator->() const { return detail::arrow_proxy(); } - }; -}; - -template <> -struct iterator_access_archetype_impl< - iterator_archetypes::writable_iterator_t -> -{ - template - struct archetype - { -# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) - BOOST_STATIC_ASSERT(!is_const::value); -# endif - typedef void value_type; - typedef void reference; - typedef void pointer; - - detail::assign_proxy operator*() const { return detail::assign_proxy(); } - }; -}; - -template <> -struct iterator_access_archetype_impl< - iterator_archetypes::readable_writable_iterator_t -> -{ - template - struct archetype - : public virtual iterator_access_archetype< - Value, iterator_archetypes::readable_iterator_t - > - { - typedef detail::read_write_proxy reference; - - detail::read_write_proxy operator*() const { return detail::read_write_proxy(); } - }; -}; - -template <> -struct iterator_access_archetype_impl -{ - template - struct archetype - : public virtual iterator_access_archetype< - Value, iterator_archetypes::readable_iterator_t - > - { - typedef Value& reference; - - Value& operator*() const { return static_object::get(); } - Value* operator->() const { return 0; } - }; -}; - -template <> -struct iterator_access_archetype_impl -{ - template - struct archetype - : public virtual iterator_access_archetype< - Value, iterator_archetypes::readable_lvalue_iterator_t - > - { -# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) - BOOST_STATIC_ASSERT((!is_const::value)); -# endif - }; -}; - - -template -struct iterator_archetype; - -template -struct traversal_archetype_base - : detail::operator_brackets< - typename remove_cv::type - , AccessCategory - , TraversalCategory - > - , detail::traversal_archetype_< - iterator_archetype - , Value - , TraversalCategory - > -{ -}; - -namespace detail -{ - template - struct iterator_archetype_base - : iterator_access_archetype - , traversal_archetype_base - { - typedef iterator_access_archetype access; - - typedef typename detail::facade_iterator_category< - TraversalCategory - , typename mpl::eval_if< - iterator_archetypes::has_access< - AccessCategory, iterator_archetypes::writable_iterator_t - > - , remove_const - , add_const - >::type - , typename access::reference - >::type iterator_category; - - // Needed for some broken libraries (see below) - typedef boost::iterator< - iterator_category - , Value - , typename traversal_archetype_base< - Value, AccessCategory, TraversalCategory - >::difference_type - , typename access::pointer - , typename access::reference - > workaround_iterator_base; - }; -} - -template -struct iterator_archetype - : public detail::iterator_archetype_base - - // These broken libraries require derivation from std::iterator - // (or related magic) in order to handle iter_swap and other - // iterator operations -# if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, < 310) \ - || BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(0x20101)) - , public detail::iterator_archetype_base< - Value, AccessCategory, TraversalCategory - >::workaround_iterator_base -# endif -{ - // Derivation from std::iterator above caused references to nested - // types to be ambiguous, so now we have to redeclare them all - // here. -# if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, < 310) \ - || BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(0x20101)) - - typedef detail::iterator_archetype_base< - Value,AccessCategory,TraversalCategory - > base; - - typedef typename base::value_type value_type; - typedef typename base::reference reference; - typedef typename base::pointer pointer; - typedef typename base::difference_type difference_type; - typedef typename base::iterator_category iterator_category; -# endif - - iterator_archetype() { } - iterator_archetype(iterator_archetype const& x) - : detail::iterator_archetype_base< - Value - , AccessCategory - , TraversalCategory - >(x) - {} - - iterator_archetype& operator=(iterator_archetype const&) - { return *this; } - -# if 0 - // Optional conversion from mutable - iterator_archetype( - iterator_archetype< - typename detail::convertible_type::type - , AccessCategory - , TraversalCategory> const& - ); -# endif -}; - -} // namespace boost - - -#endif // BOOST_ITERATOR_ARCHETYPES_HPP diff --git a/include/boost/iterator/iterator_categories.hpp b/include/boost/iterator/iterator_categories.hpp deleted file mode 100644 index 085936f..0000000 --- a/include/boost/iterator/iterator_categories.hpp +++ /dev/null @@ -1,188 +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) - -#ifndef BOOST_ITERATOR_CATEGORIES_HPP -# define BOOST_ITERATOR_CATEGORIES_HPP - -# include -# include -# include - -# include - -# include -# include -# include -# include - -# include - -# include - -namespace boost { - -// -// Traversal Categories -// - -struct no_traversal_tag {}; - -struct incrementable_traversal_tag - : no_traversal_tag -{ -// incrementable_traversal_tag() {} -// incrementable_traversal_tag(std::output_iterator_tag const&) {}; -}; - -struct single_pass_traversal_tag - : incrementable_traversal_tag -{ -// single_pass_traversal_tag() {} -// single_pass_traversal_tag(std::input_iterator_tag const&) {}; -}; - -struct forward_traversal_tag - : single_pass_traversal_tag -{ -// forward_traversal_tag() {} -// forward_traversal_tag(std::forward_iterator_tag const&) {}; -}; - -struct bidirectional_traversal_tag - : forward_traversal_tag -{ -// bidirectional_traversal_tag() {}; -// bidirectional_traversal_tag(std::bidirectional_iterator_tag const&) {}; -}; - -struct random_access_traversal_tag - : bidirectional_traversal_tag -{ -// random_access_traversal_tag() {}; -// random_access_traversal_tag(std::random_access_iterator_tag const&) {}; -}; - -namespace detail -{ - // - // Convert a "strictly old-style" iterator category to a traversal - // tag. This is broken out into a separate metafunction to reduce - // the cost of instantiating iterator_category_to_traversal, below, - // for new-style types. - // - template - struct old_category_to_traversal - : mpl::eval_if< - is_convertible - , mpl::identity - , mpl::eval_if< - is_convertible - , mpl::identity - , mpl::eval_if< - is_convertible - , mpl::identity - , mpl::eval_if< - is_convertible - , mpl::identity - , mpl::eval_if< - is_convertible - , mpl::identity - , void - > - > - > - > - > - {}; - -# if BOOST_WORKAROUND(BOOST_MSVC, == 1200) - template <> - struct old_category_to_traversal - { - typedef int type; - }; -# endif - - template - struct pure_traversal_tag - : mpl::eval_if< - is_convertible - , mpl::identity - , mpl::eval_if< - is_convertible - , mpl::identity - , mpl::eval_if< - is_convertible - , mpl::identity - , mpl::eval_if< - is_convertible - , mpl::identity - , mpl::eval_if< - is_convertible - , mpl::identity - , void - > - > - > - > - > - { - }; - -# if BOOST_WORKAROUND(BOOST_MSVC, == 1200) - template <> - struct pure_traversal_tag - { - typedef int type; - }; -# endif - -} // namespace detail - - -// -// Convert an iterator category into a traversal tag -// -template -struct iterator_category_to_traversal - : mpl::eval_if< // if already convertible to a traversal tag, we're done. - is_convertible - , mpl::identity - , detail::old_category_to_traversal - > -{}; - -// Trait to get an iterator's traversal category -template -struct iterator_traversal - : iterator_category_to_traversal< - typename boost::detail::iterator_traits::iterator_category - > -{}; - -# ifdef BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT -// Hack because BOOST_MPL_AUX_LAMBDA_SUPPORT doesn't seem to work -// out well. Instantiating the nested apply template also -// requires instantiating iterator_traits on the -// placeholder. Instead we just specialize it as a metafunction -// class. -template <> -struct iterator_traversal -{ - template - struct apply : iterator_traversal - {}; -}; -template <> -struct iterator_traversal - : iterator_traversal -{}; -# endif - -} // namespace boost - -#include - -#endif // BOOST_ITERATOR_CATEGORIES_HPP diff --git a/include/boost/iterator/iterator_concepts.hpp b/include/boost/iterator/iterator_concepts.hpp deleted file mode 100644 index 4c27964..0000000 --- a/include/boost/iterator/iterator_concepts.hpp +++ /dev/null @@ -1,308 +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) - -#ifndef BOOST_ITERATOR_CONCEPTS_HPP -#define BOOST_ITERATOR_CONCEPTS_HPP - -// Revision History -// 26 Apr 2003 thw -// Adapted to new iterator concepts -// 22 Nov 2002 Thomas Witt -// Added interoperable concept. - -#include -#include - -// Use boost::detail::iterator_traits to work around some MSVC/Dinkumware problems. -#include - -#include -#include -#include - -#include -#include -#include -#include - -#include - -// Use boost/limits to work around missing limits headers on some compilers -#include -#include - -#include - -namespace boost_concepts { - // Used a different namespace here (instead of "boost") so that the - // concept descriptions do not take for granted the names in - // namespace boost. - - // We use this in place of STATIC_ASSERT((is_convertible<...>)) - // because some compilers (CWPro7.x) can't detect convertibility. - // - // Of course, that just gets us a different error at the moment with - // some tests, since new iterator category deduction still depends - // on convertibility detection. We might need some specializations - // to support this compiler. - template - struct static_assert_base_and_derived - { - static_assert_base_and_derived(Target* = (Source*)0) {} - }; - - //=========================================================================== - // Iterator Access Concepts - - template - class ReadableIteratorConcept { - public: - typedef BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits::value_type value_type; - - void constraints() { - boost::function_requires< boost::AssignableConcept >(); - boost::function_requires< boost::CopyConstructibleConcept >(); - - value_type v = *i; - boost::ignore_unused_variable_warning(v); - } - Iterator i; - }; - - template < - typename Iterator - , typename ValueType = BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits::value_type - > - class WritableIteratorConcept { - public: - - void constraints() { - boost::function_requires< boost::CopyConstructibleConcept >(); - *i = v; - } - ValueType v; - Iterator i; - }; - - template - class SwappableIteratorConcept { - public: - - void constraints() { - std::iter_swap(i1, i2); - } - Iterator i1; - Iterator i2; - }; - - template - class LvalueIteratorConcept - { - public: - typedef typename boost::detail::iterator_traits::value_type value_type; - void constraints() - { - value_type& r = const_cast(*i); - boost::ignore_unused_variable_warning(r); - } - Iterator i; - }; - - - //=========================================================================== - // Iterator Traversal Concepts - - template - class IncrementableIteratorConcept { - public: - typedef typename boost::iterator_traversal::type traversal_category; - - void constraints() { - boost::function_requires< boost::AssignableConcept >(); - boost::function_requires< boost::CopyConstructibleConcept >(); - - BOOST_STATIC_ASSERT( - (boost::is_convertible< - traversal_category - , boost::incrementable_traversal_tag - >::value - )); - - ++i; - (void)i++; - } - Iterator i; - }; - - template - class SinglePassIteratorConcept { - public: - typedef typename boost::iterator_traversal::type traversal_category; - typedef typename boost::detail::iterator_traits::difference_type difference_type; - - void constraints() { - boost::function_requires< IncrementableIteratorConcept >(); - boost::function_requires< boost::EqualityComparableConcept >(); - - BOOST_STATIC_ASSERT( - (boost::is_convertible< - traversal_category - , boost::single_pass_traversal_tag - >::value - )); - } - }; - - template - class ForwardTraversalConcept { - public: - typedef typename boost::iterator_traversal::type traversal_category; - typedef typename boost::detail::iterator_traits::difference_type difference_type; - - void constraints() { - boost::function_requires< SinglePassIteratorConcept >(); - boost::function_requires< - boost::DefaultConstructibleConcept >(); - - typedef boost::mpl::and_< - boost::is_integral, - boost::mpl::bool_< std::numeric_limits::is_signed > - > difference_type_is_signed_integral; - - BOOST_STATIC_ASSERT(difference_type_is_signed_integral::value); - BOOST_STATIC_ASSERT( - (boost::is_convertible< - traversal_category - , boost::forward_traversal_tag - >::value - )); - } - }; - - template - class BidirectionalTraversalConcept { - public: - typedef typename boost::iterator_traversal::type traversal_category; - - void constraints() { - boost::function_requires< ForwardTraversalConcept >(); - - BOOST_STATIC_ASSERT( - (boost::is_convertible< - traversal_category - , boost::bidirectional_traversal_tag - >::value - )); - - --i; - (void)i--; - } - Iterator i; - }; - - template - class RandomAccessTraversalConcept { - public: - typedef typename boost::iterator_traversal::type traversal_category; - typedef typename boost::detail::iterator_traits::difference_type - difference_type; - - void constraints() { - boost::function_requires< BidirectionalTraversalConcept >(); - - BOOST_STATIC_ASSERT( - (boost::is_convertible< - traversal_category - , boost::random_access_traversal_tag - >::value - )); - - i += n; - i = i + n; - i = n + i; - i -= n; - i = i - n; - n = i - j; - } - difference_type n; - Iterator i, j; - }; - - //=========================================================================== - // Iterator Interoperability Concept - - namespace detail - { - - template - void interop_single_pass_constraints(Iterator1 const& i1, Iterator2 const& i2) - { - bool b; - b = i1 == i2; - b = i1 != i2; - - b = i2 == i1; - b = i2 != i1; - } - - template - void interop_rand_access_constraints(Iterator1 const& i1, Iterator2 const& i2, - boost::random_access_traversal_tag, boost::random_access_traversal_tag) - { - bool b; - typename boost::detail::iterator_traits::difference_type n; - b = i1 < i2; - b = i1 <= i2; - b = i1 > i2; - b = i1 >= i2; - n = i1 - i2; - - b = i2 < i1; - b = i2 <= i1; - b = i2 > i1; - b = i2 >= i1; - n = i2 - i1; - } - template - void interop_rand_access_constraints(Iterator1 const& i1, Iterator2 const& i2, - boost::single_pass_traversal_tag, boost::single_pass_traversal_tag) - { } - - } // namespace detail - - template - class InteroperableIteratorConcept - { - public: - typedef typename boost::detail::pure_traversal_tag< - typename boost::iterator_traversal< - Iterator - >::type - >::type traversal_category; - - typedef typename boost::detail::pure_traversal_tag< - typename boost::iterator_traversal< - ConstIterator - >::type - >::type const_traversal_category; - - void constraints() - { - boost::function_requires< SinglePassIteratorConcept >(); - boost::function_requires< SinglePassIteratorConcept >(); - - detail::interop_single_pass_constraints(i, ci); - detail::interop_rand_access_constraints(i, ci, traversal_category(), const_traversal_category()); - - ci = i; - } - Iterator i; - ConstIterator ci; - }; - -} // namespace boost_concepts - - -#endif // BOOST_ITERATOR_CONCEPTS_HPP diff --git a/include/boost/iterator/iterator_facade.hpp b/include/boost/iterator/iterator_facade.hpp deleted file mode 100644 index 3b40db2..0000000 --- a/include/boost/iterator/iterator_facade.hpp +++ /dev/null @@ -1,878 +0,0 @@ -// (C) Copyright David Abrahams 2002. -// (C) Copyright Jeremy Siek 2002. -// (C) Copyright Thomas Witt 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) -#ifndef BOOST_ITERATOR_FACADE_23022003THW_HPP -#define BOOST_ITERATOR_FACADE_23022003THW_HPP - -#include - -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include // this goes last - -namespace boost -{ - // This forward declaration is required for the friend declaration - // in iterator_core_access - template class iterator_facade; - - namespace detail - { - // A binary metafunction class that always returns bool. VC6 - // ICEs on mpl::always, probably because of the default - // parameters. - struct always_bool2 - { - template - struct apply - { - typedef bool type; - }; - }; - - // - // enable if for use in operator implementation. - // - template < - class Facade1 - , class Facade2 - , class Return - > - struct enable_if_interoperable -#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) - { - typedef typename mpl::if_< - mpl::or_< - is_convertible - , is_convertible - > - , Return - , int[3] - >::type type; - }; -#else - : ::boost::iterators::enable_if< - mpl::or_< - is_convertible - , is_convertible - > - , Return - > - {}; -#endif - - // - // Generates associated types for an iterator_facade with the - // given parameters. - // - template < - class ValueParam - , class CategoryOrTraversal - , class Reference - , class Difference - > - struct iterator_facade_types - { - typedef typename facade_iterator_category< - CategoryOrTraversal, ValueParam, Reference - >::type iterator_category; - - typedef typename remove_const::type value_type; - - typedef typename mpl::eval_if< - detail::iterator_writability_disabled - , add_pointer::type> - , add_pointer - >::type pointer; - -# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ - && (BOOST_WORKAROUND(_STLPORT_VERSION, BOOST_TESTED_AT(0x452)) \ - || BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, BOOST_TESTED_AT(310))) \ - || BOOST_WORKAROUND(BOOST_RWSTD_VER, BOOST_TESTED_AT(0x20101)) \ - || BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, <= 310) - - // To interoperate with some broken library/compiler - // combinations, user-defined iterators must be derived from - // std::iterator. It is possible to implement a standard - // library for broken compilers without this limitation. -# define BOOST_ITERATOR_FACADE_NEEDS_ITERATOR_BASE 1 - - typedef - iterator - base; -# endif - }; - - // iterators whose dereference operators reference the same value - // for all iterators into the same sequence (like many input - // iterators) need help with their postfix ++: the referenced - // value must be read and stored away before the increment occurs - // so that *a++ yields the originally referenced element and not - // the next one. - template - class postfix_increment_proxy - { - typedef typename iterator_value::type value_type; - public: - explicit postfix_increment_proxy(Iterator const& x) - : stored_value(*x) - {} - - // Returning a mutable reference allows nonsense like - // (*r++).mutate(), but it imposes fewer assumptions about the - // behavior of the value_type. In particular, recall taht - // (*r).mutate() is legal if operator* returns by value. - value_type& - operator*() const - { - return this->stored_value; - } - private: - mutable value_type stored_value; - }; - - // - // In general, we can't determine that such an iterator isn't - // writable -- we also need to store a copy of the old iterator so - // that it can be written into. - template - class writable_postfix_increment_proxy - { - typedef typename iterator_value::type value_type; - public: - explicit writable_postfix_increment_proxy(Iterator const& x) - : stored_value(*x) - , stored_iterator(x) - {} - - // Dereferencing must return a proxy so that both *r++ = o and - // value_type(*r++) can work. In this case, *r is the same as - // *r++, and the conversion operator below is used to ensure - // readability. - writable_postfix_increment_proxy const& - operator*() const - { - return *this; - } - - // Provides readability of *r++ - operator value_type&() const - { - return stored_value; - } - - // Provides writability of *r++ - template - T const& operator=(T const& x) const - { - *this->stored_iterator = x; - return x; - } - - // This overload just in case only non-const objects are writable - template - T& operator=(T& x) const - { - *this->stored_iterator = x; - return x; - } - - // Provides X(r++) - operator Iterator const&() const - { - return stored_iterator; - } - - private: - mutable value_type stored_value; - Iterator stored_iterator; - }; - -# ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION - - template - struct is_non_proxy_reference_impl - { - static Reference r; - - template - static typename mpl::if_< - is_convertible< - R const volatile* - , Value const volatile* - > - , char[1] - , char[2] - >::type& helper(R const&); - - BOOST_STATIC_CONSTANT(bool, value = sizeof(helper(r)) == 1); - }; - - template - struct is_non_proxy_reference - : mpl::bool_< - is_non_proxy_reference_impl::value - > - {}; -# else - template - struct is_non_proxy_reference - : is_convertible< - typename remove_reference::type - const volatile* - , Value const volatile* - > - {}; -# endif - - // A metafunction to choose the result type of postfix ++ - // - // Because the C++98 input iterator requirements say that *r++ has - // type T (value_type), implementations of some standard - // algorithms like lexicographical_compare may use constructions - // like: - // - // *r++ < *s++ - // - // If *r++ returns a proxy (as required if r is writable but not - // multipass), this sort of expression will fail unless the proxy - // supports the operator<. Since there are any number of such - // operations, we're not going to try to support them. Therefore, - // even if r++ returns a proxy, *r++ will only return a proxy if - // *r also returns a proxy. - template - struct postfix_increment_result - : mpl::eval_if< - mpl::and_< - // A proxy is only needed for readable iterators - is_convertible - - // No multipass iterator can have values that disappear - // before positions can be re-visited - , mpl::not_< - is_convertible< - typename iterator_category_to_traversal::type - , forward_traversal_tag - > - > - > - , mpl::if_< - is_non_proxy_reference - , postfix_increment_proxy - , writable_postfix_increment_proxy - > - , mpl::identity - > - {}; - - // operator->() needs special support for input iterators to strictly meet the - // standard's requirements. If *i is not a reference type, we must still - // produce a (constant) lvalue to which a pointer can be formed. We do that by - // returning an instantiation of this special proxy class template. - template - struct operator_arrow_proxy - { - operator_arrow_proxy(T const* px) : m_value(*px) {} - const T* operator->() const { return &m_value; } - // This function is needed for MWCW and BCC, which won't call operator-> - // again automatically per 13.3.1.2 para 8 - operator const T*() const { return &m_value; } - T m_value; - }; - - // A metafunction that gets the result type for operator->. Also - // has a static function make() which builds the result from a - // Reference - template - struct operator_arrow_result - { - // CWPro8.3 won't accept "operator_arrow_result::type", and we - // need that type below, so metafunction forwarding would be a - // losing proposition here. - typedef typename mpl::if_< - is_reference - , Pointer - , operator_arrow_proxy - >::type type; - - static type make(Reference x) - { - return type(&x); - } - }; - -# if BOOST_WORKAROUND(BOOST_MSVC, <= 1200) - // Deal with ETI - template<> - struct operator_arrow_result - { - typedef int type; - }; -# endif - - // A proxy return type for operator[], needed to deal with - // iterators that may invalidate referents upon destruction. - // Consider the temporary iterator in *(a + n) - template - class operator_brackets_proxy - { - // Iterator is actually an iterator_facade, so we do not have to - // go through iterator_traits to access the traits. - typedef typename Iterator::reference reference; - typedef typename Iterator::value_type value_type; - - public: - operator_brackets_proxy(Iterator const& iter) - : m_iter(iter) - {} - - operator reference() const - { - return *m_iter; - } - - operator_brackets_proxy& operator=(value_type const& val) - { - *m_iter = val; - return *this; - } - - private: - Iterator m_iter; - }; - - // A metafunction that determines whether operator[] must return a - // proxy, or whether it can simply return a copy of the value_type. - template - struct use_operator_brackets_proxy - : mpl::not_< - mpl::and_< - // Really we want an is_copy_constructible trait here, - // but is_POD will have to suffice in the meantime. - boost::is_POD - , iterator_writability_disabled - > - > - {}; - - template - struct operator_brackets_result - { - typedef typename mpl::if_< - use_operator_brackets_proxy - , operator_brackets_proxy - , Value - >::type type; - }; - - template - operator_brackets_proxy make_operator_brackets_result(Iterator const& iter, mpl::true_) - { - return operator_brackets_proxy(iter); - } - - template - typename Iterator::value_type make_operator_brackets_result(Iterator const& iter, mpl::false_) - { - return *iter; - } - - struct choose_difference_type - { - template - struct apply - : -# ifdef BOOST_NO_ONE_WAY_ITERATOR_INTEROP - iterator_difference -# elif BOOST_WORKAROUND(BOOST_MSVC, == 1200) - mpl::if_< - is_convertible - , typename I1::difference_type - , typename I2::difference_type - > -# else - mpl::eval_if< - is_convertible - , iterator_difference - , iterator_difference - > -# endif - {}; - - }; - } // namespace detail - - - // Macros which describe the declarations of binary operators -# ifdef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY -# define BOOST_ITERATOR_FACADE_INTEROP_HEAD(prefix, op, result_type) \ - template < \ - class Derived1, class V1, class TC1, class R1, class D1 \ - , class Derived2, class V2, class TC2, class R2, class D2 \ - > \ - prefix typename mpl::apply2::type \ - operator op( \ - iterator_facade const& lhs \ - , iterator_facade const& rhs) -# else -# define BOOST_ITERATOR_FACADE_INTEROP_HEAD(prefix, op, result_type) \ - template < \ - class Derived1, class V1, class TC1, class R1, class D1 \ - , class Derived2, class V2, class TC2, class R2, class D2 \ - > \ - prefix typename detail::enable_if_interoperable< \ - Derived1, Derived2 \ - , typename mpl::apply2::type \ - >::type \ - operator op( \ - iterator_facade const& lhs \ - , iterator_facade const& rhs) -# endif - -# define BOOST_ITERATOR_FACADE_PLUS_HEAD(prefix,args) \ - template \ - prefix Derived operator+ args - - // - // Helper class for granting access to the iterator core interface. - // - // The simple core interface is used by iterator_facade. The core - // interface of a user/library defined iterator type should not be made public - // so that it does not clutter the public interface. Instead iterator_core_access - // should be made friend so that iterator_facade can access the core - // interface through iterator_core_access. - // - class iterator_core_access - { -# if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) \ - || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) - // Tasteless as this may seem, making all members public allows member templates - // to work in the absence of member template friends. - public: -# else - - template friend class iterator_facade; - -# define BOOST_ITERATOR_FACADE_RELATION(op) \ - BOOST_ITERATOR_FACADE_INTEROP_HEAD(friend,op, detail::always_bool2); - - BOOST_ITERATOR_FACADE_RELATION(==) - BOOST_ITERATOR_FACADE_RELATION(!=) - - BOOST_ITERATOR_FACADE_RELATION(<) - BOOST_ITERATOR_FACADE_RELATION(>) - BOOST_ITERATOR_FACADE_RELATION(<=) - BOOST_ITERATOR_FACADE_RELATION(>=) -# undef BOOST_ITERATOR_FACADE_RELATION - - BOOST_ITERATOR_FACADE_INTEROP_HEAD( - friend, -, detail::choose_difference_type) - ; - - BOOST_ITERATOR_FACADE_PLUS_HEAD( - friend - , (iterator_facade const& - , typename Derived::difference_type) - ) - ; - - BOOST_ITERATOR_FACADE_PLUS_HEAD( - friend - , (typename Derived::difference_type - , iterator_facade const&) - ) - ; - -# endif - - template - static typename Facade::reference dereference(Facade const& f) - { - return f.dereference(); - } - - template - static void increment(Facade& f) - { - f.increment(); - } - - template - static void decrement(Facade& f) - { - f.decrement(); - } - - template - static bool equal(Facade1 const& f1, Facade2 const& f2, mpl::true_) - { - return f1.equal(f2); - } - - template - static bool equal(Facade1 const& f1, Facade2 const& f2, mpl::false_) - { - return f2.equal(f1); - } - - template - static void advance(Facade& f, typename Facade::difference_type n) - { - f.advance(n); - } - - template - static typename Facade1::difference_type distance_from( - Facade1 const& f1, Facade2 const& f2, mpl::true_) - { - return -f1.distance_to(f2); - } - - template - static typename Facade2::difference_type distance_from( - Facade1 const& f1, Facade2 const& f2, mpl::false_) - { - return f2.distance_to(f1); - } - - // - // Curiously Recurring Template interface. - // - template - static I& derived(iterator_facade& facade) - { - return *static_cast(&facade); - } - - template - static I const& derived(iterator_facade const& facade) - { - return *static_cast(&facade); - } - - private: - // objects of this class are useless - iterator_core_access(); //undefined - }; - - // - // iterator_facade - use as a public base class for defining new - // standard-conforming iterators. - // - template < - class Derived // The derived iterator type being constructed - , class Value - , class CategoryOrTraversal - , class Reference = Value& - , class Difference = std::ptrdiff_t - > - class iterator_facade -# ifdef BOOST_ITERATOR_FACADE_NEEDS_ITERATOR_BASE - : public detail::iterator_facade_types< - Value, CategoryOrTraversal, Reference, Difference - >::base -# undef BOOST_ITERATOR_FACADE_NEEDS_ITERATOR_BASE -# endif - { - private: - // - // Curiously Recurring Template interface. - // - Derived& derived() - { - return *static_cast(this); - } - - Derived const& derived() const - { - return *static_cast(this); - } - - typedef detail::iterator_facade_types< - Value, CategoryOrTraversal, Reference, Difference - > associated_types; - - protected: - // For use by derived classes - typedef iterator_facade iterator_facade_; - - public: - - typedef typename associated_types::value_type value_type; - typedef Reference reference; - typedef Difference difference_type; - typedef typename associated_types::pointer pointer; - typedef typename associated_types::iterator_category iterator_category; - - reference operator*() const - { - return iterator_core_access::dereference(this->derived()); - } - - typename detail::operator_arrow_result< - value_type - , reference - , pointer - >::type - operator->() const - { - return detail::operator_arrow_result< - value_type - , reference - , pointer - >::make(*this->derived()); - } - - typename detail::operator_brackets_result::type - operator[](difference_type n) const - { - typedef detail::use_operator_brackets_proxy use_proxy; - - return detail::make_operator_brackets_result( - this->derived() + n - , use_proxy() - ); - } - - Derived& operator++() - { - iterator_core_access::increment(this->derived()); - return this->derived(); - } - -# if BOOST_WORKAROUND(BOOST_MSVC, == 1200) - typename detail::postfix_increment_result::type - operator++(int) - { - typename detail::postfix_increment_result::type - tmp(this->derived()); - ++*this; - return tmp; - } -# endif - - Derived& operator--() - { - iterator_core_access::decrement(this->derived()); - return this->derived(); - } - - Derived operator--(int) - { - Derived tmp(this->derived()); - --*this; - return tmp; - } - - Derived& operator+=(difference_type n) - { - iterator_core_access::advance(this->derived(), n); - return this->derived(); - } - - Derived& operator-=(difference_type n) - { - iterator_core_access::advance(this->derived(), -n); - return this->derived(); - } - - Derived operator-(difference_type x) const - { - Derived result(this->derived()); - return result -= x; - } - -# if BOOST_WORKAROUND(BOOST_MSVC, <= 1200) - // There appears to be a bug which trashes the data of classes - // derived from iterator_facade when they are assigned unless we - // define this assignment operator. This bug is only revealed - // (so far) in STLPort debug mode, but it's clearly a codegen - // problem so we apply the workaround for all MSVC6. - iterator_facade& operator=(iterator_facade const&) - { - return *this; - } -# endif - }; - -# if !BOOST_WORKAROUND(BOOST_MSVC, == 1200) - template - typename detail::postfix_increment_result::type - operator++( - iterator_facade& i - , int - ) - { - typename detail::postfix_increment_result::type - tmp(*static_cast(&i)); - - ++i; - - return tmp; - } -# endif - - - // - // Comparison operator implementation. The library supplied operators - // enables the user to provide fully interoperable constant/mutable - // iterator types. I.e. the library provides all operators - // for all mutable/constant iterator combinations. - // - // Note though that this kind of interoperability for constant/mutable - // iterators is not required by the standard for container iterators. - // All the standard asks for is a conversion mutable -> constant. - // Most standard library implementations nowadays provide fully interoperable - // iterator implementations, but there are still heavily used implementations - // that do not provide them. (Actually it's even worse, they do not provide - // them for only a few iterators.) - // - // ?? Maybe a BOOST_ITERATOR_NO_FULL_INTEROPERABILITY macro should - // enable the user to turn off mixed type operators - // - // The library takes care to provide only the right operator overloads. - // I.e. - // - // bool operator==(Iterator, Iterator); - // bool operator==(ConstIterator, Iterator); - // bool operator==(Iterator, ConstIterator); - // bool operator==(ConstIterator, ConstIterator); - // - // ... - // - // In order to do so it uses c++ idioms that are not yet widely supported - // by current compiler releases. The library is designed to degrade gracefully - // in the face of compiler deficiencies. In general compiler - // deficiencies result in less strict error checking and more obscure - // error messages, functionality is not affected. - // - // For full operation compiler support for "Substitution Failure Is Not An Error" - // (aka. enable_if) and boost::is_convertible is required. - // - // The following problems occur if support is lacking. - // - // Pseudo code - // - // --------------- - // AdaptorA a1; - // AdaptorA a2; - // - // // This will result in a no such overload error in full operation - // // If enable_if or is_convertible is not supported - // // The instantiation will fail with an error hopefully indicating that - // // there is no operator== for Iterator1, Iterator2 - // // The same will happen if no enable_if is used to remove - // // false overloads from the templated conversion constructor - // // of AdaptorA. - // - // a1 == a2; - // ---------------- - // - // AdaptorA a; - // AdaptorB b; - // - // // This will result in a no such overload error in full operation - // // If enable_if is not supported the static assert used - // // in the operator implementation will fail. - // // This will accidently work if is_convertible is not supported. - // - // a == b; - // ---------------- - // - -# ifdef BOOST_NO_ONE_WAY_ITERATOR_INTEROP -# define BOOST_ITERATOR_CONVERTIBLE(a,b) mpl::true_() -# else -# define BOOST_ITERATOR_CONVERTIBLE(a,b) is_convertible() -# endif - -# define BOOST_ITERATOR_FACADE_INTEROP(op, result_type, return_prefix, base_op) \ - BOOST_ITERATOR_FACADE_INTEROP_HEAD(inline, op, result_type) \ - { \ - /* For those compilers that do not support enable_if */ \ - BOOST_STATIC_ASSERT(( \ - is_interoperable< Derived1, Derived2 >::value \ - )); \ - return_prefix iterator_core_access::base_op( \ - *static_cast(&lhs) \ - , *static_cast(&rhs) \ - , BOOST_ITERATOR_CONVERTIBLE(Derived2,Derived1) \ - ); \ - } - -# define BOOST_ITERATOR_FACADE_RELATION(op, return_prefix, base_op) \ - BOOST_ITERATOR_FACADE_INTEROP( \ - op \ - , detail::always_bool2 \ - , return_prefix \ - , base_op \ - ) - - BOOST_ITERATOR_FACADE_RELATION(==, return, equal) - BOOST_ITERATOR_FACADE_RELATION(!=, return !, equal) - - BOOST_ITERATOR_FACADE_RELATION(<, return 0 >, distance_from) - BOOST_ITERATOR_FACADE_RELATION(>, return 0 <, distance_from) - BOOST_ITERATOR_FACADE_RELATION(<=, return 0 >=, distance_from) - BOOST_ITERATOR_FACADE_RELATION(>=, return 0 <=, distance_from) -# undef BOOST_ITERATOR_FACADE_RELATION - - // operator- requires an additional part in the static assertion - BOOST_ITERATOR_FACADE_INTEROP( - - - , detail::choose_difference_type - , return - , distance_from - ) -# undef BOOST_ITERATOR_FACADE_INTEROP -# undef BOOST_ITERATOR_FACADE_INTEROP_HEAD - -# define BOOST_ITERATOR_FACADE_PLUS(args) \ - BOOST_ITERATOR_FACADE_PLUS_HEAD(inline, args) \ - { \ - Derived tmp(static_cast(i)); \ - return tmp += n; \ - } - -BOOST_ITERATOR_FACADE_PLUS(( - iterator_facade const& i - , typename Derived::difference_type n -)) - -BOOST_ITERATOR_FACADE_PLUS(( - typename Derived::difference_type n - , iterator_facade const& i -)) -# undef BOOST_ITERATOR_FACADE_PLUS -# undef BOOST_ITERATOR_FACADE_PLUS_HEAD - -} // namespace boost - -#include - -#endif // BOOST_ITERATOR_FACADE_23022003THW_HPP diff --git a/include/boost/iterator/iterator_traits.hpp b/include/boost/iterator/iterator_traits.hpp deleted file mode 100644 index 93e282e..0000000 --- a/include/boost/iterator/iterator_traits.hpp +++ /dev/null @@ -1,92 +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 ITERATOR_TRAITS_DWA200347_HPP -# define ITERATOR_TRAITS_DWA200347_HPP - -# include -# include - -namespace boost { - -// Unfortunately, g++ 2.95.x chokes when we define a class template -// iterator_category which has the same name as its -// std::iterator_category() function, probably due in part to the -// "std:: is visible globally" hack it uses. Use -// BOOST_ITERATOR_CATEGORY to write code that's portable to older -// GCCs. - -# if BOOST_WORKAROUND(__GNUC__, <= 2) -# define BOOST_ITERATOR_CATEGORY iterator_category_ -# else -# define BOOST_ITERATOR_CATEGORY iterator_category -# endif - - -template -struct iterator_value -{ - typedef typename detail::iterator_traits::value_type type; -}; - -template -struct iterator_reference -{ - typedef typename detail::iterator_traits::reference type; -}; - - -template -struct iterator_pointer -{ - typedef typename detail::iterator_traits::pointer type; -}; - -template -struct iterator_difference -{ - typedef typename detail::iterator_traits::difference_type type; -}; - -template -struct BOOST_ITERATOR_CATEGORY -{ - typedef typename detail::iterator_traits::iterator_category type; -}; - -# if BOOST_WORKAROUND(BOOST_MSVC, <= 1200) -template <> -struct iterator_value -{ - typedef void type; -}; - -template <> -struct iterator_reference -{ - typedef void type; -}; - -template <> -struct iterator_pointer -{ - typedef void type; -}; - -template <> -struct iterator_difference -{ - typedef void type; -}; - -template <> -struct BOOST_ITERATOR_CATEGORY -{ - typedef void type; -}; -# endif - -} // namespace boost::iterator - -#endif // ITERATOR_TRAITS_DWA200347_HPP diff --git a/include/boost/iterator/new_iterator_tests.hpp b/include/boost/iterator/new_iterator_tests.hpp deleted file mode 100644 index 8bb47b0..0000000 --- a/include/boost/iterator/new_iterator_tests.hpp +++ /dev/null @@ -1,264 +0,0 @@ -#ifndef BOOST_NEW_ITERATOR_TESTS_HPP -# define BOOST_NEW_ITERATOR_TESTS_HPP - -// -// Copyright (c) David Abrahams 2001. -// Copyright (c) Jeremy Siek 2001-2003. -// 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) -// - -// This is meant to be the beginnings of a comprehensive, generic -// test suite for STL concepts such as iterators and containers. -// -// Revision History: -// 28 Oct 2002 Started update for new iterator categories -// (Jeremy Siek) -// 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 -# include -# include - -# include -# include - -namespace boost { - - -// Do separate tests for *i++ so we can treat, e.g., smart pointers, -// as readable and/or writable iterators. -template -void readable_iterator_traversal_test(Iterator i1, T v, mpl::true_) -{ - T v2(*i1++); - assert(v == v2); -} - -template -void readable_iterator_traversal_test(const Iterator i1, T v, mpl::false_) -{} - -template -void writable_iterator_traversal_test(Iterator i1, T v, mpl::true_) -{ - ++i1; // we just wrote into that position - *i1++ = v; - Iterator x(i1++); - (void)x; -} - -template -void writable_iterator_traversal_test(const Iterator i1, T v, mpl::false_) -{} - - -// Preconditions: *i == v -template -void readable_iterator_test(const Iterator i1, T v) -{ - Iterator i2(i1); // Copy Constructible - typedef typename detail::iterator_traits::reference ref_t; - ref_t r1 = *i1; - ref_t r2 = *i2; - T v1 = r1; - T v2 = r2; - assert(v1 == v); - assert(v2 == v); - -# if !BOOST_WORKAROUND(__MWERKS__, <= 0x2407) - readable_iterator_traversal_test(i1, v, detail::is_postfix_incrementable()); - - // I think we don't really need this as it checks the same things as - // the above code. - BOOST_STATIC_ASSERT(is_readable_iterator::value); -# endif -} - -template -void writable_iterator_test(Iterator i, T v, T v2) -{ - Iterator i2(i); // Copy Constructible - *i2 = v; - -# if !BOOST_WORKAROUND(__MWERKS__, <= 0x2407) - writable_iterator_traversal_test( - i, v2, mpl::and_< - detail::is_incrementable - , detail::is_postfix_incrementable - >()); -# endif -} - -template -void swappable_iterator_test(Iterator i, Iterator j) -{ - Iterator i2(i), j2(j); - typename detail::iterator_traits::value_type bi = *i, bj = *j; - iter_swap(i2, j2); - typename detail::iterator_traits::value_type ai = *i, aj = *j; - assert(bi == aj && bj == ai); -} - -template -void constant_lvalue_iterator_test(Iterator i, T v1) -{ - Iterator i2(i); - typedef typename detail::iterator_traits::value_type value_type; - typedef typename detail::iterator_traits::reference reference; - BOOST_STATIC_ASSERT((is_same::value)); - const T& v2 = *i2; - assert(v1 == v2); -# ifndef BOOST_NO_LVALUE_RETURN_DETECTION - BOOST_STATIC_ASSERT(is_lvalue_iterator::value); - BOOST_STATIC_ASSERT(!is_non_const_lvalue_iterator::value); -# endif -} - -template -void non_const_lvalue_iterator_test(Iterator i, T v1, T v2) -{ - Iterator i2(i); - typedef typename detail::iterator_traits::value_type value_type; - typedef typename detail::iterator_traits::reference reference; - BOOST_STATIC_ASSERT((is_same::value)); - T& v3 = *i2; - assert(v1 == v3); - - // A non-const lvalue iterator is not neccessarily writable, but we - // are assuming the value_type is assignable here - *i = v2; - - T& v4 = *i2; - assert(v2 == v4); -# ifndef BOOST_NO_LVALUE_RETURN_DETECTION - BOOST_STATIC_ASSERT(is_lvalue_iterator::value); - BOOST_STATIC_ASSERT(is_non_const_lvalue_iterator::value); -# endif -} - -template -void forward_readable_iterator_test(Iterator i, Iterator j, T val1, T val2) -{ - Iterator i2; - Iterator i3(i); - i2 = i; - assert(i2 == i3); - assert(i != j); - assert(i2 != j); - readable_iterator_test(i, val1); - readable_iterator_test(i2, val1); - readable_iterator_test(i3, val1); - - assert(i == i2++); - assert(i != ++i3); - - readable_iterator_test(i2, val2); - readable_iterator_test(i3, val2); - - readable_iterator_test(i, val1); -} - -template -void forward_swappable_iterator_test(Iterator i, Iterator j, T val1, T val2) -{ - forward_readable_iterator_test(i, j, val1, val2); - Iterator i2 = i; - ++i2; - swappable_iterator_test(i, i2); -} - -// bidirectional -// Preconditions: *i == v1, *++i == v2 -template -void bidirectional_readable_iterator_test(Iterator i, T v1, T v2) -{ - Iterator j(i); - ++j; - forward_readable_iterator_test(i, j, v1, v2); - ++i; - - Iterator i1 = i, i2 = i; - - assert(i == i1--); - assert(i != --i2); - - readable_iterator_test(i, v2); - readable_iterator_test(i1, v1); - readable_iterator_test(i2, v1); - - --i; - assert(i == i1); - assert(i == i2); - ++i1; - ++i2; - - readable_iterator_test(i, v1); - readable_iterator_test(i1, v2); - readable_iterator_test(i2, v2); -} - -// random access -// Preconditions: [i,i+N) is a valid range -template -void random_access_readable_iterator_test(Iterator i, int N, TrueVals vals) -{ - bidirectional_readable_iterator_test(i, vals[0], vals[1]); - const Iterator j = i; - int c; - - for (c = 0; c < N-1; ++c) - { - assert(i == j + c); - assert(*i == vals[c]); - typename detail::iterator_traits::value_type x = j[c]; - assert(*i == x); - 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]); - typename detail::iterator_traits::value_type x = j[N - 1 - c]; - assert(*i == x); - Iterator q = k - c; - assert(*i == *q); - assert(i > j); - assert(i >= j); - assert(j <= i); - assert(j < i); - --i; - } -} - -} // namespace boost - -# include - -#endif // BOOST_NEW_ITERATOR_TESTS_HPP diff --git a/include/boost/iterator/permutation_iterator.hpp b/include/boost/iterator/permutation_iterator.hpp deleted file mode 100644 index 1cd0118..0000000 --- a/include/boost/iterator/permutation_iterator.hpp +++ /dev/null @@ -1,67 +0,0 @@ -// (C) Copyright Toon Knapen 2001. -// (C) Copyright David Abrahams 2003. -// (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) - -#ifndef BOOST_PERMUTATION_ITERATOR_HPP -#define BOOST_PERMUTATION_ITERATOR_HPP - -#include - -#include - - -namespace boost -{ - -template< class ElementIterator - , class IndexIterator> -class permutation_iterator - : public iterator_adaptor< - permutation_iterator - , IndexIterator, typename detail::iterator_traits::value_type - , use_default, typename detail::iterator_traits::reference> -{ - typedef iterator_adaptor< - permutation_iterator - , IndexIterator, typename detail::iterator_traits::value_type - , use_default, typename detail::iterator_traits::reference> super_t; - - friend class iterator_core_access; - -public: - permutation_iterator() : m_elt_iter() {} - - explicit permutation_iterator(ElementIterator x, IndexIterator y) - : super_t(y), m_elt_iter(x) {} - - template - permutation_iterator( - permutation_iterator const& r - , typename enable_if_convertible::type* = 0 - , typename enable_if_convertible::type* = 0 - ) - : super_t(r.base()), m_elt_iter(r.m_elt_iter) - {} - -private: - typename super_t::reference dereference() const - { return *(m_elt_iter + *this->base()); } - - ElementIterator m_elt_iter; -}; - - -template -permutation_iterator -make_permutation_iterator( ElementIterator e, IndexIterator i ) -{ - return permutation_iterator( e, i ); -} - - -} // namespace boost - -#endif diff --git a/include/boost/iterator/reverse_iterator.hpp b/include/boost/iterator/reverse_iterator.hpp deleted file mode 100644 index 97b6b48..0000000 --- a/include/boost/iterator/reverse_iterator.hpp +++ /dev/null @@ -1,69 +0,0 @@ -// (C) Copyright David Abrahams 2002. -// (C) Copyright Jeremy Siek 2002. -// (C) Copyright Thomas Witt 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) -#ifndef BOOST_REVERSE_ITERATOR_23022003THW_HPP -#define BOOST_REVERSE_ITERATOR_23022003THW_HPP - -#include -#include -#include - -namespace boost -{ - - // - // - // - template - class reverse_iterator - : public iterator_adaptor< reverse_iterator, Iterator > - { - typedef iterator_adaptor< reverse_iterator, Iterator > super_t; - - friend class iterator_core_access; - - public: - reverse_iterator() {} - - explicit reverse_iterator(Iterator x) - : super_t(x) {} - - template - reverse_iterator( - reverse_iterator const& r - , typename enable_if_convertible::type* = 0 - ) - : super_t(r.base()) - {} - - private: - typename super_t::reference dereference() const { return *boost::prior(this->base()); } - - void increment() { --this->base_reference(); } - void decrement() { ++this->base_reference(); } - - void advance(typename super_t::difference_type n) - { - this->base_reference() += -n; - } - - template - typename super_t::difference_type - distance_to(reverse_iterator const& y) const - { - return this->base_reference() - y.base(); - } - }; - - template - reverse_iterator make_reverse_iterator(BidirectionalIterator x) - { - return reverse_iterator(x); - } - -} // namespace boost - -#endif // BOOST_REVERSE_ITERATOR_23022003THW_HPP diff --git a/include/boost/iterator/transform_iterator.hpp b/include/boost/iterator/transform_iterator.hpp deleted file mode 100644 index d637527..0000000 --- a/include/boost/iterator/transform_iterator.hpp +++ /dev/null @@ -1,188 +0,0 @@ -// (C) Copyright David Abrahams 2002. -// (C) Copyright Jeremy Siek 2002. -// (C) Copyright Thomas Witt 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) -#ifndef BOOST_TRANSFORM_ITERATOR_23022003THW_HPP -#define BOOST_TRANSFORM_ITERATOR_23022003THW_HPP - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310)) -# include - -#endif -#include - - -namespace boost -{ - template - class transform_iterator; - - namespace detail - { - - template - struct function_object_result - { - typedef typename UnaryFunction::result_type type; - }; - -#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION - template - struct function_object_result - { - typedef Return type; - }; -#endif - - // Compute the iterator_adaptor instantiation to be used for transform_iterator - template - struct transform_iterator_base - { - private: - // By default, dereferencing the iterator yields the same as - // the function. Do we need to adjust the way - // function_object_result is computed for the standard - // proposal (e.g. using Doug's result_of)? - typedef typename ia_dflt_help< - Reference - , function_object_result - >::type reference; - - // To get the default for Value: remove any reference on the - // result type, but retain any constness to signal - // non-writability. Note that if we adopt Thomas' suggestion - // to key non-writability *only* on the Reference argument, - // we'd need to strip constness here as well. - typedef typename ia_dflt_help< - Value - , remove_reference - >::type cv_value_type; - - public: - typedef iterator_adaptor< - transform_iterator - , Iterator - , cv_value_type - , use_default // Leave the traversal category alone - , reference - > type; - }; - } - - template - class transform_iterator - : public detail::transform_iterator_base::type - { - typedef typename - detail::transform_iterator_base::type - super_t; - - friend class iterator_core_access; - - public: - transform_iterator() { } - - transform_iterator(Iterator const& x, UnaryFunction f) - : super_t(x), m_f(f) { } - - explicit transform_iterator(Iterator const& x) - : super_t(x) - { - // Pro8 is a little too aggressive about instantiating the - // body of this function. -#if !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) - // don't provide this constructor if UnaryFunction is a - // function pointer type, since it will be 0. Too dangerous. - BOOST_STATIC_ASSERT(is_class::value); -#endif - } - - template< - class OtherUnaryFunction - , class OtherIterator - , class OtherReference - , class OtherValue> - transform_iterator( - transform_iterator const& t - , typename enable_if_convertible::type* = 0 -#if !BOOST_WORKAROUND(BOOST_MSVC, == 1310) - , typename enable_if_convertible::type* = 0 -#endif - ) - : super_t(t.base()), m_f(t.functor()) - {} - - UnaryFunction functor() const - { return m_f; } - - private: - typename super_t::reference dereference() const - { return m_f(*this->base()); } - - // Probably should be the initial base class so it can be - // optimized away via EBO if it is an empty class. - UnaryFunction m_f; - }; - - template - transform_iterator - make_transform_iterator(Iterator it, UnaryFunction fun) - { - return transform_iterator(it, fun); - } - - // Version which allows explicit specification of the UnaryFunction - // type. - // - // This generator is not provided if UnaryFunction is a function - // pointer type, because it's too dangerous: the default-constructed - // function pointer in the iterator be 0, leading to a runtime - // crash. - template -#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) - typename mpl::if_< -#else - typename iterators::enable_if< -#endif - is_class // We should probably find a cheaper test than is_class<> - , transform_iterator -#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) - , int[3] -#endif - >::type - make_transform_iterator(Iterator it) - { - return transform_iterator(it, UnaryFunction()); - } - -#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) - template - transform_iterator< Return (*)(Argument), Iterator, Return> - make_transform_iterator(Iterator it, Return (*fun)(Argument)) - { - return transform_iterator(it, fun); - } -#endif - -} // namespace boost - -#include - -#endif // BOOST_TRANSFORM_ITERATOR_23022003THW_HPP diff --git a/include/boost/iterator/zip_iterator.hpp b/include/boost/iterator/zip_iterator.hpp deleted file mode 100755 index 72ab9a3..0000000 --- a/include/boost/iterator/zip_iterator.hpp +++ /dev/null @@ -1,599 +0,0 @@ -// (C) Copyright David Abrahams and Thomas Becker 2000. 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. -// -// 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) - -#ifndef BOOST_ZIP_ITERATOR_TMB_07_13_2003_HPP_ - -#include -#include -#include -#include -#include // for enable_if_convertible -#include -#include - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace boost { - - // Zip iterator forward declaration for zip_iterator_base - template - class zip_iterator; - - // One important design goal of the zip_iterator is to isolate all - // functionality whose implementation relies on the current tuple - // implementation. This goal has been achieved as follows: Inside - // the namespace detail there is a namespace tuple_impl_specific. - // This namespace encapsulates all functionality that is specific - // to the current Boost tuple implementation. More precisely, the - // namespace tuple_impl_specific provides the following tuple - // algorithms and meta-algorithms for the current Boost tuple - // implementation: - // - // tuple_meta_transform - // tuple_meta_accumulate - // tuple_transform - // tuple_for_each - // - // If the tuple implementation changes, all that needs to be - // replaced is the implementation of these four (meta-)algorithms. - - namespace detail - { - - // Functors to be used with tuple algorithms - // - template - class advance_iterator - { - public: - advance_iterator(DiffType step) : m_step(step) {} - - template - void operator()(Iterator& it) const - { it += m_step; } - - private: - DiffType m_step; - }; - // - struct increment_iterator - { - template - void operator()(Iterator& it) - { ++it; } - }; - // - struct decrement_iterator - { - template - void operator()(Iterator& it) - { --it; } - }; - // - struct dereference_iterator - { - template - struct apply - { - typedef typename - iterator_traits::reference - type; - }; - - template - typename apply::type operator()(Iterator const& it) - { return *it; } - }; - - - // The namespace tuple_impl_specific provides two meta- - // algorithms and two algorithms for tuples. - // - namespace tuple_impl_specific - { - // Meta-transform algorithm for tuples - // - template - struct tuple_meta_transform; - - template - struct tuple_meta_transform_impl - { - typedef tuples::cons< - typename mpl::apply1< - typename mpl::lambda::type - , typename Tuple::head_type - >::type - , typename tuple_meta_transform< - typename Tuple::tail_type - , UnaryMetaFun - >::type - > type; - }; - - template - struct tuple_meta_transform - : mpl::eval_if< - boost::is_same - , mpl::identity - , tuple_meta_transform_impl - > - { - }; - - // Meta-accumulate algorithm for tuples. Note: The template - // parameter StartType corresponds to the initial value in - // ordinary accumulation. - // - template - struct tuple_meta_accumulate; - - template< - typename Tuple - , class BinaryMetaFun - , typename StartType - > - struct tuple_meta_accumulate_impl - { - typedef typename mpl::apply2< - typename mpl::lambda::type - , typename Tuple::head_type - , typename tuple_meta_accumulate< - typename Tuple::tail_type - , BinaryMetaFun - , StartType - >::type - >::type type; - }; - - template< - typename Tuple - , class BinaryMetaFun - , typename StartType - > - struct tuple_meta_accumulate - : mpl::eval_if< -#if BOOST_WORKAROUND(BOOST_MSVC, == 1200) - mpl::or_< -#endif - boost::is_same -#if BOOST_WORKAROUND(BOOST_MSVC, == 1200) - , boost::is_same - > -#endif - , mpl::identity - , tuple_meta_accumulate_impl< - Tuple - , BinaryMetaFun - , StartType - > - > - { - }; - -#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ - || ( \ - BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, != 0) && defined(_MSC_VER) \ - ) -// Not sure why intel's partial ordering fails in this case, but I'm -// assuming int's an MSVC bug-compatibility feature. - -# define BOOST_TUPLE_ALGO_DISPATCH -# define BOOST_TUPLE_ALGO(algo) algo##_impl -# define BOOST_TUPLE_ALGO_TERMINATOR , int -# define BOOST_TUPLE_ALGO_RECURSE , ... -#else -# define BOOST_TUPLE_ALGO(algo) algo -# define BOOST_TUPLE_ALGO_TERMINATOR -# define BOOST_TUPLE_ALGO_RECURSE -#endif - - // transform algorithm for tuples. The template parameter Fun - // must be a unary functor which is also a unary metafunction - // class that computes its return type based on its argument - // type. For example: - // - // struct to_ptr - // { - // template - // struct apply - // { - // typedef Arg* type; - // } - // - // template - // Arg* operator()(Arg x); - // }; - template - tuples::null_type BOOST_TUPLE_ALGO(tuple_transform) - (tuples::null_type const&, Fun BOOST_TUPLE_ALGO_TERMINATOR) - { return tuples::null_type(); } - - template - typename tuple_meta_transform< - Tuple - , Fun - >::type - - BOOST_TUPLE_ALGO(tuple_transform)( - const Tuple& t, - Fun f - BOOST_TUPLE_ALGO_RECURSE - ) - { - typedef typename tuple_meta_transform< - BOOST_DEDUCED_TYPENAME Tuple::tail_type - , Fun - >::type transformed_tail_type; - - return tuples::cons< - BOOST_DEDUCED_TYPENAME mpl::apply1< - Fun, BOOST_DEDUCED_TYPENAME Tuple::head_type - >::type - , transformed_tail_type - >( - f(boost::tuples::get<0>(t)), tuple_transform(t.get_tail(), f) - ); - } - -#ifdef BOOST_TUPLE_ALGO_DISPATCH - template - typename tuple_meta_transform< - Tuple - , Fun - >::type - - tuple_transform( - const Tuple& t, - Fun f - ) - { - return tuple_transform_impl(t, f, 1); - } -#endif - - // for_each algorithm for tuples. - // - template - Fun BOOST_TUPLE_ALGO(tuple_for_each)( - tuples::null_type - , Fun f BOOST_TUPLE_ALGO_TERMINATOR - ) - { return f; } - - - template - Fun BOOST_TUPLE_ALGO(tuple_for_each)( - Tuple& t - , Fun f BOOST_TUPLE_ALGO_RECURSE) - { - f( t.get_head() ); - return tuple_for_each(t.get_tail(), f); - } - -#ifdef BOOST_TUPLE_ALGO_DISPATCH - template - Fun - tuple_for_each( - Tuple& t, - Fun f - ) - { - return tuple_for_each_impl(t, f, 1); - } -#endif - - // Equality of tuples. NOTE: "==" for tuples currently (7/2003) - // has problems under some compilers, so I just do my own. - // No point in bringing in a bunch of #ifdefs here. This is - // going to go away with the next tuple implementation anyway. - // - bool tuple_equal(tuples::null_type, tuples::null_type) - { return true; } - - template - bool tuple_equal( - Tuple1 const& t1, - Tuple2 const& t2 - ) - { - return t1.get_head() == t2.get_head() && - tuple_equal(t1.get_tail(), t2.get_tail()); - } - } - // - // end namespace tuple_impl_specific - - template - struct iterator_reference - { - typedef typename iterator_traits::reference type; - }; - -#ifdef BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT - // Hack because BOOST_MPL_AUX_LAMBDA_SUPPORT doesn't seem to work - // out well. Instantiating the nested apply template also - // requires instantiating iterator_traits on the - // placeholder. Instead we just specialize it as a metafunction - // class. - template<> - struct iterator_reference - { - template - struct apply : iterator_reference {}; - }; -#endif - - // Metafunction to obtain the type of the tuple whose element types - // are the reference types of an iterator tuple. - // - template - struct tuple_of_references - : tuple_impl_specific::tuple_meta_transform< - IteratorTuple, - iterator_reference - > - { - }; - - // Metafunction to obtain the minimal traversal tag in a tuple - // of iterators. - // - template - struct minimum_traversal_category_in_iterator_tuple - { - typedef typename tuple_impl_specific::tuple_meta_transform< - IteratorTuple - , iterator_traversal<> - >::type tuple_of_traversal_tags; - - typedef typename tuple_impl_specific::tuple_meta_accumulate< - tuple_of_traversal_tags - , minimum_category<> - , random_access_traversal_tag - >::type type; - }; - -#if BOOST_WORKAROUND(BOOST_MSVC, == 1200) // ETI workaround - template <> - struct minimum_traversal_category_in_iterator_tuple - { - typedef int type; - }; -#endif - - // We need to call tuple_meta_accumulate with mpl::and_ as the - // accumulating functor. To this end, we need to wrap it into - // a struct that has exactly two arguments (that is, template - // parameters) and not five, like mpl::and_ does. - // - template - struct and_with_two_args - : mpl::and_ - { - }; - -# ifdef BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT - // Hack because BOOST_MPL_AUX_LAMBDA_SUPPORT doesn't seem to work - // out well. In this case I think it's an MPL bug - template<> - struct and_with_two_args - { - template - struct apply : mpl::and_ - {}; - }; -# endif - - /////////////////////////////////////////////////////////////////// - // - // Class zip_iterator_base - // - // Builds and exposes the iterator facade type from which the zip - // iterator will be derived. - // - template - struct zip_iterator_base - { - private: - // Reference type is the type of the tuple obtained from the - // iterators' reference types. - typedef typename - detail::tuple_of_references::type reference; - - // Value type is the same as reference type. - typedef reference value_type; - - // Difference type is the first iterator's difference type - typedef typename iterator_traits< - typename tuples::element<0, IteratorTuple>::type - >::difference_type difference_type; - - // Traversal catetgory is the minimum traversal category in the - // iterator tuple. - typedef typename - detail::minimum_traversal_category_in_iterator_tuple< - IteratorTuple - >::type traversal_category; - public: - - // The iterator facade type from which the zip iterator will - // be derived. - typedef iterator_facade< - zip_iterator, - value_type, - traversal_category, - reference, - difference_type - > type; - }; - - template <> - struct zip_iterator_base - { - typedef int type; - }; - } - - ///////////////////////////////////////////////////////////////////// - // - // zip_iterator class definition - // - template - class zip_iterator : - public detail::zip_iterator_base::type - { - - // Typedef super_t as our base class. - typedef typename - detail::zip_iterator_base::type super_t; - - // iterator_core_access is the iterator's best friend. - friend class iterator_core_access; - - public: - - // Construction - // ============ - - // Default constructor - zip_iterator() { } - - // Constructor from iterator tuple - zip_iterator(IteratorTuple iterator_tuple) - : m_iterator_tuple(iterator_tuple) - { } - - // Copy constructor - template - zip_iterator( - const zip_iterator& other, - typename enable_if_convertible< - OtherIteratorTuple, - IteratorTuple - >::type* = 0 - ) : m_iterator_tuple(other.get_iterator_tuple()) - {} - - // Get method for the iterator tuple. - const IteratorTuple& get_iterator_tuple() const - { return m_iterator_tuple; } - - private: - - // Implementation of Iterator Operations - // ===================================== - - // Dereferencing returns a tuple built from the dereferenced - // iterators in the iterator tuple. - typename super_t::reference dereference() const - { - return detail::tuple_impl_specific::tuple_transform( - get_iterator_tuple(), - detail::dereference_iterator() - ); - } - - // Two zip iterators are equal if all iterators in the iterator - // tuple are equal. NOTE: It should be possible to implement this - // as - // - // return get_iterator_tuple() == other.get_iterator_tuple(); - // - // but equality of tuples currently (7/2003) does not compile - // under several compilers. No point in bringing in a bunch - // of #ifdefs here. - // - template - bool equal(const zip_iterator& other) const - { - return detail::tuple_impl_specific::tuple_equal( - get_iterator_tuple(), - other.get_iterator_tuple() - ); - } - - // Advancing a zip iterator means to advance all iterators in the - // iterator tuple. - void advance(typename super_t::difference_type n) - { - detail::tuple_impl_specific::tuple_for_each( - m_iterator_tuple, - detail::advance_iterator(n) - ); - } - // Incrementing a zip iterator means to increment all iterators in - // the iterator tuple. - void increment() - { - detail::tuple_impl_specific::tuple_for_each( - m_iterator_tuple, - detail::increment_iterator() - ); - } - - // Decrementing a zip iterator means to decrement all iterators in - // the iterator tuple. - void decrement() - { - detail::tuple_impl_specific::tuple_for_each( - m_iterator_tuple, - detail::decrement_iterator() - ); - } - - // Distance is calculated using the first iterator in the tuple. - template - typename super_t::difference_type distance_to( - const zip_iterator& other - ) const - { - return boost::tuples::get<0>(other.get_iterator_tuple()) - - boost::tuples::get<0>(this->get_iterator_tuple()); - } - - // Data Members - // ============ - - // The iterator tuple. - IteratorTuple m_iterator_tuple; - - }; - - // Make function for zip iterator - // - template - zip_iterator - make_zip_iterator(IteratorTuple t) - { return zip_iterator(t); } - -} - -#endif diff --git a/include/boost/iterator_adaptors.hpp b/include/boost/iterator_adaptors.hpp deleted file mode 100644 index 7058153..0000000 --- a/include/boost/iterator_adaptors.hpp +++ /dev/null @@ -1,10 +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) -#ifndef ITERATOR_ADAPTORS_DWA2004725_HPP -# define ITERATOR_ADAPTORS_DWA2004725_HPP - -#define BOOST_ITERATOR_ADAPTORS_VERSION 0x0200 -#include - -#endif // ITERATOR_ADAPTORS_DWA2004725_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 bb6d1f7..0000000 --- a/include/boost/pointee.hpp +++ /dev/null @@ -1,68 +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 POINTEE_DWA200415_HPP -# define POINTEE_DWA200415_HPP - -// dereferenceable_traits provides access to the value_type and -// reference of a Dereferenceable type. - -# 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 40f1ae1..0000000 --- a/index.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - - -Automatically loading index page... if nothing happens, please go to -doc/index.html. - - diff --git a/test/Jamfile b/test/Jamfile deleted file mode 100644 index a21c906..0000000 --- a/test/Jamfile +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright David Abrahams 2003. 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. - -subproject libs/iterator/test ; - -import testing ; - -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 iterator_archetype_default_ctor.cpp ] - [ compile-fail lvalue_concept_fail_expected.cpp ] - [ run transform_iterator_test.cpp ] - [ run indirect_iterator_test.cpp ] - [ compile indirect_iterator_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 permutation_iterator_test.cpp : : : # on - ] - - [ run ../../utility/iterator_adaptor_examples.cpp ] - [ run ../../utility/counting_iterator_example.cpp ] - [ run ../../utility/filter_iterator_example.cpp ] - [ run ../../utility/fun_out_iter_example.cpp ] - [ run ../../utility/indirect_iterator_example.cpp ] - [ run ../../utility/projection_iterator_example.cpp ] - [ run ../../utility/reverse_iterator_example.cpp ] - [ run ../../utility/transform_iterator_example.cpp ] - [ run ../../utility/iterator_traits_test.cpp ] - [ run ../../utility/shared_iterator_test.cpp ] -; diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 deleted file mode 100644 index a3172f7..0000000 --- a/test/Jamfile.v2 +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright David Abrahams 2003. 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. - -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 iterator_archetype_default_ctor.cpp ] - [ compile-fail lvalue_concept_fail_expected.cpp ] - [ run transform_iterator_test.cpp ] - [ run indirect_iterator_test.cpp ] - [ compile indirect_iterator_member_types.cpp ] - [ run filter_iterator_test.cpp ] - [ run reverse_iterator_test.cpp ] - [ run counting_iterator_test.cpp ] - [ run interoperable.cpp ] - [ run permutation_iterator_test.cpp : : : # on - ] - - [ run ../../utility/iterator_adaptor_examples.cpp ] - [ run ../../utility/counting_iterator_example.cpp ] - [ run ../../utility/filter_iterator_example.cpp ] - [ run ../../utility/fun_out_iter_example.cpp ] - [ run ../../utility/indirect_iterator_example.cpp ] - [ run ../../utility/projection_iterator_example.cpp ] - [ run ../../utility/reverse_iterator_example.cpp ] - [ run ../../utility/transform_iterator_example.cpp ] - [ run ../../utility/iterator_traits_test.cpp ] - [ run ../../utility/shared_iterator_test.cpp ] -; 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/counting_iterator_test.cpp b/test/counting_iterator_test.cpp deleted file mode 100644 index c30a3e0..0000000 --- a/test/counting_iterator_test.cpp +++ /dev/null @@ -1,295 +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 -# include -#endif - - -#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS -template -struct signed_assert_nonnegative -{ - static void test(T x) { assert(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 - assert(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 - assert(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; - - assert(boost::detail::distance(x, y) == 1); - - // Show that values outside the range can't be found - assert(!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) - { - assert(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_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 0; -} diff --git a/test/filter_iterator_test.cpp b/test/filter_iterator_test.cpp deleted file mode 100644 index 8dc9e1d..0000000 --- a/test/filter_iterator_test.cpp +++ /dev/null @@ -1,197 +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 >(); - } - // 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 - - // 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)); - - - std::cout << "test successful " << std::endl; - return boost::exit_success; -} diff --git a/test/indirect_iterator_member_types.cpp b/test/indirect_iterator_member_types.cpp deleted file mode 100644 index 82b0e1f..0000000 --- a/test/indirect_iterator_member_types.cpp +++ /dev/null @@ -1,88 +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; -// 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 e79cf12..0000000 --- a/test/indirect_iterator_test.cpp +++ /dev/null @@ -1,219 +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 - -#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()); - assert(static_cast(de - db) == store.size()); - assert(db + store.size() == de); - indirect_ra_container::const_iterator dci = db; - - assert(dci == db); - -#ifndef NO_MUTABLE_CONST_RA_ITERATOR_INTEROPERABILITY - assert(db == dci); -#endif - - assert(dci != de); - assert(dci < de); - assert(dci <= de); - -#ifndef NO_MUTABLE_CONST_RA_ITERATOR_INTEROPERABILITY - assert(de >= dci); - assert(de > dci); -#endif - - dci = de; - assert(dci == de); - - boost::random_access_iterator_test(db + 1, store.size() - 1, boost::next(store.begin())); - - *db = 999; - assert(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()); - assert(sci == sb); - -# ifndef NO_MUTABLE_CONST_STD_SET_ITERATOR_INTEROPERABILITY - assert(se != sci); -# endif - - assert(sci != se); - sci = se; - assert(sci == se); - - *boost::prior(se) = 888; - assert(store.back() == 888); - assert(std::equal(sb, se, store.begin())); - - boost::bidirectional_iterator_test(boost::next(sb), store[1], store[2]); - assert(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(); - } - std::cout << "test successful " << std::endl; - return 0; -} diff --git a/test/interoperable.cpp b/test/interoperable.cpp deleted file mode 100755 index c228b9c..0000000 --- a/test/interoperable.cpp +++ /dev/null @@ -1,59 +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 - -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); - assert(i < j); - assert(j > i); - assert(i <= j); - assert(j >= i); - assert(j - i == 1); - assert(i - j == -1); - - constant_it k = i; - - assert(!(i < k)); - assert(!(k > i)); - assert(i <= k); - assert(k >= i); - assert(k - i == 0); - assert(i - k == 0); - - return 0; -} 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/iterator_adaptor_cc.cpp b/test/iterator_adaptor_cc.cpp deleted file mode 100644 index 67683f0..0000000 --- a/test/iterator_adaptor_cc.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#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 14b1beb..0000000 --- a/test/iterator_adaptor_test.cpp +++ /dev/null @@ -1,322 +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 "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 - assert((*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 - assert((*i).m_x == i->foo()); - } - - std::cout << "test successful " << std::endl; - (void)test; - return 0; -} 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_archetype_default_ctor.cpp b/test/iterator_archetype_default_ctor.cpp deleted file mode 100755 index 7936bdd..0000000 --- a/test/iterator_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_facade.cpp b/test/iterator_facade.cpp deleted file mode 100755 index 871c196..0000000 --- a/test/iterator_facade.cpp +++ /dev/null @@ -1,69 +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 -#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; -}; - -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_ASSERT(state == 8); - return 0; -} diff --git a/test/lvalue_concept_fail_expected.cpp b/test/lvalue_concept_fail_expected.cpp deleted file mode 100644 index b52c52d..0000000 --- a/test/lvalue_concept_fail_expected.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#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 af748a9..0000000 --- a/test/permutation_iterator_test.cpp +++ /dev/null @@ -1,84 +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 - - -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 0404fed..0000000 --- a/test/reverse_iterator_test.cpp +++ /dev/null @@ -1,175 +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 - } - - std::cout << "test successful " << std::endl; - return boost::exit_success; -} diff --git a/test/static_assert_same.hpp b/test/static_assert_same.hpp deleted file mode 100644 index cfc8b61..0000000 --- a/test/static_assert_same.hpp +++ /dev/null @@ -1,39 +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 - -#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION -template -struct static_assert_same_base; - -template -struct static_assert_same_base -{ - enum { value = 1 }; -}; - -template -struct static_assert_same : static_assert_same_base {}; - -#else -# include -# include -# include - -template -struct static_assert_same - : boost::mpl::if_,boost::mpl::true_,void>::type -{}; -#endif - -#define STATIC_ASSERT_SAME( T1,T2 ) \ - enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \ - = static_assert_same::value } - -#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 feca9a0..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 0; -} 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 9561f83..0000000 --- a/test/zip_iterator_test.cpp +++ /dev/null @@ -1,831 +0,0 @@ -// (C) Copyright Dave Abrahams and Thomas Becker 2003. 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. -// - -// 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 -#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); - // - - boost::zip_iterator< - boost::tuples::tuple< - std::set::iterator - , std::vector::iterator - > - > - zip_it_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; -} -

-

pointee and indirect_reference

- --- - - - - - - - - - - - -
Author:David Abrahams
Contact:dave@boost-consulting.com
Organization:Boost Consulting
Date:2004-01-29
Copyright:Copyright David Abrahams 2004. All rights reserved
- --- - - - -
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 -neccessary:

-
-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
-
-
-
-