From 5aeb0855b4daf28b91f14307fced1e2ce4b62e8b Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Tue, 27 Feb 2001 02:18:48 +0000 Subject: [PATCH] Moved pointer parameter [SVN r9348] --- include/boost/counting_iterator.hpp | 4 +- include/boost/iterator_adaptors.hpp | 127 ++++++++++++++-------------- 2 files changed, 66 insertions(+), 65 deletions(-) diff --git a/include/boost/counting_iterator.hpp b/include/boost/counting_iterator.hpp index 90d808d..b8d6766 100644 --- a/include/boost/counting_iterator.hpp +++ b/include/boost/counting_iterator.hpp @@ -194,9 +194,9 @@ struct counting_iterator_generator counting_iterator_policies, Incrementable, const Incrementable&, - const Incrementable*, typename traits::iterator_category, - typename traits::difference_type + typename traits::difference_type, + const Incrementable* > type; }; diff --git a/include/boost/iterator_adaptors.hpp b/include/boost/iterator_adaptors.hpp index e0af582..b2317fb 100644 --- a/include/boost/iterator_adaptors.hpp +++ b/include/boost/iterator_adaptors.hpp @@ -438,8 +438,6 @@ namespace detail { # define BOOST_ARG_DEPENDENT_TYPENAME # endif -template struct undefined; - //============================================================================ //iterator_adaptor - Adapts a generic piece of data as an iterator. Adaptation // is especially easy if the data being adapted is itself an iterator @@ -457,35 +455,35 @@ template struct undefined; // particular, the result type of operator*(). If not supplied but // Value is supplied, Value& is used. Otherwise // iterator_traits::reference is used. +// Category - the iterator_category of the resulting iterator. If not +// supplied, iterator_traits::iterator_category is used. +// +// Distance - the difference_type of the resulting iterator. If not +// supplied, iterator_traits::difference_type is used. // // Pointer - the pointer type of the resulting iterator, and in // particular, the result type of operator->(). If not // supplied but Value is supplied, Value* is used. Otherwise // iterator_traits::pointer is used. // -// Category - the iterator_category of the resulting iterator. If not -// supplied, iterator_traits::iterator_category is used. -// -// Distance - the difference_type of the resulting iterator. If not -// supplied, iterator_traits::difference_type is used. template ::value_type, class Reference = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_defaults::reference, - class Pointer = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_defaults::pointer, class Category = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_traits::iterator_category, - class Distance = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_traits::difference_type + class Distance = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_traits::difference_type, + class Pointer = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_defaults::pointer > struct iterator_adaptor : #ifdef BOOST_RELOPS_AMBIGUITY_BUG iterator_comparisons< - iterator_adaptor, + iterator_adaptor, #endif boost::iterator #ifdef BOOST_RELOPS_AMBIGUITY_BUG > #endif { - typedef iterator_adaptor self; + typedef iterator_adaptor self; public: typedef Distance difference_type; typedef typename boost::remove_const::type value_type; @@ -522,7 +520,7 @@ struct iterator_adaptor : template iterator_adaptor ( - const iterator_adaptor& src) + const iterator_adaptor& src) : m_iter_p(src.iter(), src.policies()) { policies().initialize(iter()); @@ -603,99 +601,99 @@ public: // implementation details (too many compilers have trouble when these ar const Base& iter() const { return m_iter_p.first(); } }; -template -iterator_adaptor +template +iterator_adaptor operator+( - iterator_adaptor p, + iterator_adaptor p, Distance2 x) { return p += x; } -template -iterator_adaptor +template +iterator_adaptor operator+( Distance2 x, - iterator_adaptor p) + iterator_adaptor p) { return p += x; } template + class Reference1, class Reference2, class Category, + class Distance, class Pointer1, class Pointer2> Distance operator-( - const iterator_adaptor& x, - const iterator_adaptor& y) + const iterator_adaptor& x, + const iterator_adaptor& y) { return x.policies().distance(type(), y.iter(), x.iter()); } #ifndef BOOST_RELOPS_AMBIGUITY_BUG template + class Reference1, class Reference2, + class Category, class Distance, class Pointer1, class Pointer2> inline bool operator==( - const iterator_adaptor& x, - const iterator_adaptor& y) + const iterator_adaptor& x, + const iterator_adaptor& y) { return x.policies().equal(x.iter(), y.iter()); } template + class Reference1, class Reference2, + class Category, class Distance, class Pointer1, class Pointer2> inline bool operator<( - const iterator_adaptor& x, - const iterator_adaptor& y) + const iterator_adaptor& x, + const iterator_adaptor& y) { return x.policies().less(x.iter(), y.iter()); } template + class Reference1, class Reference2, + class Category, class Distance, class Pointer1, class Pointer2> inline bool operator>( - const iterator_adaptor& x, - const iterator_adaptor& y) + const iterator_adaptor& x, + const iterator_adaptor& y) { return x.policies().less(y.iter(), x.iter()); } template + class Reference1, class Reference2, + class Category, class Distance, class Pointer1, class Pointer2> inline bool operator>=( - const iterator_adaptor& x, - const iterator_adaptor& y) + const iterator_adaptor& x, + const iterator_adaptor& y) { return !x.policies().less(x.iter(), y.iter()); } template + class Reference1, class Reference2, + class Category, class Distance, class Pointer1, class Pointer2> inline bool operator<=( - const iterator_adaptor& x, - const iterator_adaptor& y) + const iterator_adaptor& x, + const iterator_adaptor& y) { return !x.policies().less(y.iter(), x.iter()); } template + class Reference1, class Reference2, + class Category, class Distance, class Pointer1, class Pointer2> inline bool operator!=( - const iterator_adaptor& x, - const iterator_adaptor& y) + const iterator_adaptor& x, + const iterator_adaptor& y) { return !x.policies().equal(x.iter(), y.iter()); } @@ -727,7 +725,7 @@ class transform_iterator_generator public: typedef iterator_adaptor, - value_type, value_type, value_type*, std::input_iterator_tag> + value_type, value_type, std::input_iterator_tag> type; }; @@ -784,8 +782,11 @@ template struct indirect_iterator_generator { + private: + typedef typename boost::detail::iterator_traits::difference_type difference_type; + public: typedef iterator_adaptor type; + indirect_iterator_policies,Value,Reference,Category,difference_type,Pointer> type; }; template ::type #endif - , class Reference = Value& - , class ConstReference = const Value& , class Category = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_traits::iterator_category - , class Pointer = Value* - , class ConstPointer = const Value* > struct indirect_iterator_pair_generator { typedef typename indirect_iterator_generator::type iterator; + Value,Value&,Category,Value*>::type iterator; typedef typename indirect_iterator_generator::type const_iterator; + Value,const Value&,Category,const Value*>::type const_iterator; }; #ifndef BOOST_MSVC @@ -856,14 +853,14 @@ struct reverse_iterator_policies : public default_iterator_policies template ::value_type, class Reference = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_defaults::reference, - class Pointer = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_defaults::pointer, class Category = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_traits::iterator_category, - class Distance = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_traits::difference_type + class Distance = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_traits::difference_type, + class Pointer = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_defaults::pointer > struct reverse_iterator_generator { typedef iterator_adaptor type; + Value,Reference,Category,Distance,Pointer> type; }; template @@ -903,8 +900,12 @@ template class const_projection_iterator_generator { typedef typename AdaptableUnaryFunction::result_type value_type; typedef projection_iterator_policies policies; + typedef boost::detail::iterator_traits base_traits; + typedef typename base_traits::iterator_category iterator_category; + typedef typename base_traits::difference_type difference_type; public: - typedef iterator_adaptor type; + typedef iterator_adaptor type; }; template @@ -1019,9 +1020,9 @@ namespace detail { template ::value_type, class Reference = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_defaults::reference, - class Pointer = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_defaults::pointer, class Category = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::non_bidirectional_category::type, - class Distance = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_traits::difference_type + class Distance = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_traits::difference_type, + class Pointer = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_defaults::pointer > class filter_iterator_generator { BOOST_STATIC_CONSTANT(bool, is_bidirectional @@ -1032,7 +1033,7 @@ class filter_iterator_generator { typedef filter_iterator_policies policies_type; public: typedef iterator_adaptor type; + Value,Reference,Category,Distance,Pointer> type; }; // This keeps MSVC happy; it doesn't like to deduce default template arguments