From 986855db16348f1985d57828feee65e408690e79 Mon Sep 17 00:00:00 2001 From: nobody Date: Tue, 13 Sep 2005 14:20:32 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create branch 'thread_rewrite'. [SVN r30953] --- 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/GNUmakefile | 15 - 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 74547 -> 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 | 2638 --------- doc/facade-and-adaptor.pdf | Bin 226419 -> 0 bytes doc/facade-and-adaptor.rst | 434 -- doc/facade_iterator_category.rst | 53 - doc/filter_iterator.html | 400 -- doc/filter_iterator.pdf | Bin 70328 -> 0 bytes doc/filter_iterator.rst | 29 - doc/filter_iterator_abstract.rst | 11 - doc/filter_iterator_eg.rst | 69 - doc/filter_iterator_ref.html | 259 - doc/filter_iterator_ref.rst | 177 - doc/func_output_iter_abstract.rst | 8 - doc/func_output_iter_ref.rst | 62 - doc/function_output_iterator.html | 171 - doc/function_output_iterator.pdf | Bin 55871 -> 0 bytes doc/function_output_iterator.rst | 24 - doc/function_output_iterator_eg.rst | 35 - doc/generate.py | 32 - doc/index.html | 241 - doc/index.rst | 319 - doc/indirect_iterator.html | 332 -- doc/indirect_iterator.pdf | Bin 78684 -> 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 | 220 - doc/indirect_iterator_ref.rst | 177 - doc/indirect_reference_ref.rst | 29 - doc/interoperability-revisited.rst | 232 - doc/issues.html | 170 - doc/issues.rst | 152 - doc/iter-issue-list.html | 5268 ----------------- doc/iter-issue-list.rst | 3841 ------------ doc/iterator_adaptor.html | 448 -- doc/iterator_adaptor.pdf | Bin 101108 -> 0 bytes doc/iterator_adaptor.rst | 37 - doc/iterator_adaptor_abstract.diff | 22 - doc/iterator_adaptor_abstract.rst | 15 - doc/iterator_adaptor_body.diff | 35 - doc/iterator_adaptor_body.rst | 39 - doc/iterator_adaptor_ref.html | 234 - doc/iterator_adaptor_ref.rst | 178 - doc/iterator_adaptor_tutorial.rst | 135 - doc/iterator_archetypes.html | 220 - doc/iterator_archetypes.pdf | Bin 61213 -> 0 bytes doc/iterator_archetypes.rst | 189 - doc/iterator_concepts.html | 123 - doc/iterator_concepts.pdf | Bin 66710 -> 0 bytes doc/iterator_concepts.rst | 128 - doc/iterator_facade.html | 1319 ----- doc/iterator_facade.pdf | Bin 172016 -> 0 bytes doc/iterator_facade.rst | 40 - doc/iterator_facade_abstract.rst | 4 - doc/iterator_facade_body.rst | 191 - doc/iterator_facade_ref.rst | 437 -- doc/iterator_facade_tutorial.rst | 523 -- doc/iterator_traits.html | 120 - doc/iterator_traits.pdf | Bin 49650 -> 0 bytes doc/iterator_traits.rst | 94 - doc/make_counting_iterator.rst | 9 - doc/make_filter_iterator.html | 45 - 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 | 3463 ----------- doc/new-iter-concepts.rst | 799 --- doc/oldeqnew.png | Bin 33786 -> 0 bytes doc/permutation_iter_abstract.rst | 4 - doc/permutation_iterator.html | 295 - doc/permutation_iterator.pdf | Bin 68563 -> 0 bytes doc/permutation_iterator.rst | 37 - 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 64370 -> 0 bytes doc/pointee.rst | 84 - doc/pointee_ref.rst | 38 - doc/ref_problem.html | 75 - doc/ref_problem.rst | 63 - doc/reverse_iterator.html | 281 - doc/reverse_iterator.pdf | Bin 62044 -> 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 70070 -> 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 | 351 -- doc/zip_iterator.pdf | Bin 62511 -> 0 bytes doc/zip_iterator.rst | 25 - doc/zip_iterator_abstract.rst | 6 - doc/zip_iterator_eg.rst | 112 - doc/zip_iterator_ref.rst | 152 - example/Jamfile | 20 - example/counting_iterator_example.cpp | 52 - example/filter_iterator_example.cpp | 58 - example/func_output_iter_example.cpp | 46 - example/indirect_iterator_example.cpp | 59 - example/node.hpp | 60 - example/node_iterator1.cpp | 34 - example/node_iterator1.hpp | 42 - example/node_iterator2.cpp | 43 - example/node_iterator2.hpp | 73 - example/node_iterator3.cpp | 43 - example/node_iterator3.hpp | 60 - example/permutation_iter_example.cpp | 67 - example/reverse_iterator.cpp | 19 - example/reverse_iterator_example.cpp | 41 - example/transform_iterator_example.cpp | 76 - index.html | 9 - test/Jamfile | 65 - test/Jamfile.v2 | 49 - test/concept_tests.cpp | 94 - test/constant_iter_arrow.cpp | 16 - test/constant_iter_arrow_fail.cpp | 20 - test/counting_iterator_test.cpp | 295 - test/filter_iterator_test.cpp | 273 - test/indirect_iter_member_types.cpp | 89 - 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/iter_archetype_default_ctor.cpp | 21 - test/iterator_adaptor_cc.cpp | 46 - test/iterator_adaptor_test.cpp | 335 -- test/iterator_archetype_cc.cpp | 61 - test/iterator_facade.cpp | 69 - test/iterator_traits_test.cpp | 218 - test/lvalue_concept_fail.cpp | 20 - test/permutation_iterator_test.cpp | 84 - test/pointee.cpp | 72 - test/reverse_iterator_test.cpp | 175 - test/static_assert_same.hpp | 20 - test/transform_iterator_test.cpp | 248 - test/unit_tests.cpp | 110 - test/zip_iterator_test.cpp | 834 --- 191 files changed, 36423 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 100755 doc/GNUmakefile delete mode 100644 doc/IncrementableIterator.html delete mode 100755 doc/IncrementableIterator.rst delete mode 100644 doc/InteroperableIterator.rst delete mode 100644 doc/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/func_output_iter_abstract.rst delete mode 100644 doc/func_output_iter_ref.rst delete mode 100644 doc/function_output_iterator.html delete mode 100755 doc/function_output_iterator.pdf delete mode 100644 doc/function_output_iterator.rst delete mode 100644 doc/function_output_iterator_eg.rst delete mode 100644 doc/generate.py delete mode 100755 doc/index.html delete mode 100755 doc/index.rst delete mode 100644 doc/indirect_iterator.html delete mode 100755 doc/indirect_iterator.pdf delete mode 100644 doc/indirect_iterator.rst delete mode 100644 doc/indirect_iterator_abstract.rst delete mode 100644 doc/indirect_iterator_eg.rst delete mode 100644 doc/indirect_iterator_ref.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_iter_abstract.rst delete mode 100644 doc/permutation_iterator.html delete mode 100755 doc/permutation_iterator.pdf delete mode 100644 doc/permutation_iterator.rst delete mode 100644 doc/permutation_iterator_body.rst delete mode 100644 doc/permutation_iterator_eg.rst delete mode 100644 doc/permutation_iterator_ref.rst delete mode 100755 doc/pointee.html delete mode 100755 doc/pointee.pdf delete mode 100755 doc/pointee.rst delete mode 100755 doc/pointee_ref.rst delete mode 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/func_output_iter_example.cpp delete mode 100644 example/indirect_iterator_example.cpp delete mode 100755 example/node.hpp delete mode 100755 example/node_iterator1.cpp delete mode 100755 example/node_iterator1.hpp delete mode 100755 example/node_iterator2.cpp delete mode 100755 example/node_iterator2.hpp delete mode 100755 example/node_iterator3.cpp delete mode 100755 example/node_iterator3.hpp delete mode 100644 example/permutation_iter_example.cpp delete mode 100644 example/reverse_iterator.cpp delete mode 100644 example/reverse_iterator_example.cpp delete mode 100644 example/transform_iterator_example.cpp delete mode 100755 index.html delete mode 100644 test/Jamfile delete mode 100644 test/Jamfile.v2 delete mode 100644 test/concept_tests.cpp delete mode 100755 test/constant_iter_arrow.cpp delete mode 100755 test/constant_iter_arrow_fail.cpp delete mode 100644 test/counting_iterator_test.cpp delete mode 100644 test/filter_iterator_test.cpp delete mode 100644 test/indirect_iter_member_types.cpp delete mode 100644 test/indirect_iterator_test.cpp delete mode 100755 test/interoperable.cpp delete mode 100644 test/interoperable_fail.cpp delete mode 100644 test/is_convertible_fail.cpp delete mode 100755 test/is_lvalue_iterator.cpp delete mode 100755 test/is_readable_iterator.cpp delete mode 100755 test/iter_archetype_default_ctor.cpp delete mode 100644 test/iterator_adaptor_cc.cpp delete mode 100644 test/iterator_adaptor_test.cpp delete mode 100644 test/iterator_archetype_cc.cpp delete mode 100755 test/iterator_facade.cpp delete mode 100644 test/iterator_traits_test.cpp delete mode 100644 test/lvalue_concept_fail.cpp delete mode 100644 test/permutation_iterator_test.cpp delete mode 100755 test/pointee.cpp delete mode 100644 test/reverse_iterator_test.cpp delete mode 100644 test/static_assert_same.hpp delete mode 100644 test/transform_iterator_test.cpp delete mode 100644 test/unit_tests.cpp delete mode 100755 test/zip_iterator_test.cpp diff --git a/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 9de555e..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 80447aa..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/GNUmakefile b/doc/GNUmakefile deleted file mode 100755 index 85917f7..0000000 --- a/doc/GNUmakefile +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright David Abrahams 2004. Distributed under the Boost -# Software License, Version 1.0. (See accompanying -# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - -ECHO = /bin/echo - -all: - @${ECHO} "/libs/iterator/doc/GNUmakefile should be replaced by" - @${ECHO} - @${ECHO} " http://www.boost-consulting.com/writing/GNUmakefile," - @${ECHO} - @${ECHO} "before proceeding. That file is not included in the Boost" - @${ECHO} "distribution because it is licensed under the GPL, which violates" - @${ECHO} "Boost license requirements." - diff --git a/doc/IncrementableIterator.html b/doc/IncrementableIterator.html deleted file mode 100644 index 0544d22..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 29b3187..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 761ab0d..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 df231d3..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 bd176d8..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 7478e5f..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 c3676bf..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 8faa043..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-11-01
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.
- --- - - - -
abstract:

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

-

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

-
- -
-

counting_iterator synopsis

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

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

-

iterator_category is determined according to the following -algorithm:

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

counting_iterator requirements

-

The Incrementable argument shall be Copy Constructible and Assignable.

-

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

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

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

-
---i
-
-

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

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

counting_iterator models

-

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

-

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

-
-
-

counting_iterator operations

-

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

-

counting_iterator();

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

counting_iterator(counting_iterator const& rhs);

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

explicit counting_iterator(Incrementable x);

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

reference operator*() const;

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

counting_iterator& operator++();

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

counting_iterator& operator--();

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

Incrementable const& base() const;

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

Example

-

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

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

The output is:

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

The source code for this example can be found here.

-
-
- - - - diff --git a/doc/counting_iterator.pdf b/doc/counting_iterator.pdf deleted file mode 100755 index 408d11347ecebb7007f1099ea5b87f5af7002813..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74547 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%0D~opLK|LMgd$;B9 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 O$jF3CRn^tsjSB!Pl~u6- diff --git a/doc/counting_iterator.rst b/doc/counting_iterator.rst deleted file mode 100644 index 191011a..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. - -.. _`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 0af07bc..0000000 --- a/doc/facade-and-adaptor.html +++ /dev/null @@ -1,2638 +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-11-01
Number:This is a revised version of N1530=03-0113, which was -accepted for Technical Report 1 by the C++ standard -committee's library working group.
- - --- - - - -
copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.
- --- - - - -
abstract:We propose a set of class templates that help programmers -build standard-conforming iterators, both from scratch and -by adapting other iterators.
-
-

Table of Contents

- -
-
-

Motivation

-

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

-

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

-

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

-

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

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

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

-
-
-

Impact on the Standard

-

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

-
-
-

Design

-
-

Iterator Concepts

-

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

-

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

-
-
-

Interoperability

-

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

-

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

-

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

-
-
-

Iterator Facade

- - -

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

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

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

-

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

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

Usage

-

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

-

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

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

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

-
-
-

Iterator Core Access

-

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

-

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

-

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

- - -

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

-
-
-

operator[]

-

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

-

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

-
-
-

operator->

-

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

-

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

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

Iterator Adaptor

- - -

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

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

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

-

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

-
-
-

Specialized Adaptors

-

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

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

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

-
-
-
-

Proposed Text

-
-

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

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

Iterator facade [lib.iterator.facade]

-

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

-
-

Class template iterator_facade

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

The iterator_category member of iterator_facade is

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

where iterator-category is defined as follows:

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

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

- - - -

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

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

iterator_facade Requirements

-

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

-

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

-
-

iterator_facade Core Operations

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

iterator_facade operations

-

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

-

reference operator*() const;

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

operator->() const; (see below)

- --- - - - -
Returns:

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

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

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

-
-

unspecified operator[](difference_type n) const;

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

Derived& operator++();

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

Derived operator++(int);

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

Derived& operator--();

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

Derived operator--(int);

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

Derived& operator+=(difference_type n);

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

Derived& operator-=(difference_type n);

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

Derived operator-(difference_type n) const;

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

if is_convertible<Dr2,Dr1>::value

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

if is_convertible<Dr2,Dr1>::value

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

if is_convertible<Dr2,Dr1>::value

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

if is_convertible<Dr2,Dr1>::value

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

if is_convertible<Dr2,Dr1>::value

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

if is_convertible<Dr2,Dr1>::value

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

if is_convertible<Dr2,Dr1>::value

-
-
-
then
-
difference shall be -iterator_traits<Dr1>::difference_type.
-
Otherwise
-
difference shall be iterator_traits<Dr2>::difference_type
-
-
-
Returns:

if is_convertible<Dr2,Dr1>::value

-
-
then
-
-((Dr1 const&)lhs).distance_to((Dr2 const&)rhs).
-
Otherwise,
-
((Dr2 const&)rhs).distance_to((Dr1 const&)lhs).
-
-
-
-
-
-

Iterator adaptor [lib.iterator.adaptor]

- - -

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

-
-

Class template iterator_adaptor

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

iterator_adaptor requirements

-

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

-
-
-

iterator_adaptor base class parameters

-

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

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

iterator_adaptor public operations

-

iterator_adaptor();

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

explicit iterator_adaptor(Base const& iter);

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

Base const& base() const;

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

iterator_adaptor protected member functions

-

Base const& base_reference() const;

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

Base& base_reference();

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

iterator_adaptor private member functions

-

typename iterator_adaptor::reference dereference() const;

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

void advance(typename iterator_adaptor::difference_type n);

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

void increment();

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

void decrement();

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

Specialized adaptors [lib.iterator.special.adaptors]

-

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

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

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

-

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

-
-

Indirect iterator

-

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

-
-

Class template pointee

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

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

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

Class template indirect_reference

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

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

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

Class template indirect_iterator

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

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

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

indirect_iterator requirements

-

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

-

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

-
-
-

indirect_iterator models

-

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

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

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

-
-
-

indirect_iterator operations

-

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

-

indirect_iterator();

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

indirect_iterator(Iterator x);

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

Iterator const& base() const;

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

reference operator*() const;

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

indirect_iterator& operator++();

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

indirect_iterator& operator--();

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

Reverse iterator

-

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

-
-

Class template reverse_iterator

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

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

-
-
-

reverse_iterator requirements

-

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

-
-
-

reverse_iterator models

-

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

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

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

-
-
-

reverse_iterator operations

-

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

-

reverse_iterator();

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

explicit reverse_iterator(Iterator x);

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

Iterator const& base() const;

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

reference operator*() const;

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

reverse_iterator& operator++();

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

reverse_iterator& operator--();

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

Transform iterator

-

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

-
-

Class template transform_iterator

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

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

-

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

-

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

-
-
-

transform_iterator requirements

-

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

-

The argument Iterator shall model Readable Iterator.

-
-
-

transform_iterator models

-

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

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

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

-

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

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

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

-

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

-
-
-

transform_iterator operations

-

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

-

transform_iterator();

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

transform_iterator(Iterator const& x, UnaryFunction f);

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

UnaryFunction functor() const;

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

Iterator const& base() const;

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

reference operator*() const;

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

transform_iterator& operator++();

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

transform_iterator& operator--();

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

Filter iterator

-

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

-
-

Class template filter_iterator

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

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

-
-
-

filter_iterator requirements

-

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

-

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

-
-
-

filter_iterator models

-

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

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

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

-
-
-

filter_iterator operations

-

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

-

filter_iterator();

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

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

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

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

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

Predicate predicate() const;

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

Iterator end() const;

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

Iterator const& base() const;

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

reference operator*() const;

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

filter_iterator& operator++();

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

Counting iterator

-

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

-
-

Class template counting_iterator

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

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

-

iterator_category is determined according to the following -algorithm:

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

counting_iterator requirements

-

The Incrementable argument shall be Copy Constructible and Assignable.

-

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

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

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

-
---i
-
-

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

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

counting_iterator models

-

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

-

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

-
-
-

counting_iterator operations

-

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

-

counting_iterator();

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

counting_iterator(counting_iterator const& rhs);

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

explicit counting_iterator(Incrementable x);

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

reference operator*() const;

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

counting_iterator& operator++();

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

counting_iterator& operator--();

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

Incrementable const& base() const;

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

Function output iterator

-

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

-
-

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 7bf3472e5845e9b28926edfbdf839a4e5eda1591..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226419 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

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

Filter Iterator

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

filter_iterator synopsis

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

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

-
-
-

filter_iterator requirements

-

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

-

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

-
-
-

filter_iterator models

-

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

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

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

-
-
-

filter_iterator operations

-

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

-

filter_iterator();

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

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

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

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

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

Predicate predicate() const;

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

Iterator end() const;

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

Iterator const& base() const;

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

reference operator*() const;

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

filter_iterator& operator++();

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

Example

-

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

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

The output is:

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

The source code for this example can be found here.

-
-
- - - - diff --git a/doc/filter_iterator.pdf b/doc/filter_iterator.pdf deleted file mode 100755 index 031ea6434795dedb4a71a4bac825e79e3098f847..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70328 zcmY!laBIOiwLVFj6p32;$QB zFD=Q*%u6j+Fazlb;?nm^%uOv;urPo~gVg%wr=%+AhZd*8)N<*E26-xgOm<2vPF2v* z{4q~cB~9@AJZ zeaF1K{1TA4CSbj$U=m^~#54=A2*d)2FBJ^IL8@Q~a%zx*A;{<;1w)7dv0VB=sm1xF zMWBE(1RKYt@0*&Endp>Xp%ASA3MW%bQ#~VdGX)D1Lp=*ig;-G36{Y5tz~at1Kd&S; zucTPP1Z)G6FFiNirI_iJ3Vi`Bo{3WvLEH`T4~qy2<%@#icnVnR)4Y$@#h92)481f<^`?SSa>} zv4NSMk+~_t8|G$u#%9#;MpkiVYPLguagJVQsa|SIDVpm+se^LYTNvn>n3%y`Z(?br zXJlwfg-9sREGcowEKAiZ&CAryNX*O2FH0@bOG!oZ1t@h>>HVuS(;fYm{^$VS(qu98CmFA7+6pk{)7_|xIiS? z51`@`Tt-0)BufiDVBT%`8bRN-W7Q(k-sc%P%O-EJjQ4;8L4fZZ$O3voteQFfumRv#>B#FflUIGcyDi zvRKnQ7U!b58r`v=lAlVBHMTU@Gco`Lt&yIgk&%Llfw`W68CgM_o1c=JgAuTx3XocE zH8;~Uu`p6FGBVdQFgH^$wlLQ-G&Um2v6(4`=%GkfeThAJ8k?HwnVT3X7#f38tEGam znYo^+1#wZHT9KGrkb_kQHTXe zL91b~H82N2+FBrIaOuO-Fi6mlOW!pwIX@*cFI~Y9RBM22$}B1_an49AQZP5*()US( zatsa4xb(v_Q%W+56$~K`(FZjpL8dC`hq}1BMnq~m`vw`BbLoS`TvCgZi!uvJ@{1G< zA^t(M5x`cVIu7OxE`68GG;`FRTZ0U02P;!Fj7|J>B{LRs-W)=!ccy3X+c3zYH_iGeriQ>PGYWt zeqm{TNoq<`PElrhMu~!cUTJO;s3o1Ar=XvbpOceVq@Z7rT9gcGMd~N!7NiyxC+4L< zwL$e1Bo?LS<)o&SDCmQkP~pVllGLKi;%o)|f}GM~1^wiFa8PDc7G$L6flbZKPf^f^ zx~wX-C|^N8KQC25zoa~0LBAxUC^c0Dh2)2ycBS%NX>=N8KrsYiAANkIf6PIiP-9 zN@i+NYH?<m!zboDHxg=DCid#BqpaSP?$Rm%?*)^H8&p2*##ad zhL+|CN23&apmGURu0$)C8Gve80|jFvkQk_EMl3cl1r=8y)g}g@vKquPG6j(a3NRX` z#@G~8JcGzsSpNrH*n!*t>f|~WgOih)r3sh5b7Fx9B+Hmt7<1`^%12O+)-|*=g_M|} zUOak9>RFPQlbP(8m!6ZVV8EpxT#}j_reJE!r5^z`%f#3aqT3152h}w;R?r1G)6&FL z!Q2Gg<8#YNOfOadIUysl2vlom=)38A>L==_>SyZb=;!Mf>6d6iOmWN1NmVccc@|vH zKr0il0L)K5sd?!o8HNfL=B8Zw5RQ?8k)eS(jAyK1YHS4KC>WU=8FA^mf!lEk`ffRi zC8;i{$@wX%pvtPaq$o8pm#gB|+ewu+Q{GA)=e*eBp(XS6#JV$W#{?qPFDV3hC7!V{ zI+JwFSfaXTY3`Doo8LV$mmCe+w4b9@WaX9xn_8z_dc-sL-uBDCpIg??Jzx2*e%|}i z*zfQE)vkLT6uPPWika#~TL+oBY?+H6XfPj;dEan|LBm35*{ZB_ESv%}{WdE&EMROn zloZ&Y`C6mFjcLVOHmhH38L>0868yfW8lQCEtKe`rrg$X>^Nb)zwV56Z7%P~bum=5< za$#aESR#B<;Yb_vG7+u^8%hrI7cl&FSZ43hbT~kx!9~rffxTjiPqX4Qp2*8KFBzV> z&p7hw@61o^GwW)C8`$nIQ9H2RW6@=eoCcPvLjv1M{zWU?KUshH%KJwaVy#Ku3-nIv zo4(A?WSZ)e_pmiJryQ@tA5G&q21iZLuvDh{po8JnOc2JmdY+|VEE+T z@uppwy-B6o$mI)@4X22GfhFH1kNvYBe9yhfbm-)vOP78=xF-KO=G;x;6DAq*x4-*e zUHT~1?eEb)?+i{hHgF5|xh(q8`sefK_b2l6BQJH72+cee&$0I{L*q%64T*owKA0>g z(8F}XL`Z_8p|R#Lhea>n$Mp<<=Cv@*D^bhIoFk#qa6q@UZUSG!hJTZPe0CD}ry}yd zmgNWcD@Kk_`YZSqH0l-WCkuRu4-j`Ss6Y6Yfhp?Pe)Dr@dgLV5tX<5UvH0r*hOlt{ z122-C|L;B5>6W&^A)DKQztbgYL)Ga(rS6j~nHN4S`;`7^vhB$~oJ|P|9xc2!ON4nX z?`fJRc^%UE{61dfqL7Jo)#sjE*Vy-OuLl0*Y?`vDOuFsb=GEu8mu4DGTCB8qHuFBM zA9HtzZrU#V{hh>PpRD`e1M9zE+_FH6_4!Q`o9ZLwr)#eKm^Dk9|C!nsmbX>&?&^Bl zL|m9-dDm!O_WHz)@3+1XR&A^j|DXN!<(#(?=`m7AHO+pln$kreCICYZ@i}Wr2FZd-|y63&6>q7FJ{=2>vdg&P`%Yn& zOZaWO|F8BoO`CJ)`H@XQ0v!MLEIyE!rM|fS`O&V%bpNf7CeOBSegH-{YY*By9OdjLZMU;^$vuDk-HJ1_+|_+JvbTA*D9lUOUy>JDB4l-C zd6##ju<6yy+L2NJ;xeu-i@wx4P za&mLWRRP+iLEB%I?+df8WZ!jgb-zbN;6F`~zZ3fQufJof zyijz*-XpbftMfL`Z~VelTeAGRc>j(=Qy4z~O!oTmW74i;KRFmBm$KhrIJW25_B9hH zykE$fuAQv@sOR+Cw|lRM%x39hZ_i@5ydXz?OSu0_WwV+!k2c8_FNn|;wAA_as$nKq zqVt#VuO1IS*gD;CfB8Cj%lTC4gl9Xqd0qH0U2;qEG2ilr+B(B$$^U*BOrL(+?@s#v z+$_7*bENiOE_gTV(dnu)yyhEsa%CRgG4XP&neEz-EB&3`Z`;D2aATi*)ZTl0LT;YS z6RvvFC-+wW_K!jXZ#pPPIqhTBCp`offtA6ep}_4I@F(l_|8V`sYkA^lUC^4*|b%g8(5l@jvLs&F8$PYF z?QhzN(%`##?}}HL&6^mE$CJRQoV zw%6Bq=Vw2!Zx&Z`Hw#6d<#OI5{;qbDe(t?MLDMAx!Gei;(FT_u@634q%cp(T>J38d zucdU1~%})-a-FEn@ZyXpZ;5})9|S?dSAEl*W|@^<`PHQ-^~j7?p4*wIxEL~ zZ&{3?$;C?=33JqzO{f)ob;>7kSJ%P~tJ|1fhTP;9+`WA5d;a97npdLMeb~3(y~pqF0LytJvFtw*KTDVx_dtNE6GboeM2;&%;&z7 z+9o{PGk~k^p~90V)02;e^6g$WqB#&CY8kJvh&mQ?UHx z1U)g&b6>QMod2=sSHi`R3kA{s9JTQpZ(0v3s&+AD+GiPBXjEUYxA^riIN5 zH&O8-@SS5(oDNqisA;^`##P(1nn$kSv3j&o_i+qAjE3%eFycE z*=M%;IGvp}=bgfZiQlusJLBvmc%#g?pWfrtnlf2m`f_~zjlhqqx7=-P?$2MxBP@LW z&X(ER8TXyP`qScgc#_>)dFFiATXUm~(G@!PbvN8wVYfW(;NR4FEyX9c?C5yk=V2(RZX6t={LB0G z@<%r}K6rU#%MFjM9)g+AUu36WS^fCI?{kqKoN~WbrtbXqTQhq`zv=sTrKTFP75g$C zT@sr9;iR!+o>}fuS!bVfH-(SBzM_<68F)wH59_nZzV$6S3Q<``K4I1wi=MAGc;PKL zdDC1|>w-IuE6sV0vUs*GSjoq^^QdFRfsdW*4~hKx(l9yu^k1RO-rKUGpN_L_lYFx) z^XhzQqt_FUNVKkc=G}F~dETSP>(zgY*5|LOjIrJPYUTbVPvc&y_~9z(3BI89m{tc`4AgDy&Hi8oGfsi9tgt z3gA%>lEzmI4UxxJK+R<6_=*vz?-Im?G``~L7U3Ter0wkM6k%upX{v)d5YPb@BhV-v zN`oC_0LXRG3TEaYmx5aKw86&U4iCa?3o}sn$->xB!NS5w!Q2$qg)%XQu|R4q%uK-3 zWfo>2ms%Kr#IR#iQ%eOiV@m~7LqiB{WUgRrYN%ienjSK?RDjtJqAg7=AZnm;W(MX8 zCgvszCZ;9|CMM=!IfyMF8IXzaZW}lVK_P~(+h&H+Z8L$y1EkxA7C~71ZH9&>NF6s5 zsD60I&A<@Sb2BtFGf}WK0gvKh>AIz*>4QgD^d0q`^L=R3ZGckjw_9bId|D`27`aOdvQh>uQ< zL3cF6xi>8_VI^1K(;G932SQIHczZs4sy}?KUM&1`n?s31 zUj5YncUS(8V&7@${O7+q^Rs8~-mSWQ~CehZ{lz6kNhC-R>J=74f_@Whb`d(6FYwV`+ee-{gIG`Wd_yhE0hB~LU=fu z4m*lBGrQq>=H5`t~&@CKQI3w`@46M zkVBod1dHLVdiNtPjeolSPq3H}|5M&6W%VEDNe*>a_j|@j6#o1#kmUP4f06*xC+R=V zN)C04_j7La{Neat!0F&Od8d$#zh|?svNZhpR-K(~*b#EG{olwD+ix$hko!Ng;I4V~3nV7of6edm<nE%@5Z~(BFi9!t;Q#7nhF5MLmR_@vNkmjY zK)~JS^ZFHY&1Lx7s{ZbKDp>vd{+kCqJA@A;*l&AQMt6e@1-`tUhGB(glOc8}5JH&-8YPhQxZWXmVI*!E1Q z+Y&qO`P26O(J(9w-fGiPm{TG=+h8$cVxN2J9FI4%^b^ypZrv(L>G0MGv;KZcbIs}5 zKX!?{PCd4l_maMK&k+~@S3CUUEGkaBn|u;HC@Zb|XwRfY?~}K2f6wZQ(!TGL`T6?A zFLj3ZpX>__{`UFpjtwdI-sLRZe=jUjdhN1_lJ8kvm*}11oBik4g<5;Rleag_o&EQ4 z9ph_RHJ+F@`AL>mlVqk||03F97wZ*gJo8(^f=KS|xh_}bkG!8#dCe%(X8YTkjrwMX zlHK|~{ye?m&#s!6H)LuwI4&)|!*x5eoM+wtxH)pmr}R|b{~_GD?3Ct$Yq_cJC!CM( ze-M?tamS3uJ^B-w=PuRu`B)O3?sc$W0Y|}$InVE&>pK$u#pcl3pH7iKB1`R5 z+3Y5(%2|G-H*ZpH>O5-LkS5!AZei^`(Ws~T4l6JAmc+kFukqSD{e3|Dw1S-Yny;b> z8$CQb-QOl$I(<;bK#%vL;p)d)BH5yvS})J$+x%atv%J_QM|Zw*K|`u6)9bY26^7G& z9{oMoc+fP~BrQpaQ=yyZ(ivNk@Q5#S?4BiihDa(0p4R9$xIC}$*|m3x3i2~-YUbKC ztS`D=+v(=vax?YEkw@&iAKY8ozTabQd*%KuQ)kpiUs=&~>)jHb1i|`mhg#MKx>r<5 z-V#YPT~L(U&AaIZ@AsMoF7@Ts-)6j!IbW*yNzd)m^?y9wt+RA~Jk{jC?Qyi+&nbWY znt#ELQ;+7WNj=oty1=XVU(vHy<`;LqkhEu5G2H%LF5R3bD_a>|B+)f-nG{r_p#l>_^?9eru)ZGM~m+q}<CAEH0L1*1fl{NMU zG@pFR*)dD6Vv3Va*u;;TZ(n8y#jf$MD>Y0?H0YW#KWVms*o;-*^*%j5enU|IX0A~F z1KnrKF7oRo9X=GrY(^w_ym@5B^vRMgQvzs?9 zIv2Ps*Y{1EvGlalpTFA|znjZ{?NWv9``4$If7ScN;ePAK!u>*D_G~x!C*6E_d#K>a zL@{;S#IN~RRw>OoHG6ekOU3t_IYP^JJQ4q~C3@Z>54+PpQ|6qQ`hZJF%5v`VL$kV4 zw4&obq^;Wht^L^4dy}SExx_?0x*=Tg_=F6Ps8RX`TRrW1ncT`xTswC;$GlNlyJBld z^wyF+*X4v*cn>SZwRjYqz5K&y;|AG)gym{eSuP0doZtIt|3i1NF9~{*n-ym9U!D?Q z(A*Nra$?VZ`?_>NT2i>n|*Q9yBIk4LJwV|fJ=-PW9B%dVQmhHP#(Y>M3(X`Xq zd9Tx+-tuYF)!XOPPQP4p{onn*$!n|juFKI*z3{1X;muVmPRK>@R6Jc4_eqsIL_gLs zYft3OkYDHL{j3$Rj5VG(*>g?gtF)gjD?e zUqtm9E#lku;ojtmS0;xlrqmcDo?JL{%dWG<#ysz0#3$y-O!$}gBeVARv3KdK@Aarp z*f;sTXv2vYUvsWspZ{p*&;8TB9=@L+qaHKU>evif--jEfp4qQ>>2K6wEAOnee>^&0 z?A;XfM0n3Sb^D)34;A}Q^sw2tz3HWA`ufG5Tbt(JD4P1ZQh;A~hG(Bvq|nY?{3(xP zA3YUN^Z2u(KO|n+P)dF2m0~*=JMKRZ?Oq%cynQ;SNPAKk{|Da*?BDMRoX^y?xElWT z>Ha5&dgsRM;Hm}Q+ZtNY;X72Gn_wx89d zr%15>(|PyVK=9xRP9Tb zGZr_v98mcASI^9?#{AL7Xbtv%IuB&kRQLNcD#j;#w)!x?mrI7Lwot*#CDZ(NNu;~$ z-if|`|18cZoPE4VnmKk;=)V`ayGmxI9-bYzWXjj8`DrohT1(#Faa~J(FH;67}{rXQSdLPrAxSrR+($8+J zIy`%JP5xBY=qW)rzb>#gESq(!dbdsS^?sw8^3&pvs@`*dyRDgi>$upPqMDb%r&>=5 z$A=`P+g#F1^wcQ%W^m+-PFiW@BVFCKYI{W0+rKXe(`tO$e(dk*jPudmbJ?^1Fd2E6 zmg!&rqY=94Uv$*pPut?;xa>?1-rk*ZZquRmJy%z$7K^SoJ}$P|X)R|QM@Cxet%cdb zH=aA*Exhksm-5!_oXs)juSv5%{GTIn#HxF-O(UDcqg}I>`G-3ntXek3uR^z5)NN_G z)ZE2l-HRW+5`W$N>iLN~uCsQ|k&Bqcz{0RO zzw`_Joz+{L9HPv8H|fru>YI|Md9>zrP0x6;UFG4|d3lvG8mrGNmtDJ>m&HC*s;p

qh{6mv*NAu9=0l3XYFkY?b8;_>SgEU@9$_T`CRkDNGk5= z@6C%-x9^>Kd_Ge+cl@j%*GyG|n>}4S**kn7vrTmv_(Zct|(%0vf z-F$DG-q}_!FjMZ=nwrV`12_cE1uU51CGkq7@tsA`J@u}AO3j-id(*Zg+dV11th0A* z(%)qU^;b9e#@&x`ZC@4h@?4xz+|qxAm(E)5U@+g8W%lUKiyqwe#K`u z`80d$5AG{x5*gNob})J_zMi}ASu5+c*J1k}e{J7vC2`zX_wP1-6SE>lZogS!YTAYA zNprkDYn<&?cl+q@>-DwA@y@<~W!WP3EZpqbTN-?C;rH!}b53g-M}1IxyKO;-@f!Kq zqq|n^owTG_@T8EG@uNv^{ntz@j_dJTxpkGpzNdbrCAU92GtPL<6SnZ{X`h6nbN}jJ z;pChgd$q~=Cfk>w==l;3CnYNFlT@=R_XVr|J{6F-dxy=>6Hh)IdDK1Kg*h#r{Wa^g zWgG4m8@C^CJ#}f;-sAQYWwvggzpiZAm-r`PB2yC1+}x{wP@zn`y_)}I`=t$!n^LlF&5D03 z-{>p2uJGG!zP*dyCH7|@HFo)HJl(~iy{@NfK zHp`6j!)n%~uHpPqaaG3bBXh~Q4}7yGu93TUl;_yWJ0E@(t*T&AySne)?m3=}UzP81 zeKkA4e{j*4hx+$aTr(zZx@YEgs(8LjNsRgqw`=UDZN9X={(0}M{{>b1@T$2ds%y=J z()6}9rv&62WxN$1wK`z$&Xj$+>(`ZZTB?1J6NvXw+xaN$(2kTU)|>AZ6c|rjFuC4& zg7tzB`#%{hOW(+b?>75+`nH?e)AUT2?6jz93(caQFn(9&Zrtmv__538?<3E9Z+Y4$ zw?EoH>z8}crNj4Qex3C@62kfM#%2$bsn+TK!Yd4J-B-0p|NgVoX6LqVik8ZLCZ5$j6*k#4#=KT0whk6vl{+7;4GZL?_ zSa~g^Fjpez3(x%J$A8O+O`TD3xr6IomEWben+kp@+I{`VB=ujjEnpQ-*K>)s{93{2 z=;9Eq;Ax>J_pE=n^$6o8>34btx}CQ++djXYzT1x>^MrZnvv(e$Ia^CUXZ>VpU3*}w z5yRUPoBypT+AJ6Mc_W-pjF$z@~y z1-X5zznr|RSZ-_dmm}>6L(Zbg?~NAn**m(b_`KAZW<1)v`(fZDDMjnXiU*B#X4ccn zzn@<7IsYx!FA+HduZ~?2*4_8tOP}VlowI&B=U(5rFBj#{nt807*QuQ-Q7=$56) zPXAWftd(ur{rc11ABhvrzbep;xwDpcc|nrU28Ru|cCHt{SA5%W->$14W<8Dibu6#a zOC-r;|E2BcmsjLv%rF#>s3=>>%Jtx-tj4m#`bu3qe0C~VLbmR@<7rSmM<>`VN~C7K zXVtRO>npw%m(OSEvVQqAuI=08{V&5OVy zx=uC8sEieh`1r&4`lHl2JO0o03VRWFHGJ>2=dJUfzt2yZnIG@&ac7Rzb}^2NZ&^DQ z?-JIj49%}!+V#t^NqASEch4U&cXk1Xj197phP(a;U%9F+E%$MXYT6}jgGP@}>2rP7 z-wR&7#&F8H8E2K>SmZ41_&jU6P0JzH(^htyzZ~^n{#gHMN89}6?jDc(H)c&byQIkS zNx@UmZ4dA4y{j%WJ9KAu;+@JT6Q^E!;_`a$g491!+jJ%esRb-?ncbP+*J5g>zHs~8 zKfKx*(%tXAvScm0oW?l4z++QI&~B!dYmVzJAKy^%+Vot}vBZKH53S z=S+Nt;MSwEm!_%ey;Ppe`Ea@RjWt&DYPN^%(_wY2jK2`@_1~4N3n$udKd?*Js<3`~ zHplBvLXq~XYEl`s^%koxSpRnBx-Ut3uDUv3x+mFR-z)s_xSrFM^kk7lE?2K|9YqsG zd)0KY#_7|_zG>+fwH_&YcDTuKgL6}5Vf8*|c3thq`}uh6qHFffS+QvS;nb|uZF?Sc zE3TAP=&m~vpi|Rzy>xb(?UeW}Zw{q6-BF)ycy-s&kDH@Xtaaa(EjpCR>lxei$*Rh_ z`{c<>KZ^smJXVceDtF_C#i5IOzkh#R#=UA=r{}4X8twb9a<%hQ46ABBCWcgg-Nbb% z@QFlrnt;qD-Fvb8s$mQZxFf&pbXqGKaLBGMAnzoj?i~4<0aLcAo5xIF!#4NtlnK3) z+?=%T?5uOQEH3N*s`P!Yo%fMb2b$}5oc9)=)||N9;qjV$!^3{otViZ=k$PUc+k8c5 zMaa~e-c?Hj4!IsQ%YExRf7jKiXJ0=FYmIqkW|A1L-tMx)W}5IG?V6~Jx}!b3t4oV+ zTJzW~emcAReDY5XmSon&?dSg9QJb~3`+HH1`S;A?$odn}@eh}-iT+}y8R=teEO)C! zK{vm`>cZA-_IK32+1nDXA^ZvXExSl#>e z)Pe6#;vt?*t0ym==n=nk z-ww$~t_z+vE^Mu<-`0KK$7iyZ;GD$hyEnhas1Ql=JnO!IiDLQwEWnHi%Q=ga~FQU z#r9_5gGXCsx`l7vVtMKwEptkfm3Mc$wfQ+k@nWND^;MhKGOnA!A62Tgh`pj@*YCc< zHEXKPbWdpI(O~j&p$KjZ(fc|zHr{tI#Ybp znH-&ujE{q??uQ-y7ZkeKY|hjLz7A`Tb_+I0PyZqFPQT>ZlC5dGQw;X>)##_R1^Xnu zU;Akav#`^)(9|EzD|ICP3>P)~%p(lm_Psq-5g~u_RbyFG1f!Ti(Yd%ONgpz|SB? zRr~J0!v`wAZVNv)Eym)J_}nLpj;+hvZtUw6($~IA>gtjQ70Kt+U%&O|C|XM(gTj*kye_(J+6%lQOSe&l-O!@rN zw9_VDd$-0;;O1~#d35FEsJo)ewjJ8KPQz}WZ%6aG$}LCLYgAXh<=JNcc+RB5`6uu2 z{1H)F`uC{jmb=G{%_p%xofq?{)%l!Md7M??b{%CnKG!5~XR=bG{b`Y>2HD@7 ze{xMLJoG$zSCDqoo3^x%!qTl$UxlYWu6X!)g37b6nYHzrbCUco$VTvXUNAnyr2VMi zao#8A8Y9<9Uso-%-nGkF^Rbw5+TQ%U?RjF`;_ob99>0BeyYj0C!c#pvrz~B5v@)W9 zzw2%HnwNK!H>{E0Z?OH)Hr42t`~3eexwG}ZVNJxo29pKs8=l9z%9I;cch5F%i_Yj& z6P}Y$vZ!Lwdj1sSjp-c^SAAHVGs7^4o3mi~vTq`H=0A2UoU%W=wSH%QP5$GG4TdZ` zMa*4$9i?lQs(d>7KyrOZ{KM*7+rRCb%i5FWdsdmX>A2sv%C%9awy)l|^2@_#_V-qw zdAMg*^U9mIIchU3^saAt_Ony)o*@)dGD3ao`qN_ zPu^*BxJUEn%vi;xR<-kHWz~Ff`~G@X$n3^V?e8b6t?FKXSoDVVHi>^v)0`Z|vNTNQ z_N6FF#h-quHI+NXBB?M&=v3^X`?V2mewq0Xqwjt>yHBme`el9iy~v4XxBQmg)mnKw zYjs}!oyuK0KUGC!CNs=ki+q-d1fY9RKz-=slRXdba)i37?tIZF*eUdULxKs^yn|w9ne4__6Q5r${JMVC#u=#<(x*N= z5|6li@oi?f#;vkC0nIjr<655=ndhC1li-w@7Tm*q+iLBr#Vgi#`r5bM<_~|7el+vb zFW1ZUx3Z@At?2swdcHYB9{Rduiv2mw zhi{MOuK8Nd#5vz}QIotcTTzsyowD{akfeUK(yz9=X+az*aZh38~_x-M^dE}7^-y|gF zz3B6MC>33H=WW0wORL=+K@k^DbqIcWRjaGaWcdB@`n^XNTx58&CSczFnpL096}r?0 zynfUdwbCf!Yum3kPx*{3tGPZ-elXF!nq_{Dq^LCo`*;MO+Kq+rYPLV$=C!VvBXUYr=omo%$Aj=a=73M?VFz zbV1=ASM@CozuQ^IOw~T3V%pY!Jn4Y2^vzAJi)C(Rb=Eo*t#7JKX6NTs=9cSzp7}n1 z-Rgfa7t1Q&p8TCQSvlFk%;;2G+cqvQ>D(h4=UV)wJl^=s)ii&+QC91b>{6*`K`$?7 zJ8bK&HQBhuW`|JoWX>7$G`cNj9TWIr|A*mUedB+1t{aXA6n2Q8;bkdj{iDC`-QGaV z#Q~tr9I!c5au)}HrdZ*dFN_S~n=gz&^XMpx146yRBK_RKn=i1e4KN37as@56g{@ow z=?6J3TEP@PI}e!^C!RF6uv7qHkPahr3k73iV+9axpkQi%9fMSYFhrGsg1I?lVK#_1 zH#JZ&H?UAJH!@N%H#1Q%vjA=N1TAU+$$&O~nu53Bni-iYSb{f?fOLUW87P<=n}PiS z)(c*yZD@eB<{RW3khLHTVuQSFVqyZ;0-}u#%pguSH3NG9%r~+Cvn`B`!Rlc8OpPoQ zj4h26j4e&To(Gu)5(8NcqCpt3pa2x^pkTJK;nF8=9XNDB0AxV{YNTRaPhe(=w44Ba z9k`JxY&n5}fu#ay|6nW^X!$kzO7OHy$c_=vW(NohyfZ={yj4UWvQq@K{UkF#MIW?5 z1hhW{v^@l}J47F}IYd7#vn&<5C?OTJ(?dV8MBh>03A#SPP2WS`Q{PM9N8eZ9Uq3)U zNIzIVL_btN9KP`dY&Yieg)IGS{TzMFB@AWy<@y!+l_<*?K#2)u83RZF7X0vK3}$9# zT<|sPhK43aa4zaP216rb(2{+EtJb%rhQyq`wt`!6$8Obyh0~ASHQllMvO{vOHA{Ip z_rbfS5fdH=a7Zace0cD#=-1ufHP)8D|LpmGT~=Je_Sa0)>vQ}=*REnT-PvWec?Rnd z9u?lgf>gFm3_lr#y0RS17$&s#`pUG&(i*>>8>1wtNTA7T68$L5dH0T6IOjWp$r?BGmf9a_Iu`##Kp7T3-<=^~I z|8=hXH_gf7-}d>}eNKUDck}QG#two>j74QX-iPE~*nd~VQ7pmy_kX#m#im=CXLnmh z+-zjX`OnuFyX4?J1#Zy|t9P0nxOC+l>zDNwCk{T^uew0{yFP2!+3!)iyo`GO-@9Dj zyK+X8Y>eq1ng79G=Rc`8{J`%Veq8bm=Y{lUJ$->$9Do1L&u{yG)%(;znIy)t4NMz~ z3z>c9&h_0Juppm*$_@rQ2ZkF5nVxVmR64arM#?CxyWq}n!So|@gwveBe>VdZtQ)Qh z{qcVjf8r!tLa9k9o8^s0o!I{_jsLBGy}$d%e}?dZEWVA~&HoBNWZDo_Z5h=p^RH#c z!t+k%vPmD+k8me^WwUht$MS<=jR5s-x4r?ZqL|P z|LozvaJKjMMP(E0)$Ux-QcyR4@%!6+juNJ2_0JCTZWaIS98mbt{s?oz)E~|l9!;v} zSf&3}{!!y8@BfM`R=kmKiaPaIG2{35dX8KE5BVK`YyMNrV1N2wKz~c~Dfy+;V)(@A!QA&-MkfTmCy=sBXP_lJ^nUCWFnt?Z3%YWkmkZF_15LlvdBND)pZ{ z(-xK8ZW6mHF?qV(R61j;%%ixEF@$)hk{(^;N$mY9~nP_x%D{Pd~EXTo^VF zB>p=7NBw=3M~?*j<_`CT`4TD{t-Twc^!Iv4|JYkzOxkXOS%uLR%uio|S z-8l=FU;7$=-Tcd}U-H{nob^owP6(&;ZL;7u6zACJna`>HeY)14IL7k~+Id%JEx2;S z_;Rb%o(UY;;YM2Tk8HTLpg4YJYxhRx{m#!mdb|?4`f~Lz-(M;hG!>KIRUW^aqJDaJ zZ^&~S?~B>DCq7d9!LWI8>bFl5xWg)|O4r!9ZqIn|_~iq~eOz;w9MgMbWa+bhUv+SP z8Hag)U&*w&X%!jFyzD!r!rFo>S<-)Wv4?qGdOh`ILjCN5CFgtW&nwK$v-sZXQF-z_ zoB5BAH=fN+k;#(gsmR)`)Sl}4Fk;46{lAB|F1pE}U7CJ??~l-=TPtD;^ztI!y5|dN zK3*Aoh;t=}>v!R0+x%odsb}RKzB)-ana?fx^`h_GM{|~YwoX_Tam!le{qtIfTe|U% z%WFQdulm{`9DgR|`kx40<|^BYqAzCBUQT-(*SvXOanGUWw2ZHiVZ8{K`@|{Y^5z$H zoDKI2iHm$tySBI2;_u@9nV3?iJI~6wKK;#VIk)EhBbW1aoyRLTURfvo zV&$15D-yNs{Is+7e0sa=SmeRBJ!bKuq1tQ1@&&a&@ZaI``N%W#!6ucdhs95xcTMDQ z{%m-ar#MOY)=Ec>!vT{HDYz7r-+!5rbYjt}S0d}AzkU>}&oQoHkAn`-cH<_U!n9KUxSlae-WR?oHmz{BY8SL%EJ zt!Xvm?cl`Cv*q$X=UF+Y>Z>}*c|Lord(nOQd3*if&|BY&&)uro-G1!ylSjuUFZSfv z7$xIaw_nq{q`oct@y`bfPblrU@HX#W?N{Zl3=Yo;4O5+>-ygBR*M76>XPR8$M~#9_ z8*cD3ujW6L61u(p@}iaXj*R~kTKel$o^kC$ zoy$6huZuXw=FY4%cHOc5!@q!_Ew}eEsTF_iyxXIF_Q0J(-8LG(WNIwloc*D;?AE!> zskgWA8UE#dd_kjn@~#!Px5~WCzq>M9FEdenb<9@&Q$Yg!m2J15cegq+UVCvS-Di5) z$zz^>gkolvw>tm4Z`0Z``@}u}9OgTlaz#{h&BYAz+79Kc7Bu@5pM1^ef7PZ+qqr~Y zGY)!h_0xa*CFB&t)x7Ey&kA;PtyUZ@NTwB<# zOWdbEyFRohY1Mm`Md$X}aoR8W_+%c3<(*%i?I#u<_?hjj^RG2z(!LvujJ_PU_Tr1* z9$Uq|xB2dElk#m!JTq>`ne~3w-*WAmj@JFzEv)9se~Zdj{bIF>ivUyuRow#&Opr!EM z;hGMfHRpnlC2>SgNnK}h)u*I#bL>Hpixrcrt19lAWtqmG6^q%r`Mg^2cT;t_lefRl z?UK0B=W#-3&O!xGjRwnBv#!4ENoSL`+RRe>Se-k~*>`E=ubWy+mv1!p7tB9c&TpkP zO?$>%^V(erx; zEw_9z-jSdedh+nUiRlt6iZ$k6>D;#S$0Kf;eUtq5mbAaVl=|}GtUr;Sn*L`OJPO!g zUbWTs{PlOUza5!n8gh7&=SRNjB@+W%jk8h&{)b93TV3C|=V{5Q=X)eL3XAt{Q-9Kl~kU6;&t9Id-O2gs&1&f&>2(kPeh6dy z|3Q8Fte@LwFlt-XKPoHCib%RqyYDOCCkLiaT@x$+D$On3))Q_WJdt@$ck!%AQ>XZq zhjuoqF17Dh*}1Ck=h-92MGk1cd$Ijb;&02%%k=j5?n^#6{kakQ4^^+TPebbt*-CCT zVJ>+iI4@fA-jP=6nO(_QP|{U5>J3Uapf@Df{0vTeY}o!hgkge|{Wqcys#MoWnO2-z>iCANt4eP{-H+)&63iN=01dI-9N|s!}Ef4<;{OP7Y}O8=dSUn8s2 z3sU~E#Bc|{Y}k8x-u9*MN+e6qas0bca`V9Qwb@HPg)TN%xW0J#zmLo3^jv<#aE$x& z*WgpG4AQwl(Ru2z53cM!BNun}!~7qqjhE6UKP*x{lDT7Fx~sPp-y)lD)vK?$c3Q{r z`k3`zkvG1)A@h$_!lk{dPfnNr6XoQ`XJPv=RAafyDZSWKI{08wCs~*UG?QZ57}&bxbO55 z7mIxnVlP9)f0kJ|&fc-H??5xJTf*PX-pj7l^gk9aSiJf(*Qaf<0ruBc%et+ssg>_P z9@hGlf1QP5qU70|JG}n}9`Rb1(-AtmwyH#Jd*k#aUAvd`$}`)iw6iXryyK$AeD%*ST`A?@ z-G=TD=WSO%>cTfQ@;gZuKt}zK04sR1*7ILAzXqV^Q`Oi;_EnjwW%JTM2+MI4)oOko;;WTz)Hf`% z?tH>DXJ)^h-5UBb^4W`u`YQZ6>o0`d^O$-*WYW7+d%x|G=5YKu<=J1JgO5&r^xu9W zxarsPe-1mBa;hU}$^`GlPYW|k4{=#Njuj2LpZ%+01ufFx%v9(UO zPyP13-f6jR=lZnjcdzA-CmCKax%I}_EpR7~ezKM1Wf#8pDO?uQ!=4*$p7*_alMBzj z=%bqU61%ddur!&!$$XY9T7S=Qo6+A_df%7J`1iCte7>?s)}onV^H^psHd$i!>HkB~{=0quWj1Xonhxc?oPTFI+ zS)bUP$*FZsy(NFm;%=_I+n`_b?e9DG%(r)=SOo0~jDy46Gu>XbCC%mC!!rHo-anh7 zK1g>wvwb&wsM?a8oWbB7yB5ux@iXw0>lu?7 z6=ztodG9USs+sf6yxMRuTcnClsRL=8ZAl3 zqd5k)57(;Pdj67Ga38ON=)aW@Vt(Fq;hlY0Onf)PiRYKux@I4des*LZSKd+9E?EysvEk8;0)-PGERvY1??iw@BWL$Q*Bp>heLTM4N zR_p%zvl@$D-A%D`ix(z?EJqCb-BQ?)F#tu}e>c~Jc{ zE4|isNBuFY(`+ScA~O$({FRyRWHVhL!S-UY%9&EJi5vFluguF_d*fi>VzWJ&*Unxp zzaZAzFQh$*fhBZLKJO}rA8Gd#a6Y^Qdujz5d;pF7jtuqx*5m7RX4mF)Je zs4{w3Gcn@SJ>!j!dfqL%@{ei1nt;_ho!$RFcszTR%l#&2@qR(+(o%hrzcAu^>aT|vpS9<8FZmq)MtIVK1?R%7 zW&K{=DCi4rn&ZQ`ch9T%SF84XJuy>9-%pZhvtdV{Q`cwPr2ddJ{zchlxA??@&Z>lL z?dtyf`OvP)7jtU`SHv0^KM!q4p1r$YOMjU>*M^>}o;H5stQ($`o89wY7`_`eH z=2Dm04`b~Lg+jRH&St8uc(R=N#Hl$4{vP<@zW(vMu%|j|C(D;_`@_!i>DAste?G+i zS#*gr?0m(U*|#DdKTYCiiDq21|N52V53+V;Utc~cG`|~+T)6Q)B`1VtxpVOxG zRwwG$dcS@0e)6-jcae|f9{rr(_DeUe^UmXQiiwubH1<^8dVe737Ei&#af0orv z-gVDeQf}n#{;qN4>+z<|(+X~I^IhH&wb(njVMqR29mn;WQ`t-GKQg~ijy7IWq$6N!b0fyF2dhs!XW95h2@b+s~yRoGF_f>b_@re2dkx9Xz43aqFJ5 zt^OO9UlRM{gJg_7SIp|~Qc6CH+c@U?7=HJ=AHUvP-fU*t3iUf~`dxZ&Lncqo*E350 zmi(LXj^DYqt%nSA16@wt3JP7Z*+5Nbue_xFiN(QlCV&55@QM5BAJMFfYus*Bt($x< z*Zow(p3hw+%xtQ;?02~|=e^7c5ZkavRP|fmo)uTVPf+dYez0p>=D(?u6QmyZ&au+o-HV$RZMr;V=d4|yGM{fgFFki_`n(0@d-uz>E?zx%>$4bc)7LC}8lS%B z-nNg^O8qmpztz`xX3vsYZFvIojLq}UH#a}2zx3H+Wo6ib1qQo}%Z{Dld)Ojdr&7q? zpE7--Z%yEz2iof|vVHt<&*4)C+mfDX|5WE4cU`L|()C~an)aQWHM`bDTFmRboahpC z=t07VlB;VrPf(0DD6RWiJ~4gHj;}0Jzil+L>a?)^|H6(rOuF>k#J~MFnvIH8-U%2V z+5Kw6`v(doN0xNl_MYsP?;_r`;iTw4E#=3JH9H@sP0y&9q)`2rcgF6L2T|@nxqOaA z-3~aqN8!H7c89w{yQYs56k+Q*Wo?Fj%=S_co zS7OmmkDa+aGv_z>+ul@KuK3BzfA;bIpeKEMTo-4Ry{g!)6LUNNi}`Brn`c*xH!bov z=V{G8QrMbfAd;}B=Eyt+*B{-ITG#*dD6{0fiZ(sX_j&2eZAz}c;xivRxb*EaQWW3M z{#7-r$)@be?trAL24#gQW)sfO6;I~AW$@_rPvgkP_fl(5H7TmhcTQZp%%XNl)s1g< zd6L&!Ht%lIm8dJX@$6i)E$g)DiMw}h&Z{Xd&Ag!WM|x6Wd$q~cAa{u^H(BEwj@w!- zJmFTtuJIa8BA{xIZs{a^+K8k$>@Pi&bs&&RlDn{8V%@k3EOZ z-!l;p3pXwb4D~H?DXR&&{a2AS=Ef%xu|^y2B74vE`}n3;vS;l7C-v>BC1>;7lH*f% z%zyUl+8m3gz20{}XdQ0I^0Dtv{m=1-X9q8%@$ArZmXnTZPhproTRgMn@sx~1YmD`- z|5~1WMCz<~e133{>|?b`N8^nLIukEFJInqzx~NRHcU31X*`$$v>`y^&>m{#`O>>q#dJyAtPq^9F+D7E3Pc_TE_jO;MM1~~W zZGN}2qyLJrj(+<57WLy#&&0dFy?9jPxLWont&&jpy>ibFJ+yj#f8q7@-!_;ony~J~ z-T9}a7x}%kn|9z~w2-f)K;i9kp(2H1BCXY&nn&^@9_WjP)@p_xtzCP);{n6r$_t#y z?RI`^_bm56xa#1i)q;P%{A9j(_FURomyNB@T-l5de9B(%K7971%L=;<=hi$tEn;<; zqtIr;sffc`dyBV;>^eF5!;I@iiR!b`8PlvJtG%6!KM0%ND{Gr_)h_(cZa(|>+h$6C zVR$FM@1P>ni3QiW6FL8GdTsaPvgazNqAxk_Iaez${GS-2c=pXI&xS?$3^E?C*j_kK zkGJpU+k7caZJQfUrjXy$<7)K@j&8x0$J#hjw{gyUwf@VWWc@zVhk5Cfv7h-pl&)sMJe_;-?dtA6<7i-ceX~bGybIi+u5w&9&uwvJ=e;4l)+z z<;BR>*`+Xh=*oT4k77~^zEeE?#tEO8ZI3wJEZzw#bFXsTf5W}suV;Fydskgsfu_Z? z=-bi%-?W{{2~|6DY3-6J9jhxBl)84vo!@iFaoXy&ky%z6s_;u@#n*}-t9B8c1&C; zUST8f?uXuFfxYX(3gqqu*MGkLWxCEgJ-%y7*I%nBzg%(cUEZnqpiNtkWjC`v+Vn>5 z{ruoS&+{+a?JMtR)X6I`Onjg?QREjZ&$+8gN!kxOaw8YkiQe0CPV$O?!<`u^%T;%O zDCGXl%KSSjaDtp+a>^`^z3*Jqj)mz(d^){N*kaC$j2DT$s{{{AmL1>7^VqVR^=#i} zhaNXCt4;5IJiD9zywJ=t_vH`Q?JiII+6Z&TH6+x184>@K~~>$iHVW?T+(UEOi& zL~m1Mn#L(-OX0Rnf6J;=niV@mQl$!vBI3o$niBSCI=k^~&es&{(Cf?0U*5v>=o`9 zvN4I<((6XH+ny=w>Mw^*o<2FQ?Paq2w1rM?=Z@IgFX5kcOvG{7xBqW-movvLVr)OT zl%svYuJ`gM)h>oV-5FYQ&C#RgLhd7H>u;^GN&5v?U0Pi7{hsfIqCIt<2}}!WqQyVQ zdY`y6@q}f9ScG{le|S$&mr6}gUY?hA@XTL-*7(U9?VA3m;I+g2D~leL3d?l8S@h0C zbKk>>I_LNm&KMnRGqqOIm^;&Nf7OJY&vn*YXvcl{Cm~?;KXk`QT_ex5kk@PWPrv-E z_4T5EUlnJ}nJav}Z?9%T`JFuhS2^)KJgaQHj1O?`IQyJn@L%jr&xj%N4d+B}b$#m>=rx?(2x?O(q? zg-?C7Zmsw}?(5tZ$2BL}u6+7KAnTg=1{1l{9s$n2x%SuIJd*j(`a+etXRAQiQiGy{ zdt9Fxoqn{4@4YhHvqNh(yy8vDd%f{4Ywqmzry^3^*3LO3`~G%#&;gy73W+-3O%Hk~ zZ{X*tXtmj<_mWXR>#_67St}DXd|B=op1wL~tGwH`#JwI#+o!$yv-6hGmuGIbQsxEh z-MOajScm$bib%mEstz8L=_^)$yIho76!SZM^$CxDlV8g&&+NaJ zS*JXwG~4D#2;<&a+hvx1>we4N{KU6SbHc-GKlaKxuMc7Fn)=vt=Hxg1>GgI!5AW#N zytSLNbK-$G+1v5oW`91D8-3hIMDG6Omy^6-J=&X75hkcLxBEy3jdicr=$k zc-yzJSdPb!B`XOzF)YiICz&gOH!{5{wIW<>P< zCeaN6G4ZDh(_)y`$!iM7uaS^>d^zJ%uXR|%2T{itO^;%@e@t4QzvJm|fq=5b>n+o+ zuJWoVP*b6nUXuYA&-u)y;vGLefbLe?$xGh`nMv(C#HV3;+z$IV(z7V zuiV%En$@#f&OvY6>X#ZiY|f5vs^94J-nW_(p!Diwu1#mtw1mW;b`F`%Nm@M>?DrD5N|(Gl$kti8 z_w!yk##F_PDeKRws~p`Ss2uZYONNfwLH+&qSFZ%E?On>IvDo{Irk7o@@&XR4qUG zB(0G&-}`Xkj)l1r9!Jy9@Bj2AFrZf{?9T&@o-+>5+NAIeiw>SrQ1DQdxWC_P+J_zgws!mpE2%Qw z*L^Kx>j8sXEB_qhTRAWD>4BK5N^Yi&9Z|=8bDf+c_WkXsh~PMz@a?Y-SD=Mzv1IJC z{EKWoyvrUe`8kEBTzSvO58)^BW-j`+x?fS_>@l-C-P*lVstncm)YkrJXLN~g^2(10 zUp=YrM#Oq}s->3OBHRomA@C)TX_((}jn*|DyR>sN>$ z{8n}EitpT6{*PZzX?<+&u%=V*+$@#4!moF33+-_DyVy+l@Zk%BTtb~~E8fp4aA)Vw zJ$&;~xslkeRa-M3%0-w@N#C-n@Wq>i$1-_mO1j?aKiIUMlfB^O9?{J7``b^>xnvY& z<#6Ts-qqfPl5fALNGvXPj*P3T_$m}s+5NuasJz{Ft4Fb6R*zhFhX&p#xv<2XVvzgv!NezIp1Hay(`}@nrSTf&gDy{ z)Lj=oj>u=K>L&kQEuZ6@z3fst@7t6m%%;m^geSE2TzK4>p4p`|EnUZco${|P+iKx` zawq>LP8X1|ki2efo_~kyjo|KknSIk9c^g`8tKeH%Bl|6E&vk#PzNPDG6haK*7EW%Q z9(v(%o%-(b+R>p09p7skFV~(s{X%R6t^P^%m z1YAF~(&R;J((;8Zfe+(uxPLZ!{jvQdzk_cp+r@)C*3*N`&aIyLb=8_ZR}5cSFLk)x zdPaTurG19krrOaKn|@9B_wwSq=daGc|8w+M$FC(f9=h3?yo-O4&-P3)$19|EQweWC z-;EC~wY;wqIi_8_B_nw3&jL2aM}LZzF5_Bz>SwLh(zfeo0_MGPv{rFeb8pa5FgGjQ ze>M4mNRCR0pSzt{QpC^RyoseN!jQITzY?+|M4E{S=@=grnz2{DST*rKQZ2a zTYBV)n8fP7{^N~BfkA0$E7mf1>t|1EIE}AX%AH`vcu_&@gYtE)d| zvc_KN??1)iJL6kO^y|mhPO0&Iu-SCzxA>;T7gzKLhb8{XjM%pF;zsusW}f%wvsCOl z`dBpcV}{*qEr#ZI`{vzc{XFq(Q`3ZV@6sZomPdrUtr3VZO`W{pXIt{RnPX{o<0$rRz6)kVJXvQ{1qq^dm!l6vw%_LkJ|U* zqiJ92jI0*js$E*T@nE&f#@~Uyi+^88u%ED|XIJ#nW667!=ki=Ua>a`OU&i{GP3z6{ zq&Gh+xfac_V2=6IZ9it0Zi^I&yz3OKyZIYW!l%ubN{hEusYFayxHHA-?vr_%OP+Kj zw)^ed)M&$`t*;`zW$9`jr#C8kpVp?RPQAe8Iw!U$mqoq*!@8VD3LCk9TF*+XtB!Q+ zbnG&AdwVW%>Wi%@=lSh3=Vwn`JmHtwL4TXa)2phD%H@`=-f`1u;r8WzxBj_owsOju zaA|kq$}L5cw5Cs$*zx0rceQ)^iyMpdqqEv>{bk@$&#Kq*oN`0#m2LGWxuZ`Lchv`Y z-+o|nE{RdJdDHzCgX{Y%IhS;)DkZFEcAva#cKx>lmcH{HZ#3;O+>~}9^}Bi8i_?dj z6qS6Z`)`}P^6w#;i#~5-w2r;KS|^gv@9%KreMP2QPi-Z`*E#&obq=g?3a0Z`~j@`_k?!`Bf&soTl()lnSJo^`Ih)?wTA{^?c?-8Hjarabz%>cpcy%coJE52d=250w00ccMdm z^}2PL%RVphUsP{t*xYn_cI1Y|=C>_$#8derFMod2?y7To;=_fVDq4yrrx)r;f2^Al z%N^koU0o#*HCH`CqVfKTX32MXV#kk&f4unbVXMxsQj_Ft=cy?xMR>M#{rPiET4K#- zo#Q```G!?$a(rd733>W%*PLZvUod9BDcfi@ZQ~rx%dYRX$*$dM8L--?IOmFjoA-s( zP*#4=nenAICV`?)*1S0XaBuC`nEz+idLIW({NB-xU|Rdlb+wBk_h;_(Z{<2O{okBE zq^6p=S-$$|N~hiOmml_@U%FU-^$gjlr8*^(_%GaJZV=2B-?>V1qNvf^Lo;4~o_MWF zj5l@}=OhlhlDIc7_q_FI-Q;}Er0heNh(6z^{qD=2P5$}z!_gI+SZ;}hIP*Vp+jU}l zdIN{>a_N<~)%b}Vr1UNp_S*eB(nhLqJ-=15T^qn_f zEsZ;`5$1CIi1`|p-}A!_o?ngK_T`dLNJr)GQ}rk3++{y?^+2L!rTPZ#GiRIroT#h` z3%GXiUU04YtV6fI$?KV^ga-r_{r>xWw*$6+WQM{ z2TVPw`!{>{X{F_#cH~qP*-EXM|EYML=fT1~hU|)8X0oxBtk~}zUM$m? z=B?pf$sGyB-D)$=xcYg|{=Plv+s3)mPqEpYd=_W3^Wq=(?hEGvqkGT%RqLB^e(qYU z%G!U2-d>%}yH8qD@c!$Wd>gKWde5zWF!^R@+U93Ql7`aZi^^onbIEr*ZqX*q={SxpPDBzu`E)b{hWjORIvHw=r$Ln-kgoMIx-qN zr%V&PWVKx4+&72Ca-u?d`7`==^_-UFWJ$k#EXZAj-R#hkg>1);`Eg(RBcsYP*=u*n z%NWM6Ri`b&?t5u4wwtT*N~J_*=^ax4e0{6?Y!CbAD{XI0Ntpg8?uwwtcb?0^ExY7H zr|5=XZDV|UH0Y$vgo0Puhs%}+$VPhhIbVE`=qnf2byz2R>4NrI+fQ6Q-0GFdfBtXF zz3-b%cqdhK9@KR`IgjP?k$rZhU3d5V**5LwzDJ=ygC$BT!UH+JSsY~vtC`yOEu^{X ze3z2*6&IB=-N)rOh;6vP_}rowzgMp4_^_EZD)z6?=EGCY8knwoDJgw2)_TeNgzCAn zF&jDVmni$q2vGm|HlS%m(B_%v&n&8Sk@)VlXJa|@*RTUJY(FQ7F@My)cfP;vm|MxB zXS-@Rf6m`T zR7M@M51Q_R=XOqcwMPHyY5%LNit^dH!l`$AE#K?z*H+54FjEoFSn# z&t}QSLy{cV#mX07Jb3QT!y~UVeCk^5S`sGu1g}?0{PwMz^AVfm&1dT-Z4y^ykby_FQnOQBKSKVlT zK6TzqIfpx+xA;Hvt(wsvZq}3+ZIGk$WHHOUy*C+RUY~jLCuW0G-8F%a-**IDGwtPE z_O{TP&(i!vx|*}->~9*0HBT<3S<1!;8*S~*)K%}^5V(iN-fdmy;xu7*=>`Tb znY#C9KFvM#%FnaWM_iN7=iS@yU6xPy?j#4xmg{x%KCihMyRC?MXPlgCyM17ydacDL z#dPhog>Ua?CHd=oE!v=b=TZIwdW|p(enVs{M_2$+mvVzs;d_oH}PV1C%s$?H+&JjX&ihw{ zzkm9@wg2AFe*qykeHP^&x?Nu21|1k0gnasFRFq$YZ?Lwr zZ%7E1(?^Ys&~_Ms?Lu`O&98S!EGo(`FD+2e2QyN@w~l}>@hHv&U!DNHYy~C(xp@S_ zgWmj-3BCXXbQ??-&F_FI%Ph`J%1MP@;gMQ_dJoL7xdH|hnDEPA(u-0POHzvz^b1QN zp|3#edtZ_gle3E7+i{E}4AZX^Z$M5YBJ{rf1)Pb7Xl_c$gkGLwXlai9niy~a2P&VU z6->eRZh^{12n$4F!vBFAtEpmq#A@FYLH2gC@~nK2b)UV zGU%!yD&gB3!G%6343W1t8XBTpa|7anPN@c8b7N!#x&|gcuLQEa5v@ugeSf2gg07LV zse(D^plJi}je}UuN(R>eDM>l{@N2UmTO2`I9Kr(UL4DXgS>S83P`5sU3lRJ}AHlc! zK=(hwFTm0V6@HM5uk@ispT48Mt3K%F9Y63s$O!#N0~xr4nS9B-q86TO^S; zNWxBdhHj74uL7G0E_EO*u*t}~CXGQ`Y>{_Of(2l)3g0zpZU(>G$4J4_(%cZXhZ1em zq=BU+D2_8hS2p6g>SuarM9l4L2_GLwsT|}gFZV9k{@`7!vtlcIIj5A(j@>Nf<>ej) z(;qN4mCY@FUq7k(_r~8V_b;nRIAi)fCi(o%Z_l)~j8a3@1dS(f1_-6_rzIt)J!bFF zT(NTFMy4AxA|qWVu3T|sPQ$ST?FoB#7)qSrPk8(|nZ3ipg7L;q#+)^O=De8@pQ6|@hlKs{9C(|T_K6RWRsEUHg*k(X5GfJ2~x|BZDRVEgBV`1MCO!?dE zSN)s%*L?HeG>_^zYwj@aS~KC_CPyK~`Tu`<|KD#md4oCY%*dP33^#V}U_9pMcTDcY zgvZQ^dJW>z2TtANdBMl9%ef_T##_gP6RHdz{(BgoDX2f$uXgGnXF_2KV`F2Q+P3<& zf3#0aXNcBeNw{~S(KZu-Nl*cDc<;Bx30e@n!Te~kjXyYF*U#znsQ@6f^ag1;rh z;!op*+PVK6PV75Zudqb*fxW<@ho9J;Ok(~!bhO>hPifEC@xM`kw;v?_ll@ z@9rBrM}gn|$NPH03E>a_Z`djNWG^SnE@t0})5RT@F*#m4$*ZVpCsY}{^uw16i^O_2 zcE#^byB)|h{n3J4ZuciLFRy29eRuj&!G-S+zI)u2wT352CMEZ+W($Ah(?6`W;LH>2X5w*5_@dak$Z+_bx zdDD{aydr)X$3(_Ai)MQFPQK=}Fw-Z$BK+$S-MY1IFZZ)L)at%TS!m?B{*B+-o;leY zHGPl&{}xui^hYtLuE^=i{r5JWWJ*B-eEwD`NGLPQTIR z@G>Fnn^I@?pY!i8PpxB+WGekMIkW5a2AlYfr)o@|uMDM|K2Ba{wT4OREaT!PY1^Ks ztA#kHKf2qc{=!N=^|!{O_ZSUmYw`ab63GnwGG z1%b8`9+dvP&{vpxXF}Jlif)<6#cXS5U0R_gc3_&EQXZe-$28x|lVu~8R;Bz3npQI{ z>73*G66Z}0uN)3*&7GJUyY0BHLYY&Yz=1h8HU3|j%RIrlz^EbWjvnLEUEB9QEPN0n z=Hw#Uef#T+&|hCY9vXH{bzO8j@KYIgbMOV83yy~jQnQ%9TeKB*T{F&4ugeSfKB?{K zZC6$D@7;$LGxXbz?aQ8dZ~M)?w`KoHcdz;G%$TuI>&U|y(VSJfX-^h%y~w>e`)r%+ z@{_iKVN#J7Lj7E&GnVRKmh+1$D@&N#w&$<%4!xu)b8LjKw&PeCR&TdtCu->x&kJAqW zmhLG+bft8+mfS`=bb;iVQalg@U2HdmACfq+Ib~YQ&+>q zt@&;EHJ>$R&*nclelF(O7SGllQmz$ z)n#mcuULD#GEZbzLG#PC_s^(z-0NytAF^9}Ptp11Q}n%Uk}IFg=w0$FH! zKdsh(YUlG);KdAGcVEf%*Eha@muq=xSL4$)6~AUKX=d4x^R|5U*0f(QeD!Cq%wl$T zUQ#3cK3?Ul@*es17tCr!q<$}z(mHYCnR=IWHsn>l(rC=|k6-ZY<+7tZYm7?z{}$Dm)n;t|lF7ViSt=eqvGP#|CTejR|xixvWtkGpx?_I0q51KBieax4X zwcySTrqk1xymm}AJg>4?g_uC zUb!mLtX6Q-r}YBn2TQCEHF?Vay#KU@w^+izZGYdaOFBO$GM=}e#b|mlRR7nHiC@>b z=FVKZPh$Tm4L{=?1)Gx_i&uZJY-z0uS^Dxu_;*wLJ?VG9#QDcWeKB0Cs^KNK(=sf! zd_BiLa|sK^%ST%kPqasqqJO z*Cm$Ec{|aQfAS;q;PT5i-n?dPe)8u=%dM&RCbHZy`1x_`yV#%hA5I=!-+5Kr^33NB z&mST)XH2VMweG(l@%*kt$?76-g`GN@6rEbEpEXkZ;viYJN^1)m`3MM-KYWw-+TTOY744% z*i8zF%$xMN-z-SxUW-`eUyU_=rEh2a$#C1}8y9`2rY211W>1;7baGO!y6(O?yLPPk znO(T;_OWlzwbo3Y-`Z+^is{>g_e>9`GlYDz;fZ^wc3*7Mqz(OG1n+jR?CNXTbD+udz@aV{q+#X z%sDgO*PL>JN*Oo-9atHt+9**=gmal5Sz=C4?5dp0Ysn)uTyrFNT=tpYrXr{3{hjefB9-IX z1R1NJn{>Y9xvlTy`r%jd`S4=N+^KE#Vvi<2TXkfYPJxPK+M@7-i~j$;d(fC|d;iOT zz3f-FSn5aB{?3>&OMZXfgly?}qjnLkU$_45>}a!KZ;I%+&02kU`Sz&DYkI#neck=@ z!J>r7tkdUWExmbuuM&H=Fu429BSkAV(co>R;TInZ{}N}Kd|gI-+o_6X@?q-cEW#)CcOL`Y6EHzOOT&I>D?`D)_8}+TG>6lrg5)1dgD$&!|#rKMM zTL05^)cE53F~rfc)Yj~&!h`1}*{nS;^=;I99_{eWUo>yaGv4I%M_xyMXB*9OKjZSz z(E8lIp!Ei8&L6m*)|K720nsp8@ccmER>-H+P%~D#q;o_3bP2rDZc=*n(f0DViclB(U zmlO0hpZ(}}+*9j~*OAG;R-bCKc+RXc;Y8uSqO-|ezLUQE{JOPBqitGyN3M|D)^y2> z%?|?o>h2_(T4v^cvYek6-P{_hlB_dNdgI(PPX$dh6uwt1 zIyJ}ke~5_Zfq>(GS~ShmpSA2+GCh0G#h-su8)cOLG%QliR$=RVaoL!e^=I(LzklY; zI-JNf^8k0S^y+Q(`^4H}*hH2tc+2#@GH8$2B?)((zD=&8|B9U6`vQ?0!_01`+(CNIBc*f7fR2G=*T{qnzg>Adv9iE7hXpRQu5IK%Vdo+oD| z*VGkBb#}*-8oxg6dH4JFTjA?GX>*thV^aBr-mhOX>!H-@I~R^v_V7&FchWe^GVVy~@UTjOKp(wkE* zObp^vk<_q`o0vXfal_)H8&4)$*3bJ;^;_m;fbObA+w~y46O|RJdrr$eq{G?S?PUq?^&;LgF@ZX+$al*vd+r^t0Cj9HU zym+F*%(HScX0A@vOj?w`F6iwshk~F*p1Gf8-H9-3x;^=vxJXYTR+@42+jEo!?iSw@*@?LOt}@}sk;hl49I>LR;gmA=*;+lft8 zuQ!Mtdhu!2q>s(_7T-)}n11VTT>t;w5pstPo!jQv5<6?>lo=M&H=mz>=BR7+i*UQI ze`Ib7oIKw=?bD1}p^5-L!8PlzeV+HA@7d$neKP(Z%>-sn-uc7t@XH{#b^qO51kLup zZcW^gsJP!}*Daf6>mI2;?Gp(4^s|3v;0(7z$9Ej@zgT-K+x3~YWk<@I!XCewt&HdS z%|uM*oXYNf+iKc!SN_kRZyR*v|EQTgSF_r?;p%UFp{LokFP~j46Fa&yArl5CkXv^2zseFef`=0XZE-~ET1{slK1Pn3y)vF zO?`K0JD(Dl(~TFaukoG9aCUi8dglF{h@UV1baaZnXFJI=jk{bUlviD8t>J?B_T!f8 z7n;A?q+OURyP$sg!&&n?HDxc)lli$W@7|lF?hU;wu3mVv*;%Z&%6Q$z`*O)LD^`R| z)$5&nI&;UXr-HtVCQLZlaE<(bw9omK?2kIP2U`tGb(#+D}Ro0+&NbOL7~B2RcIImI zeBbYs8oQEzJ)gGOl)2xG*W5p~Z*kF+|BdGV1b3aabDb!*Qnljn8|-pP*0MCLOJw%PMv8 zYna9%PqyG2XWnJr$@n_*U)hIT8C8Ch12VYHEzj zS9fGjFsuEcmBch{Qc}RrgPD)Mi3B#DJiN(MQMfIzB7dI3rTIS3qPjRQ{CT+JQFG9i z+uJ!-cQvS_EZ&pkqx9DNa@`K5eAmAlG=AFL5leI55-S=z?dAEzeFrXY{t$Z6J91xl zzir@`4dMJ&cUy9gnC??uBT|5?lbMLmjG zYQ9r8-8os0T|>Y6e?y>-*O5utNr$BFc~9`nDpor8o9+6`%{H+cgetezsb;Uqoqm30 zo7}DnyLY~ON-b@g|23bv?mu&POul=KbuK(P2pJtg+G-ypdJ4VSlD`MD?ET zavSYevozfAt(&vxVQ}0mvwiEz{6rt#`>Er!bz0P2bN##u$+#EB-?VhvE03I1P|Fcq zc4j3jTmGNF^Rq=w3x577stL^M247T%x8=fidPo?Mxnu;s(aH^0BT`J-0Q+iHbh(T|9= z$2Y$$WlafX;%5sEzj&feF~V@$p_+XQ@82`dxvu$jS>cOgpLAz@P+8&Ww>-{J%Hp}~ z?*~Di2Y#+7{4(W~p`9n&=BbMN`|B5fw9)y_nw}~9R!}l)M*0nncPiUXZQJ(vVRrUx zL;kWP=TFnToewN?uG-+Ozf4kXnix~poul7hvIv?twd`{(sjXl+73^G|VI>$VQhkrr zYgNkB6+hpo%e^%AR0cv*P?n`&gL%$YF57q{F8Yz|Cali zA6)x-j26vPIC*-9wCB#U(6BYXZvJ@G6W2Fo_m;9v{5O`$h3M5h)(xngo^-c&)AN`U zvklHqsHj|WJWJ-2&5G|$wYv*DW!+nAj!kOao3N?#L<}2u^b)!LIG@%N=MFzDOuD`H zK(O@w6Jgm=>&rr3uMBhiDpRoGx?ZmGCdK1w594pR81E@pFSX3Mc_eR-ic+0%&pY3A z*Jh{hulG#iP3tzjwcy{@bCcBGWgXCaDR+Fm;b#|ZhgvqClT0=>O96^s*YE4O;`#Ek%}riaD)YqVp8WJREzAD2&5e?oTbD}l zohjY9)8(AN7U8E4Rn-3{nIAx%B(+i(#pBI?DJM-l{1a&IgJbK zFHhVOF(YMC^0SA5VaC4}SqW~c*4o+b>t4kD;Kj4vE8Bx5zBe!AINqOAlC-N*r^#=2 zwB#D19RlcX4zj;(edA;P-juOguP@^Fz1K3 zf`r!1x1Q9TkKxq2D9+;+^L?$yH}`M-a=owRIKl(Fg(7Yk|5(COd}z^(zKJW2x1Foq zyuCO+e+RRCO6*OghIMW~`<9%Z$F$&_r~E<}cjfnM0vNrw%~IRECvVk_RK3afGRtnq z{yN|?fBOC>x9xYIG`b{lMaX7q601ya^v9P~`~Ob-V_oBBV13#&Q7W*PxkyEZJKFcp zoBmysC7CAmR84&&y&|uuGWp^reO*)2va(#(=530VMeD?mGB?G$UY>E{si_&0ht1M^ z&*$e`JY9ZVQzvNsp=|G^=a-pJlxB5(#u}d?v;JlJ$t%`;(^O9L?$5S-zK@yb?)%G1 z3%r(|J2^(Au_=1CXJo;fR6FSA!B=9=#?Ir`k z9Zef6&V1Z>>!gSDahw0Alh}T3xV!H-$Me%|`hMr?c-}{{xgGGod&RpuThRAR*Kbol zFF!-BiaQIsB-$P%PfhuHh1XN)>XwD)>bP7QC;GRZNhzGdbRoVcJiF6TSGmi)>&*%I z6W_WH+?Ofev@tkwhpxR2-vf3A?sHc!)@&3Bsx8l3a_U@|#Km>NN

BD68m~ShXf7 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 S1!QJnU|`Cns_N?R#svW4RJXwZ diff --git a/doc/filter_iterator.rst b/doc/filter_iterator.rst deleted file mode 100644 index 2b1ebc3..0000000 --- a/doc/filter_iterator.rst +++ /dev/null @@ -1,29 +0,0 @@ -+++++++++++++++++ - 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: $Date$ -:copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. - -.. _`Boost Consulting`: http://www.boost-consulting.com -.. _`Open Systems Lab`: http://www.osl.iu.edu -.. _`Institute for Transport Railway Operation and Construction`: http://www.ive.uni-hannover.de - -:abstract: - - .. include:: filter_iterator_abstract.rst - -.. contents:: Table of Contents - -``filter_iterator`` synopsis -............................ - -.. include:: filter_iterator_ref.rst -.. include:: make_filter_iterator.rst - -.. include:: filter_iterator_eg.rst diff --git a/doc/filter_iterator_abstract.rst b/doc/filter_iterator_abstract.rst deleted file mode 100644 index 4695478..0000000 --- a/doc/filter_iterator_abstract.rst +++ /dev/null @@ -1,11 +0,0 @@ -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. - diff --git a/doc/filter_iterator_eg.rst b/doc/filter_iterator_eg.rst deleted file mode 100644 index 36448fe..0000000 --- a/doc/filter_iterator_eg.rst +++ /dev/null @@ -1,69 +0,0 @@ - -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 - 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 0ffd956..0000000 --- a/doc/filter_iterator_ref.html +++ /dev/null @@ -1,259 +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 const& base() const;
-    reference operator*() const;
-    filter_iterator& operator++();
-private:
-    Predicate m_pred; // exposition only
-    Iterator m_iter;  // exposition only
-    Iterator m_end;   // exposition only
-};
-
-

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

-
-

filter_iterator requirements

-

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

-

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

-
-
-

filter_iterator models

-

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

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

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

-
-
-

filter_iterator operations

-

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

-

filter_iterator();

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

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

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

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

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

Predicate predicate() const;

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

Iterator end() const;

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

Iterator const& base() const;

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

reference operator*() const;

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

filter_iterator& operator++();

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

indirect_iterator synopsis

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

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

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

indirect_iterator requirements

-

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

-

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

-
-
-

indirect_iterator models

-

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

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

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

-
-
-

indirect_iterator operations

-

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

-

indirect_iterator();

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

indirect_iterator(Iterator x);

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

Iterator const& base() const;

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

reference operator*() const;

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

indirect_iterator& operator++();

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

indirect_iterator& operator--();

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

Example

-

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

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

The output is:

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

The source code for this example can be found here.

-
-
- - - - diff --git a/doc/indirect_iterator.pdf b/doc/indirect_iterator.pdf deleted file mode 100755 index ca69730b895b23357678a96abe28ffb8d78c8f57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78684 zcmY!laBIOiwLVFj6p32;$QB zFD=Q*%u6j+FbC-f;?nm^%uOv;urz>3gVg%wr=%+AhZd*8)N<*E26-xgOm<2vPF2v* z{4q~L(L6wjnH!|&B;kh z%*#tHQqTy=$ShXKELJE;NefAh&`}6WEh+}-FxE3PF*LQ*HPkaSNCI1wnwJ9d7|8t~ z8srR!2SIKv=F<1hOet1~Rxk!xq+ntJrcBMil$i;H0y{z>mP_9`zcjBz!4%|vsIeez zn8tGHJLcu(mw?QL7-0%A2uwmugIHt<7BK{eo`NAbNEHl0P7P8p1Q{KqUKU1vDOi{o>RDKV+#8Tsl$uupi#zB1 zypq(sl41oDuoIAc0kQ+t7hv~u={w~YrKA=?%{KrU>7k(S$))cM7BW;Y1PKMDCYLBg zD;QcB=vf+>E0}?-H@8$UHZamNv@}#OGd0pPHw3#UxHPE*oVa{4^Rl`09YIkJO>U4F z=h6>W0Hqd4lF`Ub%*-jtw@OJYOLa)f&o3^~P0r6NF3l;)%uClx&d&u$u$>(jG%`TJ zLa{fD4b1e6%uNyAFgMdPHlv0&vWhcPvmNq_bM!Jx^-@zx(OeHobCkQ@!a&c�>6w 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 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 d69a8bc..0000000 --- a/doc/indirect_iterator_ref.html +++ /dev/null @@ -1,220 +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
-    );
-
-    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
-
-
- - - - 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 e75a2c6..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 necessary - -struct Mutable : Facade -{ - template - enable_if || is_convertible, bool>::type equal_to(T const&); -}; - -struct Constant : Tag -{ - Constant(); - Constant(Constant const&); - Constant(Mutable const&); - - template - enable_if || is_convertible, bool>::type equal_to(T const&); -}; - -Beside the fact that the code is significantly more complex to understand and to teach there is -a major design problem lurking here. Note that in both types equal_to is a function template with -an unconstrained argument T. This is necessary so that further types can be made interoperable with -Mutable or Constant. Would Mutable be defined as - -struct Mutable : Facade -{ - bool equal_to(Mutable const&); - bool equal_to(Constant const&); -}; - -Constant and Mutable would still be interoperable but no further interoperable could be added -without changing Mutable. Even if this would be considered acceptable the current specification forces -a two way dependency between interoperable types. Note in the templated equal_to case this dependency -is implicitly created when specializing equal_to. - -Solution -======== - -The two way dependency can be avoided by enabling type conversion in the binary operator -implementation. Note that this is the usual way interoperability betwween types is achieved -for binary operators and one reason why binary operators are usually implemented as non-members. - -A simple implementation of this strategy would look like this - -template< - class T1 - , class T2 -> -struct interoperable_base : - if_< - is_convertible< - T2 - , T1 - > - , T1 - , T2> -{}; - - -template< - class Derived1 - , class Derived2 -> -enable_if, bool> operator==( - Derived1 const& lhs - , Derived2 const& rhs -) -{ - typedef interoperable_base< - Derived1 - , Derived2 - >::type Base; - - return static_cast(lhs).equal_to(static_cast -enable_if, bool> operator==( - Derived1 const& lhs - , Derived2 const& rhs -) -{ - return static_cast(lhs).equal_to(static_cast -enable_if, bool> operator==( - Derived1 const& lhs - , Derived2 const& rhs -) -{ - return static_cast(rhs).equal_to(static_cast -{ - Constant(); - Constant(Constant const&); - Constant(Mutable const&); - - ... - - bool equal_to(Constant const&); - bool equal_to(Mutable const&); -}; - -c == m; // ok, dispatched to Constant::equal_to(Mutable const&), no conversion -m == c; // ok, dispatched to Constant::equal_to(Mutable const&), no conversion - -This definition of operator== introduces a possible ambiguity when both types are convertible -to each other. I don't think this is a problem as this behaviour is the same with concrete types. -I.e. - -struct A {}; - -bool operator==(A, A); - -struct B { B(A); }; - -bool operator==(B, B); - -A a; -B b(a); - -a == b; // error, ambiguous overload - -Effect -====== - -Iterator implementations using iterator_facade look exactly as if they were -"hand-implemented" (I am working on better wording). - -a) Less burden for the user - -b) The definition (standardese) of specialized adpters might be easier - (This has to be proved yet) diff --git a/doc/issues.html b/doc/issues.html deleted file mode 100755 index 122a9c3..0000000 --- a/doc/issues.html +++ /dev/null @@ -1,170 +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 abe7c7a..0000000 --- a/doc/iter-issue-list.html +++ /dev/null @@ -1,5268 +0,0 @@ - - - - - - -Iterator concept and adapter issues - - - - -

Iterator concept and adapter issues

- --- - - - -
Date:2004-01-27
-
-
-

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 5e5934f..0000000 --- a/doc/iterator_adaptor.html +++ /dev/null @@ -1,448 +0,0 @@ - - - - - - -Iterator Adaptor - - - - - - - -
-

Iterator Adaptor

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

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

- -
-

Overview

- - -

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

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

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

-

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

-
-
-

Reference

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

iterator_adaptor requirements

-

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

-
-
-

iterator_adaptor base class parameters

-

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

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

iterator_adaptor public operations

-

iterator_adaptor();

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

explicit iterator_adaptor(Base const& iter);

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

Base const& base() const;

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

iterator_adaptor protected member functions

-

Base const& base_reference() const;

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

Base& base_reference();

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

iterator_adaptor private member functions

-

typename iterator_adaptor::reference dereference() const;

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

void advance(typename iterator_adaptor::difference_type n);

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

void increment();

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

void decrement();

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

Tutorial Example

- - - -

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

- -

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

-

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

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

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

-

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

-

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

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

at least four times.

-

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

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

Reference

-
-

iterator_archetype Synopsis

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

Access Category Tags

-

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

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

iterator_archetype Requirements

-

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

-
-
-

iterator_archetype Models

-

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

-
-
-

Traits

-

The nested trait types are defined as follows:

-
-if (AccessCategory == readable_iterator_t)
-  
-  value_type = Value
-  reference  = Value
-  pointer    = Value*
-
-else if (AccessCategory == writable_iterator_t)
-
-  value_type = void
-  reference  = void
-  pointer    = void
-
-else if (AccessCategory == readable_writable_iterator_t)
-
-  value_type = Value
-
-  reference :=
-
-    A type X that is convertible to Value for which the following
-    expression is valid. Given an object x of type X and v of type 
-    Value.
-
-    x = v
-
-  pointer    = Value*
-
-else if (AccessCategory == readable_lvalue_iterator_t)
-  
-  value_type = Value
-  reference  = Value const&
-  pointer    = Value const*
-
-else if (AccessCategory == writable_lvalue_iterator_t)
-  
-  value_type = Value
-  reference  = Value&
-  pointer    = Value*
-
-if ( TraversalCategory is convertible to forward_traversal_tag )
-
-  difference_type := ptrdiff_t
-
-else
-
-  difference_type := unspecified type
-
-
-iterator_category := 
-
-  A type X satisfying the following two constraints:
-
-     1. X is convertible to X1, and not to any more-derived
-        type, where X1 is defined by:
-
-          if (reference is a reference type
-              && TraversalCategory is convertible to forward_traversal_tag)
-          {
-              if (TraversalCategory is convertible to random_access_traversal_tag)
-                  X1 = random_access_iterator_tag
-              else if (TraversalCategory is convertible to bidirectional_traversal_tag)
-                  X1 = bidirectional_iterator_tag
-              else
-                  X1 = forward_iterator_tag
-          }
-          else
-          {
-              if (TraversalCategory is convertible to single_pass_traversal_tag
-                  && reference != void)
-                  X1 = input_iterator_tag
-              else
-                  X1 = output_iterator_tag
-          }
-
-     2. X is convertible to TraversalCategory
-
-
-
-
- - - - diff --git a/doc/iterator_archetypes.pdf b/doc/iterator_archetypes.pdf deleted file mode 100755 index 8cecde3095478dd62d57cdd95534a8cf43fcfdc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61213 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

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

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

-
-

Reference

- - -
-

iterator_concepts.hpp Synopsis

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

Iterator Facade

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

Overview

- - -

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

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

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

-

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

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

Usage

-

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

-

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

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

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

-
-
-

Iterator Core Access

-

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

-

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

-

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

- - -

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

-
-
-

operator[]

-

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

-

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

-
-
-

operator->

-

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

-

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

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

Reference

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

The iterator_category member of iterator_facade is

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

where iterator-category is defined as follows:

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

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

- - - -

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

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

iterator_facade Requirements

-

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

-

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

-
-

iterator_facade Core Operations

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

iterator_facade operations

-

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

-

reference operator*() const;

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

operator->() const; (see below)

- --- - - - -
Returns:

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

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

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

-
-

unspecified operator[](difference_type n) const;

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

Derived& operator++();

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

Derived operator++(int);

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

Derived& operator--();

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

Derived operator--(int);

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

Derived& operator+=(difference_type n);

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

Derived& operator-=(difference_type n);

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

Derived operator-(difference_type n) const;

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

if is_convertible<Dr2,Dr1>::value

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

if is_convertible<Dr2,Dr1>::value

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

if is_convertible<Dr2,Dr1>::value

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

if is_convertible<Dr2,Dr1>::value

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

if is_convertible<Dr2,Dr1>::value

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

if is_convertible<Dr2,Dr1>::value

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

if is_convertible<Dr2,Dr1>::value

-
-
-
then
-
difference shall be -iterator_traits<Dr1>::difference_type.
-
Otherwise
-
difference shall be iterator_traits<Dr2>::difference_type
-
-
-
Returns:

if is_convertible<Dr2,Dr1>::value

-
-
then
-
-((Dr1 const&)lhs).distance_to((Dr2 const&)rhs).
-
Otherwise,
-
((Dr2 const&)rhs).distance_to((Dr1 const&)lhs).
-
-
-
-
-
-

Tutorial Example

- - - -

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

-
-

The Problem

-

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

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

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

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

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

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

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

-
-
-

A Basic Iterator Using iterator_facade

-

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

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

Template Arguments for iterator_facade

-

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

-
-

Derived

-

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

-
-
-

Value

-

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

-
-
-

CategoryOrTraversal

-

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

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

Reference

-

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

-
-
-

Difference

-

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

-

The declaration of node_iterator will therefore look something -like:

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

Constructors and Data Members

-

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

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

Implementing the Core Operations

-

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

-

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

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

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

-
-
-
-

A constant node_iterator

- -

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

-
-class const_node_iterator
-  : public boost::iterator_facade<
-        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 bfa17bfdc6a1ea45541acb8cf10841aa702d492e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172016 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 z 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 diff --git a/doc/iterator_facade.rst b/doc/iterator_facade.rst deleted file mode 100644 index a76da74..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. - -.. _`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 38b827a..0000000 --- a/doc/iterator_facade_body.rst +++ /dev/null @@ -1,191 +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. - - -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 695d2d4..0000000 --- a/doc/iterator_facade_ref.rst +++ /dev/null @@ -1,437 +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. - - -.. 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 d00d7be..0000000 --- a/doc/iterator_traits.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - -Iterator Traits - - - - - - - - - - - - diff --git a/doc/iterator_traits.pdf b/doc/iterator_traits.pdf deleted file mode 100755 index b5c765a81e404eefe815b9d4dc1ac051af3ba470..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49650 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 diff --git a/doc/iterator_traits.rst b/doc/iterator_traits.rst deleted file mode 100755 index a6d76dd..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. - -.. _`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 c138f02..0000000 --- a/doc/make_filter_iterator.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - -
-
-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)
-
- - - - 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 f50727a..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-11-01
Number:This is a revised version of n1550=03-0133, which was -accepted for Technical Report 1 by the C++ standard -committee's library working group. This proposal is a -revision of paper n1297, n1477, and n1531.
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt -2003.
- - --- - - - -
Abstract:We propose a new system of iterator concepts that treat -access and positioning independently. This allows the -concepts to more closely match the requirements -of algorithms and provides better categorizations -of iterators that are used in practice.
- -
-

Motivation

-

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

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

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

-

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

-

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

-

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

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

Impact on the Standard

-

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

- - -
-

Possible (but not proposed) Changes to the Working Paper

-

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

-
-

Changes to Algorithm Requirements

-

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

-

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

-

Forward Iterator -> Forward Traversal Iterator and Readable Iterator

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

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

-
-find_first_of
-

Forward Iterator -> Readable Iterator and Writable Iterator

-
-iter_swap
-

Forward Iterator -> Single Pass Iterator and Writable Iterator

-
-fill, generate
-

Forward Iterator -> Forward Traversal Iterator and Swappable Iterator

-
-rotate
-

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

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

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

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

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

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

Deprecations

-

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

-
-
-

vector<bool>

-

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

-
-
-
-
-

Design

-

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

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

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

-

The other set of concepts handles traversal:

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

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

-
traversal.png
-

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

-

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

-
    -
  • Interoperable Iterators
  • -
-

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

-
oldeqnew.png
-

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

-

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

- -

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

-

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

-
-
-

Proposed Text

-
-

Addition to [lib.iterator.requirements]

-
-

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

-

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

-
-

Readable Iterators [lib.readable.iterators]

-

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

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

Writable Iterators [lib.writable.iterators]

-

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

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

Swappable Iterators [lib.swappable.iterators]

-

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

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

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

-
-
-

Lvalue Iterators [lib.lvalue.iterators]

-

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

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

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

-
-
-
-

Iterator Traversal Concepts [lib.iterator.traversal]

-

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

-
-

Incrementable Iterators [lib.incrementable.iterators]

-

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

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

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

- -
-
-

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

-

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

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

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

-

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

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

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

-

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

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

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

-

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

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

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

-

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

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

Interoperable Iterators [lib.interoperable.iterators]

-

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

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

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

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

Addition to [lib.iterator.synopsis]

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

Addition to [lib.iterator.traits]

-

The is_readable_iterator class -template satisfies the UnaryTypeTrait requirements.

-

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

-

iterator_traversal<X>::type is

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

where category-to-traversal is defined as follows

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

Footnotes

-

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

- -
-
- - - - diff --git a/doc/new-iter-concepts.pdf b/doc/new-iter-concepts.pdf deleted file mode 100755 index 2118e6c..0000000 --- a/doc/new-iter-concepts.pdf +++ /dev/null @@ -1,3463 +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 52 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 51 0 R ->> -endobj -4 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 180.927 641.879 302.191 652.719 ] -/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.275 641.879 376.361 652.719 ] -/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.446 641.879 479.603 652.719 ] -/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 [ 180.927 629.924 258.292 640.763 ] -/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.305 629.924 430.231 640.763 ] -/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.257 629.924 493.561 640.763 ] -/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 [ 180.927 617.969 229.684 628.619 ] -/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 460.535 147.863 469.252 ] -/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 438.677 205.128 449.516 ] -/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 418.194 381.305 430.054 ] -/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 402.811 300.151 413.651 ] -/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 388.864 197.198 399.514 ] -/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 376.849 203.505 384.928 ] -/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 354.991 129.532 365.641 ] -/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 335.065 163.843 345.905 ] -/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 314.582 286.84 326.443 ] -/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 298.642 386.446 310.502 ] -/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 284.694 337.022 296.555 ] -/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 270.746 333.564 282.607 ] -/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 256.799 351.308 268.659 ] -/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 242.851 314.317 254.712 ] -/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 228.903 356.319 240.764 ] -/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 214.956 382.52 226.816 ] -/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 201.008 354.675 212.868 ] -/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 187.06 413.116 198.921 ] -/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 173.113 453.911 184.973 ] -/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 159.165 474.634 171.025 ] -/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 145.217 375.367 157.078 ] -/Subtype /Link -/A << -/S /GoTo -/D (interoperable-iterators-lib-interoperable-iterators) ->> ->> -endobj -32 0 obj -<< -/Font << -/F43 33 0 R -/F48 38 0 R -/F8 42 0 R -/F55 46 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 /ASUCBA+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 /ASUCBA+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 3596 -/Filter /FlateDecode ->> -stream -xÚí•y8”}ÛÇ+Ä=e'E¸¬I3CÆX²f2ö²ïÆÌ…јaf4Y²…"»HQˆìe+T²· DÊÚMdË.ÏÔýÜ÷ÝÓýçûþõïuýs}Îóû;Ïïqž¿ã¸¤ÄÌÌå´q$WE"RåàòpU@×ø\€Ëà RRºdCÅ“ˆ§1TP€«¨Àm_w@ÀªŠHU…“)@—äM'ãÝ=¨€Œîñï"e@Û $ã±"`Œ¡z€^ŒX 0'añ •.hÀ¹ï'(À9’/€8yàðX*à -ºã‰èwCh¢ Pþ#Œóõþ3u$S¦†ÉãÃ"ŽD$Ðèš½@†“ÿ S¿Gù&¯ïå¿éiŒž@ÿ€äåíKÉ€1 ’‰¿J­Á?¼ƒ8¼¯×¯Y4CÀcµ‰î€ýÂSPx?g†§b=7 þˆƒDܯ&sûaªmn©«£}â}þÈ™aðDªÝû¯ªßÅ?þ73¦CÆûö0y Î2Þ?¿é¥GÄ’px"ãB(! ™Œ¡C7ƒAJ@Àq ú1 Cå‰$*ãÀ˜ÉEÀD†|_'B€ê~ý eEŠþ›Ôä/blŠù›T(ö/‚3¼AÁ¿ ÄŸ‘%ý„ -Ôû'< @É?¡¥ü„Jý }i?ðŸ#×Ñ!ùÈ)*r -J0@夠|Råâë,‰x_}P‚Á`Ê*J?¢X_2$RÜqÆ6ÿd75BãJNdé òŒb{xâÝ"©Þ—gó[vÒ7gV§ìùKSV®B1åNwšTîñJû:žg[!NUfƒÔ>ä¥ñu - -^ßÛPΑ™ÉvþÝÔ\O¸ FÙó¯2¦sêX­ˆZ“Ûžûˆ©©}–¾úB{6ÔsÏÍkú hÞ«|?"Ÿú,œ£Ô~r8Iü“ð®“û,’È“{«mk£ªÙA!l¹û®á%¿œò¬»¿—šÖ–IÌ}½óᢠ-Òñÿ™–{Eq5,h_bmÜŠ^™:°P²¸óTŸ)î_AˆdOûEù”ô”µ6S4/Ùªe Þw,QB?ó1 då#²&™üºB(¼)‘Ü t!µ)0”€=Ðݨ,qì1¯NÜœ§t4¼ù]ny‰Éï£˼y¸ޱi¾‘Ñ‚&<Â˽Úw ßÛ+Õ’<ðÔ…ý½g1â‚#R€¬ÛÂåÏi–WûŒ”Ÿ¼}(3PÚhõUXVÝÛ- ç¿Ø¡nm¦‹ïZ2ÙõI¡Ò8Ãæ_¿á(ªXfúM¤ž;O9“§NSËI™ÿHžFa?†:'u{ÒûÙ§0`≡ÊT(O -Fà…”\õ_ÎÜаË*VÒë¡bú d×´tìcjuySHÂÇŠõ‹ -ý$ã—¯ÙeiˆB—5Ù'¢Uî}H….-×Ëyi4ݵP1ãøÂ'-k!{xÅzUh>k2;7'¿]LH|õù²F…™™‡´ðÓ=Ñe€¿‹zVIlU%x¦²D‰éP-3¸ ¡>dó®ï´¶_G>5Ko×[S~§=<½*·¡ÍúIøð‰Àâ‡3ÑO‡Ð^üdž‚*;}¼–šð×3·Ùx¦‰÷tDÂ]Ÿù•êÇG9P&ªÙË‘Vë½1r®|·ºû½/Ë—žyÈïÏíWv|`²I`†q¼¨â(†Î‚>!Ž.©xfAé§lf«ïâ+mÖwˆÆe4NÝôл·¶bcl÷t…¯d >ò‰O’HE+<ÊtÝÆÑ/s•Ëì&®L^­»éÿʳéiiøzÕ|ZlÕ:wE¯”zÏô˜ŽöSŽ¥Ìa­Êúª®Œª¹j.ÉM‹OŸ“¶è§Rv=Âï*ÇkpjL”ðvó5(ê+ñz””cÚGŒÅ‹‰Ñ¶a“FíÞ©i¹Á¡Óå‹A«j©mYÖ¤ôÊf·W¡”VÙêühžuëŶDµÈZ) Q?šé’äuÁΤùešècvAaä«™9‰¤…yÖÐÍ0çT=QY¯ÚÁ%{÷ŒÁH£¨=ªR·D×¥"磌ʃþp¾2Óñ7XñÕ{Fû»9XqØvì…?4<}gGä·Â˜uéº3Š+Áw—˜›a¾þ¢ògE‹^¦ã±-'Ì…™{‚ßÉtÅÂ×§Hy¯¾Ä’”îÄÍ-ª?é$e.òH)1—jÙ& ·ú ög{p¾ÏHª:å{ÒÓÏ| -< IÈ7Ʊ±9íÌ~Epì]¼•Âu4bè‹û cd¥èèGôtGÆ›Šì£Y´·ÖŽ-Ѧ"3þ³cðÒs“¤˜4ÎäÉ&ñ4Qþ HÍDçÇOeˉ7ç˜(6°ùè¨A–ÃVj“ÖJc4nMoÏÆÀhÕ:Ì“ø~åJº¶ôx¤Øu °ê[Û1u‘ó]KxáæFç(õGDç3ÊT5T°«¥Þ>éÏOæB]aË—æ;eF Š7^¡JÔH\ö9¯¡åHjÉÚ OKöu/÷} ¹-.44yîö´»|Õ{ys×ñµ{[íœ3M϶aÒï4²qvBê—Zü¸ãe.ͯ „74˜ÕYÒn”:´öŒª¸¯˜ÎC^Ý2ùƪÔä›íö7ë÷Gæ¡9‹û‘Ì7b±Ë†_’ dçÞÕxÓ)R÷²Ní¸×Õ7o=בȑݱßH½Š»s–Ú–xU˜ã¤-@M½D³ÚªFµJ¿®ö6Ú>,âÆÁ¶,a_°K;>R$Ëš¯î¿â´p­8«øÌ—B~5x/y÷úÅ“q%ýïE¦í6¹õJe©çÊ\Þ=Y¹«½å§éŽÍ#Ò²Ã7U¦ÈÕ³×F¿ @P²i­úC”Ÿ$ë Ý€FD}æg¡Ç/%V½¦bÛ -Ã…mšÛ eûº!’é‡>Wç$BBN7÷É ²ã›8Ž`‘ïã -¬-Ëxiq>Ó¿»Yøìkð6>ÉÔ{ßj%Åß¹rãĺ„ËýÌʃŠÊ"µ°±îClꯕ@oß·ô'¶g¬ŸÿŒÌÍý8á€bbruÈ3?nà1¼‘‘Í/CKy ›Y=0w:3-ñ<ûZS_•ŠsZ `§)j3g¬ñáíÛá™o*­¦ b©i¢šeêÅOóZ@Ÿ>•{Ší5õ°Œî±úMØÐ–Z4¢ižg¥`¶;bp,ÀÚ–."|„•£^ÛØ™“ ÕRÙâI²£x]p ã#¬©Ý<Â¥ëÞ ·Ç^"Ìg•Ö9½o¹/bŠÚEs È#»– -ïÛû…©Æ¼!WÜMcè -kçÝ{éªìÈØ”£S)¿µ6–é' I®×;×ü^rÙ¼Ñ(# "lÀÉ•š¿ÿW|¼¢ÿ\cYKT-“¹{‰Ûùƒã®{ÊÜk`âœH³ÓáÌé<õ‚½»MÕÐÐ…boá´ÔŸ”Õ[¾+W®K,·Í¥ya\*Iל¤{Y›Z{ùjó®‹8ä–í¾ðmûÖ£%ÒÏ¡Á*/Î>ÂW å••L -ö' “[Ç>Mök:®ê7pd›ÓÓ/#FäŠUgÊgdpÒœhбä+ê]á½ü‘\ŽÛñÙœg¹ÇLðÙË^E2EU>,ƼO+÷P8²Õ fl#rNê µá1µõéÞôQóªdîÑ»,é|×3‹%OÑ tÙ©ú~j?6îö§¹ð7K—TEEõ?í6åð|ò” -¢{r›}*/ÖØ}Ô£‹˜ Fìö2Å"Û¶ç[z+ŽÍ’Ù¼¦ lÔL¹áêcHãæLG_^Ö¸!ãr££¥mý¢{ª]œ„wÈQêº× ¼“x5Ó¥äxüµlYȾšŽþ"‘ÞB -Íýí1b¾`áñ²Á"ÏuÙ+›‚ìÒ­RF?ÏŽãˆ[K Í£Ò«]¬‹ÖtW0ȳ_Éè9ÏÕ >4}Ùõy³ùïüêK%­Br¤ÈäÊýã¿Ö,­ Ïkœ¯“¦+êMS¯lÝqŽYúR'Dá±×W³—PeÐæ…ýÈÿø?QK1d*É C>ù7>C÷endstream -endobj -38 0 obj -<< -/Type /Font -/Subtype /Type1 -/Encoding 34 0 R -/FirstChar 40 -/LastChar 122 -/Widths 39 0 R -/BaseFont /RXNCDH+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 /RXNCDH+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 10025 -/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´øÏàÆý€EMGIBRæí¿÷ôï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”ÿ!^°ŠÊoboìokªÿ&p‡4~ØAë7SkÿC|à›¹ššÛAÿ£õ|ÿÔÿgóÁwËïÆóãšý&p\óˆœ×â[ÿ@p~Ë?lhõ‚¿õÞ›?lkÿ‚}~#øŒ³8þ`_§?ìëü‚}]þ@°¯ëöuûÁýà^¸ÿàT 8•çod§òúÁ©¼ÿ@p*Ÿ¿ñßÄââN^¾Làþ1±ƒO,8'€“ÛÿÎÔt´qqÊJ‚5++ø4þU5wwß> ¿œà'ij¥ øyzÍ‘–œÌÂlÓ#J¤>O•Á2@Š[5Å+ÕwÏv ‡.%@Ú‘waبÓy,ÏÄFÛ‡Ý'ó|"r‹j÷S—> v‰OŸÙ÷0ÙÏôi!Ò¹ÌTôÞs¦¸ =Bokœ»>æ‚TžÙ-MÖ-øt>x”¯B'©q¿FÑ£ïÑГÆÍ£#i¯^GÃA®†‘îRúž3rÝ#9f}24À6¡ùíê…S»;Öãg„¼¤cˆs¸èh·7ïAȨ+'D"!þ-› wû|±„!ì@G»*`‹Î@ªW¢küÁ´J,±àÞLôDŒcï¾ë€\F6ûtèÉJ¥ÿñãè -•tølÍÏJºU 9Üœ¹ÝYµ7×ÂJgCF"é¬GFN4–z|1L—tp “¹#ZZ|H¸¡~rÇ<¢Kn“gÌTÑ’#ØÒIÅ!ºŠS6o»ÈðúÇ¿$ö£I>wÞÁ``´«kë_Ò²ܹxsVºèõ r{7… ‹Jï "-¡MßjÑÔ*qL®8Ö…öK>š!šêw»½Àv<ÈcÞ ÚÍ…>Gð=ü˜¢Ò—æ]0Ò|+9¥Çp÷Hí»`“\ú©%l[iZ*ÛWLYþ5<6é‰kÜ.=¯2\ub—Ì4Q±ÏVZ#¿VãñL3ë =Ñ€Ð~Y U×#g»¶¬Áûîñ³šweƒõªNšyÚ®›“ïVº‰¢½H¿¦ØìLÍ+~|ü~u²mæíiÛŠËI*¾ÏíìÒéô½F\¶0 óÁ8jãÕ_8Ó˜¡î–Q<@ À‚´"ÞÖèü¡Žœ³øQ‹<[ç]÷ Z„9Ö²ùw¬MÔ¥ŒÒ%D§ †ìÏ’ -ôÊ]åÚ›ÃSÄÒW­,BÄ8Ǭ£÷ÂÚôÝ ¹ K ØI W:Ú_½rg·ëȃřLµ¯êÉ?n¦ ™DÇ~u'UÏîy»å!"ül!«žáî”à]…°Š÷¡;2Ê܈, #qØÝ -5ÇÇë%COa†³¬ñE¼íWnÕ‚—Ð3M »š4Ó2J®Y)Îú±Ep3PIJéiÏ"vO·’Ôĉ ¼|ÀYJ!Qdbª—a$ÿ ‹N¹Pœ§UëzDå1^_»Vè“‘Z-D*GžM­ÛQí¤ µdÖGº\dPœnÒSõåÒ G?+I5ýøq>ëwÈ#‹õdbàb5Æ­Ž,f$€°á%Ÿ‰§k˜<6¿‡Lædêaëá}éƒÕ]LvÙϬL5?ÝLq]S®R[s‡µ:GV0Ñ,µ½-ŒT±ƒŽg1µÊù¶é;&R®éDº}U6úºM{Ð~^Ì†Ô Dá×EލL“ÙgÌf¢)z•bõ«~“sd5ú†XÄmj«õa«.Q¤ì““£Óå‚)ª;¦òîæËÑ È™ïóVô¨’¤7Uƒ˜Åꈥe¤íãû0Ÿ“^HRÉ¡»‘;?ªÁ¯¹UeÔ/ ®Ó-]×lý£ Ÿ¯ÏÊûéúGÏiñ6´¯Ö^(.î½uòœë(’ì\,0zÉ·|·¹ñ"@ÈJèæ!y&ÛwAý6òF\C§A™€K˜“gY1c¢&ßR»Ó‡ª¦¸oƒ ýÙ³$£YS÷6Ò\pÅK.(Á¥/X¡Ï|!,Á×Âwä0O±ê Ð>Ô)åû% +ì9î<<ø6È)ŸíäKÄ•û]¨±©ª ±`8Ùß(à*ê‰òàèÞÒaßÄ%ÝA÷kTBÞa±x¿¹é—4­¡?Õ¦‹8ÓõÀùŽìÛ¡×Á]†4åIŠíœëݵ;ËÃÖ‡„b»°exÉ"£¨àdq÷T¿¿úmmƒ-剦Ó÷óK[Ô P+·íu‚ær•¡Ðú‘yiµïgN»”T?ã]•d¬8× ¨Yû§¦Êð5hôã=lv¨ß04) -AGhq†s§©æ×ºÃ²îà9Þ0‹ÙUÝ£’,¥Iúr¤‘r'5#!ÃŽ9$B£ @è¯wf+ž—ÌŽó‰I•·#'UG‰û2'4R¼š´ìÁò‘ûà¿¢OÝ_›¾QMŸ -N7•)W -ø€=`Ê\ú:6ÊÖ+ôiÕïˆHX£AŸK ijãÈÛÓxìe9n ÓƒY?_ºZž¨Ì×—˜rȘ«Ä΂{kuÏ“fú¡êÐÇb_hè˜ó0vó2ò™1-np' W¼ªv€M7¸6ÞMtÀ±w~NíÙÕQ3C8©¤‹adF)›„EâÁ‰ËG^ÏnAp0é»8ÊüÐàƒ*ù$bÞ¨«TP[ ´á’I¥0â¬LÒ‰Yêîz¬ÀaôÃÁ}Ô˜¦¬„U•<"4òœ3Mh‚luèdi !a]â”6G]“4µ1Ç+å~´Év‰;æ)‚ýbl¹{iÄKbA–»ò€Ïªp~õp:•Úùx<~?²¸ºœFÇšþ¹žƒŽù©W%Eëº5Ü=RãEÚõ¬"Û—䌚œÙïäßyw£!}…v÷jI'r œ‰SVp›¯çîÚÌû7^ -ö6²üs§ˆ:9´2pv¶coŒ{¦¤yzA÷MÄwìxP·ðùú@D¥ ÖLÅeç y -ÒÓ¯D”o#±öö ³rš.‘K"ýxµæ–QÃ2â#*>É·# -çýŒ%"j§(1zLcý5àê $Üdm¡ê×ÂN¹Ê7êGÎCp“ñV¦G ¡ËÓÖs_,Éø,…q(ª ‹ -9ÄÏ­¶¿@ƒG«¹‚/õʬ3¹™Àá´»mP[Ò_èÌŸS Q5:&•—¢p“ „4µ«Ø=8àçýªÈ ¢Ó”À‰Þ­\êþzÉ1”IÏ»Þ3TweäoqÀsòÃu!Õ^8°Ï¡?Þ†2ƉŒIŸ²‡o¥ƒÉlF ‹(ª4·AeœX´×,Aýú ŒÞX9È9½µ©êgˆ ö·ðž–‘°ïžÌ›‚‘³VB﫫̲¦ Eô.7t–å5ÿ;²X€®våvF58½ I$ž¶é–"yL„K%ÕØk_<èÏÚ¨õ¡1.Ôùn™K À¥ w"&i:‹a[O²†­©­„Ë5ír]P‹üýK¶*íN±øi4Ÿ]ž“^a‡¡T«…ß[A¬ œ×nös„h©LšÖšÆx"í¢ -€îèŽh l`Ú„ñ_^[&*™x–W•ÿµÐ[hZí0iD]•Žo«Pȹ¡d'kå;JŬ^±,%]HM«Þ.‰õw?ò‹FÈûßßêe£Ëç|Ã8­ô·‘^êV¿ g5Ã+_ûµWð -ÝžÜXÃ>ËÒ(õè'ôÅSºmÉnk.P0Ä:+'7¢%x$«—ڀܡò|ÝyÅ£s^;· `½ñ{Åÿ’C¨Î&Y_úâeÀC-@——Ùðša©æ{ŽŒòl×Ù"kÓ¨Cõh¥RËMXuø`îµÐgZÇ–1™šXH€›¿2Û¶9Ž´¿s¿•oèwÎuWˬZÊ­w݈~‹ʱÏû+®¥îÉÜ?­äm $y²:æôól%Š‘¦Ä%,› ¬ï#½*Õé{—`q[4Ô%‰:’ÊÀ"rðbßcf‡{¦®?`’L„’Y—<ìÄ¢%= ©Lí^­ûb>#®á§H"¸OÔ«ç/[·SFœHâžs¡-ÞK!Aj:¯ši2o,ÊÂbŤö¼)=Âæà®iõd¶¥úÂß®ˆJ·Nê‹|-½Ýòñ`Q¥<Úq‡9Ä÷Sj·ìØ]kÌPLjm…‚qñ!ÜÙ¤¢«Ä)¬M¡h+‘¼Á|jJ†8îH@‰(óž`b®çãšýÞ¼i!B¹WIÏë¶4Lã»qch¢>-÷þ>óÑ\ùÓfgÀëk—WŸ¹U'ÓCôÚ°ËÍjŽMQ{iAB­¡ÑLÿîdvò -È¡ï•зGŸ Vbî¢=Ëþ -!¿PÓ*í¡ê¤çaDá'ukÝ–$r|æžJðº”òåF˜f™rî€ÜšÂý“å3ô³žÔØ/Ô‘A=X…äKd·ñPÔx=2SÓEÆôš¼™Ãq²|öY¿·$Nck™‚„Û bW}O¯'gúìýÏ9„SÖ -jïqY7'p×s¢ -Ì£.ØSª–ÁGìܨý*w  [*Xà…¬ö„ˆ&±!›R+"9F°È–¥l¥fdl›äì¶ –C², !aµâO|µ¬©N|T¡kQ=åæ*ÜêÅßZ[ûqi(­/¿N¥ˆ ƒy$½™)*6Æíá-ÁïV…L±EH4O‚ï|µk<ìöæ­Á TÝ4÷xX­nÜJêý¬€îî]7s,Ù]|ÁbX@ŠJˆCwßað2ºì•ÆG×w÷}Ÿs<) Ö|Û´J‹Îó–ä8†Û -µDÝ·‹NóbÒzŒ%•ͱü+Ÿä(óVøNHx×÷Ù[¡Ò«0–<„¿Ê#·7Dô!¹j~ìk'—–‹Š•J3F.õÎõÇx×¥¡Ío½1%³§ Z>SpØ4^ç`º¹Ð% ÿAZ¾€ÉÖ -ð†™ÐdC Å3º”);‚ÌdÄo"’N[am¶;nZ1r:ýCŠ»¯.ª<»¨­`ñ}à‰vè¬æ=Ž&]xYçÌ/”MïHñ6Ó÷¾É—õx7 äÛ1Ai½é• å¦šg(^Kß•×cíÿÉ«M™Z4_ûf]•¶/R™>_ÏèæWÇ‘Ê"$ÑÏAìðOež"ŸެÜçÕw"’ë—]RkÇû?cIñ4ÕáÛyBÀ¹ÌöM{µB7…”Ÿ—9ï¯|N«Óv¹Û<- èRFù8:˶@‰=V':ô‚ ÊÖµ¹ÆºùŒ*‡ÚÁ2œíivûrðé=që)Ⱦf¯+#ÊëÑ·;Sn3÷1`­"Þu Øäf¿öá%ÖîvvHDiðXm|ÿJ;Kw;²LY.¶ÿs…A”è³–f޽âzeuBz³¶Ûa÷–²#-L•ˆ|¶ËØ}jp?|†>DÆ‹$±¸½‡ì.ݲá<9#M6=Œ~á/D*MÄÝ ¢žÒ/®‹У¯ËRéòO­}SÖù•«Ã!žWÞ@g7¨ºJ,ù"1µè ±~Ýåy wÒW!»/[%/åÙqðœvF10 þ/ÝoXQntHwú;>ÑímúŽó/cQŒøMr¼ÖÜ™kƒÞPY\vE)«ZÓîÝ}†[§syPÏtO%íëÑ5¥¶]#•´()"+ìp­yÄ ú3L~rw¤Èwl#>°åÆ4» Ü cÁ3ßO÷ê.<¢–Ò­+µQ½^:xbžü>s•ƇOñA…ŽÐÎ5ÃH„ZMŸ^›à:* *M|ì«{nVTîž´\ LkU63\0™.ó퉣@’вƒ?ðá£\–1‚ù}erO$²6T „t¤TqMm6¿ö¦V™‰œö/ylÛ7xŽrÝñ×ÔÆTtNè†0*nÛGÙÈb·Äø"=ÝÈ£?|ϸRŽmøJ±CÈ©>_HQŒŸÌ«BÊtÓ_Ÿ ÜY;SIq¥åçw 0§õy°èÙ®‹BóŒU+6™Ø1A±©¶Ê\'ªöŠ[Ùè|F3õ Ä -}“QaÊ_ZöCãýâØ*s8J‘å3NÅÓ…ú$?ïçuB«í1Fbõ¢{sñ—‡i¤w¨ó4× 5#J¼k¿-ˆ½Ž:•{-L;ŸeÝvÕÈ, ¢[ùÍ‹ë‡vl#Ûz¹ÞØCp´¥ö³ˆyWÄãć³˜¥\ mÅ‚é¤r¼Ã=hÑ9ôaP¯¡ÎÑÆE¢œ["(éW{íD-‰²¥Cœåâ&±’WµßÇÍHçþˆ§¦}KnÊKXòuº½ïº?Eiä‹|о?»‹r°Ãºu èèØoÿát^˜PÎJ–´wú)£iRN0„ªÍއõ8ÿ'öî|[ö›…"é £Üá&MlÌwU¾È·Õ©—‘Â"Ü[òÊ5ctùíq”¿²f$RŸÉŠ_˜VÝmbwñØnå*¼‚.­<Ãáa•¡»¸âLká3ÐäËÔäkóSmÆ{|y~­#µ êø@Ï1å~ì;¯—œý#X]Îþ³œ&ø‡ö\•£/%Û­ßTÆüSª÷$+°!³k¡;bÑ$)>,Ý+Èùq‘TÚ?Ž!>q ‹'ÃqMM¥þØK)…eŽ/Úšo¡Ž¹™×Hƒz5&Š:îf[AZ}-þâ¨6›ÑôµÆ‹(+ÏG½V´ñ‡4âzê¥.PþÀwtH£k{“‰„z¡êŠÔqx¤Õ›)5—Œ&p‘}ƒ‘k»Ç§ZôvC¼ÐuÄ?1«ù´xí -=wbàœëIÜÎÖ kÊø¡cvÅERDÉ3*;‡ú4«5dÎUrÂñ†6çëÍðì¹¼ˆ”¾Ø³ËÕ…/£HÁG17iàL®)4z™èësÖW¢«n¸"4úµDÝë¡ëÇ‚Ãðˆ¯ÒŸï °Ì6›1èeÓz±ïZÊ©—Éí7­=‡…íËdT稗ú1ì—õæœvÈP¦M"ìLŒ4âyf%qÑ‚\#VoYïç½ÉMžÛ43=¹DÜ5Ÿd#Ì×Å"®â8ǽíÊ<¢8¿3}säÔ<¨¬~ñ±5^Ò-xøî´¤siH·óª¥<­™åÐÔ™uäqÓ]ƒWð&« o®ÀÖTY9!¯y²ˆ†’ERŸj˜ìuE-†ðy­R ôûÛé&îq½a@ÒT줴–záOÁXÿ–±¸òâ3Êì^^ž2`ôÝ#µ‰õ‚ý%qQnZÿš [x‚ Ë/U ç“}E<6<<{>JÅu)ÒbŒ=D¶KŽý†FëaÕ \›E)òýóWÃÍ -UÉ–Ÿ÷s>wõfµkïPÙPŠú’$é¸q&rŽí}"ŠQòÝ\=LÚLj¤&ѳýÙ KßBŠ:rÅú«—¾Tðî$¥–›.j6¿ OÂljú˜Ã‰È&»Å·mKß= IV+…_PPà¢Q±ŸzxGly>,{Ñ•ÿ––{ŸóvácTÑ/™ïWâœ~_¿- ç’“Ñ®¸é=½*ä³êº7´Ë¿Ûà œ@œfgSÜ5waÂPœ#2á–w•ŒKs©Í÷DOQöhõSz¢ñ£1’¤øÒä\¢uhùÝœÁ¢X¬À69Nì°|Ð|à¾WÛXÒU À!4J’ø’RcŒH -å» £õQlÇ"άÇo•êE;“hQ24!òÖ@ì,M¸Iº0s6"SY¸[6›flª"6Ú«ÊÏŸø\:že¡œL>m–³!<°¶¥ã…‹þn±ÛÙ´Õ°£%2™¨}P Uuˆ -«à_:õ6‡½~¹2»ØÊÇñÄ"3¡8Ò-I­}cÝC²m#y^Í âé‹1ä,¼?®XLÞÁ{5–;NŠ<|Oç¬ð&…‰u—ÑÖ´5båE±õ ~ÍÍOŠ;aìXIõ7ÈŠ‹/«³©ÉEЍ¬î·þ±ãU:JªŸ»¬ŠÆ“a -¡y‰cÞ½ -sE´Âò¿µo47Þ{Ìô…Jº¨$žXäb“–°A63R!þQM„—5ÿ]yB­s"›×QmìfÄÝ6â¬%áÑ•`\Õåïe3>Åzkt¹Ãµ9B¬ú¦öõ_D&rg%µ?õq¡Pͨ´q#ÈLƒ˜«¯züœÐ×:§?®ç¾jg Óî!S|˜/m+A1«7µÀ>·è'lmõ6WÙú²ÕÌ‚r[Kì¿ÁᦊvQŸƒ(ìû&bÝõ&T]!?iÕѪlÆW~}§À?'(qU@Çz®)w²…boe*žx$Áh þuíÇ _V÷³@jVm5ð"d`K­¡Ô·$SÈÂŽf¡ˆõÆtr’ÿgq—«Ç2-ly:‘¸»¤?Ëm”çxu¯Á±;´) ! HèÅ5ÀûÆ$Î2“„{ÝŸúJ;©ôt$|ð«µYc},DPdßÛŒ' n¿”öÿ@ŽfãÁì¾+ôxYœèyÀW„Lvùtr[ Bt¤šØfÀ«<Ñr„§"›‡%Ì¥µ’qúZdö¼@×·@os¥¡j{õÕÒ´/0߈3 ±:§¶’3ð½éÑ“5A\7´™ò¶`(ÄDFŒ2N»:b|>I/3w=?=’ ¤„k1Ä’‡ý ¿KÉ~ñÉxã žÚ©»úiàˆn¦+ÑŠa£›î9¿Tk™„ج=:Ö âª‰Ÿõÿð…ôÿþŸ0·šº‚œL]íþ çendstream -endobj -42 0 obj -<< -/Type /Font -/Subtype /Type1 -/Encoding 34 0 R -/FirstChar 12 -/LastChar 122 -/Widths 43 0 R -/BaseFont /RLNIHK+CMR10 -/FontDescriptor 44 0 R ->> -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 /RLNIHK+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 ¾½£•¾½üÿÁ ŒJendstream -endobj -46 0 obj -<< -/Type /Font -/Subtype /Type1 -/Encoding 47 0 R -/FirstChar 33 -/LastChar 125 -/Widths 48 0 R -/BaseFont /KHZNEN+CMTT10 -/FontDescriptor 49 0 R ->> -endobj -47 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 -48 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 525 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 525 0 525 ] -endobj -49 0 obj -<< -/Ascent 611 -/CapHeight 611 -/Descent -222 -/FontName /KHZNEN+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/underscore/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/braceright) -/FontFile 50 0 R ->> -endobj -50 0 obj -<< -/Length1 1697 -/Length2 9338 -/Length3 532 -/Length 10328 -/Filter /FlateDecode ->> -stream -xÚí”UXÊÖ¦q×Öhpw î®Á­Ñ††F\ Ü]‚ww·àî!¸%Lï}ο“særæjžéî‹~¿ªZõ­µªŠ–RM“EÜl”;º²p°r$•µ´8جìì´´’ ™«-ØQÊÌ(ààˆ;Aœ¼vAnN؃ v‚Bl­m\ô’ Mâˆ;!¶fŽe3W ,†…  ¶°ºBYâ @ã¯.   â´dÅààXÚZ¸ÌÖ¶Žly’w´øþ%[º9ýÏ;â3 ÿÛ&fÒì‚,Vl*`Øn@˜—ÿ¶þ;¸Œ¤bæðWø¿+õ¿›9Ø‚ ÿžvprsBÊ`K Äñ¿§êÿeNhiëæðߣò®f [ qGkÀþ/ÉÖEÆÖh©fëjap…¸ÿ–Ž–ÿíV¹¿°)Êé«H«0ý»©ª™Ù:ºjAþ‰ú×ì¿™ã7Ãʱõ°ÃêË›ûþÏ?£ÿÚLÚÑliëh àäá˜A fP ØñÀ›`ëh ô=a†ÙXÁ®°%XMÞ¬ÀŒ¿:ÊÅ`ƒ ƒÌþÒÿ%ñØÌœ`=6ƒ¥ö?*7;€ÍÉ t­\«ÿVÿÕèdNXXém]ì‹°­œ@n.¿n›ØÁÁì·Â`³:ÙK¼°U°@à?¬ðØ\@f.6¿˜e/ üÀÃÿWhøwØ" ƒíª¼°¬@@—ßžxa Ý`§ò–‹õ_×vþÑ`©8»]þºš¿E˜-Éßs õñÁÈÿCü°¿ V­ß+öo‚EÑûM°ÞþC0«æ3 { ëôD€ëý?»" í; 0ø[†ùþÝØŽæ¿ ¶£Å?ÄÁ+—åøW±þ@XZV ̇õKÓæ„™±ýam¶ûažìÿ@˜)Ðsõû¼rÀ®›ãsþa®œþÀ¿Z÷Â\Aþ@˜+—?æÊõ„¹rûa®Üÿ@˜+ßÈ såùÂ\Aÿ@˜+¯?ðß=þG'98yþ-ÿnäÿþÔHH€=½Y¸,œ\<°ƒÆàggÿŸÓ´maÇU^ -ÀÃÎÎÎÏÅù·já]\׿wØ#ö?le {ñ€@O ÆÂ,ØB(È.±.ä‹tîD12#¼„u}´JuÇ·VÌÀùxPÁ¢3ãj•Þ}I -Î.ò.…Ç#‰KxË;õQ™ïþÎÑI3¿vÝMwS¼IôÎS”¡;NT7G¸ÍuÓ—Ç<ðªS«Ã_âÞæõ¦Ÿõe«ÑKií¡.SÂu¸×t¦ñòéɤ€´Cƒ«è¸(5𒜿|à]ñÀ‹ûŒ´2ècŠÖÀ´ôÜâöì>-+ö— ÜÊÇN‰Œùúq;‘ÐbþC)뻕OF¯pÕíl´æ©åÉå§›šoÛ'64›*;¡pÓ›èæŒ£Ä{ýJô¨.º'¨%2ØHG‚Òõ¥Êxö.ˆerÁ윅җ/ãÄRUO€Lúy‰¯‹jð½žÈÇÉkñê‚_&L´ÙÔ[†…×»˜KW¤cÏ¥:UŽqôß)ôP¾%…o‘Ðýõì+×eûa ÚþxâsåÙc§œžÎí úì#ÚmÚrÂúžôk - û÷â‡vXA+¯5ãó‹Ð6Xø3')÷m“¡¾4_âdY³qÊ=ЭÑÛ°ñ‹§Ø_ä“A0„ð¦ÖK#:³Šûc¸¹­/àdÏb>'î4,ɘh·êÝ#5t?“Ü íË«M\naK@9Ó„…=Òãæ)v׌ƒÕ™C ¿4=Õðá™èÁa‘@ÔkÇŽFßFÏNOä%6…÷ùàÙ¯!NG¼ªð«QC_ïmº³8žÅèòŽ•Ìï(¥¥´5’o £(ù¾o›‚±u\>LE•ñœ+yPdoÇEaqÑë¹y'þ´ÂŒh®îÎDí#¦`›“j)òqæ΋»&vÕ"¨ëzKÇF¹kuö£ ÈK¢9i¿þbì>#bWŠü_àOí¦´#¯¥Ûч£Óó­ ñ¡'ŠÆÐSwÕÆ!g÷™îÁçW>ú¡Õ8ÛUeÝg{\r¯4sœ˜ -µ˜Q(]£ÙÇéçû„´¾Ô0qí-PÅ)ð;s~³ Wøaš[1pÁ—šÇÇ´¹w(_ÜäV~Ú»²1ßn#',Bùú™_I#™Öˆ‚'k dƒÃs`ù ÅØÞs¡û9ÉP©š¦ ç@ŽH©iÝ¡ûŠ@,×ɵŽh§Îf"±=­«v‡fÊÞâ^Å’•‰ä…?›=²:Ã…Ò’•vkZÇ­ú‚¬@ -„Rp–IŽë¢Lœ–½iËÝÉsׄ“J'/ܘ2™ƒOê<àX5–\ãÓÝP¦”£ÖEøÂ<J[ߤÀ Ã5U=>k€†Ám²«¹¶(~h;ý@ªËd+aÆôGz<æzíû·7Yè#qÏ¥?£l/Øî”dÌFCÛ&!Ñø( $»![g•M¿ûIß„¼,5â’_…Ü -–?âi~/¢ÔQº«Õœ92s¦¬7I +¶¢»§}ìð -„æb ¤!w°ï]¶ø/¸åL=lY@­rœ}Ri(˜Êá§×ëò¡½:ðM/¾•€=WõITõñ”ÉÊ¢^]¹0Vß#Æ 0C&F;’Yßw£<ÇNÈ’Ù¨±Ôk‡&Ë=‰ý ¼iÜúì`Öéð€·6ÌŒˆñ"ÝY~)}ODb¶PÝÿ™“8‚Bžò×›‹O¶8M­T#ûåן¼%E18áØg“·bùXŒŠÏßá›2ÏÞÃéQ˜:â{»¾Nhf÷°×Æ!œ]7Ô¥Yü:ML^½Aßï‡9Â\áÛ„ÔAw†R¦Î$Ñ£'ùp<ç´L¦q†u½œ\¦Yéã´¶âà¼TkÞå -ËDc¯–~<´)GïÞ +¤õ'¾À•‚iAЭ»?>ÛûƒYˆÅÅe#(úèü‚˜ÌËÛ5ÚzÖàMŸŒÃÍW°BA›fÄñ³o‡ý7W<ºu²8nb]*êdO«Ñ _‰ç¿mÓ«Q$ÆîÔë±U¶<ÂëC;‹`WªÖˆ¬Äßåžhä/ʹ`Yr gðqE‰'bΓ’œ¨Eäzœ(/Åi^†ë¨õT{A›Ã<Ã(çäérÝ/¢ Ë÷½WóJy Ä?yÛb‡¿¿›Icž™tËóGQ hÒ%b‘×)»`±êΩVv¶¶ƒU Ѝ#µ´*íD j*+Ûç©æÑ[Q{³P²"Æ¥9§qÔ½.P#=j´¥VaTÈà}úF˜Å]ô\²zÿfBÖécàû–ÖøÚš#±@þ( Ø¥ê^Ìîlªñ±ú„‡³QÅp[`÷éÇCguªŽy‰y¾n·0}1dé&–̉ö•é@¬^”ߨFÎîÔûÝâj¨Eo˜‚w:“%½²%ÔåñsØù¦ÒâAÒÚÌ.CŒ(ÑWË´)”pïªutH G7ó¸öð˜÷u¿Šæ{{äܧ äžçI\p\Ž…QQEÖ”–‘ù •‹ÔáÀ´¯:«”W:›³“.HeÏœ%ØÇúëÆêVJ%…ÉÖM»\N"+ÆÒÛÉnÏ$¦Û|ŠGX¦¨d¨aƒ‹ÛE.TgÍžŽGmc]Ñ,êä18žÅD4u±ÉlÒÎäíi‹5Ñœi›ãÐ7_£üzãá«IþLçWɺBò¨ÞZ¯ -WìªàuŒ’›­ÖM· -ÐÅhhtÒvú`@dºÌ˜ôLáÅ+¹›0 Ç1Æ·Ïóö+?vÐÇ ’‰$až¥ÝÚRž ïì— ÖåõӺxPß kýôBüMÛÕº±ûÛî¢ Á4’vÇ£¬ªFQ:Ï‘µP溑W×™ð±FÎyrçÞPõÑÊVN””ëñd¾o`,âã]ôX˧†š®Ìø^¯e*ÔòçDsÛè¡È«ƒ?_óJý"“«â^ v$6Rž­¶Ðîí¼Ø™!§/•9°~¢¡q‘¬±`< Áˆý¦œ2šˆÅƒc~P»öù'Ÿ®M¡Pp1-&͉¯ ç§¯d‡Žy¢z -;·» ïAªŒ0d\Ú½ ÐLÆŠ÷ÀëÑ/–Ru4¬jË%Lì^ìçmÅûl$úZ&¶ çŠï3îI5|*3Å>ò )Ú ¢ÕuÓ¿QE¦xC[¬²üâ–Š&ü8=,µÆ—yllŒBSÑ] biS¹ù‚,Ä/Gn°ûG>¿@Íi\Ê—¤’ÏZn}Ÿœ>ÃõÍ«76äÂQPS¼{`ö:ÉLé¡×t ¦CZNÓÇÞ‚èw?¿ÞZ 1þÕ‘äoÑ6ˆç-u¢h<”Éð}'~¶¥ÕðN+Ý ^=¢‘Dø«©z¢¸â8XÚ¡ªÎ ]K³-Os¹ —ä &·ˆ¯ÖºaÞ‹¯lžù8ä_ªõ³QG¢¬ÿq„‘Ç߈±‡X[¡åQ -÷¾_ôZXCØ )@•3J›‚Ñy®y‹¤›IÚNROƒ°ñ‰Î²ƒñÞFÞ듕ɬ¿È!;«úÂPÙ­Y?£Ž§®ø,öÖ¬ñ©Ïq¡RBhayKJÖ„o#D6sÁêžF±>;5ÌrQ =Á‚(צ|ùò—‡RÕ[4ÑVí+Uuþcš.(ÛCîæsmœ§Ïˆ4ËúøÕæçǪo¥‹)»·dlP™DJwš~"xÓ÷4C…cãÝŒªó@Çú%IR*¡œ”‹¶ÞBíÙÉæý!Ô -HÌ$ H|$[q}|œ]óþIâ#šb/¡í}ó™ì?9„E':Ûfh4Êçßì@g›šzIPlÕ{FH?é!H9麰k\ÕÍ\GMÇ×Ó>Ãd`Q¨>ÝñÐ>s+„˜7Qƒ–ˆBÅ0/Ä^ÿBÌk‚»ÚçÉ?Êíã¡Yq|…»‡ˆ ¾i‹òdÄ{“W2)ˆÈ„gyˆ.7’y„Wcuñâ‹­X™¶$í‰6hÑ"ôU·=Y`8\Û|y~ý/zÙ‹p´;ŠêUF‹ ¥ ÌøÕ†/L&4ø®v%h©kéÛ¯®w<\"îQTû…®7;£²Ql[íàžÜK’<¾í-TŸG´gf)ï?ä_”`ªäðž -®›Îܮވ‚bNÉ€Cìb&<Ý5eï"Õ7Ý?a.%òÐVÈ×·W*´uSô¨[}ûa®ÅNx i¶ÑîûJNÃM*xPšè%OÀÁŽq!†uýmUt¾H=ïgÈ0JXÏ8Ÿõe‡öá1 ŸJÁzþåç´­7ÔnT£¢ˆ¼’Ô쪘Û.Æ?»HíønÞ5´vbpõ@º\JuZââ:þòñ%ÒC¡Ÿ·½šðèË›‚)÷(h—‹ÿâ‚Ã÷ƒ XvÕ÷ã¤=Ž˜ðýb™i‚žˆÈÞQÞ"Á†îxúL¥1÷YI2®Ý𤴌ÀˆR°\£Jvw89¶ë]èîdÐ_žåÉÛÑ*;൦„s¯Ò´ç„˜xRO©%ÂSµQSèºUEKüIà'•õ²—¶ËóÖÓÚÓ•C;)ÒºŠÑä1þIç¿P÷E Šðè€ÕSCÝÖ¯8^„Áx a~„–hgI³—»wiÁ>DN &èVSæg(…ÄÃÎ=RÏ㦮9ÖTȞɧeiY\}d¡v¶œ), Ëìï -GW>¢#UËÏul+UafƒÞŸ`9[d«J>ÿlq”íUÒ{—1±÷nߺ6L;j[g?ƒ??nbtÕZ3q°DËtNú௾2Ábí¸“U„OؘrÄ®e`gâ$ú³=…z0…e7»ºH0اËjÁuÜ[Ý@J4Ò;·6¢Ñ±6YUîS+i„fI!ŸAßBg -ª†K6J°ÙÉ!HfU·¤,hC;Ñe,já\ðyÄm—S=€ù˜¤GÅ‘3nðŒœ‚3r:Xéqh£ `ß }‰–u?‚^;”I^ðÝÆ“¸Ý4»ë‚ÕS5—Ñ-¬4Ì^ƒI£4 —‡½“L“³J8­š¯àödV¥ÛJçXÿ?˜ñ™I-1ÓIN„v©rTZ¤o(shF3ªy,ñúÛ4CvzÍóó†šc<^x}Û¡Ø‹7Úl¿2;¦´Hmg°F&Æ -„ÞŒ$uõÈñ4Œj°íïæˆç€wiÌu9¢WYñ3¶f2É4¯ù’Yqdk݈‰²µÔ -ÄÔÖ^êøJ‚N%g‹Ø!ÍEÏaZ¾C¯õÈ„üÔï¶ú¦[G Žˆþ„õ™eþÎïßÕÞ›{|’Î$L»4ݭ̹ôÚæNìNCN’œÃRá¨÷”£¯Ä “¨ÊÉèø®á¢t£7®× ¢ryhsÞ2Á$®„S-ãtS(aòjêE‹!gþî…X×Pó¶lyª¿6ç8ýÜÆ Ë„ü3óâӺȈþiïÑ©ÉÔv…¹Â2¤ˆ×x;ØqTæyÌ…úÊN+®7ãD·±ç+kSvð1ud…ËQ¡–ˆª‰’ñ›$¹—×;öÆ^Ù¥*áϦ´Æ@i|*äû£ÆóÌÑÊ“R\«k¼({݇“ø“ ƒLQ7Ìn Ó.Ø›nêf÷ã÷ ·sñë,ýu½gù™7r¦tUŽ×,gÌÅY>Åß_“£ĵ~aÉ1¾û–i‘³å¼ŒÕ+-áç;]еF>;ÄSíK¼t -–ü èß"hîøº@‚¢“þD¦P¿Òíð ±µlæ‹”×€DôÝGì³i¿†(ÿ ÙÇÅÐÅ\Ó2ÐéÄ€TD·M¯I“{³EPØ?ðêõ!g²“µBਥ }(Jù> -a´ÊŸ!ÑŠh?os:£Í1á•$Š»zØlkMÈj>nѧߋ`y#yéö›w–gnIo‡rCQî[œH§s›?æŠ\vP.ŽÌL€©\)5räe'•#>â¶¾òF£-Ú¼LmÔ͵O>Ö±¬)h‘sÙ5o+/osõ·¼è¸k o[†Ò[VÓ ›b -¦BcUmsú‚=åÝÜÆÄKŸ†ÚG4¹ß=™ç&GR‘Šdß Ôx‘·÷¬zÆ7˜Ža:»ÈÙ§‡ÖvÊU P¼Zû7ÇìÛ÷IeODí§Úñe«®êeÕ¼±›“‰zDãvãAd}IÆì]1DûèQ:ùB7ÛfÁ˜â‡T‘A”XHÓ…qGV÷ãí™ÝÉ´b^LN›Ô èŠa>ë× êÏúÙgý*iœ9U7QAFسZáLíYU5ÙƒkÍåÞ´_©Ûò^½Š -„' º¾X÷ž5ðk¤Z"½Dz×&Umt?ûØ/bŽJõñòy³Ù×d:àŒž&Ç׎ܫZ¬EÕ¢¥cJ9!ÿ&÷©t—m$yTÔNï­±š[ú pÀpï‡Yë{–ôä£Ë6F9{SCü7“7™A&á‹7™'!rñ»Ù+"îÉOÏPЙüîïBXõ—áŽÏ§ÐÔ*6WWâqÈU<Û]¶1Cýø4N7„õ>Õ<$Å1 #^ÊÝ)–05}NË¶Š‡…dÒHVåݾ)ä]K8>Å|ªþ˜àE±Ç7m÷œŽ\ì‹ÐŽŸÅÓ—d^UK ‹3¤ãó?™u ¾”îùif_Šò^¿— 8ßQ‚Ì·US0å‡X@¾Z™ipç̸o¨‹ÎÖä>\°?¹‘Œ%êQøŽg8\ öLUa‰ê²<†ï›äûé=kš¦ _ naÖŒp4FL¦±Cß“Ñ+)ç‡Ó0³a‹%ïd&† B>5îÙ×>šøÐÖVvK(‰ý©¥¿ƒIù 5–Ò½¡smؘ÷ö‡ÄQ(•#¾hÓ«á’aarÔï+Ü^—&¯˜}Slj»l»ñÄCãF.®ò'^ÛK=íйÆèl~C'ç¯æ ¸ôí¦ÌŒâ0SÅß«¤ßå0 < "¨ Ìq­k+ÄqřÛ† i+AK˜Ušò‘¶û*ü⃄zYõ¿Îe™q€ õ¯íI™ÔÚƒ‡Ò·P¹T?•ˆ1Š>e\Ø¥lÊsh‹C0hç“JGf˨¶ çÚ‚å“ÔåQä ˆ“‰ê’@T4Ü—3Q=)ü,7ÑKr@îd 1·™žÆéµ°cJ©]á6~€T²Yf9ŸÌÔ’”&zGY L(íJ¨¶®Õ¤‹Òƒ_â  B=:„Ëæðù§g†ÍY·Pîi¼è²k4 Í›Í²>t:ÌÈA)ÃÞ:ü>Œ&â—äv&q(’|·v«7.t3¡"‹&<±»ø5 -ë«u.Æb$ÊÁ46º!—v†l—ÎŒv*† 1¡HÖùéÔsívˆú#ßqGxšJ¥Ÿé†ïIh4Å^~gY ô”[‹qdò8âÓ˜‰EŽãïsDÑö†ýR7º=pvØmÈoçÝŽ,€O{í¤ÐÍx„äTx*HÚ4Ù*r¥({mò¹m… -"úUÄ&„lyV[T£NWù,VÜ¡ƒ•Û^‚„L¶ “©5ß5 cäb ¥]ß ,˜§–ºÄaV9íVh!íðq¤8;š=+^1Þ£Á×y7ÿŒ°"q Òöe¢ÅÜ`Å4d½\jEÁ¾ªAAaZtW\ù9Û3£ž¥q¯“ͲÁq±ëàÓ[XŸÀ!ÕùÁ,tOÙ!½b¹K‚ák’Ý"šz)2Ú„ÉPMe¥=϶ݸV&Å7‘õ˨¯´k12SE!V´Šb“³Úá­p;òoˆS 6ª#íËøy}.èÔ,eØÔI:–bÉp’mßMªš„q h´ÆJfµ™ü†/½™›½²æ4¹IÂ3ÕΧiMqá‹~”9ÌÓ#¼?žñ™½û.ËxýðFþk…¨ç±­Is˜-÷›ãl"ú[F»24D³È7¬ýZAŃ`ÓÖœMo{«Ü~€£õÈꌜ%YÕ[—g ¼xC ó׿`:nàúœ}¤àécA‹á|iQ’~Ùk0*¯'ÓL€aÙ± ?âœ5ô­C%ýçÚî?³ àðfµƒÒ#ï -ºÝr„»«›“ǧ»îšrZá«f - wQõõ¦>K¦k`ÙñêæÉ‘Dâ¿ßòÏ‹ó>NE§ßuþ.+dæÐJœr»Ó[Goí.œ>A±¦/Bh©t‡”©æ(ÏÉË=·üI7‘zY\~Ùø6õgèÔÂ΂ƒ:Ó܇ï–öX"-WŠeU<«»´Ì$f%÷ðKµ úˆ¦\쨞e¤J¸©Îþd©ü…'U=SñÆ-[ßÄ’µ¥­Ç@¯W{ÎÙm“šË\^4›nø4Üu;¼kÀÿ¬ª)ñæàÕÓû5*¾ØÁ¦Š­:#øøè¢¬ÜˆSî6¨“6‚+Çb¾¹$Ó#>W´hìo›|³dĨ#Õ–º#¢€Æ,çÃðúÍÌEÖŠ»¬2MY=‰æôÛØ±afxè|P,ç›w¯ùäâP6{Äd‡bE¯ëéêgòmб¤^M\>³tÍBåv -úâC-O»ª«e رXx]ú:¶bM3'ô¬ÕðØTŸ~xˆ æÓ½KÈ=˸ˆ Û¡Ä‚eÍXåqÙ9eÐå¸>ë×>ÃqYµV–§gŠ©Éüœ±%¥×*Ô¡¦#ÚU»±Ó\ùdEßLA/¤–ÂÙØa§´ò™õ[|‰¼3Ïs Ôå—Î ›•ÔÄbu Ø¥½î úQ]Âl1EØW¨¥²u“쇯†ånW¬µÒE¹ÊsõŽÏ+¿Å¼“CöN¼~;ù‘ã©·{S!›Z„B±sâ1îàVý³“ªsrsì—cÒ%8d͈(AöÌû¼ª–*0Ã3¹[yzø„Èü¹ú§túˆûY…'RÚÝ—ÒízÙe†¤QÜÓö2 u"¾4­)Ñ’]öGeŽ¿ËŸbþæ•=õ’Ò8Ć4XÙ³R$~T^uòáÛWÁùÐ¥MVÑ,qn+ŽÆˆèÌaÀë3¦ó]õhî).6 L/ë°%Ò…Ïq¥"ɲ Ü2qïÛ"9ÙË:¬¸j3uŸÕŒ¸FyðêZ‚ãºo€iHä7¹Y=?=|ðY³q“šÒîlæ{†Ú*gyLšP_nÐAÏð9?·Hnõ2Éä?o÷ãàŽÉŽöX Ðîb"WêàìDÉ,ÛÙ?ï™!°Nböz·_‰IñÊýŒi@Ö%5Œù*U\¾ÞFjÓ·@déµv<©kù{ðú’‘²)¢|}Žtª ï -Šà";Í“Zyì{Úòt»¤Ê\Æé -Ádk¼Ä×…D±¨”+Yñ1'w–+Ñdìâ€R0»ŠahÅnEÔ‡Á³œ™-à/qªw·Ç6XŒý[´û¨a„‘§{Î/jä´OO¯K1ñÈ« üu~TªSB§é_0´0·¶ëPÜ„”~%ÑAæJæŽp]‹Ú¼U®žsΘQbÚ1”8QöPvæ;-þÓö­´Ô¼ -B1ºpøÕ™žü †)>Êò ß@÷ÞfÃÝÓJßž˜ù“Í£HƒÎ¤›m% ‹Bï¥áhvÉ„…!î¨BW>ÿ¾·5UzžÛFs~R˵ -° ¬!´ -¿ |'Æ^6:‡ŸÍ>ðF³ý)J³õÃûYSã´u'W(gè¶Ë97‘ ïJ?‘Cù#d §TÄ$t÷XÉá—ºÉ[žOn“ÓÆœ÷9,<ò8ž5òB2EƒûÄŒ„\ú×i`.ßàO¤¯Äo5—ÉTñ’q#5æ8)I±,œ™ŒÚ¥Íå4LYÖx‡ò%¦:Ým7߃>þ˜˜óL²B-Ûó -ì8Õ«ÆŠû´i«ååšÜ#—§mƒÎQÓî`Š3§ãÚH—†ÓÍô…hNʶ‹&ép§,å$O@ GŸCPÜGÁÀªÇ’Ûž×ÓQ¸4¾¤+¡%¥¹ÙkS"18êSŽÆ½1y:$ÙSoÈæÎ‘­;±Ÿ*„ÚÔÉ î Õ‹§OîíÔ¸¬;+²ÏÎ-lÙ˜Þû<âfÍ.'9ÅGøÕ{xt‡O•TpT·ûó`_–p£òµÌÝi`Çd­–F®vV«ƒ_}7zº °FÝ“ Ûoéj2€F¿Nšðy›ãQáàmw&ÞwÔalz&W$øKfs¼Ï®¨Ïl†hJh0Fò½`°yp~ES;Ç…Ï –Ç!Ó×htj -à' Åå&ÆÓå“9w˜B®Ð«Û®_&¢fÙª J=‘>¿ºú˜ìƪI£ÄK²ô=n ÔD~!úY»šÇ–å„N‡™´ÃãÒQ:¤Yú-ÞIü -§[&Ñ•›,`™fÄØ»yXÜBÝÇ›÷ûÐ=ÝæÝ°ëšì*U«ãól6]aÞQâv>‡Öìë‚ò -µ÷‰qMö´¸áÚ>_V=QȘµ¾j;S^9C.Òò)VÅ ¨£Àl©G÷~!»5äâ³9ü†œè–<›¹6ãWŸ^ïݲöôd”‰×Ÿâ¯Î ˆ¹òâ{¿'ÌŸF#‚öŒÎlF>4hÆš‰‘ÓöhZ§Êѳàé‘GeS<€Ù÷ë®×)èÖØY?&ü<䡺ðæW˜ b›pŸÅ¶õÑ—S¿§DYd!µüAúÂ^‚ƒ–@#OË뮳å?úž$FÊÙLúþzö»÷4ï+ipBUFë½wíX½Ü‹_”õ"–sÝv$±„bU$F„@ùLsÞgÛáœÔ˜£¬Yå -ËØ/ÛyäN¾ÄO$BÔjÛˆ(-ÏyÙŒ]cܪMe¸v[õeMÉcï-ÞrôyÇkè^ÛlRñÒOÝû/-ßgD×äº.¿®ä,¼ˆ>$š’ÆÛ«šT+êi—¸6;奊ÝbÐp­-¬„Îô$ËF­Õ¦_ã†oÈ1Ó•ð_ŸY`=KßÙ •Å?ûÀ"ZðulU'n Wv):êq -”½øf€Pd²«”\ÄbAÞûmþ³…%5ûÿáãÿø"€hq;˜Aì1þz¦’endstream -endobj -51 0 obj -<< -/Filter /FlateDecode -/Length 2677 ->> -stream -xœ½ZmsãÆ þî_Áo•'§Í¾“ì´^Ü^ç2iÚ^Üv¦I>èdZwe:¢×ùõÅîbI\ò䳬Éä,’à.ðx¬ôó™È8ü'²\3ÍË,/Jf­ÉÖÛ3žmàÿ¿´Z[¦MŸ—Š[fàÅ¥-Y® -*3’•B3ÅáC.JVÊÜ uyöå­2‘3)Lvy}&á¡,T….¯Î¾ÏßVçn7ž-ÞžÃb‹}µ[…µÿ³óáÃ…¿ 7oý¿ëê.H6çÙÙå×g¾l•*ËÌ,/XjÌ©¢K"´/2ÐÔ*§¼à’åBdÖX–[Ê¿¾û ªíP—/ßוeÒhØ.¼÷[°Is¥³ÅŸü;`0²øÅ_|ôÿ^9³•„=ÞÇe`ØiµmüßWQèkY¡j–{ŒO¿#ëV?õß¼DÝ·«ÆßRÙâßD|ÿE›(&K´j)+EÛnr{ìWë}ˆM.(*C/Š––*³Z³‚cº» ~xG¥—DÜ{’:r°bØújàYRô7þ¥´Þ¢¥{Z7“åºQØ„ ¸!x}$Aºa!VëíØ<ˆk&JÓ7o”ˆAfΨá:Á¨W© !sy žQz~ëþŠaëÿdz!ଛ#@Ý“;ÕU¼5Ò=7LÙO€…2³Ö™ BEëƒÁBéÙ­+†­©Öbå"ÍEâ# °j¢\ÑÔ;‚`2Òt^@®ÙYð¢ÌÈ‚$*É -£Ð„¿ŽÚ„\ -Ñÿñ×ÕþcKc -°P¦Êâ -À ¥€N|’z&|ÕK𥒸ŒV›OåùXui 7JÛW}X;QfNáá:mÄ‚–ÀLoocÅhUBôWQäŸp-ãÃÈo;š¤]¨Ò@羺æ€(=gÏpECwH·Õ­×]ÇêõØf„¯pM´ì›ÕûD´Kh5”™>ÊÌ):\g’*´2¾†Q”žÝz°bØú?Øñ| Ä°‹H½nšz‰ÊA`)¦”Àêlp5ÆâØ´}Ñš%ÂX/yf%gE™æŽ(³$BÓÜV©£MØí«?H͸éõMFš2[HÎ5X¶ä"Ýš„÷ú¶KŠ P¤Ââ®xÈ…ñæªjÞß]ÍÛ¦ Ù×E,l>¼\ùe¤ÅªÇØ®ÌÁÓ|"]k××ñSp0†ÿÞâ -¬Wê•OðþUjZ™Q™‡p½ê´[·Ýs[wÃ>×Aƒ]¼¾<Ï k_TÝ’®ûA¼TÁ¸Ê@ßREV7^AHÕwULn¬W{ <+ü‡Üûã:¼²Ñî4ŒB_øë/âÛH -+Jƒ«]ÛEû… (nÇe¶ª~Óù̉ÝÍ{}÷.’PC8ÑŽŸRÅ èº õ}$·P¦=v|Ð9¢ÊwãwDº°ñ°úÌȯâ‡TØ‘èrܢ˯¶Yµô»‹0ìd™¿ÜÒyw«¿'b”`éÍY…îÂìðHÌÿ¸‰áà§ŠTÊÎD!{)+­²®”ß 8³EeƒlºÊb(“CÙæ±!‡ÎgAhQ%Œ¸l²ú™ÜöÏƃ2Œù®b’uF_–L Ûn…sòû£NYDm½Ou{fÊrVÕe”éAKLb  WèÀ$JŠÉÜ -ÏeìŸÚ¬G#ñ…O’÷݃q€E·ÞE™8Aö™¸‰‹Qò[íãK{¢sÕÝv|Þ´¯Ò(rO;Û¨^Œé+4Š3®‡ôN%ÛV´këîÞ¶y%"µ>@Œ.Ý1ʘ󴫯«òJ²ç¡}:, -þæ4–ä:^n‘¹»×q¯¦jõ„6 Š÷½F -ª¿ŸTýÙÿ¹'–E"èCÒjçÂ&YˆMMùŠn½íx@½ØNR™Ó¨}Ýs@1­zõ±­ëØ1öUùu•ˆ¤vÍ®ºÌg}gôž;wy©€­KTjr˜cü T«èºJW%h§X!K׿±"òAÿ³×b8ìÆëà¢P¦®ãeêܫДÈÉÚ -UòPNnV">š4Œ—d“!Q¢H”&ÿ5ØB!ƒØ1¶õZçïÐùÌØµÌ%Ó¦€Pw&Ϧh:4ñîPcÆt”¦¿ÝÞuâ¨n#j˜ô>¿#±=уŽ&*®™€‰rã*2…³±H¡dY©&ðCIH(“J»i4I˜¢J”þh¬nÚ+ßôùaAžÝ÷•Û6ÂlÕU«°`€ó‡ó(|ñ‚½©äQ§¸¤Õ -{€ÙÖÝ ¢½–x|DÈ™rYÜ—8à)ÏÝ,j`èMºQ1 sâsÜ]Na¹a¹NºEPûí|ýÉ2%ß¹â',~£´€Œ„ù6ë¬gEžC6x“Íü…áTî«¡2Ý`¢L¡gæj=Q#GÌYB[ËeF63'` ´>oÇ´°.´i­ÏŒÍG™`þ/1ÕBÃ$H µxüŽBMþ !ö‡YJf Lj:ã°§)(ʸœ©'(Ð ¤ÉMª`‚êFµ¯¥¬3P-d>[ Žgž5Ê$…DûP¢­)⮺þãa€•à×<#;°Ê7s>^-T¢`Ü–sÅ0Šàx{Eª~zÀ¢ýCK«ß“À§u”ôÌsF©æàÁãÇDš®çíLK¦™ÕÌŠÓ”2i/dÚ ‘|P;·éaÛaÿ¯‡8QÝ÷›‚×íôì®.êðuIb.–Û¨Çb?ÝS‡aëé”I¸H‹4ÀK ·Ú0S˜Ù†ùç8É@“{ÀºEr¬Q 8è]üîr•l'ýw8öñTäÊ»¯¿ÍÞIâ®,ãÀkÄÞqj@õ&; îÐH5qîåqGީ׸w{1?<ìÈש½žå hlgcÚ’å\Ïv‰Gs†åLÉÁaZŒ_Ç~¹{Yo4q7²YjËç8ÅÀ$dFÀHüJŒ{Í7¯GsжL©ô<œ‚Á)ß$Ùøˆ.¸™æü§”Ž$ô§;“&&'ó»ogO27HÈP5[¸Qâ ºý#>íÿB Qé¾ » §Àòe*7=€ŸÖþ&óÄ€³TÖA”H(ò¦< wA¯§õ\!Aô‚›n*Ç_2å—'ìýœl*3Rg™D‹%˜µ§á1î~ef„´¸ôN³Z]³{Œ3¹-£Å¦ižUa€ ò2#ˆ$RG±Bœ¦÷%gFçÓž‰Á3oz§Ž± w?Rx:Õê79í·kúÎH§§Þ3Ü«…i2‚êØ»¹dÒØ“£È-›iéÂcüÝ ý>­7t÷¾rÂÂÔùïs-?3Iß“ûOPö´Q`$+![øÇ?ðçs#N“âV2k’G}(€ãmïËŸz›>[ø,·Sè?.èGNèâx\uØ%¬Ës}'ëŠÓNF®êÚŽjpîQxñNè‰*<§î˜­r‘œÆÌ\:Ìd¶4nÂK'.~ݽ, ñä`&KÃð:J¼ÅX#ã~a -ýW·RÜìgÿ}¿·’endstream -endobj -52 0 obj -<< -/Type /Page -/Annots [ 53 0 R 54 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R 61 0 R ] -/Resources 62 0 R -/MediaBox [ 0 0 595.276 841.89 ] -/Parent 2 0 R -/Contents 77 0 R ->> -endobj -53 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 120.238 758.283 266.716 770.143 ] -/Subtype /Link -/A << -/S /GoTo -/D (addition-to-lib-iterator-synopsis) ->> ->> -endobj -54 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 120.238 742.343 254.183 754.203 ] -/Subtype /Link -/A << -/S /GoTo -/D (addition-to-lib-iterator-traits) ->> ->> -endobj -55 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 98.32 724.908 142.802 733.625 ] -/Subtype /Link -/A << -/S /GoTo -/D (footnotes) ->> ->> -endobj -56 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 350.487 502.363 391.303 514.224 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/lwg-active.html#200) ->> ->> -endobj -57 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 291.737 478.054 332.554 489.915 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/lwg-active.html#299) ->> ->> -endobj -58 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 341.422 426.248 377.075 438.109 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/lwg-active.html#96) ->> ->> -endobj -59 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 414.904 366.473 495.958 378.333 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (http://www.boost.org/libs/utility/transform_iterator.htm) ->> ->> -endobj -60 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 358.346 307.255 450.498 318.094 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (http://www.boost.org/libs/graph/doc/table_of_contents.html) ->> ->> -endobj -61 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 240.457 259.434 353.744 270.273 ] -/Subtype /Link -/A << -/Type /Action -/S /URI -/URI (http://www.boost.org/libs/utility/MultiPassInputIterator.html) ->> ->> -endobj -62 0 obj -<< -/Font << -/F8 42 0 R -/F59 63 0 R -/F64 67 0 R -/F48 38 0 R -/F55 46 0 R -/F14 72 0 R ->> -/ProcSet [ /PDF /Text ] ->> -endobj -63 0 obj -<< -/Type /Font -/Subtype /Type1 -/Encoding 34 0 R -/FirstChar 40 -/LastChar 121 -/Widths 64 0 R -/BaseFont /XXCWMQ+CMBX12 -/FontDescriptor 65 0 R ->> -endobj -64 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 0 563 625 313 0 594 313 938 625 563 625 594 459 444 438 625 594 0 594 594 ] -endobj -65 0 obj -<< -/Ascent 694 -/CapHeight 686 -/Descent -194 -/FontName /XXCWMQ+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/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/x/y) -/FontFile 66 0 R ->> -endobj -66 0 obj -<< -/Length1 1325 -/Length2 6207 -/Length3 532 -/Length 7020 -/Filter /FlateDecode ->> -stream -xÚí•e\”[Ûö ÉiIa@Z!†–‘ %‡F†é’P†!¥¤Ó D%¥;DRº»žÙ{ß÷Ö{ßß÷Óó{®ùrýÏu®ó8®u®µ†‹]W_@Ñi UC"ЂÂÒ@em%ca ° ˆ”‹KµBÃ+4T(,%% TtµŠ€€ÂâÒ¢bÒ`1R. 2Òɳ³Gy•ùþH’*:BQ0ˆ¨m…¶‡:bk@¬à@}$E{áp Þ3\€zP(êÔFTXhƒ ÖP;‚TèG[$P⯰«Ó¿‡žAQ.XS@^¬I> Ö¢ ÷Ú@mI…tX-(ÖÉÿSÿ,®æ -‡ëX9þQþÏUú¯q+GÜã_HG'W4ÔFÚ@Qˆ¦Aÿ2§„„ÿ—ŒÚ -ƒ("ìàP è¯ÌE æµÑ…¡!ö@[+¸ ôÏ8aóO ØeûÓ€±±²‘öÃÛÿê矃ºV0ÚÀÃéï²dÿÉ¿»:(˜;ð1HÆ&bÿ~3û‡˜*‚´!°,´B¡¬Í&~{ioÓóÈòHs3Áƒ|Þô4ªûˆºÂÏ,?|Þõ6Æ$²äÜúñ[ªðcøî«”!ž½;è'˜Òz§‰Ò¡ôÓ“ÄŒb…êa÷%ÈaᵟsØ q*¢Ê¸}{«¦³êì-MuY»³GXì5Õ¯>„>—Ù˜}?x=²¶˜DvK˜›aízo -çÕ}QÍàñ×#Áª%ï}1¬.Q×>UË- µm¤äÐå^|! 1óal½+~\)°Tü®}N”³Ê#ÊmÙyKUªp‡Æw…ª±”:Ø[åË«ûêÇ$£>Z»žâþ‡÷Š5"UÅ™OfÙÊ yæ»=ÈAAvšrÜ|H9|æ'†fœÆFáa˶Ùm£ -ïŠ*xz•È„OŒBî¾ÑÚžäÊ£sf˜éD” z}Ř˜'å¸Ýšâžé”·ï§ï+_âQd|lj°%_¤Œfå£0uÂé¶£þ”Ì5æ •3SbÛ|˜œ3@€KcÛí‘ ó6sz&ÎÁ*¢­l®!_u ›•”ö -Êÿ'»Å%§p5ÈOP°™ìJxÕk‹€ ß,î"£mO9o¯ùëƒUkä pmDþø©Ø=1Ú‹üù©t¸zºÜf2Õßb‹SêŠø¬I¤p"Ð7ï°wx UÚ$œàÊÉâ‰Sb|z¨Jˆa6Ãub àˆÀ§9÷²­„ÔyOŸ¶†Ë6(Õ $ån`ô‰íi#Ú?vèyJ£¿yo¹‡S鳩P¾SX„äÆuÖzŠ$Åš• -•ik¶’êQ“ÏÖ¦Iñ^­¦½oyÅ&ÀY}±ô"PhÅúšá€ëªk·[@!J¥|toR2yBs3£„44OïFzË‹HcÂßW^.F3¨¡ +ò¸É÷¡^o"g»]Þ±‰|ª» Îy¶_ã ³ ÔšÎ$ÁÄ(gGR9©Ge±˜ã\®±_٠ܸñð³C2?fyÐèí0šVe™õ‰ñ :/Ò¤á>ïž*_’ú¨¡M… é­ Ý_í1©ä%B*’þ¸//(«Æ$­£ÿé£å¡Bg}Ã[œT"©Kï­oÒ~9‹-ûrvd±â·Ý9ÍU/4ÔMfpŸ5(Ie¡ÑCÍÄon·zѧ½à± ÷Ü\zÜ«YBÚtJ*x^»®xHº Šé[ýðIç.;aL±—ÝO©Ú²¬;£} ¶›/ß–Ô‰Xj¤ÓîJ²UCY´çÂDé¬8H*4(c+VY†ã³Õ‹ˆ‚¦“Í*î½p|íóYFBH,Óê>dâþ^ *Cøvª¥BŸL™²úI£ˆÿðéðÄdÕk¾jÀŽxuAŠ%Wß>ñ›tΗêòÇôWβ]úsZÝåʦ€…-QþæÆå?·zË “R›}HnCßäšrÕ?#-'mK™`;`AÍ¥%@È>)u1¬¢-må;K›ñáY>€ïXŒ¬‚æd ¶.Ë[r?}ù‚?_YÓ¤4 5ŽÜ‹[mf¨¢ –ntâÏv³öb“‹³ûв·Ç¥æ˜4©ç€h¥y¡\¸ЕšBÖ¢a®4÷БòÄ¢Ícˆ>Ó0emGbqô »ÑüŘ´/qT|•ªVÚŠCß1p“´Èo½4ÁqóÓ×ñ¨b7gq¿‡ÖÚïíŽßÛÍ(ÿX¾“J=OÑXïµS>!ÖeÔHSÈ›zBëZ6ß¾E¢U^ ¯s³ð íåÝyãÉO®gý^¸ -V¤<×'ÁpÞݦñGŽÝÐ5E"Þ jÞORø%”^¡ÞoÚ£7ÄžN]Ë R±>˜C&x¹òó5“¤Ìè–ðz`ý™]¶›x÷¨mÍ1ŠñzYÓd4¼ìó-ÌÁ0ó9ë§Rþí X©¯0ôG“Äûé‹#™ÚŠ[Wˆõ-F#°©ƒé d\[Eâó“Àgnu§UÄ_ÏŠŽÍ±DV¶»:V5Ö–³ÙêEèˆÛšy0Ï1\>K[NÅüTîqRØù¶¢¬jAÇæ-½!›=q܉·ÆÔ¢×oØêZ×ù5ì*&˜ãlw.óÁ76mÊ–)ͽ9ò7è"ôúÜå·¿$åáP½¶Û¸v¦7‚|8'Z_mƒ”Ô Ú½'êSJädAOt?a·Î¥_n>Q¶ è›tþŽ‹ã-~Ð+zz1ÓaìËlK‘¤\ y`ÎjsSßœµAþ¥3â¶a1ÕûÓ"ƒFY!ÜGøJÁ&Êq¦ H!W‚âM“àƒiW$T5E•Ïã¦bdôô¯ßËϾŒæ9)5Œv8Al!ìPhSýéR€À•ÅùƤôY!™‘jÒ´ -ÝAˆL»aü6¯ãËŽ©ÆÛ2ö}],¥$ i¢;η DÆ ®Åö\‰ipâæÔCÑ‹×,ÃЉ~÷LøSQ y²T‡N´¸¬T"VOŽë|j^‚¿MÕZ7Œ_©f-Íu|uF¸]¢Ÿµýž;4mÓÀ#”ï Þ—>RS7'8@©Ðý`@•}ç8Þ6MÄ6,_ªÉLð¬2ì‘–øPÒçK^×éðgø°Å#$që|Þ‚Âuÿj+õI¯¹­JçšoE‰t5t±Øa‰8^…»€Ö¶ˆHu«棲g@yº«+JêiŸï-¬¸&;üMo¸ª .ê„•É™Oݹ³¡Ô!ö2ý«[g©|™Êî ñ<ó<ÈAÐ5’á¸ã@¤­¿æ»«ÎíVuVȪë‘{f§]¥¥Â•ˆ3o–Ä8€ésJ+=ý$þZSe§ÿžò}LN|s9Oƒ™þ\̺Õ4)â{ÎWº`üÈæ&3óíJŒqù²mÉzŸíÂ÷üãÏc˜eÛ“ë™3Jk'þª#¬i¶j&p<¼¾ÂûV¹Â}Âw¯K—ÚׂŽDõ.ˆšÏ{e¯T48," ß¹ù÷ß«âg½m#H˜!d`é]Ì6>¿×.³RÕ« Ë[%²5]}TFw-_ÖƒÀõ³Ã#9ãTÆÝÆv즓¥Žùb þëk"v"WŽú|sŽÛÍ„R›¢DWE›¦ £±Ë‘*CJÅD$¾kíWʣ͗*V÷'züÛÔ­¤|^¤tZdÓ³v…\ùChö}Z6„åÝVûo®p?TVˆ­t¼ž®JÛ)[ã»ÙÉ'ûX_jH 4Uº ¡ÏU+_‘y|ìàLÅí«°4fÖzÀAYQYkOûŒŸeÌ-çÕAÇз.I '+]99ÂÇ.BT«ža.q¤òêJPðšû¾*3Îxÿ\WšIóë;!mÈB¦“„êi‰¸šx¸OP@€Z„Dè‡ðž\µº÷ˆ6)˜á $ß»:×8©¦›n >U¶M‘•‡Ÿ?Ö–×eVyIéøš‚4‡À×2UßÒÐ;¥g…Þ`aRMÒ¸@àËwKÂ3Ž)£*²åªÊŒÝ‚¸Ç -Å?647•Åí¾ÍI†5ì3½eý  å¾ö@´V-eȸeÌ— ÌhÇþè(öAH~©¸¾6ëûa2WÂÏá’ úÕ®ø8b¼YBê¡21è‰å[âSÛÚá]hýŠd«’)÷΃Èbzô»únC˜LŽƒR]á;)ü¡‰o”–1áù›ÝÃÏöÖrŽQt&ƒ9ÃÍ+:`»|ãBn§‘ÂÙêŒAüàÐãî§½‘ \Aoˆþ¨Ãô ‡øó˜X÷R¯eÆ;ÃÄy.¦è‚è²Î«,ˆ-5Oœ"·+]NS²'¿ËÞDZg’îG*|~~WÔT 2XµU¤ä7Štc«(³²L×3Ó:Ê [­– I¤„P] -Îm­Š0pvŽ&0%û´Ý!{¹µ¿áéKÛhÐúži*HÔzñðb¬×*¤DÇjý¼àùR]ÖÜJŒeš–È39ù9¯lG‘_÷/Yrqê?_¦ZÓ>§~ÎÄ(»,[+í~ÊŒã¾O(´gÑ`ÔºE ¯yóAâüt`ëÛÛn±žÛü¥ÒËÓû±ê×÷Æ.´(îñqTåjr\ÞGc\Èù«K‹—î"מè-®£ÕN. i‚\yùëÀÐÙ%÷eD à‰ªc•ŒG…ù8˹ÒC/ê[i‚p‰ÞŽZë»R£â_¨#Ä@ržß?—=°S™žºË`7c£·Ð¿Uã\[µr¤ù–ûdús++œ4\ö2¾o)‡’Ê­á–uFQ°‘?§Þnµ+uŒ*TwШDðúá ?VãöûÚD¢çÏX®3âÕ—T‚BM³´«s,q#p †& œÕí$í(`\é„’ꔳAGkË|y=Ét#·< ¢±ÿ©Òs·Y?KmLžÉg2tû°Ü'[Ó»º¬IÐ3“àH:š/mv",Â1…·èÖšZå[éý`¾ÃÜW š3¯’ýößÞB£úáûÏW—Y?Î['˜Â¶0âÛÝÉò£…žšIÔdóÄÉuT í×{ÏyìúRH~:ÿl®÷(1{™%cûá6s˜S—Hn\5ă<ÅY¤ì)müBýt‚‘Vìeúá°ÝÎŽ¡8תoÂSAQ0å@0àÅ5‰öù™Ü¥W4žýAª/¯ÑÓðp{¦¼ x¹–T2𮌃°ç‚’ÀKãqÙ”½–<·ÖQ£{Úþr‡{j/ÝmŸè $:F±sÏ¢¤¢0”d‹3¹]%ihºcñÇÏ4š»_NPïÌ Ð¯’b@¯™¾¢ÇjÄ_ùY漢 oŒå¥|”á«Ö ¾”X/¼kKVrãþ¼ÄÙí˸îC‚¶‹“ ÖÅ’BR«µuÒŧÛU–‘¼ø¼t„^ð]¯yॢ@€9»ÅøÛ|0T»Bž'£;H¨­uý꣌ڛ3£cU"û.ñ(‚—ó~ ¥™uÙ}†ç—ù‚Ã#W¸UVü©>›ò¦·ºÃ;ü?êKªâR¤Î=-5º“¶r‹fóí­dÑ#ÚÍ\‹‘åOX6#o ˆNŽ“Äß_§c¤^©G¶žÑÝ›Kúš‡ÉùæKïËÃèQmÜ A3¦’1Ðú|Hÿ¯ÀÿŠ8Ô -…F:Z¡Hÿ ¬)¤endstream -endobj -67 0 obj -<< -/Type /Font -/Subtype /Type1 -/Encoding 68 0 R -/FirstChar 45 -/LastChar 121 -/Widths 69 0 R -/BaseFont /MJEACS+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 ] -endobj -70 0 obj -<< -/Ascent 694 -/CapHeight 683 -/Descent -194 -/FontName /MJEACS+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) -/FontFile 71 0 R ->> -endobj -71 0 obj -<< -/Length1 1260 -/Length2 8064 -/Length3 532 -/Length 8858 -/Filter /FlateDecode ->> -stream -xÚí—e\[]׿qw-hqI‚[q-îN±AwJ ÅŠw-îÅ]‹CÑâRhq -Å}xîWÚyÞ3Ÿæ79ùpþk¯½®ë¬½ON#½º§¤•“DÎ æÆ æ ¤U´Á ˜ ’Âbd”†CÌÝ N0s7ˆ0,$Ä ƒX<<}…ùø…ÁüXŒi'go8ÔÆÖ À"Íú¯$€¤#µ4‡TÌÝl!ŽO5,ÍZN–Pˆ›7@ÒÁ ù¯®Mˆ+î±âƒVPK7€Ä -ÃþË“"ÌÚ ða+wçÿò€À]ŸLXþ±É -x2iåsðXA¬±€ªNOj'/ÿ7lý{q9wUsÇ•ÿ§SÿcÜÜêàýŸNŽÎîn8@ÅÉ -‡ý{ªä?Ì©@¬ îŽÿ>ªèfîµ”„Ù8@œ`^.ïÄ¡®rP/ˆ•:ÔÍÒ`mîà -ù'Yý»“§þýã¨òJVRZ‹ý?—öŸAus(ÌMÛÛýÉþ‡Áø©Ip¨ÀôÔeðSâÓñ_g&ÿ&& ³t²‚ÂlÜ|üs8ÜÜëi=À €Â¬ ^ˆ×“c ÌÉíi -à©3þk'8Ö¿Ö•—´õv¶…Àþÿ'Ä'Z:98ý‰ð?%Iþ!~Pê¿IÊý!Pñ=e*ÿ¡§ºªÿM‚OóÔÿ7¨ù‡žªhý!^Pû €zÿMO; hþ‡ž,þÐÓuü7AO‚V!„ü…O¬ÿÂ'6á“Û¿ð©пðIÖá/|ÒuüƒO „ý…OºNá“®ó_ø$ÿ Ÿ„\ÿ§~ºý…Oïþ>Ùðø ŸlxþAî']ïðnV))'/_N0?€“›ô/ü!~!ÿÿ=Suq‡(Êø@ ·à?QKw8sûçwâéNø/¶†>Ý<ˆÄkaÎÉRä]rChI€lþ×RTVWêÔ¢w£!u©"\û«"D3ðÆ míoÂB;hAÒ¡RÐÊšo¢AÒoÀW 2O8€K𛦅þËrߨi0ûK¾cføöÝ–s#û¯Åççk¨UÊ»`<ŠÃ”’os÷§öcë Ø)VÏ$a™d·*'BtwÖbGnäò> ’§?,Pô¬LÙ/㦠-Ef« Ϧ¾¼Ã±zYoŒaÓíéô³„«ë¶ñ鹆<æÔSçUqŠŠ\z hì¦ìP‰bèø¥Ñ³ևʴë<¹L†ƒ¿Î”œëâKQò;_QÍ¡l„‚M:2îG(‘‘w¦w@ÌcÂ71Ø3ÖÅ;Ãx.V:Ÿ¹ofxƒÝ>Ì䎈KŒÐ™ÚP°“åÌ?€®ŽÉÎëG‰±”ГŽÐ´¥€-:» ™(r*)>}S=7¡Ø„\:ã¾ÁùJ=\/7ÉuªN²q¢¥›LÉv‹›IBÞ’½˜RèM¿Nætûy ÿîÓ…ñJxz‘š¡j€µx®Íð›mØTeLåúnòý'ëÆ[kT¬ -îÜ—~,A÷/#WžÐS6:ñÀî.xËêgÂÌ. 9 -Ì0c¡l«—Móí–~ÓGÍ3mêV+ÍÏY³*<ŽØ£3&˘*Þî²¸Ô ó¬‰QELZ‘ä0ýèë1jï’`oqvŽ¥¥EÝÅá¯fá†Êú9—Wëî_ã¿PéúÔ:£³ai4'Ô«;ý±­Nsƒi±Û¸|+ëh40¢HR¿¬‡×ÏΙR«r²Kã¬ÑÝ<­5I4V™c9ÛscÕpãpbMäÖ¾Ñ^¬ü‰7ãùÞŸ¢m*:­Þ£zãË=¶Ù7Q½Kí6ôý¡Nw*vnÙÌTAóƾê…()6ÂŽñK'Õ;¼á£p¸˜Ã¡Ö¦ÍWKÎcÛÊãÿ[=!‘š‚ޤ+3î’ Ì½¾þ;""[Ž¿ÃCRM -ÁÌÒlIj3Ô+fs[Ĩiú7:°SPœW½Y‘åÄPÇ3T¦}Q/ü—*íØÆžôÑR¢ñ×Ê„P¥&Mϲ¦8 -ì@yø»ÞÇF¤ž0W qýèöNCnîRhÍž`˜˜Õ^½ÄóÃ…Ö„m/Ü£Ož¥dYÖeþ¡èu˜æYÞ¿¥&4>+Ç­”û©û-1ïEÀgvÈr¤¬U+DLê˜Ëä'¾i·×Ñ€`R›H¢•ÌÒ:ö"“1È;6…Ë%¨µ¿Åíbå†+ºëŸh]}×Û¢Nã fñ èXx†D5aåmqÑW=§Ø1¬Bë -©ñ‹uîÏÚRÿI¤–¯QeîNhv1N‰öì¡D:yòWɺåÀnyˆèðöË_ân‚»ôí3œÄÒ¤ *ÝìyÎÔÇ!yèæ¶nßhÌPÏá^JFz‘¢æu‡ -½bˆœK…µ(·È“åÕ—b|;® c‘ˆ9Ôšžu ˜^žøHP¼d];ªwMôx†_°Õ·AÓ·¾ áµ›ªWJ[Ki6+ÒIðTjvTÜ/ÄxàÂs™þú}f Í¢˜ž_%m)ÝŽ€6õj NußxâáµVí Ï™gº<‚Ü¥l;Ça3Ö!LŠÓ)Ð5š|ëèÕ•1û|?æ.ò ½«G¶~`ÁaYŽì}àòȃ ¢ŸyEoÑKËÅ›®¯ýî¹Ï.¶QuôÔ?U - $…’ÚõŽ!àxàÕ˜"<®iËSÙ"0?W¹EE‚- í…ׄ¯=GV[7€íì•1´gówŸ¾bØüÂI‰÷ -û’pç{¿7|é'ÝÎåQ8ÛòáUu²ò×°mÜÀp’°é]S%qTñ ´Âž·ñ¡_ I{¬ˆÞ8N ëu›t¤ßÙúÞÇás+)ì)6É?!YÞ/ÊüħîÇ´bŸìm ÑÞá*6)SSÌ­Tü$«€+f¯Úì<ªÕºA?;Ìù¦Íê*dYQpüòAªß)©ŸÛMNbÑ?P¢ùÌþ¢ÅºŸ"–¬þÇÛ\bå9z¥ÞÙ{š@&z5|éò -T¥ -%žñ€:Wÿ•^3ýýúRYí«—ºeêÂŽS‚øº!i@Ëý.8šöË4\ôXiÕ0ù÷ä:·ÐÆ~©ÕÙ¯ñ ¯NŽ xÏ$|ñ :(Eöxµâ&“L+=ðêäÁï}0ùj”@ÄäHü·ˆè:¾„Å+WZ\¨§=ÑAÚ‡š¼Ï -=Zü—GdCÑIŸ-ƒ}"ƉÝòÈÓh }ø‚P^ßQãÛÊ•ÎåT0C{’iÓC™\ÞQÚæN1O¿ÅnFØ~#S\bw ÛL´°Q -NoNgÒLQZélÃéÊt­<«£ºE§äÂ=°m" ßZ &¾ÂÐPêµ}Ñ»;à0Çw£%2ÙÝÔíú·ÇKÎÒV€õ2©ÜƒF&T6-Î-ÈÍö5 EÏnš™ï¡á¨âæî1õ~»(9]¦§àƒ})}ú‡Ÿø°ú•Ô”¶ ëŽ@Þ®Ðl4î¹Mm¾ÙªÿV½'GI>§Ý+¦°gZ‰c@}¬$+Rõоü;ZÚâ#¤XʱΠ-ºÞj‰*Í@‹žJ ù4%Ño(œȷ{Ö¯UxnT›¢/v.é•m Á‘‹"ü ‡w|Ÿ€†Ë¬ï –1ºê­*Äü9syg8~ÎY¿žæár~Là«\ß ñ¶|Þ$´ÙIíùð{Pâý{²¸ß6¦ïÊöαf\’îø;› „}R´Ç|;¿KZQh&â1DqUàOk\7ÈS7©¼ãUM$¤ðÜÖ½ÈêçlZ<Û"xí´¥˜jj>(@+3yj^ðâp;È@a¦/¿+$ÌV¿k¹p=´a~É&Üe/TÊȽ()yJ=ž´Uƒ¬œ$)Íî¯,§ò.<ì½LΈv1Y7± Ö[Є6 âcGÑ\dÐÈ_„l,PÀýýÆÛ>{/£+Æ)°-ƒP(9Í^ ËÃwVgSPF š0-]E+›÷´§„ÍS2i5• v­¶ G›”¶¸bbeñ‹rõyGÅã(@xj6Âù¬w™ß­KÉ!^'•¿ƒÛFˆ™¿ÈzÁX.­zõwYáyLxþ>a¼úV÷¸©äËê þr©²ŒñÇÈ'¦xð³âa†aCMåÜô¯Q%~aZU|e“¨#)úã¤)Zv»zår}ëSßå…-G¸ôû¨r™’¿ªÆ’“£új½OŒš0ÇËÙê†.O›ùÌñÅõúðRªM5죛åp_¥ÓÜ‹8Ÿcîaü<…Ÿß5épXÝ,1£Z=äÓ×ûj/Nðî\®Eš€Á$g/ 5îxõ ‰ºv%¼ßR³ˆh¹V‚玺å}¯í&ïòo«éÝšÍߘת®´óe9JŸ-[ pªiCSW::ꡈËiuë)z(˜ºCÌh¸ÁFk‘$+³/ª Åi ó› bú1“ 7Ó…}ŒAÑ”ZȧÈÍêðÑž„d§^®ÀÁÇp[Àø>ÞvÜ;¥š¢ª±r459‘wwȇ;J'V;Š_'DÊ´„|x…®Øî4Òx "¯—å-ªÄv"÷È­5±5„_“’¼Ø÷ì¯Ñꪜ|C¸¶帥Ü"ðèLøÈo4‹­|Û+l™ñíêTÕŒ¯¹º}ÌóÖ%Þ@ö^ös«Um¥?T…oÍùe$¾Ä‹ X|ÄœuÖºµ@LÇ-gã!m ƒÄ愆ç ~׋LÏ;2Wǽ°ýíÛY èÞ@ûýZ- l\¦ ‡‚êržóeØøTà¹Ìþª¥úá·1 -© ÍüÜ!“Ê Õ­w’5ާ’½ùoáwÞ¤ÍqýË -¿YFõ•ª¥ƒÖà«£¬B,bu¨Ê:¾¾úiþ¨s÷ƒ§Së‡m}Æ %În ݧNO‘}Ú±ŠØîûáœYÉ©™RL›b¨CXŽõáëI,øc¨`- º„?N‰“A"ÏAæÅg\Oþ—Å!-«$Θ¨æÉdKUVy#µã˜W[Ãc´ìærð4“P -|Xm˜’º»ÅòÂzˆE¢Íyô{µšfW–5ƒU>5äÌÒ…ÅI<â•9Ž“ŠÅË Ýn^ªw¯.ûû óêêT©èÂ>³´¼ùhž_Š[8f{ƒœtË|qÀgˆH™è¸™XË—â–!× §÷?<ý=}“ }"_Áô|¸+÷7e]=Yp_|å•YZ›[Å Nô{i«»ý0D3,aÕaÓ±|j²Ï¨ÁÎJ{¾ç´ÔG#“i –ÄËŒ<Ê•Ø)5É[ã š†Ái©ròÔŒa_õê"/Û½zç’@Ö “/óÐX¡m¦M°H¤ªcºsÑHª˜|´•æëOŸøä4$3•“`g­$ëD8&PÔH9ÒBñèl@å»®±<Y}{.˜îô£«)M5TÙÁùÜöB¦Õ‡ZHxðOô%Œ -è9`Æ_ïFÆ}8f‚ë?Q’{܃ûÖÕòìƒä"üÃá7âò‡b% ‰Bè‰â€‹pjJYÔéüÔêy(k ïÕ@–•Ö«å ¹<<ÐmcŒdW|ÄBòSfÙ²Äsäa[U7b—vadœÒÙ¯c˜ é´Ò{¡'WÎW&[ÛŒþÖfÊ ‰ÁÁ‡ê¯ëŠ1‹»è2¹—ß_‘S³}Öú5ZŠù°Ê˜k[0ƒtlå²÷,êÌÚ îŒ$?'úÓËŸå휯ݚÙ:÷MdØ›ŽÏ\^ZÎsðcKˆíÞÊû€#£4íû<\ÞctÚ‘ð¤ò‰¨Üùï»\G©{ˆd…j Þ}xhbm²­þîr9‹”_ÁÇ1ª ­FŠ/>'(ÑðuÔs\wîªÖÒI'Q–I«3vÐ0ž'áè»B¼ax3â‘*M¢tøy1ZS:(Ë2Ø\¨Me·2ô*C’‰]² ÛYÑ‘IÌv¿ÀÉ•Þ\õ#7áپì>&¥ºðêÊMýà-ý+?­S‘I3àæŽÿxc zCšÜ>æÞ° -Ké6bˆ¢ž!0°'ó aÒ²A/ä‰HpÂ-¶t²õó)¶kydº¹köo@^ðL¿2SºÕhóB 6ºVºìæEœÃ1ÖÈ÷ÑÌl ã|fáÛÝt² GA¥uÜ´CP„Õ´d—Ú±é×v¸œÐÙ®iñ³jÒ{EÒ/ Q2ówÌGîãœÐuŸÃÏA¢üÆoP-?`—Òf‹®QãJ ããØå¯ºtIáÑ#¢J]µ>[ª]QÈà×6/?ö*ÙÀÍœQ¿´¢½¥ëÒ{ßꢨ±¥naY ½÷Ñ;gÑfTígÌÒ½î³ðQp)=ó½³ ä©‘âwïè2G#tvvÛAÆM_…[±O×N§Ð£…Ó§†i׌Oi«uüŸµ~l?4Uí9n8Í\TaoORuÆŒb6cãehäÍú7Y¸Ä -²F£|nF-G©À·Êü+„ÓWÜB⬭îçK¨ß§Âª;+Jr4Õ(]yŽ÷d¥q’‡X›¦G÷AåÞ”Ðc¸TÓ6ž¶ÀCßÍm¶‘u@Gëëò¢ÂIãZÌ™Çô%åKóù;ííê‘fpŸÇ|a -[Í¢ï E—öÄ3Ï)ø²ÛtÃV']œ~ÎøpÆXêµd-ûâkH?R݃W¡\KK -Ã"dÒ½еÁxwÒ‰kå\áˆQÈ=£p" Í~ÞéÈŠlDâqùÞ):p+ôýÚSƒv=“aKm““‘ZB -2‘oºÌ[l$žÊ©¹S£Ãކ$ „¯JEK,£¦sø>, |ÅK sö³ëó›ûI4ɯYp´ý«(÷·`[ä)‡ ¡väËÎ.¿œÌÁ(î2¾Ü2QŒ§ü÷ÜšÉ×ír:•õúèQJÒIìG%Ô¿.=™ØQå?´(²å Ñ[ÈD\çås† Ñ(I_,•„)´Zd¾´EfòpؽSÉž²º@-ÃnW‡)hÚH+(¿Í]÷2c²þ9É€¯›øeIéÕhçÇ!×Úmr,Òµ·?^²¾·÷ˆèø¬$W£SõÞ€ã}u úÚó{rß¹‘ˆ”‡p§K !ÖFÍÑ\ƒž¾+Wƽ)3œyÒ¿¸ò¦;(&™å¤xFgÝ5¶«ªÇØzû‹j—€–Äò›ôšwh0–qÉ~“¶!–Hñíã i”TÛ Eso±ðò…VLXÚO:2c+¾ jóÐA¤ÂGŸªV£È·,Vžá ò5±”QÂA úlËÈ %€p^›çKsB´ÎE–Ce_šeuW•6Ïì~9ѸҜ²¾tN"Ìý¾V_` h/áE+¾œZNºHÚ}ë'~2žHhWø}™llæÑA -Íë6È[Çùy-yÑQ¶gÌ”(r9«gq™¸Ð•å {ytú¼ˆW•ªå)ãÕ«èF -jR\˜p«ö×÷5ß•®ÈÞçþ€h„µ$´¨ÑœÆbºu{ØÎÓlC½(Ÿ‘ÁgÏüH]O÷-†Ó>>äi‹$òzÙ™JÅü|Ž~ ¶[—)$ˆòúc©ˆíÝšÔh˜í6Ï€Éú´ÞòŽ"†dQ·®³áº°ý2ãNŽuƒÝ÷dy*> -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 ] -endobj -75 0 obj -<< -/Ascent 750 -/CapHeight 683 -/Descent -194 -/FontName /KYBCBQ+CMSY10 -/ItalicAngle -14 -/StemV 85 -/XHeight 431 -/FontBBox [ -29 -960 1116 775 ] -/Flags 4 -/CharSet (/bullet) -/FontFile 76 0 R ->> -endobj -76 0 obj -<< -/Length1 772 -/Length2 576 -/Length3 532 -/Length 1127 -/Filter /FlateDecode ->> -stream -xÚSU ÖuLÉOJuËÏ+Ñ5Ô3´Rpö Ž44P0Ô3àRUu.JM,ÉÌÏsI,IµR0´´4Tp,MW04U00·22°25çRUpÎ/¨,ÊLÏ(QÐpÖ)2WpÌM-ÊLNÌSðM,ÉHÍš‘œ˜£œŸœ™ZR©§à˜“£ÒQ¬”ZœZT–š¢Çeh¨’™\¢”šž™Ç¥r‘g^Z¾‚9D8¥´&U–ZT t”‚Бš -@'¦äçåT*¤¤¦qéûåíJº„ŽB7Ü­4'Ç/1d<8”0äs3s*¡*òs JKR‹|óSR‹òЕ†§B盚’Yš‹.ëY’˜“™ì˜—ž“ª kh¢g`l -‘È,vˬHM È,IÎPHKÌ)N‹§æ¥ ;|`‡è{G:9;jCã,˜™WRYª`€P æ"øÀP*ʬPˆ6Ð300*B+Í2×¼äü”̼t#S3…Ä¢¢ÄJ.` -òLª 2óRR+R+€.Ö×ËË/jQM­BZ~(ZÉI? ´©% q.L89åWTëY*èZš 644S077­EUš—YXšêé¢`j```añYriQQj^ 8 ÆOËljjEj2×ÍkùÉÖ-YÓ·µ­¬s]|a«>çÏk_Þd?±£nvfJm°é¼@Åô’%¯>ÚÚwX<û¢„W²õTá¢-’½~=q_ ¯ÙÚµ`YÄ„Óýz7‚Å+›»¦ñþÓVåy¸0lÆœÖGÒVû‹ÏêTÖ¹ùE¹þϼ”NQ‹÷}¿w[H+h’–’”ùÍìwÅÄ+ï>¿,ÿiGýôã¶ÉïÎÞòñ /vëR¿˜fÇô%ñۮش²‹µŸ9¼òâQ¹DÊÿžýÑod;”ÚU? ^Vñµ«Nºúú©vñK¯{~­ñçäÚ/ëtôî…Ã-Çé÷7¸ï“õ‘9ñØ8ã·Ô m¿i"é÷Œ™6=Û!y:ëIèÆõ†íÿ_°K-­û±,1{Îö)².oª -—ï¶ý*Þ[«ç½mFäû%»s_Û-j(lå¦sÿÏùœ~gغŒ|K·~›¶#£ïµ¾øÓ·&g®]p_ò¸!—GrnM`ìv®^ÿD·l½ŸÞë>Z`.x‹“Yh—ý.Ž#ÁÇ8©¯Øw6O~¡—5“{Þ„U7¶ð807ì™õ…ûk4鹇Wñ»5þô öŒïùfÕŸ”ÛV¼ RÅ—÷mõ‰_A¢ëX¦¼OïjW;[Ã(Ï´ÿÇê¼uï,¥n˜ q(ï»°õÆA®æ…Ëü+Ì»·3z^›"_Õöûÿ‘Ù“O:†~ýUûI¯H$P†kR¦½ÏíÏ-‚©¢áúº×y'y=øØ'sµñó‰BˉêÿcÙWdtDÇ?û:`‡‘µªñ½w¦[K½ð_°È€BÀ5jÀ°0 9'5±¨$?7±(› k)xyendstream -endobj -77 0 obj -<< -/Filter /FlateDecode -/Length 4544 ->> -stream -xœÍkoÇñ»~Ñ­Õ†›Û×Ý^ÐpŠ&MÐW£ýÁ™:ÓjEQáÑvÔ_ßÙ÷ì㎔¬ A™¼›÷Îìò‡ ºjà?ºêM¿êTOÚV®6»‹fµ…ÿ?B´DÈ>W^®£DÊÕšuDõÕñ´%=Ÿ.H¯¨¥¶îÃ×h -s0.V뮥¤ë4ô§/.>þL­zÒ·|õâõ…q/®.¾]={~u ÃŸÙ¿×æï}Þß^®Öœ3ÿto¾òÕ³oÍ×úÊü%¢ñ`þø{@°Ó½ùçÖ¾¾³Ï,‚é»ËÕw«_^üùEX)k%éh¿Šë,øM[FÃáƒ$½ø©ù-$Q|‘ßâ—Âï#z2àUnKN¨jWq•%·;‚èଜµUvÛ7Àî¾'œ¶Àm"mDÝÄCXvv¹R²‘uðïëšã×T.› -JT‘U×í` -šdã ­¦ÊùŽVqÒPé¨úÛ¾ü»Ë,ãÙPj„§ØÐ˜¬¸Ei”Cûâ]Ð¥v9-Ôâ`0ó*7¼þŒ\ÔœƒîmÜ“q»? Ê4ãìDÃ-B*¼r?˜Þ¢!îÅnÔ$© xÏ-ˆ{ ,³$8ˆï½ýg Ô¿Òr…ãf°ÓLa¬Eí8rïŸæPCàÕ5ÒŒíMJǼêæãÆRôÆ.'L³íä"¢”ôÒK~³·3lÆ;lyzœJŒ^(= vŽ7Ö“:¦„ANFxýû­›v¸ñPÎÁNoÖO‚‚µ¹°^Û¶VyK¾Ó–Ñ$™V«)=¨ïÑ?{知"«†€Ï³DuªÄpD*À¾ hƒªžšac©qÿŒˆŽ©F†dð‰Ôà.×Jõà³ËÏ>/Œ·È-[Ž ’‚\vÃmÐ -3ךÃï2•p´§¶…¥·ÓÓs=ëûì¥}úk3ãÆÍ÷»T»Œqñ¨"& ©&óŽ&fUDd^Ÿ™ìlKNÆ çÀS[ñêoÀ&ß,ŽÍч¿µ4ò´ŸöZV\kJ!«ÜnÝÜNVkos$~ã” žp©ÞÜ;¥×|ë?Æd‘Ïæ†Íæ-ŽÜ¿ûÞ›áâÿÆ«ÀÕix´Xú{»ª=J½R›e V-ÎXžÅZ(ªyá(8µýn 3N­Ê÷$Y±ä½³’rSON$V” …¯#)\“â´|ØÝ!Y|ç°Þ{xç)#_¹æ× ¡ãÖÍ–½}S£Ï¿ü‡B6a¼±!Hµ â½Äqè™ôÑxR½~u -kœö~¢íx‹Ç]ûf x@k;éŽl‘‰ìZ'»·h%Ã+Ì}CXšãšèaAÿ‹¨¡\¾J—kDg6lG?Ú:¢>£yòX–•좯 w˜ÚkDsÀÉ¢gÒÖÔ2–$^f®ÄR“"Ùæ„™…T²ûâ! šmÎʶ£¥±rÚ!Ñ ¼+æŽÞ‰Ñ“úhaÎ0cÏk;àå3¤q£çBŠe»T͘—Y‹SÁÝ8½¼ ÎBp°‡÷˜‘7)¾Ç$±9qÃÑÓ0ŸÊÁ^6èv–ÆT…TV0òÉ´¶x"pØ‚{ô ? 6ìýÛH¼F‡ä°±*ÞiÏ÷ðµ×~“hL’NûAǺ/0ï¶adÔ"P4„•ZRw»‰WxÃ7+,ôB;aŒ kŠ4ÒP° “|éý,ýÙî•IÆ«”šývLjbXTޤܕõ‡Ù¾~ù€z¹Nfm}˜¥}A‹Éó÷5ZïMp ÚO‹ÇxS…´yÜJ·¸'¨¿'=ASÛ½C[I×ÃÃ_®ñl¸U(øB«EZ[þ•I–oG϶Õj^ôXEoÏlsp¡ë÷(líÑ_;ÏÍßOÐ߄ɩ:—ø+Ù7…`Ööµ€¢ã´{·Ÿ¬,X,•@ŠÙÊû¬÷Uí6]šâš1 çã&ÿ褒˜fíäZô›Tˆ®¿‰dM]åY#ÿÒ|¥íÇ}¿úÝ@Ìnr§Ö4Ò£ £5© šÿ¶êô¹Á¨ÿwJ•t7íP„îI¿xƒ©c&F}w^ÒŠ^k|ç¥Y¢Gǰ2ee rÞ>­C*Õºm ø•|kŽ}JhžÕÕ>¦Á¤Ûv¸P(bÒ¢êhEÌ”‚(nJÓT;;Ú‰¡ZÎÒÓ 'ÛÞNCdKƒ† /Ô±â«;Úƒå-”0³.;xkd¸áèZˆFOi5¿óEÇÒõãr˜ÆvlIæ…Ïo޵e»‡.’¿öèì¡áœøå–¿÷û -«ˆO¾0ˆ›&ø Géö܈ö! ªO[Ó·ÿˆ h0Û-¶)ºñ‹lšë›&FÚ¬¦:ð–ì|.í6#œÖb¾!yÄ&¶‡Ï"¸:Ñ.p„üÌòú`,â˜N4›**BCc=íùH°é¦%Råg Ÿ''ŸQjÍ[–JÙÐvSžn\»éÖ Ù# ;½ñ0"–·¼bdña¤)‰»óf¤.‡j{—b›1Îè†;$GÏŽ‡Ä‚%>I¾ñ!¡1,hð’£PáøBeÓàóG¼½¸Å_Ðyè^'b÷ìÜ›£ƒWÕÎFpÅ_af¹ ì¿yE¿òç¶z<Â0ŸªMû]øŒW•B#MƒÖÖ<¥Sf){ºé¼p"u´ ë›§k ®ÊaÅU-›÷ -¼¢édãœôJÖë×Ñ-#¬—)ÙË\-î…9%¹˜ßwr K„¤X\ârÄN$›Nk*‚é.6_:gˆNV¶â,; -¨ n;1u½ÿ›ëît„w±.‹1ïP<ª6g61~}ä“ŠÒ ÊS[¹vq+§×5“«ž(óà=rh'7ÑÔôÈ*‡èҲȓ« ™‰[ªÝáµñ*r]­LëæAÆ£ªh8ÑE¦&Ùãelû}¾OYQIî)iÚ¸ÌÀ`Hœl.òÀ[H•Ñ3¼>Xsò>žéó§³qŠ5Ie´T;Μ$+Î6ëá¨e¾þÃbа)d_Ô$ ³Á2FÏÉx¸CÊÜsšf`Ú™9ß7gyçW58Z…V^Ò‡°Ôš-v 6ôimQ´,DæcZψ×~÷V%ôæÍ>xóû -¥mC*õàH}œ§E·~Dlp—WYôăgØ™Yßüñc–f}zÕÅ2¯›I¯`˜×ÛñXÐ5£º.ç¦=Ñnmæ¼îÒ™NŠÏtÚ•È·oÐáq ‘xDý Þåq÷áŽAË= Ü8Z:Â)ÔÅ»üÌÝ»áEµ®/0ASoˆòÊ4sÕe?Üú«Éuz‘¥•Q옯¹6ãkmSM€2dK·˜š9ž ¥jí] -1åy Ð&È»9…dO‰“.,ô—'.RŒ®k®P™ê¶!ísl~h—¯ßý·”“^Ê}%[=‘M¶ˆ<]t0K¤çxâ =ÓòÕÄ驸§îu÷ü!~_;êyµ1oqŸŒÓTmLmåÊÞ(š6xûŒ/…z:M3JÇ–¹(oçCÍ5oH‘û@FÇÒ·Lá2M7i71¦™áã]Eà’êu¢ßëp—×õØLkI Jð½Ÿtá§@òyÕëFKóôqj`Ì€ÖÕÀmÓ—Î]ýä¾ÑˆÛ*3W?õôÔ²ƒƒ³xtQ%\GŠYSp聯y¢†HOºb7WõÆÅ•—J|‡ô <«ø,*PŸ5?¨ÿFÓ\ÛÂl«GL`·ÛviCçMÁeà°3×ežÔ wã€6{ªrQÇIPç6 ·HQz¬`Ö)„\}‡f…‹€/É=ô¸ÍëÏ•Œs`¬Ñ<ÆÇç¥Éªv3ÓLsîd•:–xS¯¦FþɈ¨F»‚=ß#u¹AŸñÞç•®´΀¤²Ž(t‡<B…à¤íUžŠ˜õè-•±k6ÞãWké*©(HSÉž¢RL°Í«Z;GOW¹ÒWœ`0ká-?uÈA¯xq(Ãè~…­ã¦XÍúŸV¸ƒÍ]õÒçN®Ë‡œ½3—àa#¬.o—:˜¥5qÙÖ±lMþüqo¥½qðÞȈù -­Æ;£6ì=W§L£µ‰H ·*ñ¹<Á÷Þ(èmž}ྚIïQö`6Uz沇™ÔŸâFA:žÅe -aŸtÆ€_½ž½ÔV½Óª¡]@ÝnÇ …Sî~uÁŒ ?fþÎaX4M¼ƒ $§¨xK~~czbLg0ÓÌéH3ësUˆ¹S2ÉÕ˜j³SFõÌ)#ûò,go&*zSæiÜöš¯(äô¨‰ Q±¡}mаÀW.-÷–s4ñlŽcðœ¼Y?•õ<¨@Ю‰Ý¬F;µ?ç¬×bw«½Dš $: ¦ÝDWkû¤t±î7‡L ?™óëN—R+GP̸ÄÏéãÕxžÎ¤ÚÖ5&ìÖ?u^[×ÕbzænêþÖÌC™ù¾÷(7Î%ÞPw„ÆôèÃ1%¾t]T,’jÌ3WÒòa ®ø'*®J™lŽè§*ð¯?!—¶hs'~ l^»^ÈðÂÑXTÙL‡F$s}æO]  ™²<¿Ž•5ÄæºW„IµhÓ¤> -endobj -79 0 obj -<< -/Font << -/F59 63 0 R -/F8 42 0 R -/F48 38 0 R -/F11 80 0 R -/F55 46 0 R -/F50 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 /RZAZVV+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 /RZAZVV+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â²¢rIÖ™³01;CÃì¶Û"v5)3 ”Œ¸i -’b)—G5e‘´ ÙÊ ™‰ *&xk@}z¢Ÿõ«§9Î÷½ïyÏ;ïùø¼è8¡§—CM±B±H¬aZŒn¢ŸÆ@KÐÔ| @,—ûƒ—Œ$øT¦ú*¤2„Âè C¤¦±À+L0D’¥2¦£€FǦA§éHGcd-" $I;t"ÄÂLȘ .BÄb€ –ÃT‚B|†<©)= dÚ¸1ã d‚L&g -x ÛÎ$NS¤àPøDÑÜmóòoØ)®2’d”Î0$?œÔßp -´!ÃÈBhh2ÔHêbøÈœâ„Ñ0U³:’À”T* Pì'Býõ‰La†x4Ábi@¯#3ápRøH'\~Ã>|b” ññÞŸvŒÖ«µd@€þÉ®ÅÖ\H a‰¨EÅ‘[OvÉ#. §0'¨T ‘úÃè,7D\%V1 (š4sŽ}DÍrG—Ì - §dè]ý%À'uhÔ¸°8ùûŸ„†Òf«ÐW„)§Œú™]ñWâ"ŠxÍÕó ùH‡»˜‘a ÅÏ—Ò“ZOpÁBh†bo£±ÀU¯nª^]ž^v²b¬ szÁöUÇäì-]=8ñ Só>wÃ5ÇõUb§Kþµˆ/|p½ô¢{µ2ËfóÉiwµ==IPòIܸ^ìjÒ+£›‹š?c(|÷²ýù®ŒïÞfö_0»;òŠXVê~mcùÙ¶û7³ÓWž¸hwތϼ”$í̃ñ¿^ØðÍ`÷ºŒ¶okžšôI¿Û»ûás­é?=] Ï-ÒŒù¾ èÞxT`Öwœ@Ä[ÒŸ·/ùLþRœÂiºÿ™øâàðl¯`Ip]m„¦Ç©ó”@ÞÉ+xªUýöŠü…‹Õ‹n{T”LÄÊ=È ÛÜGÁªÃ †`êК®ª˜·'¦W”},ΨÉãǦ Üçߘõ¾ã­ä»wÏÿþ0×½±³ò¦í½Ø;`KˆÉËûªà8ê>öôZo©.í£Ë¬2dáyçy¹M†oC:²êîhÀù÷oNjÛ±v¦]‚\Q 6ÏÑ$xYkÛ˜nv/=BÍí(½þÛ‘ÆÜ-’WTa‰çSêµg½›+÷,›ïV¹Æ1ÙV«R•ͪu¢Û;C§ò‚ݦNvQ&uiAÚzû¡Vó†î´†¬‰ÒÁ;þ…­÷/}—¿ÈVsm»ÿŒì±—ÞñH_/êÖζôŒ9Q™b9Pù•íØÏM¸6K³)}gyDùjƒ¥O>>¯B^u]<¦8«á–²ö¨¾ˆÙv{E¬ìŸ-hâ/k©ìc]6Dß-M1KCêS ÕµkÀj’Ô¿¼L˜”ú 5x{ìÖmÖVööõ›ñî2DáÜÑÞ)wÏ#?ûáªÛí ŒÎ®áµÇíÔ劂sÇ.òÎw¶ºg-ùâÅàF÷ݾ3/F(qÕk­(¹Ô{ݨŽA>^Wj¨œÄÇ'u5‡êR½ìÓl·¯Õ·¦Q¶ºŒÜÕ*–ÿùý¯Êòã}²»Úçíõ籑wJTÜ‹êjr¶ÃèsŽwnæOëêgÞ*<½P¶¯x=òSItÂí’Á  §oºµ\[wâÇý¾½æab\^ÊT½igGÄKé‘G6„žÑ/du[Ww±jj__„ûzçPKT´Çþ QIÕðæòõ.{ܲšë“¼ÌeßÏÙËÚ:«4eFNÞœ­c,È­qs¯œh¤æ²Ÿî½0pT³í½R[µyÏè}WžËImíéuü`NCò,Ù¨ÖñãÎeN!˜0'öŒ°ç)bëMîä -'a÷!oQË/·±_N½Õ#°ô*ïöÍ)̽øúÅR‡µWO;ÚXØv=䞢:‘Ø®Íóõì8³«¿Dåé»qÿ’‘Çv<¼÷ )&QEñ´¤­ |–`˜RT—Ûôíi¿›ÁVYP¨iJ~ÿS ýQ5¹8[äÂ[ØòòòòOÑø!ÿ ü'0ê–6è˜täŸ'Yendstream -endobj -85 0 obj -<< -/Type /Font -/Subtype /Type1 -/Encoding 81 0 R -/FirstChar 62 -/LastChar 62 -/Widths 86 0 R -/BaseFont /UDBJWS+CMMIB10 -/FontDescriptor 87 0 R ->> -endobj -86 0 obj -[ 894 ] -endobj -87 0 obj -<< -/Ascent 694 -/CapHeight 686 -/Descent -194 -/FontName /UDBJWS+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 1586 -/Filter /FlateDecode ->> -stream -xÚíRm8Ti–«Tc]‘"ÕêµÒ2f0>ƪ|/%B©ÆœwÌáÌ9Ó™3 %+¥]­¾FtQZiô½”ò±v¤Ø-Ò®ÖD¬¬«RÒçÚ®½¶~îþÚkÏùsîç¹ßû¹Ïý>fA!6î }œ²á²¹|ààçÁåp8 O -(”À½ä®‹‹#ð—cÀÎpœø<þ xÒDSÀÒ“5FrîH¢B”Jh ¡!„…T"¸c;!ÁPÉxˆ°\.@P!¢a Š3lÇLùá"8½+#réûV<$e´)`9n“h“c‰"†ír‚ži/ÿ†­Å}ä¶\ “ÕGÅÿ¤©œ‚$ HâRÃà;wöÑ?J€¡Bw<ƒÀ†ëÀæ8¼«£2T‘ ”ŠH€Éàxâȇ>èøÆ]Ø®ôòð ±~µãÝ ŠS¡‰R8ÑÇ1÷/L‡D¢ -Îas8\šH¿ï¿"?˜æ Åc€ÏHRÈ —ˆF<°‘ P -´e[6NPô@³ ˆ’1v¯ŽvÀ6flÕè¬èãã_ñð m¸<`cÇ£•í¸ŽÀ‰ÇÙôwâJÝ ‡~^€Çqv²w±¯ -å$ qj|‡è˜ÞcJ' ¡ -·¡ëÖØ‚3_–¦x¹Q6‰%›[xl«º:CUèÊøÅuúäÙ–PhúØ Ã =®Ÿ?¸´ÜñqOnØb›ÑnР7ƒuhoÈä!á@Ä:íFe}í4ɬóîKÏZÝ1Ú_=éÛeý\§Ã&ƒÛ'–Þ¾õúIJ\jó½Ý=ˆyO>#RyqY\Õוóˇ¾Ä¢£¸Ñ8bïSÃ7&µ?·ÆÝÕ+tÙ¡ ÐZš.qè˶xv]¶Í§±»g¯u‹KÚa‰"“ëY²ñêw 3ŸX5çí\{²ÖüÊbfñtøÜZa@÷èäFÙÉÊù>q 9ùíš·Œéå+ž­wœ½åÉ -Ã53ì ŒsÒêô)Ý%ss?ÉgN»y|Ñ-C‘=‹û|.œÌÛ²3,ç›K†¶Ÿ¿}½:}SdM>“mírÿY‡¢÷/9vù“¶èQZÆo¿]š`ªä}_½4Rw}ºà «JpbeX‰v¿¦vbέ{¾Ö=¾kyf³8bSqÄ:]儸Y¯\ª¤™®5±zŸjvÛ…:ìÞ ¯#í*Šv]›–:œX—¬òÐ6k8=°#Kß«ê¥6SK9m½eÛã ïÞÏ ¢ âÔg’W{”Æs”š þ ŸuÍ!^™šþU`t4¹ám¦jw¯_}£Ô¤ÖáB¸êbWŽóÒa¢©&ØXcgÆï+y«Nz”¥Î]ã 6—ÝÑ¿Ä~ê|$³®ç´áAé÷;gzž± ǰtºÁ:ÈJýHÉ/œÉ> -stream -xœí[Koä6¾ûWèhÓ\ñ¡×e$Ø“Sv¦9ì,r[n÷¦åv¬ö8þ÷K²HªH‘ê‡`·›b±ªX¯Š”ç· šåòÍ*ADÞdUݲ,²U‘gkùó“£¢$¢¨ä÷Èä¢`9©Ë2[ ß//þñcÑdT.Êly{a¥””TU¶¼¹øOvùþJ®¿ìõçC«­öWÙ‚W"»Üéñ½Ùå^ï:;þ`Õý ü~¼¹Êþ›-–Âë¬!MÉ•è<[0Jê¼6b—wšx£?É5’ápП»õ´”_†v« ¤B·0õhÇËԮŬ„V -ó|Bœ;;Õý®Ç°‹îŸŒˆ$<Ï.¼Êjá³1Ö€Åðè²L΂9+XvϾƒ”9í>ØàÊ(²êPg°6ØÑ5pYIžUvù«=ÃÀÞèÏÅj×?`‰  ,ßZžÚÒs”’¦(Œçž7þ§Öw[+ÆxedÃB¥uÑoÈkì»^ù‰9‰ƒ2yA•Ãï‘°êTáÆ¨šUT ºWY˜Ÿ`>/ZùxÎ*³áa]º4luÆS/!9uq¼³ÃÁæ»2Á ¤„ŽyZÆÕC•ëPþàYpÓ¿ØÙÐLšr´&:5‚ìºø ãnguiÁ¢!d¹Á;È)›Îg=½±€M½ÉöóÒ‹žK^€¥Ü¿s - ÂsqdBh½2‰r9„{·E¦k+ý°Šå¬Ôô3b¿µŸÀ¾}ÂÕ{Zµ[´äÅÙ#éEe„¨¾§»V­ã0ê¼SÃ’¸2ªj¸á…´"•Ì<`ûËUÆ™­Ôú44Â.ÙŸ/áñ“«ñ÷;kR?<îìîeÜøœ»›ÏW–î°œ)þk˜ì,Žq8vŸ®²†[Þ¿âxZÛ5fg­§M÷˜è.hMxMýîB‹S&=\èKê¢Z+?>6ª)ƒø¶MQšÁÄÞ]¯»aïžu_Á»6Ó¶vÆÔj„&:§©7n+=h±¾sÁlúVZ‘5ˆ¹€EJ ænÞóØ׊0¹YÔ‘M æÄp^ˆ&ˆA¬¦hPfuÕ|tï p>kD5*:W1»½·–Ð+õ=8I<`mܲݭý–År®§Õk±ÕXö´cî‹ ‡.HÕØ(ÿ m¿\ÖJ¯ýöÝvmãaı=,î5‘ÔõC£0<é­§f`Å]q]ï0‚b«õÌËÀ*ÒJkvó± q•ºF»6tºTªnìžPÝp˯m¨›àýœSÒ9Îx¶ŸÕW@5>Ð kF^•d^•T,œ~+S'í€ -Ñ웫É4ˆbH¶¯È¾7£,EÝÚsP¿{ fV+|†òj(»k×aÂceù$X§n|b³{Wbå\‡­Z365E[Ðj–hv¸DË6šûÑž#p`í­”P—81é-Û–z€Çm.mx$Ñ“(áxè35?`už°ß6RPÕ‹ºMÅÕ(ìBG×Bv;[ë¦Ý¥VÛQQA!‚“’9àïp¨øI¤†… ž&ª(ó»cš¨¢Šƒj˘…©'Ÿ;.VjìÝ4º^¨®ŒÚë‡2¦»Æ¹¾ŸD—É?G4À¢ $jI#/éç-f´Å­¹Áçé‚ÎTríº…ç;ÿ\¤áÇôà³™¯fÏ93ªuШ¶«Eœ«rÐİI“Ï71yÓ¹ ¦;Œ¦Cwãô|sx-°Iâ­%6@u­ƒpØO”ǧ.¿m~g¥àjëq@þ8'Ž^Ç5 œû®—ÃgÜ‚ö4éÚð‰«>ò3eE7Ú'ÜÝœ}Lo‰“ØJ]Š) Ñȵ0Ÿn!Ôôµj”޽ZÕ5›AÿŒõsR•¼¨ÍQÊ,%‘ƒåéÍÂhÒš·(vœ€]kZ½hK²ÔÛû×2¼mMMŠ&zÛN¥!$@Ä/Û!íWÈ4×Ã]{1Ú¯‘6¦¥V¼¤lç -Cü\ßm2n­ÿgÍ ,Ü#†)qŽí€–·:÷Û»Yb#þ‚d¹…®itêákÁ-\!JÈ—ŸÕ<£åˆÉ5¢yJïý Iy8Ó¬¢è|p)Áµá ’‚ƒ|tpJ^O<ˆ-ÿ‚ã`ËìÛÌGà}ïæ4ì‘ÄßOg5ž|[È TŽƒVÍ" -SçÓbé^ žÄѱᤨét̉(…£ù8±çz„&-ê€ÁVŸR˜ºÝšj˰¶¨}Ö›KCŸ&OîÝøŠÕX±˜µâ'ÐÃÜ2cÅda5%”ÕG˜±8¶È@(䢢fAνiéIV -¯-=¼ %oÎ/=ãúdé1$Ç”<ëîþ©_Mv–ò@βo±9·sˆGÄ'ØZв·êKxSʦAœh}*8, XÇ»šTÁÁ:Ð¥ÀÛ÷Ÿ³0­=åÁôë"ƒùf}£È(*RˆúüÈ×'#ÃLaá]ýÇmËý$€‚F﯈߯Éç£'w­oXTžSr~~`ë“eHðÛЙCÁ[u†M5ÛÓ4¥ëiLg¨$:C¹Yʶ4UBÎQ~cM}PSÜ*=çOÅÐoöUØ/¦mËjéÕüPj*ã6³Æ]¸>‘å„VeÐ'ž•3q¨oÞ—¸Bë…ñšðmr“••6͹¹‰Ö§rÓ’˜±±‚O;ºÓm” Ò&L”$¯£µkaHˆF«Šß~Zk—þ*/‚8ÕîB]kÔuwÔ03d‘#ËȰE$±N”‘Š1\+ŽÔf ”ΖêO¾©-0¥«FÍ=ýtºMàè¬cçÅ.ÂèOXÉÍ>Æ GÄÈ.Œ€BÈÄ•q:–f±på‚PμR‚/@‘¯èyp5Oü¡ê­¿ß¾ç™-[ŒAÅ·Øâü }ñs3õ‡ÂÞ uià }Åå0ZŸ -cK2 cü²`zÓ æù%AH' šV”Tó=’¤ÚPÀ¦¾ß€Çí_‘¬öü¶8 -oGÁ3¥É£÷K3ø|´6'Âóly QÕu-“—CGAuè:QSÂæ<¡ãp8Šº$´¦¾çplapÄÛïÒ‘T0 1å|(4ÉX2$ÓÉeþUaçCeº®œ°Þ¶4wÇQö4§~¯Ž¢núâ5ø”–75aE<; Åb$ÑÊ!·³¦ TT– èÆ#Æ0ÿg*ìßÿîÑÁ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 -/F55 46 0 R -/F48 38 0 R -/F50 85 0 R -/F59 63 0 R -/F14 72 0 R ->> -/ProcSet [ /PDF /Text ] ->> -endobj -92 0 obj -<< -/Filter /FlateDecode -/Length 2362 ->> -stream -xœí[YoÜ6~ß_¡G»¨Xñ”¤)Zh“èCSмvx½‰åþ÷ñÒˆ"¹Z'íSX+‰CÎð›ƒÃ¡ònC‹ -þÑ¢DTmQ7-QJýnS—ð÷³§B!k¸4–’U¤Qª(ÑÏ6ß=mŠ–´Šghá’µ¢¤®‹³óÍ_ÅÉã«Sè~r®¯æþV_·ýz·¿Ñ?ÝõiQ -ÊŠ“_LëÖwæiëš_žèôå©{Sžg¿‚D”N"QZUI˜ƒçOÕ`"ÒÈÆÓ>–ÄY‰5oWf&Ø,­¯½Zf++l’T¬‰˜,–‰2R3†lv¥4`¤­BFÊ©6ÒѼœ‘â,'?¶Ïñù…Ó6Þ·H¯Î@·‡A …ð„”¼j Ð d«ƒå'gŽfa+V@«³Ðß Gþ„œòš?vó¾¾Çî‹î¯OÜø +wCÝ¢?¬cÄV0J¸ŽªišuD“rGòÕuÒV~„ÇÇøËwuס(z¤¿4 ­–e•ïhÚù‹zù0x ËV¯À¤q¤Ç¦{Ð_®ÐË·ˆ^R0»{ûK÷&åBÈ^òÞ1Ñ$½Ã’|õŽ/⡲ÀÌa[‘Ó–£Y¨ ›³¨ÁžEèkqfÍzRÆ$ˆÅò6Ñ$ Ì’ŸOðzAvÐû~;8ɳz¢I;c-˜?ÎÎŽꀹ±ÀÜŽM9æv(ä.ÍÓ¨ÿpÈ­9¤"«pG³Ðx,äR®÷TØD;ä·ÌÞ8 hÿ¸Ì®èŠC´³ -Gé€ ðÙœ{f¨üŠÐ¡aWxƒ^þƒ:nóÝ¡û›´lï0¾B÷[$çÛXw¢™nÕæS;æüÍ"ì …U¦{"jɆUgƒÖD’ŠY–Âð*îSçC~ýò„é¦F0ÒÆ¤ó­RÇÅ++Qo£ÿn{c‚O,`ùØ·ÌËËFäÐw$!ü³EŽ6DÂJ8Ãßèý‚ûš7¡rÆy ÞwôΜRÆ£(ä“ùÍ:¢Iš%ùj?GÛOF“ˆZÐLw(°à•h@ë >»(Š%‚P©`^’ÚÚÁŸg;ä¾›§ªC¬ô7ÆÐ†p¿5}jJl¦Z -lfKÃÖ½´[~¿Û7o?š’Ÿ­¾A¾`è/¡]Åà§„]‘ÎLƒ-j¾ÌñÜ›géó}Ϟ늵uGÑDeñúýn‡7P6CñíxéÚ¿G^~î8õ¶ò9à:é4‰ó@Ìè"Gsï™F×:<ƒT‰Øf—÷©‚êp‡fð]gÃcÃMQY»«¦.DÊurö$ýÏA|˜ámS|„ûŠÐ¶-vNÚFÚ§ë͋ͳÉÑÜh%.<aUKªšyŽ?Ãó˜`°z_/öĆêãR¾¯[¿vFëz ÈX±Eë¡­-œ£Þc9üÞ=cAp½ýº?Ç«Îõ\¹±i:Áv[kh;çHß̃LE´’rAÜ—y7Ô!ÞíõHƾG½GWkô8"“$K‡‘ Ñ2&é·Ù˜ÄŒJšˆIšY"&é6“ô3ŠIúy“¤ª²gb’náÈvžÂ›…#ÝìV[û¬ñQïu— *E @€Þe=-ñKͻ̠t¤&^©™WekCRÌð"g\'M=mÊ»ÑOD]éÌM°ß¹÷z÷íÉWEª6{©Yß8•Y ÒG‘csf´‘>ØŸW—ÙcH‹ÐÊcÈy°h *Êú/g¤Q®@ôÄÖ.®œÑ©â:>ƒ”©r)ÓÙä&œ 4_ô˜×˧ê³#LhŽÊBÑrì×ÝÎyyƒ2ͳ°?¶vïfr˜HϰOM¼öhìñ­‹MŽÇå-ör3ü@Fm -PþïÈI·®Ë°½s·û ÇÚ„ÞŠˆg*\ì™ÙºµF¤ÌŒï—Sê>ù‰ó÷E¦±Ýu³žŸÞ¯VFü‘œiL£ºk¤B¿Úv}oœ%r¹ ¤“Œeð–¤D4:¯€p~láHÌŒ^V´^r´g¿9Žîx8äØ,ŠVs†é`ð Óm®ÕÖñme¢I‚bIÖ€’áèA 8F@™1ü?àƒl4ú ÀÒD“É’¬)ÃуpŒ€4cèÏ¡Çð=‡þ<”XÃ`ï?Hp(!šJŽdJ9Ž¥ã¥9Ãß²&Ii†.iK,WBR«LÞ0>E¢²)Ò›f›¶ =6m¼êhª¬n¸ßõb­¢EËS$óc“”˜¾òÂÚƒi\¿‰-ô’²Éi±ˆ PÉÙƒù—úÝgHFX%üȺlP·ót¸ÇÆwhxO+flÅ› -räWô!RW{6ƒßÏgž˜Ä󉈡`Ë\{|vw±Àûû4_¡`Ïg8Õ†˜Z%|Wÿ1ÀA¾¿dÎ[È4QV?ŒéÔ÷ú«ebf7Îv Nц} > –’(ª5áTT§+3…ßNiŽ/L M&›äcÜçc‡¶To•R1BcùåÑ$c¶%Y³3}Ì8FböŒa¬jŒ²Ñ/²ºQà,D>@4)¤É -¤rR!Ç%Rs†/–±*Àå]7 Fª¿WÎçˆ&‰”%YƒT†£G*àAjÆ•—PÖtëÜñ3¾m]£„ ÖĽ=ŽMGK²Ç GcÀ1‚ãŒáÿöÙpt÷Ÿ‚VT„VñO¸<´MZK²Ú GmÀ1íŒa¤2¥ÖW¦ôÓq@âåu-šmC˜Ì¯!É¢\ߎ_ Õn33ùÄþwˆ%³g›e6Ô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 -/F55 46 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 1640 ->> -stream -xœ¥Y[oì4~ß_‘7Z i|KbtàÁAEHpľBénº­ènÚfK9ÿÛãË8qöÒª:iìŒÇßÜgzž$+ÕÉj^ðRfu#‹ªÙj»(³ú÷“§à¼*¸¨Õ{âc.hY4U•åˆÃ÷ËÅÕÇ&“…¬X¶¼]¨/L°¬®HQ×Ùr½ø#»XÞ]ªãÝe–3Ʋ‹gXþYnÞv°Þvê…6ÙÅÞROø`~µ{óëÞ<{83ܹ=Eý[î–[ |vÌàø -lÂ=­âRgÿˆ6‡öÁ1XÙKWÜ´ïkŸcÖ÷N¶×[Œ <{@ñzT³qLÖHíÆÂÞ—Ù_ÙòçÅKo+kQÉ¢áDêÉ+Á¼jCIJÉa¿iô‚¹ÏW×[’ýÐ/>©ï–mŽøÎ8€uÑ4•õ€k­Nµ–@,ÈØ®ŠÐë«7K>UŸÙÄç­½¬—³>Û>6käeR¯Ì™Ó*ÅBÛ÷kMÇ…z{ó¿;/Ñ`ÕõQˆ *T´1­9PAo?:°×$­ßÿÊ=-o¤bA ZrÏÙLêèD7¢Ì{8H -:ôTÎ()D-³œ(GRÂì¹+8ò‚Œnœ¿ò˜º'DqÀF–rVQë#¬*6áúaÆ“ ժ߂86Bï­;djXsnΰŒ+¡Ù› û­{& +Ц¬<çvçÔ–€AT -æow¯©ûUö—Mp,•WTÎoâ^…¼ÜAÉ8ÛVdâ‹Ö_TR(•çÆþ2®šQîæòJ¤D]>< +®&iRŸìoñ$ë’ƒnn>{–Á÷z÷-ÉïÚ²Kûm{ƒ²»?l @GBYiF'~¦í0:ÄØ<ÔGdíý%ë³t‚ån÷t(yƾåȰÝ@¿ò}ksk5}Ü—ÐWÆw+gïcYQl°ÞBÁÆ»(Ëx8ØzÝ¿ û“'ŽTܵœœ×\ù&¼ÜG÷NÈÔ\Žl² ˆÎ›(UÉcIÙ³nÝKÂ#€7u½|ýÄ! TŸ§níø¿Z‹îé|‰/nõôFÉ ÆÄÁ-ÉäF$™T’jtáõÛMt}Àk]/”Ãí¹j?$©œ5·A¢UÇTqã@îA„W¨¤M1ïÝ«[Gˆeœ¨ËÃU‡¹Ëíìæ‰¢)øÒäZn/ þ9ÞgM‡äüéQèƒééPpebeF™~— ‡tv8Dlg†CZ²‚Õ®Äýˆÿ±*2N˜fhUEê¦Õñ Ð0:·ëMkë ºüäŽ -áo7ƒ;~‹qñ¸Áxö‘•¼ó§L/kè±y‡G,kÔN]Àxo‡nívLënø&}ÚØx Î—ž)8“qΠ$V—ÙÀ‘Dg’ŠÇ|ņhÝ&VE(Þ£Ñ:œî4Mîzi‰Ø;ÈfM£Š©? hÅŠÃép’†[b®0Ï÷6%A‹M“ìßըћXðM]¤vÝ´œÑ±û1ÏúÏQS'c“Æ£u/'ÿÙÆ¿=•SÀ:¦k7ÉVÜ©ã×8^•^XhŸôfçö-X 6áœhxTá®h5êx… íãþo´)1h>˜çõ ÿïÌóô<Š„¦¬&h;—…FÈ?'ûO¥mÁk¯Ž´æq0ãT¸jý]@Øz#íÅ¿ð®fNž“ôX) -BêѸ¶jmb¾Añ,lk£Ðpû–R…ñR­™ zÁÜL¥Òt7§Ôwjïñï0Üéc!• 6Þ¢¸AˆkšX­m>Š6BMVÏ|Æ©Mœ0> lÏMïEëÊÌMJÑvNc7a7 P‚f¸qÊ[æ\ú@7ƒ—Yë/‰¼(É{cø‘#YQq'X ç Ǥ¨™Ýt¹¤~Î:»€™ÃèO÷’„¶>T°)$:ÏpÛ°Ÿ¯±­ãÖzm¨Ë¨GD¢ÍyÉÌ0(›‚Šæà,HÆm.•*7¨Lf)À*bz—ûµéeŸÿZíì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.6 639.01 215.92 650.128 ] -/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 -/F55 46 0 R -/F59 63 0 R -/F48 38 0 R -/F64 67 0 R ->> -/ProcSet [ /PDF /Text ] ->> -endobj -101 0 obj -<< -/Filter /FlateDecode -/Length 3687 ->> -stream -xœÝioä¶õ»…>µöbň—ŽôÜEÒnQ‰ë4vƒBË^·ÏÆšÄõ¿ïãýHQòŒ=i‚ÅbÇ’H‘ï>©ŽhQÁ?Z4‚ˆª+š¶#u-‹Õú¨*®áÿŸý !j"d×™ÁR²Š´u]”h…?}öe[t¤«yq~uäö¨)išâüòè]q¼ê·'ðþñp½¹×'EÉ9+ŽÍóþZßóâøáƒ~p£W'kŠãnòûŠ -=`Þ_»þN?¸Ô÷~Ü,5¸¥ûúÞü06øÆìé uo™•‡wƒîñ+ -5Œ”48üZÿÆØß¦ 'Å÷Åù_¨ EI)餴ôûö¤h…Š5µFTmèn Œ›­»Pôû™{Û,ÖF÷úU@‡5rJM´Çh§jF6ãà—Ú\¹E.ǘnË~‚AèÚ­ra¦Ã¥_÷n¸~µFÄjcÖ[ SéamöĘõ÷n®ÙçÂb7¬zƒô8XŽ•Ëj˲ƒ•–£Š) Ìk·ARÕcÄ:^Q$âH¢+#FpÁýºV¬ÝøÖK„žeaÜj~oÖ–ÒV«ú[É£ƒSþÊ‹7^é“zkÍõ#ß[7è9 ï°ˆéHÄôýÆ“~ËqkV{tp2·í“ -¨ªT -¥[§w1r /ýÖ¼jYZ%ú÷€qµÈ\ G·ñ°…§*Ž×Ø ø§^œôúà”h¸CQ7Žº¬î¼øW9ñך2Z¶ÜyXÙ.°Zu­bTU>ûâí<ã‘L€c04úÉáé÷øÑA¿ÿBë=";<øµ‘ ‘ Põ+#ë>ÅÙpfðü3Sî„‹ÿ Ù¶ñÁ“ðÁ!åÐ6^ÂrŠÐj딟uàï˜Læž@öQƒ½2à_Ä< Î#xK==Ò‹X„jÏ_MƒšÏJáÍ •„ž_ß²¹G»ÿˆèå¢7jöëYó[{£6s]ÓØ£ÔôùÎ@-;õdìwM¾[Y·¿ƒ¾fU?…Æ^ëÈÃ\[Iì3cÙxSIG-Ø(röl*éÅ#*éÕ´ÍØ;<Ùƒ|J.£˜SÅ–ÄàðêvÚÈ1î5 1<þùÊÆüÙøaïí±}°´¾t“†dÌm˜·Ö¡Ml´0)2þù;ýû}Ö¼1ª`8µ&VÀ„s¤F)™¬p­‰D>¤íQÔ¬'aåS÷£7+´Á2͉Då¨&Z6ÍÏA’ƒEe’§Õ`5‰¢XÓ:F&²ì{}Ñybç¥ÃL·¯jTyÇ-#U$åQájB‘Ñv•È¢¤a]däw -†®ÎùûN['…þÚ?èó.[¶š±g3íÕ€·Âûçgm[{ÃýõfñwqHÞÆX#/§†rJ‚£Ý_dF‚¬‡´•ì8ˆ_ý‹;1 ÆÆë@{ÇÓÌ£@|\Ð9˜?5Sæá§°èY^µ™áÚM> q8ܽ]ÏÒï¤ a×(µ<À9I&ÃI"–¨Ìýü¤PV~ø¯­oÓë3NÚÀ)a¸ÄxÞ 3rçÖFìn„cÎ/È„`Ã}Æ.™i÷N¬ýLMMÉC¨ö‰õˆ©Ê/µ CÔÜÓÚ@cZþ TúÛÄÂë8 -Y=˜úÆW‘ˆù³ŸóîöÆÈ¹Él©žƒ™¨Úôx§9{á«jBE¯êHݺ¦ÔšÔ9Ž%À³lR–®ˆQÚÂïúÜb 80Ú™ p6l³…Ýs/}ÖŽñ*Ø1„¯€tÝaP°k-`À)°À‹qø;ÒŒíð™þû•ë@b…™êŸH=º_D='Ýx˜é3Ê¡+¦]`LZñ~ð„0ÆnûI“éL€ÍžN“3 -Š0½†.’Q’-JžÏ*Þa@sš—B©ž9pvšFSw8t-sýÆÁåI¯óï¬KÜψÝL|¶zetü0¤ûÔ”v`a—”¼á¤b.þzå”mVyŠQžÀ6£;€ovê>Ò¨9²Œ|j[K"e¨ƒ-¨ç!§0Wö,Û»æ•$m+UÇ`ž÷V#êDaK¾“Íâf}¶49G]iA_Fª•Ú€PãRå> -1ÆÛ™£]àñ[Aá{ˆu/²Ðq ê2­íEßš0T™Ÿp ) ͦcæL8ƒ蚆¼¦¤ªÛ|ΛiÞÇù?>™ŽÎ–ÎÈoG¢Ç+§™:±*µbd2PoN¢çŸš9åœÐ†/šSÑ’†¢ÃTÊï¡Èf½`ZÃê1­ ÀzÛAû†ð7óæï úè$/gÜ"ðv1n ¼2®è R–´?€àíÅG£"Àju\G¹JVN•ázaiMfòýÑpé¶*…:MorÏý¬B»lÊÔ¢MOÏ< m° |¹påÍÆADä—®D …g`ÌeÖÛ9ê;•N¸úÛ“¢óõÙ›í ZHè¼Zè@Ý#‚„îQ€A=¶Ç6Å-$wÚq÷FG¹ð™•ÁWÍ·fOM&-$ -6%„ß"âÙ”tÚE¢{v‘ðÄM°?¹.’&Õ¤kSEg³5F»tmÐ)Ó¼ ªÄBŸ8z¶[£¡Šú.öÉórö,V£BÜ´ ´w[†Sši¨ï9viË0wÚ{÷¶Œž‹Ú2ú~®-Az\ð­B[&éÈè¡,"ÓŽŒYw©Sª–ý>ªÕFKá<ê3‡ £&‘+Òõþ£§~f®nRt2ja1:o3"߬i%בµ¯ýLN€«±­74Ò/1f•RD@Æ{u .Œƒ™¬ÅNþ¦jIµ¯ÃɼsðÚ·E¥dª(«’ó\ªÍÜBzÅ<êä \×ÿ£s . -›í¢T ‘¢.Å^T&צ,î)ϯ^–À‰T2yY¢€¶ƒ^ÚJ╺@¿¨™b—[D„Ù/ïbD^ÜPá ©Ôaâ–[Ä„‹†°.Aä¹§‡?RŽÝûÃ+‡N9^ZpºAÛŽ4@ \–M«JÀÈ*IÔGyI*95¿™×´ÉóAîÔA•Ľ0}w"˜bI ‡8X$ˆ§ù{)>ÎÕnfþäGôÒôpRNnòQnų©{Ë£Ø;|9“@6[7îÁPI¶¬Úé'*(hDqËüÑ_œÁ°„fŽ_eTõ Âò+ÐÔ’vD}¯^v”·<©Çº4½k “ùo¼:u®¾)ì C¼:Wý5§°’Ûìë£ÿ‡}/Ãendstream -endobj -102 0 obj -<< -/Type /Page -/Annots [ 103 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R ] -/Resources 110 0 R -/MediaBox [ 0 0 595.276 841.89 ] -/Parent 2 0 R -/Contents 111 0 R ->> -endobj -103 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 1 0 0 ] -/Rect [ 268.485 652.689 347.109 664.549 ] -/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.493 652.689 443.776 664.549 ] -/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.085 473.955 201.31 484.794 ] -/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.91 473.955 521.862 484.794 ] -/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 462 108.91 472.839 ] -/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.967 237.253 198.662 248.092 ] -/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.743 225.298 266.517 236.137 ] -/Subtype /Link -/A << -/S /GoTo -/D (readable-iterator) ->> ->> -endobj -110 0 obj -<< -/Font << -/F48 38 0 R -/F8 42 0 R -/F55 46 0 R -/F64 67 0 R ->> -/ProcSet [ /PDF /Text ] ->> -endobj -111 0 obj -<< -/Filter /FlateDecode -/Length 3596 ->> -stream -xœÝkoÜ6ò»…>NÛeù¦˜»+zEŠ¢hW )Š­½q}°½iv“\ï×ß©!EI»^.Š ZY¢†3ÙἤßÎXCákŒ$’ÚÆ´–h­šË»3Ú\Ãÿ¯Ò)5‘ÊÀyåæJqJZ­›‚ðÏ‹³Ïþ%ÛÆ«Esñú,N¢1¦¹¸:{Ùœ¿xŸxÒÞœ¯ßø¿Âqý‹ÿ¹Ýކ«~~¯¸nÎ7 ¥zlUD(ìØüXC¹%ƪ4änë šæüÊÃßÜöüsd”~ ÷4-{pІ¦|ñaýTˆ¯ñaX -+HÝDþ*·aÇ¡ -¾ŠpÓ#|¹½÷ƒ/7o"ÓŸÛ^ûã§î"`y^ðr¨¼Š¬ç‘Â0n‹™îþ®s™qbä1Lþ%®ZBŽ×‘Ç_lߤ%†+Æ] CVè•0œ0:ű€K»Û#! ât‰ÉÉøïY"ø`IᢈlÛÞ¢'€x'8»ñaùþ‹´(`±ÙízVFAr¬ß澇•ެo¾WÅõ}þw„¤ÿr?IMǘN¬6 Însn܆cf]îHÇí//’ ³‚hh˜!LgÀ~Æÿ÷®@õ¿>£Dضùç”0k›»3I[B™íþ¾={qöýƒž‰дæã“ûÇ( -gÝøΪ#eeÀF0˫ƘQAÀjÀÇ»Œ5vø‡°¿aË×­êÝæ>ÀÞ'«ýêüæ>žç*»¿Ùöín»‰ÂÙQj~âïµ{I0ñHºÃîÜD‚^=Ê‚¢Œp [UÏÀSÖCR 'á±G-½”hiËI+Ú)ÑÒ< Ø—£V­Q¿âåŠp)‰ð@Ó¼§ÁMÒÁ•$ -¬NÈ›ý;„’΋$‡ÝÞ-h¿"JÀ: –k!J"¸IJ„„{@ANÉw€qR•NI.±â qLQ"æÏ£(‹Ù`ÝR"ÛÞ!Î}8J(k%¡&ú•7ÈAÜ Iû­Ó‡`z‘6½:G—œ ¸ˆnAÍÄ%…êñ[F¡&èåŠ.WNï{d°“s0ª5Ë ÛkM.VaaulíРὫ¾MTïrô.Ir4ß¹[ô.YÊ£7Át^Oí×äÛ8OmSaXÒÌe–i¦} ÍÌ4жº¶d|º˜H+M˜ÑÝŠ½¬Æ2à×ë䴻킔§5ŸCÔÖ4~æM>3…¦Fo(…7a –—õ>Ò/6k½Ö†“Jˆؾögº¦a½ÖÖ›%øhÝÝx{Ýü€âö8z…†—L-!Æm°óÖ†¡Ÿ#äùWŠ-*9¾Ev!Ž™ÂRHKøË>ºÌ«[ Êȧ8zƒbÀàßOšVFŽæD¾IØÒM;ɶnÈÎR*be[à\‰»±´–ÂÛå¶Hšc(ˈ¶e«2îLœ“ñЦJJ,ëuu2ëà j=ë0’pæ,Â&U „-ŽYy¸+´=ß_Å`þÞÛ‘á4ÀeÞ§úìöÑVÌb ò\qEZX·0ø?ì.ű¾}×ÓzxN ®Ûo7 ¤Á.¦2FÌp åß„½>ÇÁIlPG­›6ÄÒÞ$×Eà½åÎ_šP¸¨R8’…­8Nñ±k·­àÓîáLß#à}ø«¦þÂ]¤™C[“•½d¥ˆ¸p×Hñ2\VKïub±_² :le˜äרžmâ2% ¡5øV²°ØQ#yŸª÷„ž¨ãìt4£”Œ4¯ÙaÖ[ d; -«œƒ›t€$´ ` òjÏ,âGZVÊ%êGrùŒÃ†!%¬KCó«.e4Èñ2[4Øÿ ˆ>U„äIæÄqDäù¬°ÓNI>ºzÂø‚Íäê) Ú¶ ¥h¨$œŠM|Ú$î m -:†š`l€hÓ¶…­94mà Dƒz)â°iÚ ˜áΤd´}‹lø~ó™ÿ}†×§S±‰œMÒœEHÉç ÀðP¡|õñ`Jºñ£ª±3Λg9Ή€ÍEÁÖ«Û˜8ÿ8n³£Jу<Å^+&PäŒelâ…Gñ£qÉ^Ã(ÚS¶ŠH¡‡ÖŠk …Þ)ò¨¸šài²ÞÓ¼Œ;Q­¨'¶:Ì·9M?£ëx$†tñïþø£?þߢã{ôláÅàY°qÊül;JZ[Z~Í|¯*×#U/K¶á=C.ùp)Všªh‡³-ŽCݵóίÆ\ÚWx×Ïʃ¯(“ÁUÄþWVnŒ^ØJb„)hÏö¯§uç™*X"h]?%*âÅ«Œ½uG7Q+žc²ÆË¨ßãû1ØŒRb¬œHÔI£IÛÊŽ½ÏëA޳fH³Gjð-%NPðªYvÏ3"0ý‰£WhxIQ ñøì?"ûõ‚Éÿ"ýÇLa { ‘\XgaÑýHäÙu%å ‡ÏýCŸ£úÃp±„ë_Z’ßdyCëÕ=pê÷x5=TÁMpé¾M%ß›óED©Q¹D‡îân}—η.úu™€ÿ„1¡UÁ±«bfAm¬)0«ò„^Ê30+·cŽêˆËΫeuD¶”XjÔ‘8zJÚJˆ3™äμS [T鶬)ŒðZÁÔh v¶­jJ³Bƒú Ósà_rŒ¦h-¬)èѰdwo—nR€V™YbÌ¡z`Téí&ó/Q|B¥ª¾‡dDœÓƒZê”K µèR§&ÉÈX¾\M«‘÷&‚Ó#úŒÏ®÷X|îbØUâsY+KŸlɪ’ý3”t}îkP²’ËÒÔ÷˜]¼™Rvyï×§Õ•‚ÚÊÙ8mªÂãf['Lçªe5•ÄÝj -Œ·mfü7ŒZQ *L¨3Ó­JcîmÎõ˜…Ž-i(_쉫© fUÈK޳¡Ž6ˆ<—fz…`H¿ßÖ¹ Þ=ë=Ýz±äÁÌÜÏÌ» –ï&|¦.… ÆDµe¿ä¯9àCy­!Ò03»¬c5›å55ýŠÄ½ÕÀ£îSÊ1«î1ç£Çº|2Öeĺ¬åÄ0‰Y\v’Öva—qè—®áN{ëx2¥åbÔ)ŒõÍ•óÁŽÓoN8R¥ª´äB7²IÂ>JZf‹úâón7thNt|†åš)8ÞÌ^¨Ÿ»bCÖƒï¯øM…k1كϳ|?ú¨|ê[R& ‚!í!-øçù|×å€\ÂP3½¿ŒÜs5Ó SwH¿î÷ƒp“[~\ÅÕÑ*ôLÉU ™± ›Ü˜˜J<.{óʱ®7?.íÍwÍBv–ù2ÛÓë½ùžùÏb?ûõýÔvc$¡²Lµ•]ìyŸ¸’™ùF~¾|#ÿãõð'yP#ÿÁ=üÝFB´àÍȃºÔ4#Êu(Ó¥VyfñþÑŽ”•àà™)[-µRVÕ‚˜ë z±Z=6uZ÷~V¯º¹F¢ŠPì¬Ç ø:¾ÝŸÍ·û Œ âõI½’Ú¥rå1]Ìz)d‚Xª'¥ðùc'À©µdåÐiд'5'h“TpÍ “¼ ãÔf ¾Óµ!Ü$%àçºp/'äÈqÒˆ…ðÆqX÷ðŸ^#(L¦êõÍ–ÓêF¸·‡D,o~âyýI”¦1‰ïÁ."ñXrž4/Ñ \¥LœDy {Qž@Qºò$•Š¥Íª–Hýñy”ÛI¾"æ¯'ß®ý„ÙvJ¾!†€_Õ§Œ0ßGä=K×*K FN„ã;%ÔÉpþŠ[>wEY‘' -€{·DÄXüc´QΊAü/+e–è"LB 8QBO -ný",ÛLó~a‡î†(t:å˜Ò‰¼L'Vı'ó”®¾nÓ-™Ö÷Üœi>7àÜ÷á'úgµ´@ ™•03éˆ -%-Ëì]pˆ=rLŸˆÅfâ.o…†Þ#äÖ5äN\ÖŸð¯Ç½‘EVîú_€ÇWÿLq™05ìzo¸¤þ½–ÉÞ8ig¾1bH-gîÂèzãðÆÙçoÂè>l¼É!Ûxã1=¼À¢µÎñ/Û º1SX»æ.uõ!íÌ· % noДî-àbfá`øùÛÈ m­1Äs¦òBLž Ì_‹™ùžŠ6ššƒ°ï1C -~Œ­ˆ4¨«o²JÙúwZ锓bŒp²­2P!ÅŒ%MAø ¥qÚØ¦Õ’!ö,­Ô•Œï˺¤˜êB²tö“DÓE¶Âµ­û{ÓÉIÎŒ½ƒWhôÀ\äðf_f☶<>•a[¶åuc¦tîûœBŽå¡ÍF½\Ä•þÖ¯ªœÏØå®uÿ†ÊÂ1F"¾f$ÀA22OÄCM…ñ´seS -ç¼ÐÅ𡜛T`a8¯Þ}Wc½ë™ÔòƒÞÕDÞT÷³b -Ò}gó–ú”Wå§Ìü' |QŒÀŸ2ãòÈ2ª ºÕsvüžf¾Žêɘ¯£*÷U„~#zÑa]ª¿þ^Iwᘺ©…}Þ ÷jŸ4ã•MûXV"sì;¦àçØphÁÏÅ?÷÷HÁ¯{“ʽ“äÞò˜,‚.÷)/áè2 ã©êŸÑMî‡ L°Uþ;`݈@¡©d»/'ûþìÿn/™„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 << -/F48 38 0 R -/F55 46 0 R -/F8 42 0 R -/F64 67 0 R ->> -/ProcSet [ /PDF /Text ] ->> -endobj -114 0 obj -<< -/Filter /FlateDecode -/Length 3231 ->> -stream -xœÝ\[oÇ~ׯؾRŽwî³MS vã"yh“Xâ  ¥•L@2m‘Žýï=s¿ìì’W±!©ÝÙ™sŸsÎ7ë'¸iá?ÜH†XÛ5RuHÞ\Üž´Í5üÿ0‚1—ð»rsáï.°B”b=æãÉÏÍ/p÷F~wÒ"Ú©æ~·w]s{ C+÷÷ÍÉë“ôŒ§¡…Å1ê8ŸXÜ<ÖÂDö—ŸÏ³p²XHÞ!*;=Ý‹ó“篘j:Ô Úœ_(†D b®ðæüÖ;}}Ÿ®Þ›¯kóyÓŸ5 ªhsúýYr9]nÌõ¹LšÓo·ý¹²Ü®Í÷¿ócoþþh>?Ù©íÐþ¶‡5(ŒÙ†yÞ˜uíïå¥f?WÛ•8ÜÖ ¹Å-©ƒi—oSê'É\¾÷‹Ù¿¿P½¼Ym-ó¿ùA/Í ;Óí;ÊÍïW~sv<ÿîä›ó Þ)„ ˜iÔÌ1Šæ„"Iš…~jj²Ç4YÊ‘˜¬/FM8˜Oš,o‘ÀÄ™¬ÕÖÌç¯Xm ÁLµ *BH‹¤ž4®{ ~ºI>m‘êhÁÈýöSB0öskÑ¿y´PN‘˜‹;Ù$T)ÔIYpñ¯œLËËÂQ» jµtŒ5 ÷È2ñoãlnt ‡ipêo—ÞÇW›¡Üu³ ÂO7) -Fuí -Q|Z “DÎêsá„Vg³‹çæÛEÚuòü6ÊñN"¼HgFÍÑ(4ŒþxQH(ÇAÙ`ƒ1 -‡+°/Ì#° -øÂˆú ï¿cQ&™w–(3E'!µR„þdH|6>æ!PêÑÂ&Z³8_Égæ{0'X_Îf¶üÅq[ÊÇøj랸 ƒ’Éa“&* Y…ćÁƒÎÏœc÷WÙ_.-é}2`¯~é}˜‚ó²Â‡uÌ$¼~³5£G¨45MµBŠÖ¨¦pûT¢9¨ -Ay}W%Ëv‘ÉëdRê¸t²Xدw.Jö!ÐE¶™í)D6í0b‡Å5Èö9#SqMH…ZÅüÞ|f„М~e$þ•ÿóíDŒ‹kAq qÉjár’/Ö`൧¿Ú/¿óÚ]Ñ|æm-në3úŠ9 RE¯{›$ÿk?×H@C‡ÇÓªLc80Os¡õÝâ.éjn Ædj+û«‡‚Š„2Ð|‚‚¸° _}Ì2Do{wò»^;Så®Í’:AÕ™Ù½¾J "×·ËÕ®¬i -¡eÞnƒ€ì+5\À'¤äepùÓþÁ%®q É1º4×¢KFó‹.óˆÃU{S -¤~ÊRƒVqoN­‹ŽïzP¥âÒ휡ù«­"Ÿ³¤…ØjÁ!ÛËÃiŸŽnhÇè°I&{ŸwWÜÈzuÖt"wé{ÛdsMíˤ©GË Ö4ôÐ>3‹äw’Xñ盕u -t5¹¾±Ýc]´ªtúÃý_j)lkQåýøkCƒÝÞ%Ÿ›¿²¾ó¿,Ñi>{“˜ÿ"x¨•ÂÖF„ØÅÕ¥~_¯[‰ÿS½3Ѳ˜ußj@D纗iΈΪç0›`q:Ž!tà0؃”–Y­ -­n; Ö2cÒfèúòr46ܘ´XÑ„!æ±íºÚÀƒEbLÊe*ƒ^ÀV¦VĶ…ñg}Q[f!÷I„c[,8‘±Œ¡æh%Û­‘ØÎ¸íût€¨ÙHÍt²©œ(ú0ÏÆ -Ê@!Q÷––‹ nº.ês.PÇöÛœ˜0&zÐæTyæÑÊMÎt -)äL!IÆïºÉyëÃþ˜ ¸wpïÛÛHý>¡{›;ø*ÃÊéŸëX®—‚èòO6‰F*߇UÒZyò¶N tò §‘ЋŠ3 ¤j’uj·¸é&ù \"Κ3r,*ÎZ‚$Æsqâ§›äDïîd=9'{ÁÁðùÏÄi·Ž‚·ÌÃQæ-Ÿkg˜µÛÁ[}‚kª ©+5%IÌæl£ÊÚ—îf>¦½œaœN5²‚ü|@(®b·ÁÈç /šxN_jà-$»Ú3ò¬¯]®2 -_*K›Ou\°Kº¡·K›È™“Wºèxçwå´·ïo.͸²Éò>«ÙÐ(Ñ`/³oWê” Ïóì }%µ -þ8‡ðŸ„7:,t¦³LÔÚéÆü‘uâúÊ^g)œÿ$óu–»ãÞsBwúãL$œ"ÑûdNâÝHO~Ss<Ú!*b ³Àš#CE¬x3 ðcŠˆÍT­¬D*pܺë˜È'4ܙ̴Hë7UN ’<Öö…õÒ³Ô¹GrêÒí&?,f²Œ?b¸Ð·ÛÉ# -L€au]fVÇc*Œw!iKé*ùì“&gŸlBÉ•”†]؆wQ.ó„»BΪí29›¦(eak½~_4%ÂŽ;ýõ]R(Ó‰>¨½ë¤–W,yƒkQ´Zxf±ÏÃy¥©Ây¡8ß`IΘßzʽ÷6Ýè5-0¢-ÌÎq9F[ÖɪYõûÅ,:&T,g8~÷$¢ËœÇŸh…ul2¶h`ò™cËŒ8(Ù'VD>ç(TJ±ÕBE&¶à ‹8¨†:Ó“«ôã!74÷ÂûDä)ªôèˆgpï9ÔòïÞ]i|–.Yæ–mW?ZïÆ‰ûÃh/V.„»âbømM> kõ9 –ˆ¥ýÚEÎC`K’ÛÜÞ°%²€-Í[êd| -¶$liF[B•²™ɤýwÖ†èݰ%Ó´c¯àEÂÕe@Éô~ÞÛ/›ƒm=ÐcôNÀò4ÍšT™Òl -Ð4Ò.M²:-4² IvÆÒV!BñAºšÐ$Œ=Ð4Ï@ÓüzuÖx(‡Ô,Áp³¾¯hâûÅIP=³Õ&£~C‰À#Ü€<šñ{"fl‚<}Jhy´,$˜ù»5š[CFx j¬¦²›þ`Б2øî¦°°]0©Ãü -¦öÌ£1Pè Ϊ;•Ãa(…/4ýk«ÚñÞíc¢#0*ÿ¬P˜¿ú&-'ˆœ£FŽÂuôiw,ȆÁTç,u¨‹ðS–ªÏ«Iß)<ú=ZŽ0lÍɺGÁ´³M²A j¥ Êœ£_£•¤C˜‡?Û$#ÁA~  -FªoÒŽ½+» ˆDß=_˜…b:Ã~¶I†™ ˆ®`x¿÷e5{ñ}Ùpôñò}º‰Wi}]Ö‡šy$ôB¢H¨z¶nüH°!úP*›„xpLø -naD½ð~:L’y!3D“):A±Ú†r:Çß–u~=… Gåÿa’c ÎW2šú³P]Áhù¾,¸’äE¦³QøL6룎 ,úMÏXIT±§…Td›îˆ’ͨßéÞkWœgÕ keM¨ ØÓV€6CºF29}BÀiQו¯¡íù -/G¤“ÓâHrFÞïÞˆuÔ‘ò¥€9CU2ËÌ?•{ã§pc—©U]-ŒaŒ„[Ôª<-j ::¤ve¿¯  }° -s˜!úþ8"<Þ¶|Ââ©V‘¥×è3!;d#NŽJ< e@MÏj*«¬ -[sËëV¶Ã™¢s¶î…2<Â~á\²³»ñ#û! i–¦öC0kަÞåºÛ“y!3ì‡%j¸fdþ/?^ø¡¸8²êÍxç–<“Bæ>¥L*%RZçbú¯#·ˆ±òL§Í¬PnC–ï}6ÄKÏ¢•±xxÇF¦8tÄGRÂòw¨ËÚ©FêÄrÿ¯/æÑ‹~9ãƒ^Öªëwž4< !œ"j‚áàŸ–óa¡ƒò×ß5îÀ#™lÜ+KU ½¤5@mœÉ/öÃÉÿUšû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 [ 501.023 328.584 542.975 339.424 ] -/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 318.562 491.651 327.279 ] -/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.365 304.276 542.975 315.115 ] -/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 294.253 491.651 302.97 ] -/Subtype /Link -/A << -/S /GoTo -/D (writable-iterator) ->> ->> -endobj -120 0 obj -<< -/Font << -/F48 38 0 R -/F55 46 0 R -/F8 42 0 R -/F64 67 0 R ->> -/ProcSet [ /PDF /Text ] ->> -endobj -121 0 obj -<< -/Filter /FlateDecode -/Length 2958 ->> -stream -xœí\éoÇÿ®¿bû¥ šp<ç©ë"nãÀùÒÄP¶QP4m« $[¤ìAÿ÷¾¹‘æ¨aÀðjÙ7ïü½7Çòà i0ü#MÇÇCÓõj[Ñ,/OpóþïZpÞ".:8Ï<œÛ§sÒ#ƈlóáäEó -ž¾†–?œ`þùç‘ah.Ox×#N„¹^Ÿü|òÓg½cyÀÐ9Aƒ…ÎÕké3Ó>¦37º˜wb@¬$¹Çg'žð¾ÐвæìÍIÏQ‹Am-…;¢9{ ýÍ_¼>³‹õgµÜ^\«³+u\¬O›9ëY3;;m†¶™éf‹Ó6û(¼¤onÂ7àöÓ­y°Øj’7öɳÕuã6êúru¥ém7¶áËÙÅ•=_hF »›ú±ìCŸ=Ñœº>áø ƒ ‹KB·ÜS&–— Ž/OOÁtg?œ|wæl"Eœ¶M`’C,,ÝðVùZ‰Ú}:+eh(J"‰n>åªL Ü=U`Ôj<õ;¥é©ãû@÷«M`)ï©9(ˆ´¼ñÝ ƒ%V‚Â#vŒ¥x¶ÚÞÌ_®(ÝîßV¼9à ÚX Ö­¶Ž–XI Ö„û>ão1Ÿ6&Fء؟3De/ʱ[Cágô ôËÍX\‰ÑŒ°:âZb%q9 #¥C"î·¡ica€*¤p³Wέð<‘ýjò£œë€ôv¾ ‰Ž±ndªèçWƒ˜c‚%‚Q×çÁ—àQʦàG˜c^hËi«¡½âÁý°åÇ…Mðt­ŽÕñ¹:>RÇo‚£¦ B-BfÄá —³ -&j‹€Èˆµö—kðfÚ+±åTÚãÕñ<™“¶…*Ábû ‘¼Äôq{œßš^ª£VMÁVešNÈTpƒ‡X5|Wß[þvgïm]üùTn<=LŒ;ý¯QÚDÑÏÀ™r©Á´i Xkòù"„jí—¶Züv¹ôÕÉž%§õbÝéȾX_hoG¦Y†+´Ù‘m·;T¾èBuM3]Ãñ•‹Ã@QX©zb³'p)H½Ôþ¾ØlÔX»QgÂëmjë ,æ®\R”¶5|¹9С] -„pDqïPáyŽe0»³m.å`‚vV«µÓ¶í.ßEûà ¼ïè ¨`ÁΖ޳ÓF(«¼¾–Î!8SZ€uVnUwœ+Ÿé:¥wÙd1 )kKú©Öœk"´õn²’Ãð -#ÇêòZ»ÎrõÞê_H[àÍ„ôÍ7ÚßÖý@“R‘Ÿœx›3ÖðoW¹"cð÷*0wCº•½åÈ*l±Ž±²0*ôµ¥íh¹µÆâñÁh“ì.c¥G†¹b¹A2maÐîìéU‘²!œ¦<õìÜr+ô묷3Ñ"̽'ÿ5àg3Ê3WA\弃wPü{jŽN.Î(¸KšN•E.á"#Âòw—ª)ìFËW®‘Â:àMp Y\åt“ðàgJs2®æÔá]/§ºFŠ¡®rôz$˜obCdù Ê Êëí‰ mëÆ¾9<§Vßç -EšÙ?5Õ¥üƞ탾 ÒWsGµwG4.“l’†–Bì4§'puÝ«–Ƚsosz-…!$$“ÂLIËh™ÞgMBïšû_Lí=Ö-îgÊrÏé½êqÊšÀ:‡[z–™pç±÷=ømÍqt‹¢}q~¯¥õ$uæ÷0E=ƒÈ÷ý2®5ÔŠbPÂf©ÏðqŒh%14­¢x ù°Dˆ]ç÷ê¤lf2Ïeuðñ®ë’¤~×TŸ€-Œ½ëHn©eד}m"ûn“}†ãÉ>9 —3ûNéY`©¢‡£ÀN90R¾@§°…÷1Ö•æè’‘ ¾Zš Péì+¥ô?ÙËŒ]IJ’ψ’„i]Áþ~ - j1h ¢ÄãÀV—°÷‹a FΜ“d‚{¯2OÛâÒž„Ö4ýà$ª‚á¨lüræÊuý(¶4ŽóxÄ´¥øIµy°¾ŽYô}èŒ;–éj§û*È V¦¹ÄÀÏdøô½‰já -l‡ÌäÙ¶6 Ü…ípì´ j@Ÿ7 ©¬Hÿ™Î•Üž0ŒZÞï3u9?G°L ¾ÝcÀ¡Ú·“ðÊHc¬¯¼(h;¸ ð5FÖx! ES7zËO`´ÐµŸE¸Q^0Ûó}ˆäCx<³,¥^KhJI÷ÃýóQ§ö¼·; 5“E­¢ó—Bº­'´ff½ØÎ¶W -–£H€5—ñhèh1ýÉý„Eæxxþ«BúóÔk,Ö¥Ìö™ä1»Ü*ó{x®íåÙdf¬"ŸMŒS¸Ä‰÷‡$caà®R…ŸA¦íã2H$À(ƒplƒÊ-*qõe¦ÎàFµ–¬úL>¸ykNž}F¯n=š§Œ¦í¢¯ÙÃná2ÀÊ¡Zîàzº s ÙTæ6é…Ö <ÒrºÏ}Ì6ÈMÁÐC¢ßc/Âñ.ÖÄ0*«’¶8ŸÍ€ŠE Ã’AâÇiT ú«j)û9T‹Ø¿oT«#ŸAµ’qªEâíŒjw[Ì"S‰Î,æp.iŒsrs´Ú¸GÃÊR_fqŽ#Öz²wáœn=šq.¦¨ýûi#‹Ð›À•ò[W îÁ»éºâÞ°G¨6ùðìí {m‡äÅìÑ0fhKãèIóÔ«€\Âläbf¹ÜÚ#­ø=»ç¶©;®'!±Š6,$ g!1VFvÎÉm„p[ &ᯠ-÷þ -ü[ü‹ù˜ßñŒ‡ÌÖs÷¦ìý÷`…Öê¶ù°„¸ï7B¼J>Aнd·2¬C„òŸL !ëh1‚¡>†º/ª†CrZ×=¨èÁ»‡í‚CžzJ˜ÍáPÄì‘áPmX*ÎáP¤ŒóQÉÔ*uªðêQ§À­CˆÛG_êTÑâQ NÝ] T.j Å™+Ê8¢Ýh!Ù;XßG•] )Ï9ô‰x>2ô©£ ?:ø‰´ñ»ìÈ0¬fï˜ïª#À—µ ¢rTª[ê‹QIå™AÉ®Qéû¨• Ϲ¨Œx>²¨¬£•º¨Œ´‘ÊG{De¾¬¨¬»5‰Àh wå©ðtÑ‘¨.úÿùÑÊœU6I¥zË!C¤·ÏøÙJÛ¾ sD¨_ð ¬ëN¿‚jšÆ•gò¡¨³—&± ŽÉïhÙÝ~øDáNËù;êb~Û0層gð´Ëͯ:€zDE>Þ5¦…v¨!3^‘€<%ÛÙO'ÿ*STendstream -endobj -122 0 obj -<< -/Type /Page -/Annots [ 123 0 R ] -/Resources 124 0 R -/MediaBox [ 0 0 595.276 841.89 ] -/Parent 2 0 R -/Contents 125 0 R ->> -endobj -123 0 obj -<< -/Type /Annot -/Border [ 0 0 0 ] -/H /I -/C [ 0 1 1 ] -/Rect [ 320.185 137.651 393.569 148.49 ] -/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 << -/F48 38 0 R -/F8 42 0 R -/F55 46 0 R -/F64 67 0 R -/F59 63 0 R ->> -/ProcSet [ /PDF /Text ] ->> -endobj -125 0 obj -<< -/Filter /FlateDecode -/Length 3351 ->> -stream -xœí]moܸþî_¡ûf£·<ñM¢ÒÔ@Š^‹Ü—Þ‹ 4ȇwsáõÞe7/FÑÿÞ)’CŠ¢wm¦Þ¸Áá­D‘ÏÌpžŠýû­jøV­ ¢îªVu¤idu¾:ª«7ðÿß\ !"d 牛3Éj¢š¦š¡þ|vôÍ_…ª:Ò5¼:»8²4”´mu¶8zY?¿>©8«Ž·Ë·'PÑñZ;©f¼®Ž‡‹ó×úŸ«eYqxÊŸoÍæ×F߇“—W—ær¹Wýär²b8¾:©^UgßTH¨ºšQEúV@Ï jÑB‹çW¦¢ÍF_Ôë·ú .šöÞéã¥i[·ú83—®mMp•©êøÆAg ;0Rz4”RRÓÞJÍ?Sá„ù"¦Í_©-ÂÕºo§­ŽúÆòÊ)X‹ò‚~­oL‰¥ý½ÄÞËáunÚtÂle¸H¬†ª¨Ã<4¼]ZI¨` ª‘‚¿hMëÁ)Q0lM©Gq”rmÍKT·6ã øåÐs(éÀ|Α™›)33Þ&Ä)1h =Af̬Àæƒ]×ú¹²^2aü¾LÞø½ÿ…Æï¯<7í§Œßã0•]ØÒ¬«ô›-ÖÌra©l³\õíõêÜ"0ç%dW -5ecµqÅìÅÐ6öæk 9Ôç×iriá¬s]êcš\jD.ΩMssuÝ·,Áÿei•™;Hœ]¢« e"O{’0æJ¤%lˆ„ fËܘ|<ïð½|t/ÿ‚:ÔñÕ¹ÓyÐwƒ…„Úº±.íÎï 賈ò.Q£Ž¶€-ŠØæú/è:.‰ë1‚<ÕÇúxªOÐqžº@GŒa™R 18ÓM©ˆ*FZÄÂ_÷¶ç sHŠÞ%Ü÷æëd”"’û 5@¹nð†î¤œ›€¦OÎ- V÷ŠƸUøÛölŽLeDòûvAH%ïd(óíYœÙ6ƒ~§ú¼ôw(ù -î- wûî¨&¼SÕ8ëºjݺ%œÍÏ«£ŸŽ~¸Ë#¶}È!Zw4Ó²~ª†jÌ™)Ö2Ę5 PÉüšÖ5i€%ˆTÝ “oµöR±Ðä&6*ÑŽ(.#5e.×Aþ‚´K… ª–‚u!mmy)¥ ]×DRþ¸Ü¾CÂ][F>3é¿ïš:í ÂZÈúx)AlmYA$š‚Å‚<Û _Ò¥­7¿ÑÇï+žã[¯¡òÌ•E86<í–gcIN ´Ž„lH ¶™õOuâ˜CWßYŽ¡ü”k‚@M'œ­1í©š´ -LÝÔ0¶ð錛‡ÿdO>fÌW~¬ÞÃ2`©¤š£´/2>S›wšö™¶#  Ùˆ³Ù“© ÚJ*°öiޮߗ‘óñu|èT<ßïE«ß9¸®ÿù¦ŸO2]ßU_¦çO£u?†;Ùó‹@ó?„–ê÷²;uü íïí ED|áa²³Â¾êéT›u㦖ûAtRõ7‡ðm”ñˆ³JxD€YúŒÿ½ùǦ)(—_»é‡Ð¥F¦0PR¾—¾Fc¿µ­kÒ Ë(ÄûaƈÎ8ã%†€ÜÏÔÐ=»¶ƒ¨åïú~‡Ø¿…jÜ[¨å0rê2Àáµ$ÖþÚÔJÝd(ÓZ4b6šp½šã÷i‰1•ã€2z|ÆR (4G3Úퟌ8ðm”!sŠÌGeâI cDGFþOI ŒÞ Ô-~’%jfM£Là«Ý3ßFˆ0§H À|p$PF!ž2Ft$h$ ×'Üsk[w|¥à‘õwªï«d} bŠ€HN·Ÿ–ÊØâÑ d'` ×äˆAvŠHÊâì ê™ìµQ„bÌ b11Rˆ#†œ-1„ùB – -Ùâ¡3†À¡%KŽŸUG¸ä•lkènÍÓEzj Zç~f,9‡­@~Æ5;‰Hœù²É)ã¾:…ʼNrëf¬ãɵ@æÆsLÙéõúÒÙI¥8š´zWßæ®ÞéÅ"úv°Ìá:yÕ6»Çš]~¾ÐS&x~8N©©ÉÅM£Cö=ÎÚ‡«Ñ¬™lkj"&ÛV™©fãæYÝ ëo«åvÊņ.)ECx½[°lý õ>N‘xæÍwJÆlØM u ¡’­´¤ã{OwJÂû‹{Nwö> -ñÙ£º×t§©-+$•µ&—PÊ{OwÊŽ¨žŠ‹bkË -ÂZ|,äï!RëñÁ„§v7JýÒ³¥·b¿”4¶¢^0¥×%\žoƲs cAKÑÖ–•C^×€?†²ï4Õkìší½¥ÓJÉôeÔá¸'c:G=>>ޏçfî)ßQO¾cžþçI=e´0ÏC¬ -3‚1Ï®UJ‘ŽŸÓT{î‰Ð&È'D{päSF!ž}2æ³ôjd§ÐáȦ \Ï6¸–nB¸§Ÿ'Ý”ÑÛcÌtZF:•]!ÚFSõ×Ó]R_{¾‰Ð¦ø&@{p|SF!žo2æs|hd§²ã›2p=ßdà:¾ à~¦|SFo‘ošþ{˜ìÐJ4úíh†ùb,¿c`ßFÖ‰0§X'À|p¬SF!žu2Ft¬hÄÌyúÎc -¢éçŽ‰ŠˆÐúW÷?¾ 8Ç,£ï˜#:Ç 4’Ž˜§{DÌ""<ªT¨ª_­½³(Cù Çäª%¼Î®´_DKcÇœíà’¨öû€u.™Cë|2€»ÿþ G*$†s¤œΑ1ûˆá]nâ[Yª7r¡»DÆB¢»·Z±è*ñR+|„‚'¢G(÷—èñ@Ñãfçè‘Ü…ñÑ#³E:z|Ü1zDIÒ]£GGxøàH¿&@¯iܨÉo•ÌûOKÝÄÆ3­ÈÅ"ñ]Ší´àé ˆá§¨Ž_¢Aó0Œ&è‡ýØ&±é"AîaÌx=l ¼¹Ï«±í)X&äÉ]¥i§¿Ko*Ý 9²ÿÒÆ=?¢ë®#d‹E™Ͼ±ý3\â#¢›Ú}’ ëùÝ'¿¶M' 3TØä³Ÿ5·ÞØòZÅu5Ú9؉`6ðý ™|Љ_ ŠmB`Ï÷T‘{5á(•Ù[ïP‹[[ w _p¬A­,ÐyôþÇ=µ¯)ÿøH5yÿ­TßjØ »W±öÌ7"øë)\e)Ž°Øæ+t~*ÌÛG9X(Ç/£úßXÿ¶'ÿIö—f?‘1[º•IA~Kõ û˜‹eÅ|rF¡¥Œ"÷3ÊÅÈ'> FñÊO!CÊÀîñ¿Tøk$&PážvŽªŠr› 삎ÿä0ºGqåc`ÁWÛú¸B`æèq<¦½s»ƒò°«ÜÛ@Q*?c‚tuÛçâDqþÀ¹ü „©Äu§?qrþ=ƒèý ŒèÐŽÜ’à¥Æ™-i™ßù>ø[hq¹ -ò=Ÿêé2›`eææçš -S ªåWó‡NouX¿W -ÓïæÌfäæúÛ7ÃÉhøc Ï|éÑK›°>#Û?0 -2ö3óB"Ú¡=Ü”Á©x„WýV‡u4T³ErX;‘w4ĺïþ Ó[tа pvÄ틌¶Wølm%M|‰eÿÎѸµŽþ ©c"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.362 445.078 287.809 455.917 ] -/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 << -/F8 42 0 R -/F55 46 0 R -/F73 129 0 R -/F64 67 0 R -/F59 63 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 /BJYTSR+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 /BJYTSR+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<”}ÛÇíB¶B–pfÉÚ,Ö,•5[–lYË4 Øa f";Y“}YBЬeY²D’J(ËX’,‰B²£ ¨¨¨¨*j*7ÿ·Ì‹ööEéÊDUUíwî‹Ç#±„ß?uAþbšºRH$ gÁÁ5"Ü3ê¢é•2ÊøœÌ*‰h|’¥ZšÔ8ö_ÿÊ)²ÎÉíŽ.ãJ_1)#PÊÓuÚ=VàÈQîv™‚l+æ¯ð%§«t½yÝœžwcÆDç¼ê徎‹ÿ˜òke¬¼´U½'°ËððýÈÞFGðËé1¶L„ø|:«s^ó¥4¤íç©;ý;˸BÜXqï §ìÇ÷Ç:&†=>²g©Åå™Ò˜º ù‹Øv„|(ü ,ÉE”¶,gb©ÁœR¦U/OgÜ̺&NQfÔMfÞÏ;|ê.•Cû#ÈwajNÎÐã#i.¦§DÎfÇÙëu³Öð> _0Zt¢K?­*q>‡ÈdéúÐóÁŽKÖå¢Rnö­u¡·VYË r<Þ*ôT³ —ض¹¹"ݶ„)˜óxÈElètí4ëÆy:A›ë¬7R6žõ0°º>Kç ¶­3 -Y"Õ„tµ -–¹ÎCƒ Ñoø`” m†{’¯'Ú¹Áî˜o ºß œë¢5w02$ÌüêôM@Ç”¹u nƒ“u3RwµŒe†¢V<¤²ü•[Ô%Ö .ìš–Hƒ@mýÉ#äÐçnoR¯‚ %³ß IX³ÚìŽi_Õ`ïð§·ö^§~¶)ÛQ®,QdøPÚáª+Äç¥5`³´àŽ9)ÂÖ¸nl`óm°´–å§è‹Ç(žÇ›žu#ö^B%œìÓ¿G+2¾YùÖûúÓZõB6]ÜÓ)÷âZÞ)ŦÄñÔÓà ”©´rÔq±¶â¹ -ޝ«WЛ1BŸ'ÞÚx缟bÊ “šªÅZ/ yûmœ/(RÚÒòþ»¥Ä¼Ê3+¥´ï<$Yjòß3÷½ dôì÷®¡K~û«ÿgY.9t|¼‘Ã¥5ÎËë¸öƒž5 -2‚÷Ûà.Šê~ È{ÄímÌ—üȾ­EWˆçQñ.SW™ýµ»›˜ù%´mÈY=‡Ü‰™£?å -܃úƒg*)¤$¥÷Û{Cêªôf9 6öPàë“áÆžŽÖ¦‰<¸|jcÒÓËVªœútò/k"(æ ºè3“~¤a·YŸ¾àŽI¶”Sˆ ­ßã/é,D®~[ŦÑám‰²Ð­›³ìjÛ÷înÀ9š#ãë_ ö®´ûZXßÛ gµxÕT+ëÍäÓÕÒER<è‹’h*‹Þà¶Ià›ewúžTŠ÷ZV'}(i&O?M±Êp«[Îu0 -yÏ-òAßµBsƒu"Ÿ‹Ñªt+»óÑ3¶Äíòc¯¶4ö‰¸K<5-“Ññ„Øe…Ö’\äâb ‘3Hçø¤{E› vÐåÕï‘—Dcló/^1M¨Ûé±²1&š‡?ˆÏ¶7Ür>š üt•^Á“9D{âtHÈV¹}wÓ-ã<âØy"{RîA«àvÂwßÛˆÀÊÁGmdˆîމ¹ðànœä»<†ŽÄ}'9JE}'‡¦ÊŒtÓ ÒÐÚM›w­« ãšÚyÿ{~´òyÒ´WLsqœän -ZøR}»CcQ€¦VÇ]–þ/t¦ÝLœ1~ ¯zyŽýòÉä©¶&ñg 5Ô›çNÅó³õ`™lP´1cêìnåëmÅ9x'‰nÓ¯N“·ƒ{þ¢ïµþöD}ËñNþWé3ì§ø67#…ZÐð(3Uht`†°TB8'™b;0ôŠS×ì|Õ^¶êåTáQa%˜¾YêùOy®Û·nûNN.EšÑ¤†”.ÒDÄtpÛ -c Kóáµõ7'Â>›¦òÏOìÇ¢ÌÚ¥½+¢ëi ð•4{½ ÉJäÀôRxgï5„öHhÃåùoŒ'42=Ulië?ÿmæÍöKW¾„Bÿ/’ÝKî‘•ÇÆ£ëh³2&2ûªRŠá0´€×£œsŽ(Æ&a%Çž’™ÇÖœíÆGÇ¥ÂKµÁº_c,µsïò™]ŽDò„¿Hí»ŒM®ãýxmO{[åd]hgší3ˆ~쬭žñÂó›”w‰ŽÖÏŠS‘þdWÄKfi˜òºÆÏ˾d=eÁ^§/”ªP§3.x»FJœ£Ål%¤ú¶6yz»Þÿh|ðeÛü gÒ+[ÿûÄæYS%{=ÿX£êŠó¥jùù<§RŽÛ Ö(KZïØçN2Ã=~¬Ëj X - 8š4Íí+²ÝŸkÏ -jÖVªI‚œiéÝ™ë¸Pô¦ØEEÎ)Í -gáÚôˆÅ•séÝ‘ãJn× -—ǹ0§Ãðð¶^n»éËŽ±¸ƒÝè;–èt‡Pà-µ&os#ñx²AÌIá×·ÚvØq7ë¬ÝrógÌ+QéÖKØÏ¦¾6´ÃÝM;^Jãw˜¶Üm9‚Æ®G‰.€bº–š‘~A9⭟܆2únùˆ‘Å[ „]£÷y -Lg²{õÎTÔD>6N ‘PÎÌc ¾E{1|CkÔFèæ2÷VàÐ')°ëŽÛ˜i2!¸@Ö ¡áÝNaª¾#½CgƒäHºjU>7¤l‰¿ÞR‹´Ð€k×%—•¾¥·{ëÀghxÒk.ÿ>Q|u¿ZÚ2ÚRåÜܪéýJÒ˜HwÅÁàøñ¯áÄWÆŸ(6U¡Ää9iu‡LPážH,7þGé)ñoµ:Ïòƒ^½ö`q‹f…0ÓÍD˾X¬pcº-~ül'ë‡G˜éä/ôÞ»ÈÙœ+h(Á !ñ—> ­7ÿQX†¸àŠÃ™kzG¾D)1¿á³vûY1›ó¹"‰÷eAà(‡ç>eµ`À,l¥vn#ξɡZJ3-^ðÍí-Ò:û†)ñB””íOĄǾª%7RU‹Æ,5¦•\£lXõo$¦ ¾”îFÅ31LsŸ9( ‹Ÿ—ô¿Lþù}ñZræCväÚ:W½–Á×'åj††¾.„%êŸ/ð’}ÙÛïVa)zw ý8«8äSdshd>Gå}#b=ýËŸ ÁµbzàõNCšN‚ÈÇ:ïé5µ¯|=kZ±Ž~ºÁ‹-†^ÿË*3=å$ŠáÛÂlþ|ÕV—9×´PÒ¥lÏá’Ÿ-4lUo“˜)mÈÚu‹*Ò+Âûƒ¼+·ò‹ìß]îô‰JiÖæ+T ¬’r›w8`\lˆäþjm¿±B±. ÝG7MŽC—džz«'÷$µ‹‰Ò,ŒûÝØ×®{.¹ž…4UW> 8›8òž‡É™…yUV‚Õ>0¨G£4ý+Ývɺ¾¸ãƒ² ¦W[>]Éò°¾m^owTZ°ºvÏ6 rà»ïƒA1¬Ýj=’óê_XG¥%ym̓%2ð6͸àMÎeL -¶6Ð'wõ¬ä@”ÂjN4ÒÖ -Ð݈=—' 6'¥[¼‘ÒgíCßøõûé*97-{‘GæCoÏÅqœrÍ(¿0Ü}@ñÂü:uŸÆO^F¸«¥u—E·ôèG."èônM"ykÛ*áNí\"(n@P“/¶)2Êèîz>YY^'\m±õ¾L/¹±ì%²ßO -µ¶û5æóó̧î‹oâr¥Ï…™×ÜëŒQäæ|]!½¸?8Ñ’B¹«¼‚ñküt“öRhX脘f¾ñæx08òÀ)LAà Ï8ûÔ¨Ž,µ¼Ñ.Ãu¬}¸ÇÑÍîvÍ.ÇŠ¼5)3êÝ&3Ì$E÷ú&ÃÞÌZiµ¿ÇÞÈñ´Oü:'èŸG‰þ²´tÔZf£Ó8¾Ú4š§&œ—¼Âq™˜?Â3À.W¼™v¥%/† ¥ÉdPãé÷©Zä2P«Õá% Î{Í6àÒ]›¾AæO“|'Œ‚HØšâJÐj7ä¹Ì‡jãùbÍB6³Øâ‰½<)»&©Œ!RAºf]ª[ç¶^g«ô¦öuýi®Õb—òý~²ôž3)Ô•¢wVp-.¤~¨ï -KžH…Ó4'ÞŸkRèîa¬x rMŒ‘°ÐÈ5b Jò(MáèzØ9•¿¥ká7ïZMP­lTymrm}]|‘ÄÈÖtE뼚¼UG׫ÑÌõSÚnÄärhã0åM»GÇ¢Lä ¿ãiþØyÅïÈòÓ 4YVì%v§¥“ñÌA›¢×%×WM>>Ñv÷Ýã_šH4ƒ&tTÝ襕ÛX*Æ©M5mZÖíY›‚e Ò•ÞšãggôÓ™ìb„ šæx<Ó>ý=û»Â‰¬?CÖ;.e·l×4S0º›!Ê_"ÌÚ*9b|õ.Deþ´¦2M©¾læÅ°Eµ»ïVU1m¿.è§IØj¾4™yùNÆ)͸ªz âÐÁÖŒì Uë¾Up[;k=ùÞŒ-o ̵/¦ÒQ?OT¬®ç„j׺°DW¿™Q´3ñ·|¤V•àƒÿ8Ö.ÿTÊÑs÷Üô“EWÉÆ‹ŒÙoîq^H»c\¶çŠ?[°»7Vàg R¤hûÕJéhÕwé…áŒeg«ã¥j{³úu§œØÝž$¥…c`DrY\Ñ}eÍH|æÛ¦}5ˆ -9¶àºòݯ zóS¶üÞçµ Ç*w?Ó^xfŽY­9Â4’øv}óÖñáÜ ™§ÈŽj”0Þ°p~æd@ì}{ñ‰g<Û~rm…b}Eéñ9+1©ãWO }ìNWv»eþ{nÐ0´–åm隤¶íÖŸú¬¶Í,N§Z—è·XV{dùÙ”åË—–6 s%¦®žÐ¹ ÷‚Ù%¸xý -gv<÷q±e#iÓ¼VØaÁÍ+Žï¾NJ8dNmµà]wL:ƒ¬8tÖ:ħ-KzLªY>p;{g‰'%¸Ç`g.ºSÕm¾ïÜ'(å*&>?ÚûZ8%¦‰2¡Õ; º½Üá\˜sòZVdrïʲ]×°•ñ³òä÷§‡¼x&e ù?>¬ÿIðo‘ŽAÂðœ' ïÁú_mûºendstream -endobj -134 0 obj -<< -/Filter /FlateDecode -/Length 1271 ->> -stream -xœÝYÝoÛ6÷_ÁG{¨XñC¹n{ذö²Áà -4Cà:r–Á_µÜÝ_¿)Rg‘ò×i“¡(MIÇ»ãÝËû#9üc¤”T憔ÚP¥ -2_rrÿ/…”ŠÊ¢„yâcVðœj¥H†8|?½|­‰¡F 2]Œà‹()£eI¦×£·d|1Õã[;ÞM×d\­'$ ^ÌÂÌìíXíìÏ ž8ovžfï–´_·ð–+ ž?Èô'P¤(:MXžSVjPÝiñ&P!u Ê9 $/’Œ -»iOã´¬íxeG§jå¶ã5š¿³ãÑ\!sìÑûZåÞoÐûoìøÆŽßÙñk4Þ¡µNÖÏ9Þ4+ -yØÑG¤OµD¨“æà%- VGdrA6=+.ìøÂ:·ð³;hlÀŠÿå$Ì÷IÕÊœr˜y!³”"š -^’Íâde’)ÄIÆ5ðå¦h^v*}å]™pœÓ늙‚Œç›µÛƒ±‚Òm -Œn]ÀZÊ¢œ–ºþÿÚ+ôSb>õ§Á»'%ø‚_QÅv ˜;´9è§@_P):Ð/"}ê#Ð7TvѶqzþ‰ÓÜ}ëÉŠ¦ñƤò­Ã›:³3î"u´½ãîé™~0ïH aÓO>Ëü8*VRVOœE ˜r5pN5Ö`-´ÞS¥èt1pN1D8…æ‘ýœUn"[º½f‘¥³Smœ:ÀÀÛ¢ès9>éà8W >H.÷rjÒËI -9ã` ÖD@ãxŸqÜ’(ú4d°Îˆ OÑû¾r“V„W7íï®]1èÂeJcÃ)3r(U»óµºÌ™´3—zªë‹e{&.Q,‚Ñàߎ*5ÍõéƒÖŽ'yFóCÜdÁ´ß¶‹3“SY&“ëÂÓv,ÜsçOû8G;Yè}ì¶L‚9°ˆµ¥9âãx®Ð|ø¿tž–ü¯"þ7‡±ÚÔšõ®CX[·ö’²öÛt^yå}‘dU!eÂA‹­ôùüÄ#?ak†+D²Bœ¡Œ8Grk4žV<ª‡cƒ'‘oó£ç¢¿Fsì›yÄëGê“BÏclðs G=ô,"_Þ£ííÑŸ 2ªüy¯gœ3n·-²ïþ©zºF*­óø‚²E -œåÔÀkùÿ›Èë_êa8Àø‚WÚóÞ$Ú×HÉÅ}o‘-ÒrƒôÀûY ëiãÆÌ³çTlYÔß2„AÁ'•­°•¢ -Š ªïÖ×bÚ2‘{–nküPÕ©8'Tí:×-·i·wÑèÿ[{¼ãÂpêjÛ^Þêî" lXÛöl~«-úÀjnþ/5wG¾Ž‹j®šrÒ)¡äÍKW97v7íäWTC{ê ‘÷ÿHÒçèìãb3 ´¢š‰CzÕ»§9*¹ÇÇI~emPĵ†û›ùï®­|1`_ï‡:ÜõxhÍôR¿[0»ö„CIuÚ”ñ¥™ƒåªjÛà!˜Íl"œq*sÙ‹Ò:€nî¸Î–HÄß³ƒK꺳@Ó«™í:MQ—›À·æ]§'k›V‡-ùvãaw®7Ôâ¶Þü¦Z ¦ <ê[ 'tk`”wM:Øm2šòB'!ÙRdIHé*JÏÄÉb,æÿøKûeô,ÿÇendstream -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.746 null ] ->> -endobj -216 0 obj -<< -/D [ 98 0 R /XYZ 74.409 572.746 null ] ->> -endobj -217 0 obj -<< -/D [ 122 0 R /XYZ 74.409 338.687 null ] ->> -endobj -218 0 obj -<< -/D [ 122 0 R /XYZ 74.409 338.687 null ] ->> -endobj -219 0 obj -<< -/D [ 122 0 R /XYZ 74.409 184.62 null ] ->> -endobj -220 0 obj -<< -/D [ 122 0 R /XYZ 74.409 184.62 null ] ->> -endobj -221 0 obj -<< -/D [ 112 0 R /XYZ 74.409 411.095 null ] ->> -endobj -222 0 obj -<< -/D [ 112 0 R /XYZ 74.409 411.095 null ] ->> -endobj -223 0 obj -<< -/D [ 126 0 R /XYZ 299.523 698.009 null ] ->> -endobj -224 0 obj -<< -/D [ 78 0 R /XYZ 74.409 632.088 null ] ->> -endobj -225 0 obj -<< -/D [ 78 0 R /XYZ 74.409 632.088 null ] ->> -endobj -226 0 obj -<< -/D [ 90 0 R /XYZ 74.409 549.794 null ] ->> -endobj -227 0 obj -<< -/D [ 90 0 R /XYZ 74.409 549.794 null ] ->> -endobj -228 0 obj -<< -/D [ 90 0 R /XYZ 74.409 428.025 null ] ->> -endobj -229 0 obj -<< -/D [ 90 0 R /XYZ 74.409 428.025 null ] ->> -endobj -230 0 obj -<< -/D [ 126 0 R /XYZ 74.409 500.529 null ] ->> -endobj -231 0 obj -<< -/D [ 126 0 R /XYZ 74.409 500.529 null ] ->> -endobj -232 0 obj -<< -/D [ 112 0 R /XYZ 74.409 625.481 null ] ->> -endobj -233 0 obj -<< -/D [ 112 0 R /XYZ 74.409 625.481 null ] ->> -endobj -234 0 obj -<< -/D [ 52 0 R /XYZ 74.409 164.789 null ] ->> -endobj -235 0 obj -<< -/D [ 52 0 R /XYZ 74.409 164.789 null ] ->> -endobj -236 0 obj -<< -/D [ 102 0 R /XYZ 74.409 406.503 null ] ->> -endobj -237 0 obj -<< -/D [ 102 0 R /XYZ 74.409 406.503 null ] ->> -endobj -238 0 obj -<< -/D [ 122 0 R /XYZ 74.409 771.732 null ] ->> -endobj -239 0 obj -<< -/D [ 122 0 R /XYZ 74.409 771.732 null ] ->> -endobj -240 0 obj -<< -/D [ 102 0 R /XYZ 74.409 462.996 null ] ->> -endobj -241 0 obj -<< -/D [ 102 0 R /XYZ 74.409 462.996 null ] ->> -endobj -242 0 obj -<< -/D [ 98 0 R /XYZ 74.409 552.166 null ] ->> -endobj -243 0 obj -<< -/D [ 98 0 R /XYZ 74.409 552.166 null ] ->> -endobj -244 0 obj -<< -/D [ 102 0 R /XYZ 74.409 641.73 null ] ->> -endobj -245 0 obj -<< -/D [ 102 0 R /XYZ 74.409 641.73 null ] ->> -endobj -246 0 obj -<< -/D [ 52 0 R /XYZ 74.409 715.942 null ] ->> -endobj -247 0 obj -<< -/D [ 52 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 [ 52 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.208 null ] ->> -endobj -260 0 obj -<< -/D [ 78 0 R /XYZ 74.409 690.208 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 710.363 null ] ->> -endobj -264 0 obj -<< -/D [ 115 0 R /XYZ 74.409 710.363 null ] ->> -endobj -265 0 obj -<< -/D [ 98 0 R /XYZ 443.233 512.864 null ] ->> -endobj -266 0 obj -<< -/D [ 98 0 R /XYZ 74.409 510.652 null ] ->> -endobj -267 0 obj -<< -/D [ 98 0 R /XYZ 74.409 510.652 null ] ->> -endobj -268 0 obj -<< -/D [ 3 0 R /XYZ 74.409 473.486 null ] ->> -endobj -269 0 obj -<< -/D [ 98 0 R /XYZ 74.409 552.166 null ] ->> -endobj -270 0 obj -<< -/D [ 98 0 R /XYZ 74.409 534.283 null ] ->> -endobj -271 0 obj -<< -/D [ 98 0 R /XYZ 74.409 478.07 null ] ->> -endobj -272 0 obj -<< -/D [ 98 0 R /XYZ 74.409 286.025 null ] ->> -endobj -273 0 obj -<< -/D [ 102 0 R /XYZ 74.409 752.853 null ] ->> -endobj -274 0 obj -<< -/D [ 102 0 R /XYZ 74.409 609.427 null ] ->> -endobj -275 0 obj -<< -/D [ 102 0 R /XYZ 74.409 430.134 null ] ->> -endobj -276 0 obj -<< -/D [ 102 0 R /XYZ 74.409 373.92 null ] ->> -endobj -277 0 obj -<< -/D [ 102 0 R /XYZ 74.409 207.355 null ] ->> -endobj -278 0 obj -<< -/D [ 112 0 R /XYZ 74.409 604.609 null ] ->> -endobj -279 0 obj -<< -/D [ 52 0 R /XYZ 74.409 673.162 null ] ->> -endobj -280 0 obj -<< -/D [ 112 0 R /XYZ 74.409 390.223 null ] ->> -endobj -281 0 obj -<< -/D [ 115 0 R /XYZ 74.409 689.491 null ] ->> -endobj -282 0 obj -<< -/D [ 122 0 R /XYZ 74.409 752.853 null ] ->> -endobj -283 0 obj -<< -/D [ 122 0 R /XYZ 74.409 301.402 null ] ->> -endobj -284 0 obj -<< -/D [ 122 0 R /XYZ 74.409 149.547 null ] ->> -endobj -285 0 obj -<< -/D [ 126 0 R /XYZ 74.409 459.962 null ] ->> -endobj -286 0 obj -<< -/D [ 78 0 R /XYZ 74.409 749.134 null ] ->> -endobj -287 0 obj -<< -/D [ 78 0 R /XYZ 74.409 654.943 null ] ->> -endobj -288 0 obj -<< -/D [ 78 0 R /XYZ 74.409 599.871 null ] ->> -endobj -289 0 obj -<< -/D [ 90 0 R /XYZ 74.409 518.11 null ] ->> -endobj -290 0 obj -<< -/D [ 90 0 R /XYZ 74.409 463.891 null ] ->> -endobj -291 0 obj -<< -/D [ 90 0 R /XYZ 74.409 382.525 null ] ->> -endobj -292 0 obj -<< -/D [ 98 0 R /XYZ 74.409 572.746 null ] ->> -endobj -293 0 obj -<< -/D [ 102 0 R /XYZ 74.409 226.294 null ] ->> -endobj -294 0 obj -<< -/D [ 102 0 R /XYZ 74.409 226.294 null ] ->> -endobj -295 0 obj -<< -/D [ 98 0 R /XYZ 74.409 177.393 null ] ->> -endobj -296 0 obj -<< -/D [ 98 0 R /XYZ 74.409 177.393 null ] ->> -endobj -297 0 obj -<< -/D [ 3 0 R /XYZ 74.409 503.857 null ] ->> -endobj -298 0 obj -<< -/D [ 3 0 R /XYZ 74.409 503.857 null ] ->> -endobj -299 0 obj -<< -/D [ 52 0 R /XYZ 74.409 563.633 null ] ->> -endobj -300 0 obj -<< -/D [ 115 0 R /XYZ 74.409 653.904 null ] ->> -endobj -301 0 obj -<< -/D [ 122 0 R /XYZ 74.409 705.312 null ] ->> -endobj -302 0 obj -<< -/D [ 122 0 R /XYZ 74.409 558.662 null ] ->> -endobj -303 0 obj -<< -/D [ 98 0 R /XYZ 74.409 442.762 null ] ->> -endobj -304 0 obj -<< -/D [ 98 0 R /XYZ 74.409 250.718 null ] ->> -endobj -305 0 obj -<< -/D [ 102 0 R /XYZ 74.409 729.501 null ] ->> -endobj -306 0 obj -<< -/D [ 102 0 R /XYZ 74.409 586.074 null ] ->> -endobj -307 0 obj -<< -/D [ 102 0 R /XYZ 74.409 350.568 null ] ->> -endobj -308 0 obj -<< -/D [ 102 0 R /XYZ 74.409 184.003 null ] ->> -endobj -309 0 obj -<< -/D [ 112 0 R /XYZ 74.409 569.302 null ] ->> -endobj -310 0 obj -<< -/D [ 112 0 R /XYZ 74.409 356.849 null ] ->> -endobj -311 0 obj -<< -/D [ 90 0 R /XYZ 74.409 494.2 null ] ->> -endobj -312 0 obj -<< -/D [ 90 0 R /XYZ 74.409 494.2 null ] ->> -endobj -313 0 obj -<< -/D [ 98 0 R /XYZ 74.409 320.819 null ] ->> -endobj -314 0 obj -<< -/D [ 98 0 R /XYZ 74.409 320.819 null ] ->> -endobj -315 0 obj -<< -/D [ 98 0 R /XYZ 74.409 320.819 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:20050520111600) ->> -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 -0000001470 00000 n -0000001658 00000 n -0000001852 00000 n -0000002047 00000 n -0000002208 00000 n -0000002381 00000 n -0000002588 00000 n -0000002774 00000 n -0000002939 00000 n -0000003103 00000 n -0000003260 00000 n -0000003424 00000 n -0000003613 00000 n -0000003822 00000 n -0000004016 00000 n -0000004210 00000 n -0000004406 00000 n -0000004596 00000 n -0000004799 00000 n -0000005002 00000 n -0000005202 00000 n -0000005413 00000 n -0000005637 00000 n -0000005861 00000 n -0000006065 00000 n -0000006170 00000 n -0000006327 00000 n -0000007439 00000 n -0000007591 00000 n -0000007811 00000 n -0000011520 00000 n -0000011678 00000 n -0000011965 00000 n -0000012325 00000 n -0000022465 00000 n -0000022622 00000 n -0000023019 00000 n -0000023511 00000 n -0000038949 00000 n -0000039107 00000 n -0000040291 00000 n -0000040609 00000 n -0000041055 00000 n -0000051498 00000 n -0000054248 00000 n -0000054439 00000 n -0000054625 00000 n -0000054809 00000 n -0000054969 00000 n -0000055199 00000 n -0000055429 00000 n -0000055658 00000 n -0000055882 00000 n -0000056108 00000 n -0000056337 00000 n -0000056466 00000 n -0000056624 00000 n -0000056884 00000 n -0000057198 00000 n -0000064332 00000 n -0000064490 00000 n -0000065604 00000 n -0000065846 00000 n -0000066122 00000 n -0000075094 00000 n -0000075251 00000 n -0000077073 00000 n -0000077097 00000 n -0000077302 00000 n -0000078541 00000 n -0000083158 00000 n -0000083274 00000 n -0000083403 00000 n -0000083560 00000 n -0000084721 00000 n -0000084745 00000 n -0000084951 00000 n -0000086663 00000 n -0000086821 00000 n -0000086845 00000 n -0000087053 00000 n -0000088752 00000 n -0000091277 00000 n -0000091393 00000 n -0000091534 00000 n -0000093969 00000 n -0000094085 00000 n -0000094225 00000 n -0000100938 00000 n -0000125355 00000 n -0000127068 00000 n -0000127205 00000 n -0000127431 00000 n -0000127549 00000 n -0000131310 00000 n -0000131497 00000 n -0000131668 00000 n -0000131839 00000 n -0000132009 00000 n -0000132179 00000 n -0000132344 00000 n -0000132515 00000 n -0000132686 00000 n -0000132792 00000 n -0000136462 00000 n -0000136581 00000 n -0000136687 00000 n -0000139992 00000 n -0000140155 00000 n -0000140326 00000 n -0000140497 00000 n -0000140668 00000 n -0000140838 00000 n -0000140944 00000 n -0000143976 00000 n -0000144115 00000 n -0000144347 00000 n -0000144465 00000 n -0000147890 00000 n -0000148029 00000 n -0000148262 00000 n -0000148381 00000 n -0000148544 00000 n -0000149731 00000 n -0000149942 00000 n -0000150182 00000 n -0000154784 00000 n -0000156129 00000 n -0000156206 00000 n -0000156285 00000 n -0000156322 00000 n -0000156379 00000 n -0000156472 00000 n -0000156502 00000 n -0000156552 00000 n -0000156684 00000 n -0000156726 00000 n -0000156788 00000 n -0000156881 00000 n -0000156907 00000 n -0000156953 00000 n -0000157085 00000 n -0000157118 00000 n -0000157171 00000 n -0000157250 00000 n -0000157279 00000 n -0000157328 00000 n -0000157446 00000 n -0000157505 00000 n -0000157582 00000 n -0000157675 00000 n -0000157730 00000 n -0000157803 00000 n -0000157882 00000 n -0000157935 00000 n -0000158006 00000 n -0000158124 00000 n -0000158202 00000 n -0000158298 00000 n -0000158416 00000 n -0000158488 00000 n -0000158578 00000 n -0000158657 00000 n -0000158730 00000 n -0000158821 00000 n -0000158914 00000 n -0000158983 00000 n -0000159070 00000 n -0000159163 00000 n -0000159244 00000 n -0000159343 00000 n -0000159436 00000 n -0000159529 00000 n -0000159640 00000 n -0000159733 00000 n -0000159826 00000 n -0000159937 00000 n -0000160016 00000 n -0000160089 00000 n -0000160180 00000 n -0000160259 00000 n -0000160322 00000 n -0000160403 00000 n -0000160496 00000 n -0000160559 00000 n -0000160640 00000 n -0000160733 00000 n -0000160798 00000 n -0000160881 00000 n -0000160960 00000 n -0000161019 00000 n -0000161096 00000 n -0000161200 00000 n -0000161278 00000 n -0000161372 00000 n -0000161451 00000 n -0000161504 00000 n -0000161577 00000 n -0000161670 00000 n -0000161702 00000 n -0000161754 00000 n -0000161833 00000 n -0000161865 00000 n -0000161916 00000 n -0000161954 00000 n -0000161995 00000 n -0000165568 00000 n -0000165629 00000 n -0000165691 00000 n -0000165753 00000 n -0000165816 00000 n -0000165879 00000 n -0000165941 00000 n -0000166003 00000 n -0000166066 00000 n -0000166129 00000 n -0000166193 00000 n -0000166255 00000 n -0000166317 00000 n -0000166379 00000 n -0000166441 00000 n -0000166503 00000 n -0000166565 00000 n -0000166628 00000 n -0000166691 00000 n -0000166754 00000 n -0000166817 00000 n -0000166879 00000 n -0000166941 00000 n -0000167004 00000 n -0000167067 00000 n -0000167130 00000 n -0000167193 00000 n -0000167256 00000 n -0000167319 00000 n -0000167381 00000 n -0000167443 00000 n -0000167505 00000 n -0000167567 00000 n -0000167629 00000 n -0000167691 00000 n -0000167752 00000 n -0000167815 00000 n -0000167878 00000 n -0000167940 00000 n -0000168002 00000 n -0000168064 00000 n -0000168126 00000 n -0000168188 00000 n -0000168251 00000 n -0000168314 00000 n -0000168377 00000 n -0000168439 00000 n -0000168501 00000 n -0000168563 00000 n -0000168625 00000 n -0000168688 00000 n -0000168751 00000 n -0000168814 00000 n -0000168876 00000 n -0000168938 00000 n -0000168999 00000 n -0000169061 00000 n -0000169123 00000 n -0000169184 00000 n -0000169246 00000 n -0000169309 00000 n -0000169372 00000 n -0000169435 00000 n -0000169497 00000 n -0000169560 00000 n -0000169623 00000 n -0000169685 00000 n -0000169748 00000 n -0000169811 00000 n -0000169874 00000 n -0000169937 00000 n -0000170000 00000 n -0000170063 00000 n -0000170125 00000 n -0000170187 00000 n -0000170249 00000 n -0000170310 00000 n -0000170372 00000 n -0000170434 00000 n -0000170496 00000 n -0000170559 00000 n -0000170622 00000 n -0000170684 00000 n -0000170746 00000 n -0000170807 00000 n -0000170868 00000 n -0000170930 00000 n -0000170993 00000 n -0000171056 00000 n -0000171119 00000 n -0000171181 00000 n -0000171243 00000 n -0000171306 00000 n -0000171369 00000 n -0000171432 00000 n -0000171495 00000 n -0000171558 00000 n -0000171621 00000 n -0000171681 00000 n -0000171741 00000 n -0000171803 00000 n -0000171865 00000 n -0000171927 00000 n -0000171977 00000 n -trailer -<< -/Size 318 -/Root 1 0 R -/Info 317 0 R ->> -startxref -172231 -%%EOF diff --git a/doc/new-iter-concepts.rst b/doc/new-iter-concepts.rst deleted file mode 100644 index 389e52c..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. - -.. _`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 zcmeAS@N?(olHy`uVBq!ia0y~yU{YgXVEDkn#K6F?JH!Gc!IJLi>&U>c{)9Pe*GmQl z1qM$S$B>FSZ|0Ueh#dd_UEFULyE~`C4F=H(O0E;)jyP>#R8zd6t<|Z!=*W-I;2x>Y zjV=L!T^b1o6(rUu1i7>btv2*Z;nL{`~r-OIszJ7GKF$o+UH10R&(G)QSYEz(u`w~i-TnBs+}ro=eTx1S6CB+9{FV9r8ew_) z^J$ygXK}GGeLVT8(2H;K$vFMU?=KE)(3JVMC>h@jO|DxpA z&f@1+u3YJ84AC+*HxGAmdUSV@^eS~bJG+k`KgQR7z54C#ZT;9?Tgu)>@f^0YvNAC- z0b4s~(xgu>E-KGhZDnQk@87@dYilHvlmwK!y{GH7wzM3$&(QFG-)}udMMk+xFTeCk zo12-L37xkuc@g00$=Q~uBlfz~EPh|j&hqzh`wl#L@}#4q z-@hLx>@I(AW@2*S{`vX#=g*zHcJboIty^0abIfLYExmT_+O6BSvokXf9$2<)*_t&v zwzjrfQ?pW2S(#U_TD58O=H-5Kv-0x%lqMDx7ccjp|L@V!ZufpUNeKyu<|Ch3A1fV7 zU%Pqp=cC=?QBhHvnwqChohp8QPWFhfM^I2uW@ctxom~hwTXW%~Bb+>kRa8{M)CZ?uauU!kv&CRu%YnL@;f}M(~>DF!Ars;pUwKeGk#X?QLy!9WU<9+?;+sEiKK>-JSdI_eV#&_wCzvM1bMIL}mAB zda+hI_jtu0BtQA_@$tHK>wYBq`tr{7(bLjmVvw<|3UPN&|N83crcIlwzrA5(*bt#3 zEiIj&|33HjwuvX7JU>65nIZ4aj)jXBJ$m|d>B^NWSFe^95@KTb@pO88PEJnQ`+K>6^6RTmhKAj{t5Z^zT-edU5yj2PdGY%7`PSv{ zK0Q6Hs;atp(W1ELoPG`t46RO{etu~iBaRe=hhNtYUsqCEI?-cE<>zNVfBjmua%E*j z1p`A=bhNLJ&%PgzxV^o-m6est%fD~`e)G;9nR#ps4+<=vJ$ttP^vp|_f|QjPzu*7= z-ob+h&ze*Nmz zgAT#Lm%n@|k+`_ny?@c7MISzQazttC>aJbAT3b)Auct>xTl?_&Gw09u_x9%I=9U%~ zdiwaNNLdy>I`Zb`X7-(C+S;%G{QO+u5fv2`A0HnS6qKH>&ahzDE-Nc5D`R8ff447Q zoH%vr)qD5q{{H&<=~EGdLsiwUr>CdizJ2>4XOpH-&-OigYVPf+e0_a=epVI}LrGcL zv7<-t?ksM1TYS)a%G9Z+PoG{Nx3}u=udo09)iF4@y0*5pvGpHkX1I{CWwv?#y*-ti zmoHE6P_^0g!$LLvzC(e z@bL9*oomf-;M}=)$9koC*plz;DBQ3}L{v0U;@g*(!B%tk6+icj_@nMOCt_ELCc}Zt zmy16>I{G0hKK_2{>1m7%SFT>w*4A!4)~bBvRvWLhjjip@7(IputJm+dDt$F2z`vu+ z%E~HieVnh_Y<_Mq{j}&TF@FC3$?E=xR@eRenZ8i5 zVX)z zSk(Oc`Fzu+P5turYF5fuX02YmdhXo0+qZA;?d6^6)3)lto^%YdU{&QTP!UtC#(C%ZOfV2*VotC=@}n? zpMAZUd{2LHQAtS&pNxfoJQzqxty-|)!)g8f3=I4JeDW?X{w%5;wkBd@(!)coRaI3C z4cD$+dwjgVy0Y?M;SzEEI2r4*oTFW$7eZ=lZD;yC`&gkP_WD?_boTXirG*J#ENy`uzFzD^>)AhO#oq*i>A&eqDTC@uMT1p{v8LUcKr&!=UkO+TjB) zFE3YDQ`@)nyriV0mzUQ>FbH2Cmz$d_tD@W3*tluaro6nohYufaXys^AaAR_GbS&^V zaOjYdt?l1)bFGcj&#^GvxN*b9#f5=kTh7g-%uLVaml+vAWxxN%b?erBm>Ks%R=U$= zSIti&hKAEmSFK!m^yty0%a_ldHH(R%?*HHN`uh5cf5&>I%ir8^EOEOawWq$RF-A}P z@P=p4p8fv*J~}Gukoxc1-``%oe*IZB>(Ua>j~_oet*`y`q;vCT;~b{?e?QX$0s^Y4 zc1@WQl9#7faW?j48?SWQnHh|_lRcIkIN-o=;Opz_xw*Nm%RDmn#Ky*6x^(HoM^y!d z1*=wZFh;b(BqXGyw6s^& z`rCQ?|2lel=gyuD4Gv~zI5X4u`HhXqA8u{fV33}k&TwE;>gj2Ev9l&lym;+eT1Li< zNt1%&1GW}LVGACnQ|qRzVZ>({TI-rk4z%{ZEL^3b8M^2E-mr=@X#%T!|6%Po{Eb{k3RkO_I5z#Je$g-w6t$e zP73Sl>fX?gj*Ps!tCV|QPFB{h4-cJhEZtZ0Q;1`C^63*N42+Bpz3(k4DG3S=?w7OO zRrvT=Umu^Us;a-ge?@e1QqrdU`*w?ro33eTXYievh{#oqazb#12;zrNqEXJ(jZU%zh6 z8lI)^PE1r@9ll;{meRtHYHDgxQBj8?K7IaN{`Qt>{l7maC#xSm@b>oh|6eZqf4Dzq zj?4|g$jC@lRn^$tWxlSisYmTKw6qSDvm~8z*Rb54fB)LGYiey4*4FIo?4K)aQd6Jq z|M!aJ}laK_UzeRyLSEi_fJ<> zS4C*$_U+;f8;YO%d3v6lH*emJ8xfkCD}Vi}(wkoW?2P1(WhvL!#s2>OUR+B2U4KCK zk6Z-?1$}*fHOC9WNxS&u?QC*ynPjjt2uMk-TD$h_!-8!&H<{em9qW+{j*R5|Ki4Ev zXsXxVl9!jBoSd9#BGrC4a$^$f9@`q}`HT$S({yg`ueXoSEL(C$yw9f+`M(`*Te1nj0{hoK8=csii?Z;5LcIw;Na%AZ1-+yh6~rPtE;MB zy?mK@cL+nn1?z2(kN2;S+R7!Rucy|A=oC5j0tx<>B zr!z2^=iMnND{K3F;X}AfUS6J~qvH{gyZdUT?dEdCc`v`*dHvb5XM8+74)+r}9>j`& zjQjBE>FFP_*B>42_MdO3YvS7Uk%@s%&gRG4?f01&9zA|sT3VWaZ%<@!@aFpebrKob z+1&0&85!*V|M@)6wmRY5<%}&;wZqrN@1G~ZYUiccSJN_i$>zQBiq$d1>j{)2COjUj6y==kBg9BLjmO z_Vxc}7$&b-v*uWjWO7bUPBsXvUb99=UteBa+&x4g zc=ztz|G)45|MvEF`*qLA$VjWXcB!XCxVgKJ9dnbHmw$A`b>TIZ+pL`~lO|1S65jg$ z?(XvU_iXoNc`gllsOq$S>cojFSFAW-@aEK1?fw6Lt=_W5#4c8t!Jz6(hNh+_H#avg zZ?9?gwF@u5?Ac?(%-no&vAeMDebvF92+)mO4@w0 zva-_P@;uvWF-ggt#n1g_d=}wy4GY`0etrJ0FE5WBJGOA)!otErr*zIP-bL5;JY2SQ z>(&)3IQp(SN${}MUH|;*s`ih?t5>gHw5aL*QP0v+)AqxR3?=2|hYcec9OC2Sb93KD zAN%T--Nf;grTz5Nu<&qkQPG3Tf0$32J^OTu(ZdrBn>QD`xgDEOQzzS$`SQ)1Gw08% z-xB0;>|rr7Ha6rroLKK?RNhDgNF|saQHLv>5Getv#+mXWl&L3(a_LnX=_VM zOs>bh@tow>RB z52wHvTYrCluRhUZ*|KHD&(DFXyL}JOsv8(ga8Zhkh{(vyJUBhHz(e3)w|%#XiOGo* zCpJXrEYuW|djIR|>#J9QtN?(gAI z@%7c!`1-%9S^WY@p85If=gg7mbV)Lr`S$HwVKtuv25Yu%4ULVJop<5N6%~Db|AhfR z^jH`|!o$72y!__bL|%CFdJX5NPfxv#X4;(KY`$>uqN1v*>I>;5YuB#bxwG=sm6ew+ zUCK|+{U9Rv^4+^O|I)K(&wl#!iHnO%hOgak`RWxb9IQWVwmH~7{GqozI(^V&p+QF@sRtr z`)o{&moH!5oN;l{=JfODW}Cl%ad9yl8{6sW`uyD7)pviUpPwiDiqC&@`uSt#0#1L* zkNniW)-UyE@zeMFey`iUz5GxM=hm%Tj~+ex_3PKUbLW13cDA^z?Aqna-d@3#rELA@~EL^*G?VLF>e{%El=TDtFb^3Jn=_}phMfQkKc+%14+AVhV>QzB! zCuiq}$-FIIOZ6f*u`oC+4Qg&`nx-Fr?(s(tl}iT>IFyxb+qCJ^Qt#x^>~ghP``hudj<06&1}ftN!=r zr>(86MBCPF+ji~VeK}*xfddYbk~1GYN?Kz6o?FFo(Zlce>z_+2v~@3Zymk9_{GN)$ z+}zmEP*qh`*6pl0d3kN~qk~so30)m_@cp{f)KpOs5d)sZK`TK68Pn6#)AR4`kvw&E zXYunk{ZNi0)u|t>Hy=3QU~O%^(-&!7FtuYGBY(bHD}J9 z`}Z)v{Q=|k@%!!S|J6wKhJ}WvCMGr}Mnp#5JUw0i?3ptQVh--MVR4d?{Bv&2h7A`k zT$u1fzyG*(^|v>xLRWivdp~{pRNZe*M`DDhXXmO_t9I?G3JRLk+1c6CbLR2!{;gZK zfQC1~<4;SLF4YwA^77)c^K0PG=Fa=u_oH9oq#&cErDe_TP1Y6`H*Vj4+}^CydOB_M z=g*&|rKJsdR*f=I7z|Ae~{k^?uX=#@(UHWlqD@TjPr(@Q}V%@Hb zFLtQk*-^N7>C)7%udbHAzjt)0lAd0lzx|33tvmhfhc_(upTBL}wp+Juv9Yim@Z~e) z>F)3U|M9rIA1q1UGnt*;jrIvY&zT3Yw}?RNk9 zc2_T4;NauiSMboOy88FZ;N@%9tjRE$wQAL>b?esc+qZAlEU6GpuGUFYr;3V+wejyz z6i7NE{r=3eb8~;cUcW!@&W?*WZb%&7@a4-FS?jWvwzjOSEHe|62_7m84!OCx1qB=C z&zEmY+_`h-=jZ2-8|YYD|Gv69T%zskw{P!mZ$E$idbpe0vV{v7`P5z9-0Z5qow;>u z*Z%$cmn>nqyM1rE%a$h7N3xc+zrJ*dYVU}7_xbtxPHU+Gi#f-Rx$T==T~+m99uvor zqqgVGU9x0JUteEa+p#T~mqDJ5FMoGOaiYhrUAyGufnTM|5;_ZfwlI6?QqwWjLSC~0- zrmU=N(ydu`OcS1TFdpxd-Cg|Luc&C#3fW3`37%uu)<&<7+j}a(Kt)A`fkA{T_1~YL zVq#+F&Yk;lT!7<9wTg+!mE*_Vuf!?*aGa#f<}=S`=dxwX7A|xQ4i3JuZ;!R7r>FOH zy|*u4PMk2Iqo-%e^y&MHpZir+{W?8ef9=|}>1Ss>ee)(KF;P)jSvkvJFv;KByL;QV zvfA3cvu4d&QS11Jd&`>V9?N&^*s*k}YgE*)L#^D4zCE=!EPr?B`T6;~ckkxs;dygo zWAe8*HyaxpU0q#EOG~4-=`FeqL_h{;KNg z%a<=-1`XC+?(Xhh?mz$C8xY7zPFDVsYrv!^qN}TGA^GcQxA>xOtRM9!Jn6~U5wmX9 zs;u&I^R~oKpFWkpzgJpNAh0#~edD%mX7={`o7wrZGBfwSlTn*IbK*qCr^^>CIB?^J z#Hs$ZYu8Sibg7`KTR^|4xH$dXoSWCLyQ@t$HZr=feU37hily?bBS(&`-}j5_U5BxO z!H2Kc;}3@x+4IesJ^TKrw^t4vI51h=f5D$8PoBJZ`O@*{#_ikxzuA1=Zp(a*kB5#Q zS65PMI{kE#$C6%Y^LduVZdc?K|M7#&JlZXOe^2FPr-c(dRHS;{lqOnPS=oJ5R5P3H zyEJIwpOn_r%zAM&(BX!pFU-ZO4fdX|MFWNoISC0*DfnV!-+m>#XIlZx)sH9*ew5^ zjdtb8DMDJG#1h_o`K^R_t|7kf=H(xsie4*RNj> zvS;7ko21cUq4cXxIwXSv(4Wo2ar1qChm z^X1EzGjlA3PxVinD0oMYRdL^e&WjRlg%&cFmX;P*Crk7RSb7v4Y54v9{d|kUNB8zt zFDiSIym;eA!Rhn2Z8K9>SJ$v#wrrV-kmr?qiuYvgPCE9;T-YsR=-}kkl+Rvqq&o4= zjzaCQH4V;s>*Mx%`TF|$`}1>iXJ=$=*uK5}lX2~@5|g81jTP|Ml0spJwESa@-fYk~Xv zd-v}3^z?lB@}>6oH{04@SFT(UiT~#7=;(N5o{~Tk!z39)2G4UGj&X7K&Vm5%VFR_v zGiT16Id5Lwj}H&`?6GlncCNW;4tA3jsF?I9a#JWOD%zZWex7Z$SzDrxn6|dIwyo{o zCnqO+PuH7kl*+a59p5h|!A6B9HP3FwnKNhp`}Z$nuJp!+!w;W4d2*ohy8k>IN&7mR zDe~^_?!3Ibfz{tvHmG^_M}UlvjEuA{dsFf0N#_b#M;>0e{^|4Q^FLKrR(AIF<()pC zQ&_Fz*6w~u6-#9?70V=tva)a6a&K?iyxH|F$D_N93^ujDL{6Pw?B4(6>C=UOEG#Ww zzIXxBzzfsh=XdVe+1V>YR;`eA++*(L?fp@AyQ-?{!(G;XetuO|Rg22rCNp@R>tOZl zlbA4l`u5Dr%kJEX3AAqdp%4-p>iE;s+gn;f;=t467cK~_wfdE(a8hz3C~~>DxUQ{_ zpFe-TewMp{{G402Zf&Vwa51Ccrn$Phy0EbDmRB!sH>;!{X;N|L(a_S0+FMncn79z+ zM{QqU-yMIpY}sOAW##nK(A-?!l&kihfrLkqn+_;#K6>=%>FMeAwZB5H^eMQwWoK*K z{RoSW&Q4Efe|r4VrJ$&&s4Mq+Ehaqa0SBO}s_MOa_s-9=72c}cA?TQ%{(P}}|AIdu zp`nqHk&Zt%Zre6(>QvFK<;qNEvwhVjN9s%i*99PFX>0%fbXwor+uQXmN750;<(G|( zj28TvGG&U-d^=fC>HK#29!<$fa|F33$rvu!v**s`%bWM?iMi6J;AT==TRU^+%z!#B zZtms2v)P^=zjtq*)54BhyAxTVp&1YvxijP9qOLBkK0iHpZ{D;CTv+?ewGutm zzj*QDO`A5Y*!%kdEKFCeUj6*+?C{V~)hu^`B+l-mr%s-1{4{y$)TN6TGe13k@}#G) zukV$6wE{4|>&NYxVO-$$H<$0}ZVPzvb<%t#5B^ zbiUH3U?-}jrM2KsN_x6|^*5h4cHbXL8yyq`4zomQ2tXK z)8y8@z17Uj%;Hbe z{`dFy&gVL@yGpLDi9Gy(Cw_D4#)#SG`OmD~{ruitSs8rzL65@W%bmRUgYhp~`1tx; z|H8{JpP!ri`1i41ucgnPJ=eQ)w2j_3!@_(O)hsTRouaw%BELpN-=~77n ziEVOW8+1S;lxb;cIXN;?Qma<3%uE9TwN>Zs7#Q69WCXv9#((esrt% zn`?FT{(bu^A$#`z{qCBOpb&qty}iA>yj(c?)P}Ph&$GAjurZtQn$52L{Vn&$?Q7S{ zD&`2L%&;;vh)GFF(a_cwcFxJk`S$KEcYSzxxVyW1dRp3}|C=J#^z`(+c=2M^EGe4} z8#fx7nQhy##ioj7r#rKP0|A3MW@Idk4Tcn}a7DJdq_CT&yk;lZ`F z(edKq=bBi#nV6V56g4$9*REarp*%P^I4o>h!2N>XCr_T_VPj@fQ&<1~{W~*5h0Q(4 zEObYvq{`BzOP7|GmL5HNbmGK`si~~vAyw{KqsQ>Tfk zsjHh?+^&+9t5sQb?M&QaTlO_o!FRUVT$@TGOG`@|n?38+@v+UCHEY@O<;{-T zx&HqBEiEiM3MXE7t>3)aSWoZWxw+ORQoR}b_wN0Baal zt2vQiAS5ijK5p-=n>RU`XZoZiB_#y~1tljd$IoYG2nY;p&~WV7u`OFnDx4A%6O)q{2dwW172&y+qgegz&Bt%wj`9DLlA8Z_)220^yBP29yVn~#fPV+YFF4Bc&LAKl(ai(S@&nh>ebqH5y8REYLmOW zx)>PT`{k})ycoH+YU`RcZ|2!nGcf3goj!K#*zMcZx3}e{82$YD`8h*_w0Yi&6)P$# zD>JjQUcGwN*3!bjQ1|nxxU}@_ySvM!B_w1li&z*6etbyO)mFMPax3@}^ z;laCia*~poCVEP%R;^mOa^(?$;NZ(2J{0_@zPG0`{oEYESJGSV-@2uxtb90WBLlT@U0GS#y?gh}%*;}ZB*S9l z<>zlqK3-K>={v__qSL|$U!{}s^7w>3o_u?Id)2B{udl5wE-#;Nk{MKAU!R}9e#@3E zlP6E^?LGVd-}n7nv#&ETBqb#o@HD?IxVb4cF)`6;Z`78IiQV1ZeSPQt{{G%NjaB~O z!GmUIWzCow%)pR>-P5i^78WS8#XX7 zJox56-|jD{kColr)D*TZhLb@+Cof5)>DsPcyF64b?Wz1+Q(JrW$`uZ?4tX-S77?|6jMRt*tGf zYtNoNCMG5f47RqmkB{|cXJ%H$N+pWEef?T`&rPSa^Yd!o+%Wtz;l>4)xAHa>1^4z; zemL{tLxH%sxWbxf~;1ie~U0FnD%m zrt`vpq@*MUhN)Ahy1BVAGcz+ZELpPTc> zm;3qAZt+QzChgt3_lQG&{`>g4pRDup)6$MTEn=-b{PzB?($lwYN&TBTVZwtaPgod! z{QZ9a@87?Ppqd#p8^1+AqZhowm z@K7pUi`g71yp^`>=7+$&{?DEW652EidXzO1A9XYilATB^4DJ zsky~2=kBhr4-Pgrz3UWrbadSCeanUo9{&FOi=Ur6Gt-!n!OYA|P*Cu}{hPZJ53^}( z2Q5{Y=AF^3G|^+aemomP!Oj>{)2%yp?D+DfBse(u!!j@K`@MqBEZzL`*jC3oJ2!9H zV$y&7@Z0rqdw=!Y|7*CuE^4cmfk8k<;b+%V>AK+cIHGo0F}usoUc4yC@Zj;|;ujYb zD?0b>`?s(5cZZu^{5~B;#YS^sQPHXU_U%*mpJ!oZbtq5K);8ADvs2$*R#x`$qerV& zuh!Mk(GcNcc+hYE@5avJ=dUkygkL;3Tes!-V@(Z>l$4YQiWSbnS^wAX|7T=o#>VjF z>(|W8Oi^)h?zh)E{#930%(1ByVmOds0AAtqmGRHzPR^ zwsq^?g~!*bN{I7K^)fXwdUQKA<<*syrKP1da_8^gw>K~d2nq_iV1B1ABxK6esiO1Z zw6#~CJ9qAIJOBAPmc>s`O$8_aD|heC&4|Ac6&gBq%9JaYmU{xQ+ljqNaHKufRaeX)+9(L-~DMdxaYuBy?FY`HQ;N#@v6ciK` z7iXueoP2Xrs+gFVMBB<$tG<2zzI@rTS1(>1cvbP`#YOqLABk611g`gfd~a{Hs)|a> zwAKqk|L_0*=YHni{Q7^9j*gBQt2|XE?b}yZTWi~Y+}qPrQ%`SS-QTLv(9i%75NJ!} zVN3q<;$mlK=Z^ozX=gNabxjQoBllE%+*SH|%a$!Sa<*Ogb>Mqjj7(raK*Hvmeah<=T4o<%FBz}S7Z6@{hOshD+BUYhP>KY{M;Z>a^C#;_NA{vEb7^> z@usGN#_zJTUz>+TX-&<_&GqFG)Uo3^{OsJ^>UVc`Ub=LttBXrmSeTQOGebVA;jF;n z4R7AOIXl~&TNhl4t_XP*9$#x(_9lYo@T^(0N=i!N_EZ$UzNTBl7?YZsYG=QB^XBli zQD1+*-+$QI)AQuT#qR$<9Ok$G^MQFzilfrR4>m_W2Zx4EJ((hBUsrQ~U+ukn_n4WP z4<0<&FK=HLEA>&!s$z5NlDQ@dh!Pg&Nw?9AcAhi}}7$k^`orT*L; z%YXm=eSdfN_pjIM|Ni~kdX0ULaP{tAKjeR0n8lWvn|suNr(Tl@yyWJ=+Q~gVXQpb0 z7yVzjXwjn8tFzzS*a%t?R9IM;m$z=#EGdSBb8{?zY)+4en6Y`YF+;-5O{w0~_0FC+ zk&&HkY+~Z$>A7(Pvz%F zj~_EKXos(h*~F85rc{=QlJoyu7^puwX~= z^K)-+ZO#5*!o+azMvkJOpkP{B+7HEz3puyi8yGk!O+0n_w7TysmiRLqW!W|Vm>Hy` zq|VK=wa&b>WU{*dzKxCb0d1Z|dH46NUAxwor?9MykB{%!$BI*@PSyYYD$cNA;lhJA zZdibZ*fcU89%^M^u$r5flfxtbP+TwO#pB0^pBBxYJ-f8D^zYxl(NR$zDnc^sw|5pV zU$P{{-`_tcXU&u;poM(XPumth{cWbtIO@L@m_lrq;_x^o(c{%$(#%n*CnwWBP zb8BmBfBezAVxA$-kdTujBP+|xu%qOqP+Q{Gty?=gJ5QZDwc$9X1DLSpq zy}5~1Uh>A?>h1gY+xNOno;0ax@yYV{_gc3bxSXG^6Uij2@aWyUe`n3_f2i0qZJJnk zc=(J0U0vN80Udq){5v}eKR-X;E@_c>X9u^q-X6nVr_)Xwj>y~9tXQ4XqwhJWAp|G#Do-+lY`6)fX?SD&2xc#39lg5=R-$Ii{Q z4$r7nIHr9~MNO?w&i2;9gN$<9wruh6_U@Op7Taf~reM$$4!v~`3&Wm`H=XwVd^X#6w%NmWaM{F=aB7O?w{PD9ZnTtTyZmQnX8!x<&x7}> z-qYsT*Z=F~{nKpZGwJi=e)~uH+=`En_qQMJZftB+5juJ3kdwDJcb|27Dwf3`-yR+Y zEsL+Jssb&E;^Vu%KAxRn#;jR>v(3&PJNE3s!DbPzrX=!b3EiZ4c zZuGVdH*@U%_xARhnwZ4I#>U3PJoxQ@@RvhR_?nYv&Kxn|ng8Czz@Q=VM*jZ4Z2X-k zZK}R#%n_Y5VZwq13k0O3v`h|{mXz$-v!|rAR8&-Sd(O>6Pm2=2eX7`VP&>D##^$~U z=bZdw;WhjJd^$bDFnP|LIoH-i8fRbA;pgYSQ&(QTecH5Xt5&VryLa#MlJFhz7qX&@#@vkz`%p%x3})vB~>=%?%lfuZbl3X*01OPmXt4iJwWi4v|n+tas1Io zA1kI#oqF}^)%OX#C%VP;+3X!B%$qlF(ITaVpMBY%_r`JRc7M;1Ka^tB-PLvL_U+bx z)&>S2zPt?HH&J-u*N2mrE?>_6?AU9gJsUR$zF6`2!PIZMnORv)>(}4RF`JXpbNFGw zgAI%m4|Z1zWV=M@gn4>${#$q``qG690byZmpR+vnTwGnAvCVlCzvQ0i*Wl$+^~vnk zHVaa11vyxl41E@uUK0Q_5DRM9(FYVO54tlmDA?Hixwp4kKYrhpix+S1E?+-$=FNJ; z6OTXch|&Aw^;7p@fyE>c_`fUj$HR8{AJbmimc6<0L1&T94lf&~gX~kicsV&Ex8=<2 z?&g-;QT{$oth@Bfi@=4`Io3Y6c)!Q@WXG*Hk0&$PKINIYZ{NPi&1pxE99a{y^V5fi zhmDMk{QUe1DqG8+y}7yB`L1Kiw>LLAIXRCASk09a5LmEusq3Bn2{**vipQwRH9mO! z?Ck7^4lquwrvA- zu2!trQTzMbjg85(XU{e@HQl{y*QHCBQc_ahynUOfK5x>bq~zqu6DMB0dGqC~SF6^n znKNzLwCU5?_pdk*9iErBuC49ZzS`eEWW>I#TC~V1EUYXcVZqLwGmk$$7=5m(iOFc@ zn&r#c87e+JIJhQqvxiDhXsGC)NjLA@nd72#F=IoRoQ#YUk3Y)UR3zl) zu3fR>#-&S_?%c`A%R860d1XjeZtmK>d-qP8Cgzrrx_9s1%gg=SqvyYP`BKpKkBH>C z{sucHEp6?kOP99RO}={XUS3Yln60hZ z^kSpp;{KUwZ~0uYM}PmHAXit`b^Q&WZ|CplTz5(Tigr!um*VH=PM$u^%#dLs)#}uE zzw!9-M)_2(b(E7;1B5xzt@3fGGjqOo%)ExWzI>^$8`u~5oKR6~Y!`B{h z{{DM2Rpo-s{r)T}mVb0&c3gOJUm)Dgs^o=0p{%%4U0vOesyETw^X~2_TznyygJt@i z_pe?}nl`O%{;B;>x!x)&D#q9SRGrT}Z{9r6ikCxg3NEWVu4hOr{W5LZw7|t~jNldc z#>U3-^70G~Tep6ltnS~E$KntpSoGrV=IwJgZ8BnIZGH7BYlm1!e*XIcy*9tSGRMQJY-(^3u}x`~UyDx3{{$(ob4idZ9Gq1MNlo z3#V2bQ9tn@SKZpW`dE*ou)1GPc6PGS%=$kck55wdj*5;x-YdO)-8#QDmkJ*9_XM0z zO-;T3*i2Qq7!thy7p+{ma@Vd|5{nisVluzf@a5aLPkU#^?5p{?$hF(8S8D0nwY=G8 z{l|Bgz7C6tk(uhXb?esF$+;^+RxMq+bjgw>>(=EZCnqN*C1qq}6crV@xv||_mv?W^ z%lGg9AD6Gsxw%PIM~CN}?c$)7adB}5>)yP{S)p+NMpLc5`#OwwBhT zMnglxrnrOOctriYyu1Pf4Rv(RT)rF}96b48f{bO+lLrTzCEC_TZf0ZHQ29Bnwzf7s zJzZN{TdX@YB!oq_;=_Z+Y15|d*<;g|SWv63VmaR;KgW8*Ja11=-x&sq+S;!l9qo2? zbxll6+_CFHsFj`FzvJ@tM>xL5Y%nu3F)1l6Jy5%^A8_5Z})r6{{8=7TwJ{W z@3-48FE4*+y=1|H1@GSF85?iDySx1VkH`JY%*>ykoxObV;?BCiR`*W5ySKMH+Rw*l z%a$!QkKeTQOQ=}>S5jA3H!+za@#w*Wg#7$|`E&E_>wkZHdwYBS_3PK47g*T;|6|;I z@Wzh9RAdfOK+Onh@=K^TykFkF;)6n`OIKeXXbs1<+}l-E zRd3$B`7!Uj0ng;AQ+2hqAAhV^yLPR6pUlTEUuyPS>Zf%Sh4}L%ZoYYXn(pK&Q|8!I z8nrq_Zcg)!j+O>ZZOoiCYt@Ps8QIy^R#s-90o9f~XN4V4{=t_U-z#b@Q=7bU-MVw; z!3p2r-ECU^h5Kt){?sCE?bT;zn=>6E&u-gyV$L_X}!wzHIa)~ zujUqynQxLQRKu^o<0JdVdHav&dL8Jv^XBno#-eErC4Gso zxVXF0L<64cFE0Yq)0eNf>!{#nb@1Rp8@c|oY4JM>7|))N%>ywCMbN`}0W~4R~I^e_#LS$Ho=5PJg&TYn^W0in4HVP?{*g!zLB&tiT4^ z&LqR<4ssx9rN6$4iVJ966zilpg1#9UFAf|y@Z#cP_kKCv@T^s9)`)Bk<~VZV>5)$1 z+S=M8FqkxH5~x34^T@FWG!Gxc!0`P1{Ogx4?J9iC7Ng}A6!dBGT_f4X3T0nk-<2y@ z7C$?~$-xn^CFA0|ySpWMj@{i|?)p~z(SL_Y#zmDsJ}jIyOKPfDXn44}kIJks)DYgrT9~Vz=H`Z{N1w_La3R^9c{1?zg=Ami3YU z>~E(V7u`Jk@=iKzEx?{i;}~agh6a6y*H53as&7yf;84mj`+Z!#zGe2i0t=ZM*H?$z z`7dXfOx)G>!ydFq>%(5o3LCi`4}pEUe1aS-ZHY&GxjH5_CraGE*2*E+#CGingB@sb zd-Gv+%Z`c6uTFqg>u?;I;4sNJ$x(KuM1u-@ql6G><;MzTVdjp@>;fD|q#Z$$la$#O zESF(P@&GN4SkULg13D*whZD4{<;uiPMvo$a4n^?F1S=y$22VaFLzM|ndLjbc)z}ui zWQN&5z9FCtTW)2b6az?lGKXT~upCPS4A!H~r=4fAk20iqkU6av%7%lH)poS8gv z8**(;O+ z*Di_;FIHe9-N>A%qFdPN0= z2RApT|G#_g_mnw*e}8`*xjFm#y4B(9_ifhPG^mB6*+X7aG*yL}|yDKFr$$7ZdOyY)!wUyPj+}q#s_zEm!Cdqhw_}9H!Fje2L%T|1nv9B*!Higs>;`{d?hU_D=Rlw zH~zua?CVxmR`*_8zZJUB5?xn}3zyglY86OCr>|NCwBym|Acf`DkNQ{=vy z%7TIqyCV;4w7UrJbCWiJj3K;huit}V|E0@$MZ9< z3|TdGs%Vdfva+(3RaC&Vs_JTQFRwLg*M6L^ZrwU|ez^zjt*x!5rltlqc6R^X-Q8Vc zH8*4b;>F6^+T3j=B_#nXLw?NmTmJv=_xtt#|C&!>v}0Kdnv$6b+If(Deci*e3-|B0 z*VKG@u$kT0*B8=z+|hdO+__b&R?W38Ul+6U((&W!3JMKJlME$zW+ZQrGB-87yQA>& z&CTf*VLo##F5bL3bH?HIr{}k|wRLoKJb9AB*M9l#-QMT+7wd|Pi$g*}Qc_fO4qjjC zv|&#{eZii+d(HFjy?OFPMOhg%UYB}a75%vdS|_?<#hp7bdegc2Q&UsbeP$>`6gac(Q8zL&nlg22r=ppe zS@rjKt@~H6UcGqnVq;_DkM)r{Vmem_5-Q^Q@Mrz!}anW-7P?9bQh@jn#j&#x(KnKmWi z-1Ogt^vWGnT_U z&YV5V%fn-1YkT(W+0c-XTeogiRaY-vx>S;fZSu)ErrFb)n-7ELfV8!L|M-}^$XHWT z^VO?YM<$#)<;8RO*RNj;3}?@tef8=Ur~^pE8if-lPtLTd{In_cbV*5xkB`p+QyItX z*w|PVq0D=GD);T%mz9+zCnv|y(ALK0?Cfl9ZCzbm9UB`P9v;4EV)gfTzVmD(|K;W9 zfB*93&X!DJ28L%644^4`EiJ9MxVTxfX6@RwOHolVHa0dWD9A@`@{GeypVbu=9mB)R zZ*R+8wrtt!YipIC+2{SoTvD?CLI{VhetG%#6DK?l?h=%d$w^LbmKXXfvPF5z5|(1Q zX;Z+fO?c<}l@}F#`ua6?Yu40BlY~m1O^>hJxN+mnz174Ig;+I-Z+MMW7I`s8d^End92>T6bHvf@U7 z%f|rMVjIaNPFuEZI|bgm$N<_~aU#WN`f1rcjNDtFy?T`eTH5|LH#yl^ZE_<2YxH9z zoLNAN61ZBKeg~*cuKf4sC#SI5m#<$R^15XNmz0+7EqcnevFhvBubj{PqoZeU-1za- zRPDWc_Dq>N)l%l%^!U1!ixzFlzOHwtuDW{n#*G^%Prh7!zjpbG6*DGH`m`%#Pi<-| zzu4EWUq4JZ@9${cq^fH2TwFKm$)iV$7B4RT|L^Z&_x^M9Y;T`GpMR)@Q{8_a%b{In zdluIu^ZqYjVP!q2v>Ds-1cnCP=xq^EQI}qpFdS&(l}>2ev1`|%Q}budk`fhV^}TuX z=G`5I&7d_HOHNPMXJ*(Dvu@U`sF;|Ts;XTpS86gm_;!Gt>h0}iXvn_4&eF-V?k%U?Xv$jt86E9JT{Km@d_ z?edi?YgVs5T-iSK2*~Joh~E+|QaLar^6h{bIIcTLWk=JNjc^6@DtDPhTfeIO*$qEA~(>yV2@=Gv7jJv}`)ZrIRpEa&&Pw^dbDDT)P# z0e*gdadC2W!Lq`_%nS-vJX^I7#dvvppFG>Wt>(|)zYiZvFc@TCTQh0Wq>hdbR&KEg zPk;aZEzCdh>+9?5puUtPn!-h?pyu7@c z)Mw9{m6non;8Xp_N30AB_U)_t|L^a+cki}s+a}RAb?Vf+`)Y5WIMFd9GAld#{+`O> z^Yd(1hp*4e$_feznPZ-R@6uB5>3XqQNl8jy9>i@(U^LN6;o;>C4houQQ)!fTX2!a8 zdJLfHt!2Km)6UK^t@@I|&CSigFohpH)1KB_RaK=U1{y9qb?TJ&e@910Mm{&r6_=Wt zn`>)pAMR)8lZn`t6PcO0a@Ve^>S}ABEgLs_`uM1D|9rK2J)evPL%q3~*{+>CYybcK z?$QYwyn14*DWU0jlqk}}7eo13q%i}lt^y!DBbpTGUQBva8(=b!ET^8cRA&hHRz zR5xiR7Mqe{*wtz}6i*B0N1a@9Zc9 z9n7+F!SdzLKRrEtdb)mjQBhDxNXu!bu&}Vq%*-uP-=;JE7MXH1NjHAqog+tB4sSSi z%uTGDRennJ_PnVRCVcq#@t{G^;fFkOHWG&ooShHv*|TT;{(rkRZ4xTmpzPiU+PU!h zb+W{=HEVQ~m6LOF&OHD8_RX7`nwq$MH9sF5Y+f6^{ZLQGSFg&-O0~&9UtQIf>tDWl z_3na)PFZm*IcB#{obY%t+pD(rZ}|GShZb@I0-&ipH8r=Zy%Xxcy@^cPJN0N%WMrhN zx%vA$JBvR(IT;rhcfn`Zu3eL!1}~jDWlBePw|?9n3A<&fDJdbLq0LQAOw7zjj~+GT z2@VPpin^M*F+y0~Z%^@azBbTN28M=)v(0ipf#+AQUAvZ=n(FE4sj8~_Aw^YHH9PzD zq)C$;o7rBzcoDO&=H_M4aYb{s>1kphro;^fJjw{FdvIrHpH2Q=-k%+FIVaY|VlN3s$T+apXwL!GsMFI-m9( zRcCzn6x5X8UH0~n0cd5)(xs{Y|NRB+lr+f*@b~wxtJ}ACuWei6+_`gESy`t|o3`Q4 z)-78sWcp^#yg5xbx~ZvYN6fnJZqTN^nwmX3cUs=5($UbEFlEY??c42ZethVWG=6ty z=i&tmHq`zuQ~Dmb*lps}#ElWF!`2F25)k`$u$le)ySv(|s#7OS5D*Xmof2kmzh7A0 z?*OOv?6dO>lijkjvpqdI*Bn1|=#aR6+>DtsTU%Rq?%cUHcDI<a`)hx1+rHhL;lb_v{Z}tvo^6r|+If3sdf4IeL}K{4BVlsi_HSG~B7z(9+7v%)EHv!jH%O_Hy=hb7s$8y=V~=!wj?BTl;E% zKiI17H)n=PrV#9mukHEw^D;6FOia$4IkRTPiV2e@DHTbY=iT}H`+IV7a{8GWjloS&z_%eZ(sZC%Ze2m7F`Rk_D--be&&<3_v(!s7G`GOUR_;1Yu2otDkoYU zw0rklDEay6spn)hQ*-lV2{v)Y1ii$>#1z%*YooU(9%g&=0kX`1sqw(ot6!g-oP4}b zR{2?6X=&-DOP9WW{hEGm&P>y6F@^(o@7fv}3H|fdoqytl$D>=@wrxA!FVD>2~t>(`^Aos%X_dgAKT6uCL=?VX*IEmU56LP~x0 ztgeQ$Y5BLeRW%O-W&4=;-V$EGuJUXlZRdJI_{{;lj0RX*oGO*N@oP z*gO!~vvg_dyE{7zj8?5&$vJ(}6wp2fJ_ZFv#e-+g@SIz#c=hU4iMFfPt`+@vR1jcb zsQdL&-P+oEQI4#vtp9vF-meoUOlVkLA5fQ=xUi?k$J?8G{`vCa;?0{jF)^%(+Is5n zVdmo>-@VI=kB?94-Y%Y*m6dhGX>wm5-|Vw?wZFD3Tb33a9PIDkzkdDtY170aJt89| zV_4W23M^!Pv|XI6?%yFa+qU}Ksj1qmOpd<3z3bNL&5>WdawTZ>Zp@)APai*fwk_?f zl+5wft5)&w@T^+By7QCzlij;^t&80)cKqY5Ten_bUVhlu3snAJU*=Ci`@%l!h?dEmc~a$W`Ykla*mF;!sb~0xv;SC(W6JAqM}TV z3N|(}dB+cOEk4`5X42fbcOM>Z@7%}2{p(;edsI|ZRaI31>$2}`i8(nu>N`L5-uv|F z(>-g0wI=rV_DO;{r>E&MGBU1RyY|teM<-97WN3KuB!%bjjU2PcVs7s4&(F^@Gq5l@ zdU>5X(kcA#68js2EwLBRpMO6+zK(IpGuLRl=jZ3QE2rAc-(T?X(B|~>Wu>KtGkq%D z1OCl4PA@4bv5?{GKhDj`8M!4x@NMju?HlfhtHpd zIas!C-CCg8dH%WoT&vK)z>5bC9JqKySuxns3`e(-&}*lLtC@2 zpLptjqFw*4goMP2Q>WNiSRPpTRf})=`t-#MjV&G=oSd99EsNC(J+4g-KxVe_x*(B>8c2aS3HHD!cVG zShFl#xX?!pbU*Hfs95Bv0GMjUP9qo)!@iIZ?Z5_wLyrI<@um@)8m@q@S0wo9|yDacf;hYHI1< zU!@D5x$4gU_N~m@+gnsrG&%V(coJ&Yu3aIap|P>CCqMc6`c9oXb?cTbGBPq++S&*A zUoY$2{h~TqS64UHK%ziggh646dMMx4Wf|V{?v$2;59%?@y=4*|9j&o&I(uqqe=jR`;S;+9!XqGell(4%dB_)-WmG$N8 zS5+021g;uRu6<8qH9gq5^Jy z^!D~TWnaiYwR-=BS8f5((bgp|0yf2$L^vlUB`tREf4APmNIz~*gSFE81;+iywKX*_ zUb{AJ+O&6neQtfK{QBx@hoCY?`c)gb{^O4)mLFnaax5&|*wob2*5>y9Q|9Z}vM;*l z-1C+@yg^()u3%@(4o8laD_4Tn#!R04`18-)+}u;APQ70y$JAJ1J|Ws4v=^~PWkSCx zlmVL1;5g#WG!wi_u|{PANPwB4q-@^InVx=kw&g}UI2@R*rzkV+@~3lrkN2x=e;qG( z;>iUD28+T+ExUK`Zf$Mdz5Dm!cK-Xp3Vn|+gcjUi_{|NJT9%k*Uu$V;Igsy>Se z_q5Tc&p=jIHh7s&XK(M z=H1%p?eFgI=ie`LNaNn8;^Ja;pBVvRVPc}9rSI?ADsdlr>y?@La%b`Lj{Pkrkvj?& zPM>~#Q|f6ZW@dGt84S*x2P{}6Vp&+&nm3lb40>}v?r&!C!=jxZKYlbcG%PsazK`3< zuK&2VmsiuesSiS1TU$j%Mg8a5SXO^~8C@3gLfA_ z<$AH1xnAaYadGkDMT-(nZB9QQ6BAQYQ?qLIYR0*r|Mc|qoI7{!%9ShJ;(8ACXP$gu zY*9PjCtF-pq{PQBYh{vpO2mOHh(Y5ae^gY|g2g_H)BmkqyB2gHFem4e^Vc?Q-rO&5 z?{{^kj=j10_ZJrzUkGGkSg>-Xrn>s_efvNsA}h%$Fnn}uJa^97*_qS-_wj!D@87*Q?_jR z^5|&yeB0`4(|0IX^i8f-ZtU+r-*5kqgW*8opO24^zk2oR!|(bV(G0Oan3X26-&|^+ z`()DA?CZB~-C7sD-7hlI($aF~8e_%!zrVgJyY+z9w0-&db>aE#9UUCDwzlc%&sDvr zb#!(*#>Xv^RABfx@60^g+fVLKxN9UTCU)xNN!$8=GF4A2{{Gt9*T?roH#$7r{dLpa zf(W|}e2@2gY=0du#Qe#h4s>+*MBzJ2@m zuwCAON0@`<`T6;vx%DrXx2K#Gk~u!pM{WA)y%ir9IVe~ZJ>h6eRQH=Bz`>H2mj~Iq zGG)q?JA13kqoQujFic*xYE?-|2?K+rr6uG@Q7I`YKR>_3M9?OPXJ=+gw7tE#xqS^o z_faifU0#0v=N~I#V`JaFdw1cw?d-F5MNd4kvb1=ZH1zc3BqS z?5r6x8z0P+$N2 zfddcL&Jz?^bmraN-K}QgrKP2v_YF8+t_WN#B_*|M*RF5x?!JEbFfcyezUD_kXlUrC zCW(@ReG|h@X2`bh-+cIo{-w9SrXQ(4_vFjHVl6GLo}Qi)|F>=3YHDt7JoAj*HWhF0 z(@jlG!otGl=G#TJ!!ok6mMvX6bH)sZ>AE4$e-_-8w3@VX-MTip6DtEV6DuB^I_1U7 z%gf;4=y-67W^jbgw5~3$H@frY&Aak}J;$v2v0+4gFb+Oakwn zOH03get!NW=q&J*`JNk&c6E36%UBv&TmSy@^77B0Kh^!_DBOBDN!9zo%#R;GIyyQ^ zv~7&gnc?wuT6|>W%}bY@SS&pJ{On3!i6pL`G-;CGTr1a-=o=!fCXM@-E?J_ZqjT%_ z?LwLMLaq#Dg(XXt2viBh{av|p$&w`*nVF8<*YDkni;K(4$?>_vI%WQ}X>N0xA6Eng zU7D&Lej{hw+O@iG)N;&jA3EgZ_b*>|e!)|}W&8H~yGpw))a~r<9S5EJzInrj z3&)PJ9X62bpFVwhdTQ#|Wz~NkSzns&>*sgwV}0@OZ@Hg1T|~1pGuOuMzIOk9yq{lR z#`&pJr*4=%$Flg@$;s*kZGUSX2R(zW1^DtZ*w}dUu3fvj#r54>TyEUF+1k=#Q~mAC zp+ik))3{lhPMz|SIo>a0xoGiXTa>a@O^|&oNPnK}5J$e3IxV-W2_t>cjG5^BEY<%r<}jE-jyp?Iw&+aa%CKr7no>sLhtX&kH%J3Rw}Bh z54T;|S^PY~hQldcL!NDkm%l$d!=2sb{9>$@^Pc_v{XOvl%S2v*h93nE>CZ1*+_ZiB z_I2y@-Y{8NS$&u*xQe^%5K=+k^MBgON^Kjt^Or9RTd7Z*KK=W*Z+RIR3=CiPss=vx z|MBC;idC!jRefF6U+8#Z@5F?IO{^P~4JCRW9&WF$th{>dT2p-$_X6&E2bWI@yT2^& zjS-TNIFVxH>+3sr?%aja#ZKu?|EB3iA31X5%$YMGp`nQ<1e87)fEGQ=e7mQw=C zIx?EpFi+)|Qg%pjoVO%1BPVCg+O@K_RVJ0kclY!CsjjN(>gu|3_3Fv^!vz*HuCA_Y z&Y%0d@*(ptC;7wjCFSMf;^O@Bb~Ps^D7qvC2T$Iy!=f_C|AkLLXz0~@_tvdmeLBUc zdSX8li-JIhd7}>>Q=@}|ozVZa*Fg(H>KiXF_y7F!kN;ZMCbpC!JLW};7gtwR*=-f$ zIFf!ifB)ZaYVUJ9{JD)R=QAEWc<}oA`2Sa;6a?n8|NQwAG~QA0;K1@Q7Dr|y%SC== zWo3|^W%gT@IF3Ab3<(jLeDci6lPlM(`EzBLLW`rC`<0)M`|Txoj-8!t9vvNRzg3T; zWkvJjijoqOnx7U*N{@n9Hw&=Ml$p3}?_OI)MMegLj0+1u=f(!FZg%LfnmKdkg;KTY zr+NAL-SeMxNu7AoVesR#sLCCrnwGE^;65m(S17pFRZy-n@IKR@1EH!ty1y z&tviW_3RFI)&HEc|%nh)Zed*OnF*QPHW7kN4MSEfwInsA^?Zb$eUx z?d|#UmPJd}tjURrx^-rz@#4jc?YG8t{AZsjBe-<;ZqV-SW4+Rsm-!l-m|VGd@#ML4 z&puXwR%~8br6{n-BRF{S(xs^d1qN-2U%!5pm6a6|5(-}zveHK_I6C_Gv$L}$B_-!anX)*ENSb6^(BJ>Z=}#M9{*j|co12;@e3riW z&|X~hOL5|@Etx?!T)IH@8{9bi&D>JPNaASeQPBo!BhX;?d}HE}g;1lEY#q{AwstJ&d;cuJ9rSW1zLY@>;4f?KbmdJ7la*g7Oa|%x659t>-3-zj z57P_fy=GS8HnLpA_o)n|)a0~a}>PZt5*wyPVBh7Eti{@ zH`PF5Z%6Hi2M3>?p8o&){{LUY=i8l<*LZht@9z%}50}2aCa5`e>Qw8pHwt|2y;4sf zJxWSUGz|E3f99b>hyMQlo_}M*!4oH5{9XEW;_mYI^K2@EG%g-In0Rwjs=P0|(aV=F zMMXvL-McqmrJUsv_hSFebJnd}7rVQxSJwL4DG>0Ai>o_1N!7hyu6DbQynWrA>C@eR zhet=>-k5wmBqZcSXO5Y*x%v0C-xLfDH*VPQLH5hb#eW)=3=KCfUD`Tl($uL_XU^n2 zeeKYpM-LCT_x1IOii$F;{-68t^XKl)&YjiY-!*u=R-QCzQW_ZKnC)J+jP0M9fx(X% zRugtsd`t=szFf`K+1Je$5xRW&vj1GGuVJ-HN=iaPLcfaH|4z0Kkg=&SFgKq*XVQcT8(zs@ zTN_>e;=;mX$Br>h`F{@7e%SqfpR_<=?ehx@omXp!h=|mrn1U-;b^m!^>ip)XSyon7 ze){x@k&)5GtEi|bHC6RbY*f^#q>Wp)Zq3cjP2}o7p1k?y)2C0%%F1TVnq{zY*Dfn- z>*_Z*Hs+Y!K6Q#qZQ7J68zOXSYyWoH(cG^D|#%W#x&u&z|kxC-c+pQ>9IumzP&)=+x$B&_uT-cd3pJ{ zbLV{2J|F9qo-}Eao}OMv_wVQP>x*{Y`S}^NDOa#FM$g>Ra_8d3hmRh0jf|XW*1GM; zs@1FW@9Z$lxnYo={@i@2!x_+FWoHd}tSde|`1JI&xK0Ga<;|Nm>FDUZySFzxFK^wF zB`Q~nGG5PG8ES|{`%U&DZIjJ%a$#7c9nVu1zkFK4m1yYt#A5t@o#lc zo<0o?4?nEc*WGPh@3nYnfA){Fa8 z>pwp``{`5B!Xw?{`mbKT+#5RIxt%Zf{=UDmc}w~~v3Fg#a3OMY+QeYLxmK!*ilE^s zp2Jqw*8K8zGV=2CCr$+AvEHsOuKN1_$BrF)@F3wvjvZfCR@Q~tciMQRnV6ZcUb$kx zBW;#*!#%ixhe1I_CFSFzqxtsl*S@*Gzy8;kmq#9+p01yolJe>EXGVtVZ*Lm&KYDq3 z=HA^U%5dTG<>cgK&}qf*_x<*Bb6d7$iwHx(&rhkTsj21V-xCkFy?ph`4Rn)4*_#`Q z$;q2jPm3`#H&2)#z;NK)Tx(NPQ(ax%yLay%J#s`ZW(Na9L1`&yuWfEzN*kXn=qjb6 zu9Yh@LqbIUynXaYNKVdgwe*zu_;`Iy&6}4mgHOenJaM8R2TN>hZ16IljoY`+H%xAu zGUdu#>+%zyGMDef|H5%IYY{PK2JE?xTd@Av!I*x0jY&vw>WTU)P``qrI$d)wLB z=KKr|k9Tx-o}8rW9kwQdk>SDTpHWd!g@uJOeCucF=M)Zywl9=YilekJ|t9CRfU9HSslJUVbRK!nPFjKXI{MD|KG0q zn@*vfV|BH4^TCRbk60&Ox^rjFv}tZKhaPhK>@RwH>g((4onqWi&CSg2?JnnEW@2Wx zDMIJR?yXx*6+vL(-o109I6^WdB_-$1ox5`7N^!lI23<*p3sH<|F7!*zrR94LN0*}3|d-Re)DW9A0OkD>;Jw?B&+kG#k|?GrA0+UBO-n* z6H)y1>6418D(B26+gLPopZk{jUVU&$ldAQ&(?4|D2ft z(&8?ZSsprRfxp`E!-td4%rJZh2A7xlPM$u!zqhwFQc6;?aAypILsZnQ4nbuG2J`%T zHr3yB_7pri(m7o}{@t55GIlie5`#lh(xSzSl^H-=Fc=vb4GO=$x+-m+r*e9^*WtpLz(7H@L+6X|I8jHL^3rU_OURx8Xs;YWLB&&1l z)~%kNo}r4%FH7n@qYkkl@xZ1Cx3<`F3b+@);8X6jIn0x%# zu|p4!&NNQ<@%44@mD*bR`dUW^hq?Loc7Ay&Y3b;wsCm}qePtgE>;6hlYlp)I56hs08TTOa_LmtgMjG(9@?+R~sGxE#&z1di}$# ziHV7Ead8X{bLPysxY)hAswyixd-jYO4w)<=nYy~VK5Cbb9zA;fdbq1AXd-CC6JB0k zb-y_o;Oo`A4%@M7*Q*yVO3KT( zZ`ooX(X%pmc~w=_sZ*!U%`i-UbflA8TyM&>X?YnL0;}$vIpb4XTPxSUeEoWPSy^6T zVPWCY($f9E-&qF-2j7^wLi38ya=c4FE z+hlI-T9)M`_hjqVt%0Qr_4n&q7Bvh z5gQWz{P+l3i?gfb<(r$EA8uX=U&~YQcJ-PyIrsO~dQaC=mFn&3;gLBMzptk9=clKB zetunDUHkw4vt~%Ru_4iazFlj2-n~6PZ|CpV)z@!V7QD5GLoa5BLEaq;#jT(-Kjh`* z8yynT(!PDaUw`?P+X;RyuBiQWwtEVGe|tOIEEkl9!3%@r&RjWigvBh6Y1NiRiyi&(F)> z_ml14vRq52Qs32_YhJ&5_s;y~1jr$vk(<+chu0bTEGu?{C+L2#K0qGiT3E zPfd;8UswC-$w>wVY3bR)%l#M`{`~m^8h*QVi-BQv*xIJrieFz|7A*3&?nyS9`TX2m zW(E!xCQ(t)l_~;ko4zl+^nU+;zPIv>^UtRn&17X|HTWK1|5x-&R>S_E&!m$aK=&nF zxDX(7eC^t`n>TM}WQdK8J>15tyv)&MnbW19;NW&XS+2GJj&_U7%E&N)4k!U#-1tDX zs;bJ#mXB}hg9kbH_Eajn_r+|>k(6oMxB1V!d2+S2wH3O3j|;@6&YE>9#VGO7BG>K* z3?T{v9i5$m#`%k0^z`;lo;;b6K~GOF;NiS^a?Z}qKQijRy}3EZvUr8&7F97};pFsm zc2##bH!*SX;NTT&vyXO(-mm>GTj-JJePx>S+UzLb6U{cO__iG02fC7hojv%f@T0fY zmb|>Ypy?`Q))_^Af0gpJHz!5}1zlPhyu75eG;!CQIWp~s4ULU&Z%XwJ2oRWly0ozH z;85n&*~^W((tZ@2Tme)*#2J1ZqMH8c`5B+67SYrx|T85He4 z+9a)eWzPw(N#CnEzI^=(x|^_3qAM zcSpy@Jx@R<8$U8%yJd6w`CGScb#-<+Hj0UftzElTM=bl#kB=W#ZP~Kr=H_(n%)Gq3 zcduS?@u#1iRr=z>!fo5OeV;gg+O%a$mzq|5NZ>hKAmi`lwX5hU*X*;~wr`(4abn~3 zy02HmCE7~M%k8VaoVays)|yHC_wR3SXP>fi(IO#mQ8;VrRM!(Z`T6?#`so`ZoHX_0 z_AJod*wfQ9XU?3K7MAq%=bt_m@$&L!bp_nr7@<>LU0tMkc7`GIzh$6iiMpCvkm=6K z&&#Gxow{U+ijUwWMRj#`1%-t7_x9G+)v5c-G5Xu&{f( z%g>)Vqoc3yA0IEj&s0lIO-);S^^zq=k~XecyLR^M+2!xY*}?kt#YN>srGl-R zA&-63g8lv1FIvQO{NtH3XO8#FCrdng^QPv_4bXh#qD4x=!oqCLj8C08?dy$ zs>;sN(o$1X)2C0LdU|;5>HpKw!I7Q)+A#T8g2b@|gM`Fo%a?;zxq-SO zJ$Q$?}!otK3Z#Z$n!`RqZR#ukh@Ru)N*2V3udU8T= z;glOUBCE2=bBr=CEm`c| z|Hxw9k|kfB&#z}<(9+iK?d>ftDmrxNP}=!HKUn67LP!4O-GI#xpn*Y<42E<96hS7rNzSJSW#gi^Ca)q7S44o0iTst zr=+Ks|M-yj&i+8^S$2N8jLgiJFJB&<$hS5xz>eVn_yi_4&>G*~#E8nu%B-walO_qx zIjXLrGGpewx*t**3i&!?OIr2VW9?nTTw{4qQ`$YVGd~E9ffsWm2Km73XPi}ENQ1cDcdROzGSM&Q@F8GASY16`7U0F?AZ@p^c zkt}+AjQ3GMaImnJ&+VcWpt3#iIs?NhzP`S`<^J>87*bMGJv}@QoMfN)zFJ6J9CSu{ zZtmQP6B!vQzP*{bY}vBiyQ?!YG#DCAKlSqRa>})~vO03~=;(ZYov zkIUEF)cvtAHy2lXcYlBV%}uERKQ1r#|N8ao&zgPUD@Z{jJEo?l#hzELU!Ob`G?p1( z|5tU%!#_ViD=R6*#KeFPm->jYeoK~t;ned2i)J?7rp>pTnwU5_IrXN$e){z3z|#O zS^wuFyHCpIn~#t69xj}-W83Q0-cC+TVP|(1KYws%%7T6S;#^%*-{0H25DdJh>$Pq^ zAZeT?u=#+veq2a+cyRE&kfgbD=YIV7adY~4H8rs-B1XBnxjbylekWRP3FV$%c+GUJ z+J<$VF)bw@zI=(U2p`f8Lw-@7J$e7Z(>dZ{kEnRaMinH#a^$K7RZ5 z?f6|KoD2zBSyp*>ETpBSfAqPRlzf?{8~yCeOyiszpjm%!Z|@y9pT2l8W5x`R+2V}- z$0tvkq;&hD?`$*hu{#nxY%z-~Cg-*MnW`ObG}A|0d$noywG}H@GBW(A`FCYyu&Agg zFAtB5tZb*(Ti01rr;2Vgeg5PL%lneY$9j3#4&S&@adT5D7Z=x)bsV5I%ni##ir(L| zt^u)DmV(UtRgIhEpt6x$X z7y_cBxu**}RNVSB;PtF9;YI82F9CJZ7B61Bef#$*n!(S`&E@`F`?@S6-ow{d)}~^^ z-o3VkpaVptq@-eFV;LBJypsK+t*w0;d~B4k@Z&dccp-7$kT+qO-Un18V8@5|-$-@JJPIw8sb^-%_KF|ku8PHfq-<-^Y!b8~ZT zZEc1Ft3p@X*w_@vynpxZ+t;smx8+Lz{FVv2x>xYDiF&ZFEpjR(6)lZfkAzoon^g_9^=6ykq_`)z8n#CVehF+{U|Mt}y5TncwgCtMdg1 z1+nqV@h}t=7e{YSVZ^UAWR6DKZQ zv&Khe(rrj;&AltwtP5(T*cI*DdwKcZIdLo2uRnkOeEaE@6V9FUd-Qkau3c6?7B5}8 zbj1pf72oaZ|HLw^M`EeFJNun$@4VywwuYHE&6*{pSl#frqOkDe=jZ3|J4(&m zv}w~le~E&hHFo!*Ids=YO_g#yxF5IXxNk|Me?ZzMOj%*m&Ozbd0n!=rGV5>tc65NX*F4FigFPv21QjGk0>vuhQ@?^z|6$1K)7#SWs zXIUS&cUSfIb#vz2xv?=>-Dd_vy!7H_7pBeFxN+mIUBAA(ygYZ#oCnAFO9glStnDz zf`f&3c7VEbuV21wTrVXo{rt+5x{u4IDZ9KcbzkkAnYnV>G_lDib8>U1PMV~&&Er0o z5%|jYA07(Z=W(zwHU97bO=Kttbo8^pWWJbI929pbF8+LPZ*_4|5h%~(W}zI^#} zp3!o@xn4UKyyyP<^=nsGSB>5LIUP#k3U=Iw4j&F*8+G;GJ-;QOb48-IzB<&(oxke| zvum8gM{c|9f5MyREL*m$m0KJ%6!xKI{i;<~_5W%Z7@7~RSh>;@H066{rm=fqpy1&R zXU_OYOM|ZSFgG{%pKlinJ}+q9x^-W^e7U|p{`?%v;K0C-*VaaVe}BI{{`R5u^(Xgz znLT^<=~JgnOihiAji*kTGH32wOBuhAkSix9D$fVsh3fXAO-Y<5#aG!*f}LMZM_W63 zd!FpW*v#MG-lm_Qx72D@Q_YSO+!}QUpZmt!-TQgx=FVdEpV^v5Tl`X1@?~&yarN}{ znC0Kg$f?TwEt&!J0KZcVzKzP`Tg z{PJoskC+)C`&;%tc#seuA3wus$8HW@-l>x&&9W>`3keY^$=H!~RqKV>{A<(qtz4-Y zvxb?$XAWqoj-cI_lZ6`@x?(=GonY(=PEHG|XYc>_EBn+GP0)lc zvr(1~^M`{<`U`%rZu!V-8lwPcv;P66q_4W1f+-%i zN>9|MA5A(t&oOz`Jh4b|Nm;mx>Iv< zWJE<-mGy4jx^?W>u}jB{eiTd;5BSqmz9xC%LvI7i{G}T<1jNV3M@3bgnPKSM&d1Bm z-5jmI*LtF=%!PaV>*J%MZr!(r@JOO`IJw27;&-P_Z1=EcRupn z-#GcATfcUOxXoJq1t(ZJ1Rox1C%VB=H}+%zP@jLH}cp8fP(o!aeX<% zf(NV|ERSp#_NIRLs0>Og^I1VNt{g0nlt0E7Ry2bqIsN%y - - - - - -Permutation Iterator - - - - - - - -
-

Permutation Iterator

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

Introduction

-

The adaptor takes two arguments:

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

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

-
-
-

Reference

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

permutation_iterator requirements

-

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

-
-
-

permutation_iterator models

-

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

-

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

-

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

-

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

-

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

-

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

-
-
-

permutation_iterator operations

-

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

-

permutation_iterator();

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

explicit permutation_iterator(ElementIterator x, IndexIterator y);

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

reference operator*() const;

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

permutation_iterator& operator++();

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

ElementIterator const& base() const;

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

Example

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

The output is:

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

The source code for this example can be found here.

-
-
- - - - diff --git a/doc/permutation_iterator.pdf b/doc/permutation_iterator.pdf deleted file mode 100755 index 37fef0607f9fb844e05d948b4da6ff16cb06cf0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68563 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%0Dw>6HD~8W@c;( z8ks}0*9@b)H#0T^ZDmDOXJU*|j+>d7fKH-9Q)dclkD-f!24m60%rNqsnTZ(|JIt}z zVS&XC3oLe6Vy06QOU!g&3ToznoQKGRW~PRi>A=(wqZ~IgHNwnqrbeLg6p(@N{A*@v zj2TC!psq1U8M3`5m~mukYHWa>FHKEB{VI@VBsx diff --git a/doc/permutation_iterator.rst b/doc/permutation_iterator.rst deleted file mode 100644 index d2f0ee0..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. - -.. _`Boost Consulting`: http://www.boost-consulting.com -.. _`Open Systems Lab`: http://www.osl.iu.edu - -:abstract: - - .. include:: permutation_iter_abstract.rst - -.. contents:: Table of Contents - - -Introduction -============ - -.. include:: permutation_iterator_body.rst - - -Reference -========= - -.. include:: permutation_iterator_ref.rst - - -Example -======= - -.. include:: permutation_iterator_eg.rst diff --git a/doc/permutation_iterator_body.rst b/doc/permutation_iterator_body.rst deleted file mode 100644 index 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 8b79cb9..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_iter_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 5766c54..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 98efe9350ed1d70ed5332dc0e53d494dc7e11547..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64370 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⁢Y}!Ik3vy_dI- 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 - void f(Dereferenceable p) - { - *what-goes-here?* value = \*p; - ... - } - - -``pointee`` ------------ - -It turns out to be impossible to come up with a fully-general -algorithm to do determine *what-goes-here* directly, but it is -possible to require that ``pointee::type`` is -correct. Naturally, ``pointee`` has the same difficulty: it can't -determine the appropriate ``::type`` reliably for all -``Dereferenceable``\ s, but it makes very good guesses (it works -for all pointers, standard and boost smart pointers, and -iterators), and when it guesses wrongly, it can be specialized as -necessary:: - - namespace boost - { - template - struct pointee > - { - typedef T type; - }; - } - -``indirect_reference`` ----------------------- - -``indirect_reference::type`` is rather more specialized than -``pointee``, and is meant to be used to forward the result of -dereferencing an object of its argument type. Most dereferenceable -types just return a reference to their pointee, but some return -proxy references or return the pointee by value. When that -information is needed, call on ``indirect_reference``. - -Both of these templates are essential to the correct functioning of -|indirect_iterator|_. - -.. |indirect_iterator| replace:: ``indirect_iterator`` -.. _indirect_iterator: indirect_iterator.html - -Reference -========= - -``pointee`` ------------ - -.. include:: pointee_ref.rst - -``indirect_reference`` ----------------------- - -.. include:: indirect_reference_ref.rst - diff --git a/doc/pointee_ref.rst b/doc/pointee_ref.rst deleted file mode 100755 index 19aed24..0000000 --- a/doc/pointee_ref.rst +++ /dev/null @@ -1,38 +0,0 @@ -.. Copyright David Abrahams 2004. Use, modification and distribution is -.. subject to the Boost Software License, Version 1.0. (See accompanying -.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - -:: - - template - struct pointee - { - typedef /* see below */ type; - }; - -:Requires: For an object ``x`` of type ``Dereferenceable``, ``*x`` - is well-formed. If ``++x`` is ill-formed it shall neither be - ambiguous nor shall it violate access control, and - ``Dereferenceable::element_type`` shall be an accessible type. - Otherwise ``iterator_traits::value_type`` shall - be well formed. [Note: These requirements need not apply to - explicit or partial specializations of ``pointee``] - -``type`` is determined according to the following algorithm, where -``x`` is an object of type ``Dereferenceable``:: - - if ( ++x is ill-formed ) - { - return ``Dereferenceable::element_type`` - } - else if (``*x`` is a mutable reference to - std::iterator_traits::value_type) - { - return iterator_traits::value_type - } - else - { - return iterator_traits::value_type const - } - - \ No newline at end of file diff --git a/doc/ref_problem.html b/doc/ref_problem.html deleted file mode 100755 index cdc6682..0000000 --- a/doc/ref_problem.html +++ /dev/null @@ -1,75 +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 fb6c759..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-11-01
Copyright:Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.
- --- - - - -
abstract:The reverse iterator adaptor iterates through the adapted iterator -range in the opposite direction.
- -
-

reverse_iterator synopsis

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

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

-
-
-

reverse_iterator requirements

-

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

-
-
-

reverse_iterator models

-

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

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

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

-
-
-

reverse_iterator operations

-

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

-

reverse_iterator();

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

explicit reverse_iterator(Iterator x);

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

Iterator const& base() const;

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

reference operator*() const;

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

reverse_iterator& operator++();

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

reverse_iterator& operator--();

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

Example

-

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

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

The output is:

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

The source code for this example can be found here.

-
-
- - - - diff --git a/doc/reverse_iterator.pdf b/doc/reverse_iterator.pdf deleted file mode 100755 index 761c4517310d0aaf64fd8fd9b191db734609b545..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62044 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 diff --git a/doc/reverse_iterator.rst b/doc/reverse_iterator.rst deleted file mode 100644 index b33687b..0000000 --- a/doc/reverse_iterator.rst +++ /dev/null @@ -1,29 +0,0 @@ -++++++++++++++++++ - Reverse Iterator -++++++++++++++++++ - -:Author: David Abrahams, Jeremy Siek, Thomas Witt -:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu, witt@ive.uni-hannover.de -:organization: `Boost Consulting`_, Indiana University `Open Systems - Lab`_, University of Hanover `Institute for Transport - Railway Operation and Construction`_ -:date: $Date$ -:copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. - -.. _`Boost Consulting`: http://www.boost-consulting.com -.. _`Open Systems Lab`: http://www.osl.iu.edu -.. _`Institute for Transport Railway Operation and Construction`: http://www.ive.uni-hannover.de - -:abstract: - - .. include:: reverse_iterator_abstract.rst - -.. contents:: Table of Contents - -``reverse_iterator`` synopsis -............................. - -.. include:: reverse_iterator_ref.rst -.. include:: make_reverse_iterator.rst - -.. include:: reverse_iterator_eg.rst diff --git a/doc/reverse_iterator_abstract.rst b/doc/reverse_iterator_abstract.rst deleted file mode 100644 index a4caee5..0000000 --- a/doc/reverse_iterator_abstract.rst +++ /dev/null @@ -1,9 +0,0 @@ - -The reverse iterator adaptor iterates through the adapted iterator -range in the opposite direction. - - - - - - diff --git a/doc/reverse_iterator_eg.rst b/doc/reverse_iterator_eg.rst deleted file mode 100644 index 7923f2f..0000000 --- a/doc/reverse_iterator_eg.rst +++ /dev/null @@ -1,42 +0,0 @@ - -Example -....... - -The following example prints an array of characters in reverse order -using ``reverse_iterator``. - -:: - - char letters_[] = "hello world!"; - const int N = sizeof(letters_)/sizeof(char) - 1; - typedef char* base_iterator; - base_iterator letters(letters_); - std::cout << "original sequence of letters:\t\t\t" << letters_ << std::endl; - - boost::reverse_iterator - reverse_letters_first(letters + N), - reverse_letters_last(letters); - - std::cout << "sequence in reverse order:\t\t\t"; - std::copy(reverse_letters_first, reverse_letters_last, - std::ostream_iterator(std::cout)); - std::cout << std::endl; - - std::cout << "sequence in double-reversed (normal) order:\t"; - std::copy(boost::make_reverse_iterator(reverse_letters_last), - boost::make_reverse_iterator(reverse_letters_first), - std::ostream_iterator(std::cout)); - std::cout << std::endl; - - - -The output is:: - - original sequence of letters: hello world! - sequence in reverse order: !dlrow olleh - sequence in double-reversed (normal) order: hello world! - - -The source code for this example can be found `here`__. - -__ ../example/reverse_iterator_example.cpp diff --git a/doc/reverse_iterator_ref.rst b/doc/reverse_iterator_ref.rst deleted file mode 100644 index 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 b332e1c..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/rst2html.py -gs $1 `echo $1 | sed 's/\(.*\)\..*/\1.html/'` - - - diff --git a/doc/rst2latex b/doc/rst2latex deleted file mode 100755 index 3636587..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 $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 b431111..0000000 --- a/doc/transform_iterator.html +++ /dev/null @@ -1,330 +0,0 @@ - - - - - - -Transform Iterator - - - - - - - - - - - - diff --git a/doc/transform_iterator.pdf b/doc/transform_iterator.pdf deleted file mode 100755 index 5517e99a30d9fdedf7a68fcd5074242a08d0eaad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70070 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^PKqymCa0Drsf^Aob<1aFabFnY92@-rg>cY zj(K_cB_IPKdQHK`nt@4h7%70mO~Dc@VrT%NAl4az+!&-_2r@cI!4P6VESG*zYH@yP z5h#QV!Nzgv`=+L3COYL;C`2oOOfa=H)iW|TQ?M{G)U&Vzxi=uOC^fGH7HQ7;c_pcN zCB+IRU>lHp0kQ+t7hv~u={w~YrKA=?%{KrU>7k(S$))cM7BW;Y1PKMDCYLBgD;QcB z=vf+>E0}?-H@8$UHZamNv@}#OGd0pPHw3#UxHPE*oT_{>^Rl`09YJvoO=pm(=F$&V z03{PhTG7Z&%*-jtw@OJYOLa)f&o3^~P0r6NF3l;)%uClx&d&wMteqVfG%`TJLa{fD z4b1e6%uNyAFgMdPHlv0&vWhcPvmNq_bM!Jx^-@zx(OeHo9hAG?!a&c�>6w6H6mK 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%0DnwA7OCi81FP$<3M`++O7gcJmHC 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 > 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-11-01
Copyright:Copyright David Abrahams and Thomas Becker 2003.
- --- - - - -
abstract:The zip iterator provides the ability to parallel-iterate -over several controlled sequences simultaneously. A zip -iterator is constructed from a tuple of iterators. Moving -the zip iterator moves all the iterators in parallel. -Dereferencing the zip iterator returns a tuple that contains -the results of dereferencing the individual iterators.
-
-
-

zip_iterator synopsis

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

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

-

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

-

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

-
-
-

zip_iterator requirements

-

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

-
-
-

zip_iterator models

-

The resulting zip_iterator models Readable Iterator.

-

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

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

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

-

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

-
-
-

zip_iterator operations

-

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

-

zip_iterator();

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

zip_iterator(IteratorTuple iterator_tuple);

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

const IteratorTuple& get_iterator_tuple() const;

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

reference operator*() const;

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

zip_iterator& operator++();

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

zip_iterator& operator--();

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

Examples

-

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

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

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

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

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

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

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

-

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

-
-typedef boost::tuple<
-  std::vector<double>::const_iterator,
-  std::vector<double>::const_iterator
-  > the_iterator_tuple;
-
-typedef boost::zip_iterator<
-  the_iterator_tuple
-  > the_zip_iterator;
-
-typedef boost::transform_iterator<
-  tuple_multiplies<double>,
-  the_zip_iterator
-  > the_transform_iterator;
-
-the_transform_iterator it_begin(
-  the_zip_iterator(
-    the_iterator_tuple(
-      vect_1.begin(),
-      vect_2.begin()
-      )
-    ),
-  tuple_multiplies<double>()
-  );
-
-the_transform_iterator it_end(
-  the_zip_iterator(
-    the_iterator_tuple(
-      vect_1.end(),
-      vect_2.end()
-      )
-    ),
-  tuple_multiplies<double>()
-  );
-
-
-
- - - - diff --git a/doc/zip_iterator.pdf b/doc/zip_iterator.pdf deleted file mode 100755 index 81374a66745aa818973967aab0f89a86c582652b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62511 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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() - ); 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 71301a5..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 func_output_iter_example.cpp ] - [ run indirect_iterator_example.cpp ] - [ run permutation_iter_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/func_output_iter_example.cpp b/example/func_output_iter_example.cpp deleted file mode 100644 index 9c06319..0000000 --- a/example/func_output_iter_example.cpp +++ /dev/null @@ -1,46 +0,0 @@ -// (C) Copyright Jeremy Siek 2001-2004. -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Revision History: - -// 27 Feb 2001 Jeremy Siek -// Initial checkin. - -#include -#include -#include - -#include - -struct string_appender -{ - string_appender(std::string& s) - : m_str(&s) - {} - - void operator()(const std::string& x) const - { - *m_str += x; - } - - std::string* m_str; -}; - -int main(int, char*[]) -{ - std::vector x; - x.push_back("hello"); - x.push_back(" "); - x.push_back("world"); - x.push_back("!"); - - std::string s = ""; - std::copy(x.begin(), x.end(), - boost::make_function_output_iterator(string_appender(s))); - - std::cout << s << std::endl; - - return 0; -} diff --git a/example/indirect_iterator_example.cpp b/example/indirect_iterator_example.cpp deleted file mode 100644 index abbf46c..0000000 --- a/example/indirect_iterator_example.cpp +++ /dev/null @@ -1,59 +0,0 @@ -// (C) Copyright Jeremy Siek 2000-2004. -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include -#include -#include -#include -#include -#include -#include - -int main(int, char*[]) -{ - char characters[] = "abcdefg"; - const int N = sizeof(characters)/sizeof(char) - 1; // -1 since characters has a null char - char* pointers_to_chars[N]; // at the end. - for (int i = 0; i < N; ++i) - pointers_to_chars[i] = &characters[i]; - - // Example of using indirect_iterator - - boost::indirect_iterator - indirect_first(pointers_to_chars), indirect_last(pointers_to_chars + N); - - std::copy(indirect_first, indirect_last, std::ostream_iterator(std::cout, ",")); - std::cout << std::endl; - - - // Example of making mutable and constant indirect iterators - - char mutable_characters[N]; - char* pointers_to_mutable_chars[N]; - for (int j = 0; j < N; ++j) - pointers_to_mutable_chars[j] = &mutable_characters[j]; - - boost::indirect_iterator mutable_indirect_first(pointers_to_mutable_chars), - mutable_indirect_last(pointers_to_mutable_chars + N); - boost::indirect_iterator const_indirect_first(pointers_to_chars), - const_indirect_last(pointers_to_chars + N); - - std::transform(const_indirect_first, const_indirect_last, - mutable_indirect_first, std::bind1st(std::plus(), 1)); - - std::copy(mutable_indirect_first, mutable_indirect_last, - std::ostream_iterator(std::cout, ",")); - std::cout << std::endl; - - - // Example of using make_indirect_iterator() - - std::copy(boost::make_indirect_iterator(pointers_to_chars), - boost::make_indirect_iterator(pointers_to_chars + N), - std::ostream_iterator(std::cout, ",")); - std::cout << std::endl; - - return 0; -} diff --git a/example/node.hpp b/example/node.hpp deleted file mode 100755 index c3ed315..0000000 --- a/example/node.hpp +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright David Abrahams 2004. Use, modification and distribution is -// subject to the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#ifndef NODE_DWA2004110_HPP -# define NODE_DWA2004110_HPP - -# include - -// Polymorphic list node base class - -struct node_base -{ - node_base() : m_next(0) {} - - virtual ~node_base() - { - delete m_next; - } - - node_base* next() const - { - return m_next; - } - - virtual void print(std::ostream& s) const = 0; - virtual void double_me() = 0; - - void append(node_base* p) - { - if (m_next) - m_next->append(p); - else - m_next = p; - } - - private: - node_base* m_next; -}; - -inline std::ostream& operator<<(std::ostream& s, node_base const& n) -{ - n.print(s); - return s; -} - -template -struct node : node_base -{ - node(T x) - : m_value(x) - {} - - void print(std::ostream& s) const { s << this->m_value; } - void double_me() { m_value += m_value; } - - private: - T m_value; -}; - -#endif // NODE_DWA2004110_HPP diff --git a/example/node_iterator1.cpp b/example/node_iterator1.cpp deleted file mode 100755 index 6411b03..0000000 --- a/example/node_iterator1.cpp +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright David Abrahams 2004. Use, modification and distribution is -// subject to the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - -#include "node_iterator1.hpp" -#include -#include -#include -#include -#include - -int main() -{ - std::auto_ptr > nodes(new node(42)); - nodes->append(new node(" is greater than ")); - nodes->append(new node(13)); - - std::copy( - node_iterator(nodes.get()), node_iterator() - , std::ostream_iterator(std::cout, " ") - ); - std::cout << std::endl; - - std::for_each( - node_iterator(nodes.get()), node_iterator() - , std::mem_fun_ref(&node_base::double_me) - ); - - std::copy( - node_iterator(nodes.get()), node_iterator() - , std::ostream_iterator(std::cout, "/") - ); - std::cout << std::endl; -} diff --git a/example/node_iterator1.hpp b/example/node_iterator1.hpp deleted file mode 100755 index 5e068b4..0000000 --- a/example/node_iterator1.hpp +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright David Abrahams 2004. Use, modification and distribution is -// subject to the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#ifndef NODE_ITERATOR1_DWA2004110_HPP -# define NODE_ITERATOR1_DWA2004110_HPP - -# include "node.hpp" -# include - -class node_iterator - : public boost::iterator_facade< - node_iterator - , node_base - , boost::forward_traversal_tag - > -{ - public: - node_iterator() - : m_node(0) - {} - - explicit node_iterator(node_base* p) - : m_node(p) - {} - - private: - friend class boost::iterator_core_access; - - void increment() - { m_node = m_node->next(); } - - bool equal(node_iterator const& other) const - { return this->m_node == other.m_node; } - - node_base& dereference() const - { return *m_node; } - - node_base* m_node; -}; - - -#endif // NODE_ITERATOR1_DWA2004110_HPP diff --git a/example/node_iterator2.cpp b/example/node_iterator2.cpp deleted file mode 100755 index 62211b2..0000000 --- a/example/node_iterator2.cpp +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright David Abrahams 2004. Use, modification and distribution is -// subject to the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - -#include "node_iterator2.hpp" -#include -#include -#include -#include -#include -#include - -int main() -{ - std::auto_ptr > nodes(new node(42)); - nodes->append(new node(" is greater than ")); - nodes->append(new node(13)); - - // Check interoperability - assert(node_iterator(nodes.get()) == node_const_iterator(nodes.get())); - assert(node_const_iterator(nodes.get()) == node_iterator(nodes.get())); - - assert(node_iterator(nodes.get()) != node_const_iterator()); - assert(node_const_iterator(nodes.get()) != node_iterator()); - - std::copy( - node_iterator(nodes.get()), node_iterator() - , std::ostream_iterator(std::cout, " ") - ); - std::cout << std::endl; - - std::for_each( - node_iterator(nodes.get()), node_iterator() - , boost::mem_fn(&node_base::double_me) - ); - - std::copy( - node_const_iterator(nodes.get()), node_const_iterator() - , std::ostream_iterator(std::cout, "/") - ); - std::cout << std::endl; - return 0; -} diff --git a/example/node_iterator2.hpp b/example/node_iterator2.hpp deleted file mode 100755 index 6aa0a4c..0000000 --- a/example/node_iterator2.hpp +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright David Abrahams 2004. Use, modification and distribution is -// subject to the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#ifndef NODE_ITERATOR2_DWA2004110_HPP -# define NODE_ITERATOR2_DWA2004110_HPP - -# include "node.hpp" -# include - -# ifndef BOOST_NO_SFINAE -# include -# include -# endif - -template -class node_iter - : public boost::iterator_facade< - node_iter - , Value - , boost::forward_traversal_tag - > -{ - private: - struct enabler {}; // a private type avoids misuse - - public: - node_iter() - : m_node(0) {} - - explicit node_iter(Value* p) - : m_node(p) {} - - template - node_iter( - node_iter const& other -# ifndef BOOST_NO_SFINAE - , typename boost::enable_if< - boost::is_convertible - , enabler - >::type = enabler() -# endif - ) - : m_node(other.m_node) {} - - -# if !BOOST_WORKAROUND(__GNUC__, == 2) - private: // GCC2 can't grant friendship to template member functions - friend class boost::iterator_core_access; -# endif - - template - bool equal(node_iter const& other) const - { - return this->m_node == other.m_node; - } - - void increment() { m_node = m_node->next(); } - - Value& dereference() const { return *m_node; } - -# ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS - public: -# else - private: - template friend class node_iter; -# endif - Value* m_node; -}; - -typedef node_iter node_iterator; -typedef node_iter node_const_iterator; - -#endif // NODE_ITERATOR2_DWA2004110_HPP diff --git a/example/node_iterator3.cpp b/example/node_iterator3.cpp deleted file mode 100755 index 331cc93..0000000 --- a/example/node_iterator3.cpp +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright David Abrahams 2004. Use, modification and distribution is -// subject to the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - -#include "node_iterator3.hpp" -#include -#include -#include -#include -#include -#include - -int main() -{ - std::auto_ptr > nodes(new node(42)); - nodes->append(new node(" is greater than ")); - nodes->append(new node(13)); - - // Check interoperability - assert(node_iterator(nodes.get()) == node_const_iterator(nodes.get())); - assert(node_const_iterator(nodes.get()) == node_iterator(nodes.get())); - - assert(node_iterator(nodes.get()) != node_const_iterator()); - assert(node_const_iterator(nodes.get()) != node_iterator()); - - std::copy( - node_iterator(nodes.get()), node_iterator() - , std::ostream_iterator(std::cout, " ") - ); - std::cout << std::endl; - - std::for_each( - node_iterator(nodes.get()), node_iterator() - , boost::mem_fn(&node_base::double_me) - ); - - std::copy( - node_const_iterator(nodes.get()), node_const_iterator() - , std::ostream_iterator(std::cout, "/") - ); - std::cout << std::endl; - return 0; -} diff --git a/example/node_iterator3.hpp b/example/node_iterator3.hpp deleted file mode 100755 index 85127e1..0000000 --- a/example/node_iterator3.hpp +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright David Abrahams 2004. Use, modification and distribution is -// subject to the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#ifndef NODE_ITERATOR3_DWA2004110_HPP -# define NODE_ITERATOR3_DWA2004110_HPP - -# include "node.hpp" -# include - -# ifndef BOOST_NO_SFINAE -# include -# include -# endif - -template -class node_iter - : public boost::iterator_adaptor< - node_iter // Derived - , Value* // Base - , boost::use_default // Value - , boost::forward_traversal_tag // CategoryOrTraversal - > -{ - private: - struct enabler {}; // a private type avoids misuse - - typedef boost::iterator_adaptor< - node_iter, Value*, boost::use_default, boost::forward_traversal_tag - > super_t; - - public: - node_iter() - : super_t(0) {} - - explicit node_iter(Value* p) - : super_t(p) {} - - template - node_iter( - node_iter const& other -# ifndef BOOST_NO_SFINAE - , typename boost::enable_if< - boost::is_convertible - , enabler - >::type = enabler() -# endif - ) - : super_t(other.base()) {} - -# if !BOOST_WORKAROUND(__GNUC__, == 2) - private: // GCC2 can't grant friendship to template member functions - friend class boost::iterator_core_access; -# endif - void increment() { this->base_reference() = this->base()->next(); } -}; - -typedef node_iter node_iterator; -typedef node_iter node_const_iterator; - -#endif // NODE_ITERATOR3_DWA2004110_HPP diff --git a/example/permutation_iter_example.cpp b/example/permutation_iter_example.cpp deleted file mode 100644 index e6ff889..0000000 --- a/example/permutation_iter_example.cpp +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (C) 2004 Jeremy Siek -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include -#include -#include -#include -#include -#include - - -int main() { - using namespace boost; - int i = 0; - - typedef std::vector< int > element_range_type; - typedef std::deque< int > index_type; - - static const int element_range_size = 10; - static const int index_size = 4; - - element_range_type elements( element_range_size ); - for(element_range_type::iterator el_it = elements.begin() ; el_it != elements.end() ; ++el_it) - *el_it = std::distance(elements.begin(), el_it); - - index_type indices( index_size ); - for(index_type::iterator i_it = indices.begin() ; i_it != indices.end() ; ++i_it ) - *i_it = element_range_size - index_size + std::distance(indices.begin(), i_it); - std::reverse( indices.begin(), indices.end() ); - - typedef permutation_iterator< element_range_type::iterator, index_type::iterator > permutation_type; - permutation_type begin = make_permutation_iterator( elements.begin(), indices.begin() ); - permutation_type it = begin; - permutation_type end = make_permutation_iterator( elements.begin(), indices.end() ); - - std::cout << "The original range is : "; - std::copy( elements.begin(), elements.end(), std::ostream_iterator< int >( std::cout, " " ) ); - std::cout << "\n"; - - std::cout << "The reindexing scheme is : "; - std::copy( indices.begin(), indices.end(), std::ostream_iterator< int >( std::cout, " " ) ); - std::cout << "\n"; - - std::cout << "The permutated range is : "; - std::copy( begin, end, std::ostream_iterator< int >( std::cout, " " ) ); - std::cout << "\n"; - - std::cout << "Elements at even indices in the permutation : "; - it = begin; - for(i = 0; i < index_size / 2 ; ++i, it+=2 ) std::cout << *it << " "; - std::cout << "\n"; - - std::cout << "Permutation backwards : "; - it = begin + (index_size); - assert( it != begin ); - for( ; it-- != begin ; ) std::cout << *it << " "; - std::cout << "\n"; - - std::cout << "Iterate backward with stride 2 : "; - it = begin + (index_size - 1); - for(i = 0 ; i < index_size / 2 ; ++i, it-=2 ) std::cout << *it << " "; - std::cout << "\n"; - - return boost::exit_success; -} diff --git a/example/reverse_iterator.cpp b/example/reverse_iterator.cpp deleted file mode 100644 index b5f10f7..0000000 --- a/example/reverse_iterator.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (C) 2004 Jeremy Siek -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include -#include -#include -#include -#include - -int main() -{ - int x[] = { 1, 2, 3, 4 }; - boost::reverse_iterator first(x + 4), last(x); - std::copy(first, last, std::ostream_iterator(std::cout, " ")); - std::cout << std::endl; - return 0; -} diff --git a/example/reverse_iterator_example.cpp b/example/reverse_iterator_example.cpp deleted file mode 100644 index 61b8c4f..0000000 --- a/example/reverse_iterator_example.cpp +++ /dev/null @@ -1,41 +0,0 @@ -// (C) Copyright Jeremy Siek 2000-2004. -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include -#include -#include -#include -#include - -int main(int, char*[]) -{ - char letters_[] = "hello world!"; - const int N = sizeof(letters_)/sizeof(char) - 1; - typedef char* base_iterator; - base_iterator letters(letters_); - - std::cout << "original sequence of letters:\t\t\t" - << letters_ << std::endl; - - // Use reverse_iterator to print a sequence of letters in reverse - // order. - - boost::reverse_iterator - reverse_letters_first(letters + N), - reverse_letters_last(letters); - - std::cout << "sequence in reverse order:\t\t\t"; - std::copy(reverse_letters_first, reverse_letters_last, - std::ostream_iterator(std::cout)); - std::cout << std::endl; - - std::cout << "sequence in double-reversed (normal) order:\t"; - std::copy(boost::make_reverse_iterator(reverse_letters_last), - boost::make_reverse_iterator(reverse_letters_first), - std::ostream_iterator(std::cout)); - std::cout << std::endl; - - return boost::exit_success; -} diff --git a/example/transform_iterator_example.cpp b/example/transform_iterator_example.cpp deleted file mode 100644 index 6f51f01..0000000 --- a/example/transform_iterator_example.cpp +++ /dev/null @@ -1,76 +0,0 @@ -// (C) Copyright Jeremy Siek 2000-2004. -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - - -#include -#include -#include -#include - -// What a bummer. We can't use std::binder1st with transform iterator -// because it does not have a default constructor. Here's a version -// that does. - -namespace boost { - - template - class binder1st - : public std::unary_function { - protected: - Operation op; - typename Operation::first_argument_type value; - public: - binder1st() { } // this had to be added! - binder1st(const Operation& x, - const typename Operation::first_argument_type& y) - : op(x), value(y) {} - typename Operation::result_type - operator()(const typename Operation::second_argument_type& x) const { - return op(value, x); - } - }; - - template - inline binder1st bind1st(const Operation& op, const T& x) { - typedef typename Operation::first_argument_type arg1_type; - return binder1st(op, arg1_type(x)); - } - -} // namespace boost - -int -main(int, char*[]) -{ - // This is a simple example of using the transform_iterators class to - // generate iterators that multiply the value returned by dereferencing - // the iterator. In this case we are multiplying by 2. - // Would be cooler to use lambda library in this example. - - int x[] = { 1, 2, 3, 4, 5, 6, 7, 8 }; - const int N = sizeof(x)/sizeof(int); - - typedef boost::binder1st< std::multiplies > Function; - typedef boost::transform_iterator doubling_iterator; - - doubling_iterator i(x, boost::bind1st(std::multiplies(), 2)), - i_end(x + N, boost::bind1st(std::multiplies(), 2)); - - std::cout << "multiplying the array by 2:" << std::endl; - while (i != i_end) - std::cout << *i++ << " "; - std::cout << std::endl; - - std::cout << "adding 4 to each element in the array:" << std::endl; - - std::copy(boost::make_transform_iterator(x, boost::bind1st(std::plus(), 4)), - boost::make_transform_iterator(x + N, boost::bind1st(std::plus(), 4)), - std::ostream_iterator(std::cout, " ")); - std::cout << std::endl; - - return 0; -} - - diff --git a/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 f240d69..0000000 --- a/test/Jamfile +++ /dev/null @@ -1,65 +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 ; - -rule vc6-stlport-debug-inlining ( toolset variant : non-defaults * ) -{ - if [ MATCH (vc-(6[_0-9]*)-stlport) : $(toolset) ] - && ( off in $(non-defaults) ) - { - non-defaults = [ difference $(non-defaults) : off ] - on ; - } - return $(non-defaults) ; -} - -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 - : : : vc6-stlport-debug-inlining - - # stlport's debug mode generates long symbols which overwhelm - # vc6 unless you turn on inlining -# <*>-Ob1 -# <*>-Ob1 - ] - - # These tests should work for just about everything. - [ compile is_lvalue_iterator.cpp ] - [ compile is_readable_iterator.cpp ] - [ compile pointee.cpp ] - - [ run unit_tests.cpp ] - [ run concept_tests.cpp ] - [ run iterator_adaptor_cc.cpp ] - [ run iterator_adaptor_test.cpp ] - [ compile iterator_archetype_cc.cpp ] - [ compile-fail iter_archetype_default_ctor.cpp ] - [ compile-fail lvalue_concept_fail.cpp ] - [ run transform_iterator_test.cpp ] - [ run indirect_iterator_test.cpp ] - [ compile indirect_iter_member_types.cpp ] - [ run filter_iterator_test.cpp ] - [ run iterator_facade.cpp ] - [ run reverse_iterator_test.cpp ] - [ run counting_iterator_test.cpp ] - [ run interoperable.cpp ] - [ run iterator_traits_test.cpp ] - [ run permutation_iterator_test.cpp : : : # on - ] - -; diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 deleted file mode 100644 index f55fd3e..0000000 --- a/test/Jamfile.v2 +++ /dev/null @@ -1,49 +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 iter_archetype_default_ctor.cpp ] - [ compile-fail lvalue_concept_fail.cpp ] - [ run transform_iterator_test.cpp ] - [ run indirect_iterator_test.cpp ] - [ compile indirect_iter_member_types.cpp ] - [ run filter_iterator_test.cpp ] - [ run iterator_facade.cpp ] - [ run reverse_iterator_test.cpp ] - [ run counting_iterator_test.cpp ] - [ run interoperable.cpp ] - [ run iterator_traits_test.cpp ] - [ run permutation_iterator_test.cpp : : : # on - ] - -; diff --git a/test/concept_tests.cpp b/test/concept_tests.cpp deleted file mode 100644 index f3d518a..0000000 --- a/test/concept_tests.cpp +++ /dev/null @@ -1,94 +0,0 @@ -// (C) Copyright Jeremy Siek 2002. -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include -#include -#include - -struct new_random_access - : std::random_access_iterator_tag - , boost::random_access_traversal_tag -{}; - -struct new_iterator - : public boost::iterator< new_random_access, int > -{ - int& operator*() const { return *m_x; } - new_iterator& operator++() { return *this; } - new_iterator operator++(int) { return *this; } - new_iterator& operator--() { return *this; } - new_iterator operator--(int) { return *this; } - new_iterator& operator+=(std::ptrdiff_t) { return *this; } - new_iterator operator+(std::ptrdiff_t) { return *this; } - new_iterator& operator-=(std::ptrdiff_t) { return *this; } - std::ptrdiff_t operator-(const new_iterator&) const { return 0; } - new_iterator operator-(std::ptrdiff_t) const { return *this; } - bool operator==(const new_iterator&) const { return false; } - bool operator!=(const new_iterator&) const { return false; } - bool operator<(const new_iterator&) const { return false; } - int* m_x; -}; -new_iterator operator+(std::ptrdiff_t, new_iterator x) { return x; } - -struct old_iterator - : public boost::iterator -{ - int& operator*() const { return *m_x; } - old_iterator& operator++() { return *this; } - old_iterator operator++(int) { return *this; } - old_iterator& operator--() { return *this; } - old_iterator operator--(int) { return *this; } - old_iterator& operator+=(std::ptrdiff_t) { return *this; } - old_iterator operator+(std::ptrdiff_t) { return *this; } - old_iterator& operator-=(std::ptrdiff_t) { return *this; } - old_iterator operator-(std::ptrdiff_t) const { return *this; } - std::ptrdiff_t operator-(const old_iterator&) const { return 0; } - bool operator==(const old_iterator&) const { return false; } - bool operator!=(const old_iterator&) const { return false; } - bool operator<(const old_iterator&) const { return false; } - int* m_x; -}; -old_iterator operator+(std::ptrdiff_t, old_iterator x) { return x; } - -int -main() -{ - boost::iterator_traversal::type tc; - boost::random_access_traversal_tag derived = tc; - (void)derived; - - boost::function_requires< - boost_concepts::WritableIteratorConcept >(); - boost::function_requires< - boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< - boost_concepts::RandomAccessTraversalConcept >(); - - boost::function_requires< - boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< - boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< - boost_concepts::RandomAccessTraversalConcept >(); - - boost::function_requires< - boost_concepts::WritableIteratorConcept >(); - boost::function_requires< - boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< - boost_concepts::RandomAccessTraversalConcept >(); - - boost::function_requires< - boost_concepts::WritableIteratorConcept >(); - boost::function_requires< - boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< - boost_concepts::RandomAccessTraversalConcept >(); - - boost::function_requires< - boost_concepts::InteroperableIteratorConcept >(); - - return 0; -} diff --git a/test/constant_iter_arrow.cpp b/test/constant_iter_arrow.cpp deleted file mode 100755 index 3579c53..0000000 --- a/test/constant_iter_arrow.cpp +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright David Abrahams 2004. Distributed under the Boost -// Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - -#include -#include - -struct my_iter : boost::iterator_adaptor const*> -{ - my_iter(std::pair const*); - my_iter(); -}; - -std::pair const x(1,1); -my_iter p(&x); -int y = p->first; // operator-> attempts to return an non-const pointer diff --git a/test/constant_iter_arrow_fail.cpp b/test/constant_iter_arrow_fail.cpp deleted file mode 100755 index 05f551a..0000000 --- a/test/constant_iter_arrow_fail.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright David Abrahams 2004. Distributed under the Boost -// Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - -#include -#include - -struct my_iter : boost::iterator_adaptor const*> -{ - my_iter(std::pair const*); - my_iter(); -}; - -std::pair const x(1,1); -my_iter p(&x); - -void test() -{ - p->first = 3; -} diff --git a/test/counting_iterator_test.cpp b/test/counting_iterator_test.cpp deleted file mode 100644 index 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 f4eb635..0000000 --- a/test/filter_iterator_test.cpp +++ /dev/null @@ -1,273 +0,0 @@ -// Copyright David Abrahams 2003, Jeremy Siek 2004. - -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -using boost::dummyT; - -struct one_or_four -{ - bool operator()(dummyT x) const - { - return x.foo() == 1 || x.foo() == 4; - } -}; - -template struct undefined; - -template struct see_type; - -// Test filter iterator -int main() -{ - // Concept checks - // Adapting old-style iterators - { - typedef boost::filter_iterator > Iter; - boost::function_requires< boost::InputIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::SinglePassIteratorConcept >(); - } - { - typedef boost::filter_iterator > Iter; - boost::function_requires< boost::InputIteratorConcept >(); - boost::function_requires< boost::OutputIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::SinglePassIteratorConcept >(); - } - { - typedef boost::filter_iterator > Iter; - boost::function_requires< boost::ForwardIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::ForwardTraversalConcept >(); - } - { - typedef boost::filter_iterator > Iter; - boost::function_requires< boost::Mutable_ForwardIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::ForwardTraversalConcept >(); - } - { - typedef boost::filter_iterator > Iter; - boost::function_requires< boost::BidirectionalIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } - { - typedef boost::filter_iterator > Iter; - boost::function_requires< boost::Mutable_BidirectionalIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } - { - typedef boost::filter_iterator > Iter; - boost::function_requires< boost::BidirectionalIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } - { - typedef boost::filter_iterator > Iter; - boost::function_requires< boost::Mutable_BidirectionalIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } - // Adapting new-style iterators - { - typedef boost::iterator_archetype< - const dummyT - , boost::iterator_archetypes::readable_iterator_t - , boost::single_pass_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - boost::function_requires< boost::InputIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::SinglePassIteratorConcept >(); - } -#if !BOOST_WORKAROUND(BOOST_MSVC, == 1200) // Causes Internal Error in linker. - { - typedef boost::iterator_archetype< - dummyT - , boost::iterator_archetypes::readable_writable_iterator_t - , boost::single_pass_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - - boost::function_requires< boost::InputIteratorConcept >(); - boost::function_requires< boost::OutputIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::SinglePassIteratorConcept >(); - } -#endif - { - typedef boost::iterator_archetype< - const dummyT - , boost::iterator_archetypes::readable_iterator_t - , boost::forward_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - boost::function_requires< boost::InputIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::ForwardTraversalConcept >(); - } - -#if !BOOST_WORKAROUND(BOOST_MSVC, == 1200) // Causes Internal Error in linker. - { - typedef boost::iterator_archetype< - dummyT - , boost::iterator_archetypes::readable_writable_iterator_t - , boost::forward_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::ForwardTraversalConcept >(); - } - { - typedef boost::iterator_archetype< - const dummyT - , boost::iterator_archetypes::readable_lvalue_iterator_t - , boost::forward_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - boost::function_requires< boost::ForwardIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< boost_concepts::ForwardTraversalConcept >(); - } - { - typedef boost::iterator_archetype< - dummyT - , boost::iterator_archetypes::writable_lvalue_iterator_t - , boost::forward_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - boost::function_requires< boost::Mutable_ForwardIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< boost_concepts::ForwardTraversalConcept >(); - } -#endif - - { - typedef boost::iterator_archetype< - const dummyT - , boost::iterator_archetypes::readable_iterator_t - , boost::random_access_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - boost::function_requires< boost::InputIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } - -#if !BOOST_WORKAROUND(BOOST_MSVC, == 1200) // Causes Internal Error in linker. - { - typedef boost::iterator_archetype< - dummyT - , boost::iterator_archetypes::readable_writable_iterator_t - , boost::random_access_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } - { - typedef boost::iterator_archetype< - const dummyT - , boost::iterator_archetypes::readable_lvalue_iterator_t - , boost::random_access_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - boost::function_requires< boost::BidirectionalIteratorConcept >(); - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } - { - typedef boost::iterator_archetype< - dummyT - , boost::iterator_archetypes::writable_lvalue_iterator_t - , boost::random_access_traversal_tag - > BaseIter; - typedef boost::filter_iterator Iter; - boost::function_requires< boost::Mutable_BidirectionalIteratorConcept >(); - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - } -#endif - - // Run-time tests - - dummyT array[] = { dummyT(0), dummyT(1), dummyT(2), - dummyT(3), dummyT(4), dummyT(5) }; - const int N = sizeof(array)/sizeof(dummyT); - - typedef boost::filter_iterator filter_iter; - - boost::bidirectional_readable_iterator_test( - filter_iter(one_or_four(), array, array+N) - , dummyT(1), dummyT(4)); - - BOOST_STATIC_ASSERT( - (!boost::is_convertible< - boost::iterator_traversal::type - , boost::random_access_traversal_tag - >::value - )); - - //# endif - - // On compilers not supporting partial specialization, we can do more type - // deduction with deque iterators than with pointers... unless the library - // is broken ;-( - std::deque array2; - std::copy(array+0, array+N, std::back_inserter(array2)); - boost::bidirectional_readable_iterator_test( - boost::make_filter_iterator(one_or_four(), array2.begin(), array2.end()), - dummyT(1), dummyT(4)); - - boost::bidirectional_readable_iterator_test( - boost::make_filter_iterator(one_or_four(), array2.begin(), array2.end()), - dummyT(1), dummyT(4)); - - boost::bidirectional_readable_iterator_test( - boost::make_filter_iterator( - one_or_four() - , boost::make_reverse_iterator(array2.end()) - , boost::make_reverse_iterator(array2.begin()) - ), - dummyT(4), dummyT(1)); - - boost::bidirectional_readable_iterator_test( - filter_iter(array+0, array+N), - dummyT(1), dummyT(4)); - - boost::bidirectional_readable_iterator_test( - filter_iter(one_or_four(), array, array + N), - dummyT(1), dummyT(4)); - - - std::cout << "test successful " << std::endl; - return boost::exit_success; -} diff --git a/test/indirect_iter_member_types.cpp b/test/indirect_iter_member_types.cpp deleted file mode 100644 index 84dcaeb..0000000 --- a/test/indirect_iter_member_types.cpp +++ /dev/null @@ -1,89 +0,0 @@ -// (C) Copyright Jeremy Siek 2004. -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// Revision History -// 03 Jan 2004 Jeremy Siek -// First draft. - - -#include -#include - -#include -#include -#include "static_assert_same.hpp" -#include - -struct zow { }; - -struct my_ptr { - typedef zow const element_type; - zow const& operator*() const; -// typedef const zow& reference; -// typedef const zow* pointer; -// typedef void difference_type; -// typedef boost::no_traversal_tag iterator_category; -}; - -BOOST_TT_BROKEN_COMPILER_SPEC(my_ptr) -BOOST_TT_BROKEN_COMPILER_SPEC(zow) - -// Borland 5.6.4 and earlier drop const all over the place, so this -// test will fail in the lines marked with (**) - -int main() -{ - { - typedef boost::indirect_iterator Iter; - STATIC_ASSERT_SAME(Iter::value_type, int); - STATIC_ASSERT_SAME(Iter::reference, int&); - STATIC_ASSERT_SAME(Iter::pointer, int*); - STATIC_ASSERT_SAME(Iter::difference_type, std::ptrdiff_t); - - BOOST_STATIC_ASSERT((boost::is_convertible::value)); - BOOST_STATIC_ASSERT((boost::is_convertible::type, - boost::random_access_traversal_tag>::value)); - } - { - typedef boost::indirect_iterator Iter; - STATIC_ASSERT_SAME(Iter::value_type, int); - STATIC_ASSERT_SAME(Iter::reference, const int&); - STATIC_ASSERT_SAME(Iter::pointer, const int*); // (**) - } - { - typedef boost::indirect_iterator Iter; - STATIC_ASSERT_SAME(Iter::value_type, int); - STATIC_ASSERT_SAME(Iter::reference, int&); - STATIC_ASSERT_SAME(Iter::pointer, int*); - } - { - typedef boost::indirect_iterator Iter; - STATIC_ASSERT_SAME(Iter::value_type, int); - STATIC_ASSERT_SAME(Iter::reference, const int&); - STATIC_ASSERT_SAME(Iter::pointer, const int*); // (**) - } - { - typedef boost::indirect_iterator Iter; - STATIC_ASSERT_SAME(Iter::value_type, zow); - STATIC_ASSERT_SAME(Iter::reference, const zow&); // (**) - STATIC_ASSERT_SAME(Iter::pointer, const zow*); // (**) - - STATIC_ASSERT_SAME(Iter::difference_type, std::ptrdiff_t); - - BOOST_STATIC_ASSERT((boost::is_convertible::value)); - BOOST_STATIC_ASSERT((boost::is_convertible::type, - boost::random_access_traversal_tag>::value)); - } - { - typedef boost::indirect_iterator Iter; - STATIC_ASSERT_SAME(Iter::value_type, int); - STATIC_ASSERT_SAME(Iter::reference, long&); - STATIC_ASSERT_SAME(Iter::pointer, int*); - STATIC_ASSERT_SAME(Iter::difference_type, short); - } - return 0; -} diff --git a/test/indirect_iterator_test.cpp b/test/indirect_iterator_test.cpp deleted file mode 100644 index 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/iter_archetype_default_ctor.cpp b/test/iter_archetype_default_ctor.cpp deleted file mode 100755 index 7936bdd..0000000 --- a/test/iter_archetype_default_ctor.cpp +++ /dev/null @@ -1,21 +0,0 @@ -// -// Copyright Thomas Witt 2004. -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) -// -#include - - -int main() -{ - typedef boost::iterator_archetype< - int - , boost::iterator_archetypes::readable_iterator_t - , boost::single_pass_traversal_tag - > iter; - - // single_pass_traversal iterators are not required to be - // default constructible - iter it; -} diff --git a/test/iterator_adaptor_cc.cpp b/test/iterator_adaptor_cc.cpp deleted file mode 100644 index 599474c..0000000 --- a/test/iterator_adaptor_cc.cpp +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2004 Jeremy Siek -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include -#include -#include -#include -#include - -int main() -{ - { - typedef boost::reverse_iterator rev_iter; - typedef boost::reverse_iterator c_rev_iter; - - boost::function_requires< boost_concepts::WritableIteratorConcept >(); - boost::function_requires< boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< boost_concepts::RandomAccessTraversalConcept >(); - boost::function_requires< boost::RandomAccessIteratorConcept >(); - boost::function_requires< boost_concepts::InteroperableIteratorConcept >(); - } - - // Many compilers' builtin container iterators don't interoperate well, though - // STLport fixes that problem. -#if defined(__SGI_STL_PORT) \ - || !BOOST_WORKAROUND(__GNUC__, <= 2) \ - && !(BOOST_WORKAROUND(__GNUC__, == 3) && BOOST_WORKAROUND(__GNUC_MINOR__, <= 1)) \ - && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) \ - && !BOOST_WORKAROUND(__LIBCOMO_VERSION__, BOOST_TESTED_AT(29)) \ - && !BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, <= 1) - { - typedef boost::reverse_iterator::iterator> rev_iter; - typedef boost::reverse_iterator::const_iterator> c_rev_iter; - - boost::function_requires< boost_concepts::ReadableIteratorConcept >(); - boost::function_requires< boost_concepts::LvalueIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - boost::function_requires< boost::BidirectionalIteratorConcept >(); - boost::function_requires< boost_concepts::InteroperableIteratorConcept >(); - } -#endif - - return boost::exit_success; -} diff --git a/test/iterator_adaptor_test.cpp b/test/iterator_adaptor_test.cpp deleted file mode 100644 index dddac26..0000000 --- a/test/iterator_adaptor_test.cpp +++ /dev/null @@ -1,335 +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()); - } - - // check that base_type is correct - { - // Test constant iterator idiom - typedef ptr_iterator BaseIter; - - test = static_assert_same::value; - test = static_assert_same::base_type,BaseIter>::value; - - typedef modify_traversal IncrementableIter; - - test = static_assert_same::value; - } - - std::cout << "test successful " << std::endl; - (void)test; - return 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_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/iterator_traits_test.cpp b/test/iterator_traits_test.cpp deleted file mode 100644 index eed70ff..0000000 --- a/test/iterator_traits_test.cpp +++ /dev/null @@ -1,218 +0,0 @@ -// (C) Copyright David Abrahams 2002. -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// See http://www.boost.org for most recent version including documentation. - -// Revision History -// 04 Mar 2001 Patches for Intel C++ (Dave Abrahams) -// 19 Feb 2001 Take advantage of improved iterator_traits to do more tests -// on MSVC. Reordered some #ifdefs for coherency. -// (David Abrahams) -// 13 Feb 2001 Test new VC6 workarounds (David Abrahams) -// 11 Feb 2001 Final fixes for Borland (David Abrahams) -// 11 Feb 2001 Some fixes for Borland get it closer on that compiler -// (David Abrahams) -// 07 Feb 2001 More comprehensive testing; factored out static tests for -// better reuse (David Abrahams) -// 21 Jan 2001 Quick fix to my_iterator, which wasn't returning a -// reference type from operator* (David Abrahams) -// 19 Jan 2001 Initial version with iterator operators (David Abrahams) - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// A UDT for which we can specialize std::iterator_traits on -// compilers which don't support partial specialization. There's no -// other reasonable way to test pointers on those compilers. -struct element {}; - -// An iterator for which we can get traits. -struct my_iterator1 - : boost::forward_iterator_helper -{ - my_iterator1(const char* p) : m_p(p) {} - - bool operator==(const my_iterator1& rhs) const - { return this->m_p == rhs.m_p; } - - my_iterator1& operator++() { ++this->m_p; return *this; } - const char& operator*() { return *m_p; } - private: - const char* m_p; -}; - -// Used to prove that we don't require std::iterator<> in the hierarchy under -// MSVC6, and that we can compute all the traits for a standard-conforming UDT -// iterator. -struct my_iterator2 - : boost::equality_comparable > > -{ - typedef char value_type; - typedef long difference_type; - typedef const char* pointer; - typedef const char& reference; - typedef std::forward_iterator_tag iterator_category; - - my_iterator2(const char* p) : m_p(p) {} - - bool operator==(const my_iterator2& rhs) const - { return this->m_p == rhs.m_p; } - - my_iterator2& operator++() { ++this->m_p; return *this; } - const char& operator*() { return *m_p; } - private: - const char* m_p; -}; - -// Used to prove that we're not overly confused by the existence of -// std::iterator<> in the hierarchy under MSVC6 - we should find that -// boost::detail::iterator_traits::difference_type is int. -struct my_iterator3 : my_iterator1 -{ - typedef int difference_type; - my_iterator3(const char* p) - : my_iterator1(p) {} -}; - -// -// Assertion tools. Used instead of BOOST_STATIC_ASSERT because that -// doesn't give us a nice stack backtrace -// -template struct assertion; - -template <> struct assertion -{ - typedef char type; -}; - -template -struct assert_same - : assertion<(::boost::is_same::value)> -{ -}; - - -// Iterator tests -template -struct non_portable_tests -{ - typedef typename boost::detail::iterator_traits::pointer test_pt; - typedef typename boost::detail::iterator_traits::reference test_rt; - typedef typename assert_same::type a1; - typedef typename assert_same::type a2; -}; - -template -struct portable_tests -{ - typedef typename boost::detail::iterator_traits::difference_type test_dt; - typedef typename boost::detail::iterator_traits::iterator_category test_cat; - typedef typename assert_same::type a1; - typedef typename assert_same::type a2; -}; - -// Test iterator_traits -template -struct input_iterator_test - : portable_tests -{ - typedef typename boost::detail::iterator_traits::value_type test_vt; - typedef typename assert_same::type a1; -}; - -template -struct non_pointer_test - : input_iterator_test - , non_portable_tests -{ -}; - -template -struct maybe_pointer_test - : portable_tests - , non_portable_tests -{ -}; - -input_iterator_test, int, std::ptrdiff_t, int*, int&, std::input_iterator_tag> - istream_iterator_test; - -#if defined(__BORLANDC__) && !defined(__SGI_STL_PORT) -typedef ::std::char_traits::off_type distance; -non_pointer_test,int, - distance,int*,int&,std::output_iterator_tag> ostream_iterator_test; -#elif defined(BOOST_MSVC_STD_ITERATOR) -non_pointer_test, - int, void, int*, int&, std::output_iterator_tag> - ostream_iterator_test; -#elif BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(70190006)) -non_pointer_test, - int, long, int*, int&, std::output_iterator_tag> - ostream_iterator_test; -#else -non_pointer_test, - void, void, void, void, std::output_iterator_tag> - ostream_iterator_test; -#endif - - -#ifdef __KCC - typedef long std_list_diff_type; -#else - typedef std::ptrdiff_t std_list_diff_type; -#endif - -non_pointer_test::iterator, int, std_list_diff_type, int*, int&, std::bidirectional_iterator_tag> - list_iterator_test; - -maybe_pointer_test::iterator, int, std::ptrdiff_t, int*, int&, std::random_access_iterator_tag> - vector_iterator_test; - -maybe_pointer_test - int_pointer_test; - -non_pointer_test - my_iterator1_test; - -non_pointer_test - my_iterator2_test; - -non_pointer_test - my_iterator3_test; - -int main() -{ - char chars[100]; - int ints[100]; - - for (int length = 3; length < 100; length += length / 3) - { - std::list l(length); - assert(boost::detail::distance(l.begin(), l.end()) == length); - - std::vector v(length); - assert(boost::detail::distance(v.begin(), v.end()) == length); - - assert(boost::detail::distance(&ints[0], ints + length) == length); - assert(boost::detail::distance(my_iterator1(chars), my_iterator1(chars + length)) == length); - assert(boost::detail::distance(my_iterator2(chars), my_iterator2(chars + length)) == length); - assert(boost::detail::distance(my_iterator3(chars), my_iterator3(chars + length)) == length); - } - return 0; -} diff --git a/test/lvalue_concept_fail.cpp b/test/lvalue_concept_fail.cpp deleted file mode 100644 index 735bb4a..0000000 --- a/test/lvalue_concept_fail.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) 2004 Jeremy Siek -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include -#include -#include - -int main() -{ - typedef boost::iterator_archetype< - int - , boost::iterator_archetypes::readable_iterator_t - , boost::single_pass_traversal_tag - > Iter; - boost::function_requires< - boost_concepts::LvalueIteratorConcept >(); - return boost::exit_success; -} diff --git a/test/permutation_iterator_test.cpp b/test/permutation_iterator_test.cpp deleted file mode 100644 index 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 6df0506..0000000 --- a/test/static_assert_same.hpp +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright David Abrahams 2003. -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) -#ifndef STATIC_ASSERT_SAME_DWA2003530_HPP -# define STATIC_ASSERT_SAME_DWA2003530_HPP - -#include -# include - -#define STATIC_ASSERT_SAME( T1,T2 ) BOOST_MPL_ASSERT((::boost::is_same< T1, T2 >)) - -template -struct static_assert_same -{ - BOOST_MPL_ASSERT((::boost::is_same< T1, T2 >)); - enum { value = 1 }; -}; - -#endif // STATIC_ASSERT_SAME_DWA2003530_HPP diff --git a/test/transform_iterator_test.cpp b/test/transform_iterator_test.cpp deleted file mode 100644 index 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 0e98b7d..0000000 --- a/test/zip_iterator_test.cpp +++ /dev/null @@ -1,834 +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 // 2nd #include tests #include guard. -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -template -struct pure_traversal - : boost::detail::pure_traversal_tag< - typename boost::iterator_traversal::type - > -{}; - -///////////////////////////////////////////////////////////////////////////// -// -// Das Main Funktion -// -///////////////////////////////////////////////////////////////////////////// - -int main( void ) -{ - - std::cout << "\n" - << "***********************************************\n" - << "* *\n" - << "* Test driver for boost::zip_iterator *\n" - << "* Copyright Thomas Becker 2003 *\n" - << "* *\n" - << "***********************************************\n\n" - << std::flush; - - size_t num_successful_tests = 0; - size_t num_failed_tests = 0; - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator construction and dereferencing - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator construction and dereferencing: " - << std::flush; - - std::vector vect1(3); - vect1[0] = 42.; - vect1[1] = 43.; - vect1[2] = 44.; - - std::set intset; - intset.insert(52); - intset.insert(53); - intset.insert(54); - // - - typedef - boost::zip_iterator< - boost::tuples::tuple< - std::set::iterator - , std::vector::iterator - > - > zit_mixed; - - zit_mixed zip_it_mixed = zit_mixed( - boost::make_tuple( - intset.begin() - , vect1.begin() - ) - ); - - boost::tuples::tuple val_tuple( - *zip_it_mixed); - - boost::tuples::tuple ref_tuple( - *zip_it_mixed); - - double dblOldVal = boost::tuples::get<1>(ref_tuple); - boost::tuples::get<1>(ref_tuple) -= 41.; - - if( 52 == boost::tuples::get<0>(val_tuple) && - 42. == boost::tuples::get<1>(val_tuple) && - 52 == boost::tuples::get<0>(ref_tuple) && - 1. == boost::tuples::get<1>(ref_tuple) && - 1. == *vect1.begin() - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - // Undo change to vect1 - boost::tuples::get<1>(ref_tuple) = dblOldVal; - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator with 12 components - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterators with 12 components: " - << std::flush; - - // Declare 12 containers - // - std::list li1; - li1.push_back(1); - std::set se1; - se1.insert(2); - std::vector ve1; - ve1.push_back(3); - // - std::list li2; - li2.push_back(4); - std::set se2; - se2.insert(5); - std::vector ve2; - ve2.push_back(6); - // - std::list li3; - li3.push_back(7); - std::set se3; - se3.insert(8); - std::vector ve3; - ve3.push_back(9); - // - std::list li4; - li4.push_back(10); - std::set se4; - se4.insert(11); - std::vector ve4; - ve4.push_back(12); - - // typedefs for cons lists of iterators. - typedef boost::tuples::cons< - std::set::iterator, - boost::tuples::tuple< - std::vector::iterator, - std::list::iterator, - std::set::iterator, - std::vector::iterator, - std::list::iterator, - std::set::iterator, - std::vector::iterator, - std::list::iterator, - std::set::iterator, - std::vector::const_iterator - >::inherited - > cons_11_its_type; - // - typedef boost::tuples::cons< - std::list::const_iterator, - cons_11_its_type - > cons_12_its_type; - - // typedefs for cons lists for dereferencing the zip iterator - // made from the cons list above. - typedef boost::tuples::cons< - const int&, - boost::tuples::tuple< - int&, - int&, - const int&, - int&, - int&, - const int&, - int&, - int&, - const int&, - const int& - >::inherited - > cons_11_refs_type; - // - typedef boost::tuples::cons< - const int&, - cons_11_refs_type - > cons_12_refs_type; - - // typedef for zip iterator with 12 elements - typedef boost::zip_iterator zip_it_12_type; - - // Declare a 12-element zip iterator. - zip_it_12_type zip_it_12( - cons_12_its_type( - li1.begin(), - cons_11_its_type( - se1.begin(), - boost::make_tuple( - ve1.begin(), - li2.begin(), - se2.begin(), - ve2.begin(), - li3.begin(), - se3.begin(), - ve3.begin(), - li4.begin(), - se4.begin(), - ve4.begin() - ) - ) - ) - ); - - // Dereference, mess with the result a little. - cons_12_refs_type zip_it_12_dereferenced(*zip_it_12); - boost::tuples::get<9>(zip_it_12_dereferenced) = 42; - - // Make a copy and move it a little to force some instantiations. - zip_it_12_type zip_it_12_copy(zip_it_12); - ++zip_it_12_copy; - - if( boost::tuples::get<11>(zip_it_12.get_iterator_tuple()) == ve4.begin() && - boost::tuples::get<11>(zip_it_12_copy.get_iterator_tuple()) == ve4.end() && - 1 == boost::tuples::get<0>(zip_it_12_dereferenced) && - 12 == boost::tuples::get<11>(zip_it_12_dereferenced) && - 42 == *(li4.begin()) - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator incrementing and dereferencing - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator ++ and *: " - << std::flush; - - std::vector vect2(3); - vect2[0] = 2.2; - vect2[1] = 3.3; - vect2[2] = 4.4; - - boost::zip_iterator< - boost::tuples::tuple< - std::vector::const_iterator, - std::vector::const_iterator - > - > - zip_it_begin( - boost::make_tuple( - vect1.begin(), - vect2.begin() - ) - ); - - boost::zip_iterator< - boost::tuples::tuple< - std::vector::const_iterator, - std::vector::const_iterator - > - > - zip_it_run( - boost::make_tuple( - vect1.begin(), - vect2.begin() - ) - ); - - boost::zip_iterator< - boost::tuples::tuple< - std::vector::const_iterator, - std::vector::const_iterator - > - > - zip_it_end( - boost::make_tuple( - vect1.end(), - vect2.end() - ) - ); - - if( zip_it_run == zip_it_begin && - 42. == boost::tuples::get<0>(*zip_it_run) && - 2.2 == boost::tuples::get<1>(*zip_it_run) && - 43. == boost::tuples::get<0>(*(++zip_it_run)) && - 3.3 == boost::tuples::get<1>(*zip_it_run) && - 44. == boost::tuples::get<0>(*(++zip_it_run)) && - 4.4 == boost::tuples::get<1>(*zip_it_run) && - zip_it_end == ++zip_it_run - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator decrementing and dereferencing - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator -- and *: " - << std::flush; - - if( zip_it_run == zip_it_end && - zip_it_end == zip_it_run-- && - 44. == boost::tuples::get<0>(*zip_it_run) && - 4.4 == boost::tuples::get<1>(*zip_it_run) && - 43. == boost::tuples::get<0>(*(--zip_it_run)) && - 3.3 == boost::tuples::get<1>(*zip_it_run) && - 42. == boost::tuples::get<0>(*(--zip_it_run)) && - 2.2 == boost::tuples::get<1>(*zip_it_run) && - zip_it_begin == zip_it_run - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator copy construction and equality - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator copy construction and equality: " - << std::flush; - - boost::zip_iterator< - boost::tuples::tuple< - std::vector::const_iterator, - std::vector::const_iterator - > - > zip_it_run_copy(zip_it_run); - - if(zip_it_run == zip_it_run && zip_it_run == zip_it_run_copy) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator inequality - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator inequality: " - << std::flush; - - if(!(zip_it_run != zip_it_run_copy) && zip_it_run != ++zip_it_run_copy) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator less than - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator less than: " - << std::flush; - - // Note: zip_it_run_copy == zip_it_run + 1 - // - if( zip_it_run < zip_it_run_copy && - !( zip_it_run < --zip_it_run_copy) && - zip_it_run == zip_it_run_copy - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator less than or equal - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "zip iterator less than or equal: " - << std::flush; - - // Note: zip_it_run_copy == zip_it_run - // - ++zip_it_run; - zip_it_run_copy += 2; - - if( zip_it_run <= zip_it_run_copy && - zip_it_run <= --zip_it_run_copy && - !( zip_it_run <= --zip_it_run_copy) && - zip_it_run <= zip_it_run - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator greater than - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator greater than: " - << std::flush; - - // Note: zip_it_run_copy == zip_it_run - 1 - // - if( zip_it_run > zip_it_run_copy && - !( zip_it_run > ++zip_it_run_copy) && - zip_it_run == zip_it_run_copy - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator greater than or equal - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator greater than or equal: " - << std::flush; - - ++zip_it_run; - - // Note: zip_it_run == zip_it_run_copy + 1 - // - if( zip_it_run >= zip_it_run_copy && - --zip_it_run >= zip_it_run_copy && - ! (zip_it_run >= ++zip_it_run_copy) - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator + int - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator + int: " - << std::flush; - - // Note: zip_it_run == zip_it_run_copy - 1 - // - zip_it_run = zip_it_run + 2; - ++zip_it_run_copy; - - if( zip_it_run == zip_it_run_copy && zip_it_run == zip_it_begin + 3 ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator - int - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator - int: " - << std::flush; - - // Note: zip_it_run == zip_it_run_copy, and both are at end position - // - zip_it_run = zip_it_run - 2; - --zip_it_run_copy; - --zip_it_run_copy; - - if( zip_it_run == zip_it_run_copy && (zip_it_run - 1) == zip_it_begin ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator += - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator +=: " - << std::flush; - - // Note: zip_it_run == zip_it_run_copy, and both are at begin + 1 - // - zip_it_run += 2; - if( zip_it_run == zip_it_begin + 3 ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator -= - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator -=: " - << std::flush; - - // Note: zip_it_run is at end position, zip_it_run_copy is at - // begin plus one. - // - zip_it_run -= 2; - if( zip_it_run == zip_it_run_copy ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator getting member iterators - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator member iterators: " - << std::flush; - - // Note: zip_it_run and zip_it_run_copy are both at - // begin plus one. - // - if( boost::tuples::get<0>(zip_it_run.get_iterator_tuple()) == vect1.begin() + 1 && - boost::tuples::get<1>(zip_it_run.get_iterator_tuple()) == vect2.begin() + 1 - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Making zip iterators - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Making zip iterators: " - << std::flush; - - std::vector > - vect_of_tuples(3); - - std::copy( - boost::make_zip_iterator( - boost::make_tuple( - vect1.begin(), - vect2.begin() - ) - ), - boost::make_zip_iterator( - boost::make_tuple( - vect1.end(), - vect2.end() - ) - ), - vect_of_tuples.begin() - ); - - if( 42. == boost::tuples::get<0>(*vect_of_tuples.begin()) && - 2.2 == boost::tuples::get<1>(*vect_of_tuples.begin()) && - 43. == boost::tuples::get<0>(*(vect_of_tuples.begin() + 1)) && - 3.3 == boost::tuples::get<1>(*(vect_of_tuples.begin() + 1)) && - 44. == boost::tuples::get<0>(*(vect_of_tuples.begin() + 2)) && - 4.4 == boost::tuples::get<1>(*(vect_of_tuples.begin() + 2)) - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator non-const --> const conversion - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator non-const to const conversion: " - << std::flush; - - boost::zip_iterator< - boost::tuples::tuple< - std::set::const_iterator, - std::vector::const_iterator - > - > - zip_it_const( - boost::make_tuple( - intset.begin(), - vect2.begin() - ) - ); - // - boost::zip_iterator< - boost::tuples::tuple< - std::set::iterator, - std::vector::const_iterator - > - > - zip_it_half_const( - boost::make_tuple( - intset.begin(), - vect2.begin() - ) - ); - // - boost::zip_iterator< - boost::tuples::tuple< - std::set::iterator, - std::vector::iterator - > - > - zip_it_non_const( - boost::make_tuple( - intset.begin(), - vect2.begin() - ) - ); - - zip_it_half_const = ++zip_it_non_const; - zip_it_const = zip_it_half_const; - ++zip_it_const; -// zip_it_non_const = ++zip_it_const; // Error: can't convert from const to non-const - - if( 54 == boost::tuples::get<0>(*zip_it_const) && - 4.4 == boost::tuples::get<1>(*zip_it_const) && - 53 == boost::tuples::get<0>(*zip_it_half_const) && - 3.3 == boost::tuples::get<1>(*zip_it_half_const) - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - - ///////////////////////////////////////////////////////////////////////////// - // - // Zip iterator categories - // - ///////////////////////////////////////////////////////////////////////////// - - std::cout << "Zip iterator categories: " - << std::flush; - - // The big iterator of the previous test has vector, list, and set iterators. - // Therefore, it must be bidirectional, but not random access. - bool bBigItIsBidirectionalIterator = boost::is_convertible< - boost::iterator_traversal::type - , boost::bidirectional_traversal_tag - >::value; - - bool bBigItIsRandomAccessIterator = boost::is_convertible< - boost::iterator_traversal::type - , boost::random_access_traversal_tag - >::value; - - // A combining iterator with all vector iterators must have random access - // traversal. - // - typedef boost::zip_iterator< - boost::tuples::tuple< - std::vector::const_iterator, - std::vector::const_iterator - > - > all_vects_type; - - bool bAllVectsIsRandomAccessIterator = boost::is_convertible< - boost::iterator_traversal::type - , boost::random_access_traversal_tag - >::value; - - // The big test. - if( bBigItIsBidirectionalIterator && - ! bBigItIsRandomAccessIterator && - bAllVectsIsRandomAccessIterator - ) - { - ++num_successful_tests; - std::cout << "OK" << std::endl; - } - else - { - ++num_failed_tests = 0; - std::cout << "not OK" << std::endl; - } - - // Done - // - std::cout << "\nTest Result:" - << "\n============" - << "\nNumber of successful tests: " << static_cast(num_successful_tests) - << "\nNumber of failed tests: " << static_cast(num_failed_tests) - << std::endl; - - return num_failed_tests; -} -
-

Transform Iterator

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

transform_iterator synopsis

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

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

-

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

-

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

-
-
-

transform_iterator requirements

-

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

-

The argument Iterator shall model Readable Iterator.

-
-
-

transform_iterator models

-

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

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

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

-

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

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

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

-

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

-
-
-

transform_iterator operations

-

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

-

transform_iterator();

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

transform_iterator(Iterator const& x, UnaryFunction f);

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

UnaryFunction functor() const;

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

Iterator const& base() const;

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

reference operator*() const;

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

transform_iterator& operator++();

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

transform_iterator& operator--();

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

Example

-

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

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

The output is:

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

The source code for this example can be found here.

-
-
-

pointee and indirect_reference

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

Overview

-

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

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

pointee

-

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

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

indirect_reference

-

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

-

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

-
-
-
-

Reference

-
-

pointee

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

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

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

indirect_reference

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

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

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

Iterator Traits

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

Overview

-

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

-
-
-

Summary

-

Header <boost/iterator/iterator_traits.hpp>:

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

Broken Compiler Notes

-

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

-

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

-

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

-
-