Removed iterator_adaptor_pair_generator and

reverse_iterator_pair_generator (more such culling to come)

Improved comments

Changed all uses of std::iterator_traits as default arguments
to boost::detail::iterator_traits for improved utility in
non-generic contexts

Fixed naming convention of non-template parameter names


[SVN r9003]
This commit is contained in:
Dave Abrahams
2001-02-07 17:22:16 +00:00
parent 07482538ed
commit 6eeeb23332

View File

@ -12,6 +12,18 @@
// //
// Revision History: // Revision History:
// 07 Feb 2001
// Removed iterator_adaptor_pair_generator and
// reverse_iterator_pair_generator (more such culling to come)
//
// Improved comments
//
// Changed all uses of std::iterator_traits as default arguments
// to boost::detail::iterator_traits for improved utility in
// non-generic contexts
//
// Fixed naming convention of non-template parameter names
//
// 06 Feb 2001 // 06 Feb 2001
// Produce operator-> proxy objects for InputIterators // Produce operator-> proxy objects for InputIterators
// //
@ -335,8 +347,8 @@ namespace detail {
} // namespace detail } // namespace detail
//============================================================================ //============================================================================
// iterator_adaptor - A generalized adaptor around an existing //iterator_adaptor - Adapts a generic piece of data as an iterator. Adaptation
// iterator, which is itself an iterator // is especially easy if the data being adapted is itself an iterator
// //
// Iterator - the iterator type being wrapped. // Iterator - the iterator type being wrapped.
// //
@ -347,11 +359,7 @@ namespace detail {
// std::iterator_traits for the resulting iterator. // std::iterator_traits for the resulting iterator.
// //
template <class Iterator, class Policies, template <class Iterator, class Policies,
#ifdef BOOST_NO_STD_ITERATOR_TRAITS class Traits = boost::detail::iterator_traits<Iterator>
class Traits
#else
class Traits = std::iterator_traits<Iterator>
#endif
> >
struct iterator_adaptor : struct iterator_adaptor :
#ifdef BOOST_RELOPS_AMBIGUITY_BUG #ifdef BOOST_RELOPS_AMBIGUITY_BUG
@ -539,28 +547,6 @@ operator!=(const iterator_adaptor<Iterator1,Policies,Traits1>& x,
} }
#endif #endif
//=============================================================================
// iterator_adaptor_pair_generator - A type generator that simplifies creating
// mutable/const pairs of iterator adaptors.
template <class Iterator, class ConstIterator,
#ifdef BOOST_NO_STD_ITERATOR_TRAITS
class Traits,
class ConstTraits,
#else
class Traits = std::iterator_traits<Iterator>,
class ConstTraits = std::iterator_traits<ConstIterator>,
#endif
class Policies = default_iterator_policies>
class iterator_adaptor_pair_generator
{
public:
typedef iterator_adaptor<Iterator, Policies, Traits> iterator;
typedef iterator_adaptor<ConstIterator, Policies, ConstTraits>
const_iterator;
};
//============================================================================= //=============================================================================
// Transform Iterator Adaptor // Transform Iterator Adaptor
// //
@ -635,14 +621,9 @@ struct indirect_iterator_policies : public default_iterator_policies
}; };
template <class OuterIterator, template <class OuterIterator,
#ifdef BOOST_NO_STD_ITERATOR_TRAITS class InnerIterator = typename boost::detail::iterator_traits<OuterIterator>::value_type,
class InnerIterator, class InnerTraits = boost::detail::iterator_traits<InnerIterator>,
class InnerTraits, class OuterTraits = boost::detail::iterator_traits<OuterIterator> // never needed (?)
#else
class InnerIterator = typename std::iterator_traits<OuterIterator>::value_type,
class InnerTraits = std::iterator_traits<InnerIterator>,
#endif
class OuterTraits = boost::detail::iterator_traits<OuterIterator>
> >
struct indirect_traits struct indirect_traits
{ {
@ -654,15 +635,10 @@ struct indirect_traits
}; };
template <class OuterIterator, // Mutable or Immutable, does not matter template <class OuterIterator, // Mutable or Immutable, does not matter
#ifdef BOOST_NO_STD_ITERATOR_TRAITS // Mutable -> mutable indirect iterator; Immutable -> immutable indirect iterator
class InnerIterator, // Mutable -> mutable indirect iterator class InnerIterator = typename boost::detail::iterator_traits<OuterIterator>::value_type,
// Immutable -> immutable indirect iterator class InnerTraits = boost::detail::iterator_traits<InnerIterator>,
class InnerTraits, class OuterTraits = boost::detail::iterator_traits<OuterIterator> // never needed (?)
#else
class InnerIterator = typename std::iterator_traits<OuterIterator>::value_type,
class InnerTraits = std::iterator_traits<InnerIterator>,
#endif
class OuterTraits = boost::detail::iterator_traits<OuterIterator>
> >
struct indirect_iterator_generator struct indirect_iterator_generator
{ {
@ -675,28 +651,20 @@ struct indirect_iterator_generator
template <class OuterIterator, // Mutable or Immutable, does not matter template <class OuterIterator, // Mutable or Immutable, does not matter
class ConstInnerIterator, // Immutable class ConstInnerIterator, // Immutable
#ifdef BOOST_NO_STD_ITERATOR_TRAITS class ConstInnerTraits = boost::detail::iterator_traits<ConstInnerIterator>,
class ConstInnerTraits, class InnerIterator = typename boost::detail::iterator_traits<OuterIterator>::value_type,
class InnerIterator, // Mutable class InnerTraits = boost::detail::iterator_traits<InnerIterator>,
class InnerTraits, class OuterTraits = boost::detail::iterator_traits<OuterIterator> // never needed (?)
#else
class ConstInnerTraits = std::iterator_traits<ConstInnerIterator>,
class InnerIterator = typename std::iterator_traits<OuterIterator>::value_type,
class InnerTraits = std::iterator_traits<InnerIterator>,
#endif
class OuterTraits = boost::detail::iterator_traits<OuterIterator>
> >
struct indirect_iterator_pair_generator struct indirect_iterator_pair_generator
{ {
typedef iterator_adaptor_pair_generator<OuterIterator, OuterIterator, typedef iterator_adaptor<OuterIterator,
indirect_traits<OuterIterator, InnerIterator, indirect_traits<OuterIterator, InnerIterator, InnerTraits, OuterTraits>,
InnerTraits, OuterTraits>, indirect_iterator_policies> iterator;
indirect_traits<OuterIterator, ConstInnerIterator,
ConstInnerTraits, OuterTraits>, typedef iterator_adaptor<OuterIterator,
indirect_iterator_policies indirect_traits<OuterIterator, ConstInnerIterator, ConstInnerTraits, OuterTraits>,
> pair_generator; indirect_iterator_policies> const_iterator;
typedef typename pair_generator::iterator iterator;
typedef typename pair_generator::const_iterator const_iterator;
}; };
@ -736,11 +704,7 @@ struct reverse_iterator_policies : public default_iterator_policies
}; };
template <class Iterator, template <class Iterator,
#ifndef BOOST_NO_STD_ITERATOR_TRAITS class Traits = boost::detail::iterator_traits<Iterator>
class Traits = std::iterator_traits<Iterator>
#else
class Traits
#endif
> >
struct reverse_iterator_generator struct reverse_iterator_generator
{ {
@ -749,11 +713,7 @@ struct reverse_iterator_generator
}; };
template <class ConstIterator, template <class ConstIterator,
#ifndef BOOST_NO_STD_ITERATOR_TRAITS class ConstTraits = boost::detail::iterator_traits<ConstIterator>
class ConstTraits = std::iterator_traits<ConstIterator>
#else
class ConstTraits
#endif
> >
struct const_reverse_iterator_generator struct const_reverse_iterator_generator
{ {
@ -761,23 +721,6 @@ struct const_reverse_iterator_generator
ConstTraits> type; ConstTraits> type;
}; };
template <class Iterator, class ConstIterator,
#ifndef BOOST_NO_STD_ITERATOR_TRAITS
class Traits = std::iterator_traits<Iterator>,
class ConstTraits = std::iterator_traits<ConstIterator>
#else
class Traits,
class ConstTraits
#endif
>
struct reverse_iterator_pair_generator
{
typedef iterator_adaptor_pair_generator<Iterator,ConstIterator,Traits,ConstTraits,
reverse_iterator_policies> pair_generator;
typedef typename pair_generator::iterator iterator;
typedef typename pair_generator::const_iterator const_iterator;
};
//============================================================================= //=============================================================================
// Projection Iterators Adaptor // Projection Iterators Adaptor
@ -818,10 +761,10 @@ template <class AdaptableUnaryFunction, class Iterator,
> >
struct projection_iterator_generator { struct projection_iterator_generator {
typedef projection_iterator_traits<AdaptableUnaryFunction, Traits> typedef projection_iterator_traits<AdaptableUnaryFunction, Traits>
Projection_Traits; projection_traits;
typedef iterator_adaptor<Iterator, typedef iterator_adaptor<Iterator,
projection_iterator_policies<AdaptableUnaryFunction>, projection_iterator_policies<AdaptableUnaryFunction>,
Projection_Traits> type; projection_traits> type;
}; };
template <class AdaptableUnaryFunction, class Iterator, template <class AdaptableUnaryFunction, class Iterator,
@ -829,10 +772,10 @@ template <class AdaptableUnaryFunction, class Iterator,
> >
struct const_projection_iterator_generator { struct const_projection_iterator_generator {
typedef const_projection_iterator_traits<AdaptableUnaryFunction, typedef const_projection_iterator_traits<AdaptableUnaryFunction,
Traits> Projection_Traits; Traits> projection_traits;
typedef iterator_adaptor<Iterator, typedef iterator_adaptor<Iterator,
projection_iterator_policies<AdaptableUnaryFunction>, projection_iterator_policies<AdaptableUnaryFunction>,
Projection_Traits> type; projection_traits> type;
}; };
template <class AdaptableUnaryFunction, class Iterator, class ConstIterator, template <class AdaptableUnaryFunction, class Iterator, class ConstIterator,
@ -841,14 +784,13 @@ template <class AdaptableUnaryFunction, class Iterator, class ConstIterator,
> >
struct projection_iterator_pair_generator { struct projection_iterator_pair_generator {
typedef projection_iterator_traits<AdaptableUnaryFunction, Traits> typedef projection_iterator_traits<AdaptableUnaryFunction, Traits>
Projection_Traits; projection_traits;
typedef const_projection_iterator_traits<AdaptableUnaryFunction, typedef const_projection_iterator_traits<AdaptableUnaryFunction,
ConstTraits> Const_Projection_Traits; ConstTraits> const_projection_traits;
typedef iterator_adaptor_pair_generator<Iterator, ConstIterator, typedef iterator_adaptor<Iterator, projection_iterator_policies<AdaptableUnaryFunction>,
Projection_Traits, Const_Projection_Traits, projection_traits> iterator;
projection_iterator_policies<AdaptableUnaryFunction> > pair_generator; typedef iterator_adaptor<ConstIterator, projection_iterator_policies<AdaptableUnaryFunction>,
typedef typename pair_generator::iterator iterator; const_projection_traits > const_iterator;
typedef typename pair_generator::const_iterator const_iterator;
}; };
//============================================================================= //=============================================================================
@ -884,11 +826,7 @@ struct projection_iterator_pair_generator {
}; };
template <class Predicate, class Iterator, template <class Predicate, class Iterator,
#ifndef BOOST_NO_STD_ITERATOR_TRAITS class Traits = boost::detail::iterator_traits<Iterator>
class Traits = std::iterator_traits<Iterator>
#else
class Traits
#endif
> >
class filter_iterator_generator { class filter_iterator_generator {
typedef filter_iterator_policies<Predicate, Iterator> Policies; typedef filter_iterator_policies<Predicate, Iterator> Policies;