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: | 2003-08-05 |
Copyright: | Copyright Dave Abrahams, Jeremy Siek, and Thomas Witt 2003. All rights reserved |
abstract: |
---|
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.
template <class AdaptableUnaryFunction, class Iterator, class Reference = use_default, class Value = use_default> class transform_iterator : public iterator_adaptor</* see discussion */> { friend class iterator_core_access; public: transform_iterator(); transform_iterator(Iterator const& x, AdaptableUnaryFunction f); template<class OtherIterator, class R2, class V2> transform_iterator( transform_iterator<AdaptableUnaryFunction, OtherIterator, R2, V2> const& t , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition ); AdaptableUnaryFunction functor() const; private: typename transform_iterator::value_type dereference() const; AdaptableUnaryFunction m_f; };
The type AdaptableUnaryFunction must be Assignable, Copy Constructible, and the expression f(x) must be valid where f is an object of type AdaptableUnaryFunction, x is an object of type AdaptableUnaryFunction::argument_type, and where the type of f(x) must be AdaptableUnaryFunction::result_type.
The type Iterator must at least model Readable Iterator. The resulting transform_iterator models the most refined of the following options that is also modeled by Iterator.
- Writable Lvalue Iterator if the result_type of the AdaptableUnaryFunction is a non-const reference.
- Readable Lvalue Iterator if the result_type is a const reference.
- Readable Iterator otherwise.
The transform_iterator models the most refined standard traversal concept that is modeled by Iterator.
The value_type of transform_iterator is remove_reference<result_type>::type. The reference type is result_type.
transform_iterator();
Returns: | An instance of transform_iterator with m_f and m_iterator default constructed. |
---|
transform_iterator(Iterator const& x, AdaptableUnaryFunction f);
Returns: | An instance of transform_iterator with m_f initialized to f and m_iterator initialized to x. |
---|
template<class OtherIterator, class R2, class V2> transform_iterator( transform_iterator<AdaptableUnaryFunction, OtherIterator, R2, V2> const& t , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition );
Returns: | An instance of transform_iterator that is a copy of t. |
---|---|
Requires: | OtherIterator is implicitly convertible to Iterator. |
AdaptableUnaryFunction functor() const;
Returns: | m_f |
---|
typename transform_iterator::value_type dereference() const;
Returns: | m_f(transform_iterator::dereference()); |
---|