diff --git a/include/boost/iterator/permutation_iterator.hpp b/include/boost/iterator/permutation_iterator.hpp index f41da1a..7b41ba1 100644 --- a/include/boost/iterator/permutation_iterator.hpp +++ b/include/boost/iterator/permutation_iterator.hpp @@ -26,19 +26,19 @@ template< class ElementIterator class permutation_iterator : public iterator_adaptor< permutation_iterator - , ElementIterator, ValueT, CategoryT, ReferenceT, DifferenceT > + , IndexIterator, ValueT, CategoryT, ReferenceT, DifferenceT > { typedef iterator_adaptor< permutation_iterator - , ElementIterator, ValueT, CategoryT, ReferenceT, DifferenceT > super_t; + , IndexIterator, ValueT, CategoryT, ReferenceT, DifferenceT > super_t; friend class iterator_core_access; public: - permutation_iterator() : order_it_() {} + permutation_iterator() : m_elt_iter() {} explicit permutation_iterator(ElementIterator x, IndexIterator y) - : super_t(x), order_it_(y) {} + : super_t(y), m_elt_iter(x) {} template permutation_iterator( @@ -46,36 +46,14 @@ public: , typename enable_if_convertible::type* = 0 , typename enable_if_convertible::type* = 0 ) - : super_t(r.base()) + : super_t(r.base()), m_elt_iter(r.m_elt_iter) {} private: typename super_t::reference dereference() const - { return *(this->base() + *this->order_it_); } - - void increment() { ++this->order_it_; } - void decrement() { --this->order_it_; } + { return *(m_elt_iter + *this->base()); } - void advance(typename super_t::difference_type n) - { - std::advance( order_it_, n ); - } - - template - typename super_t::difference_type - distance_to( permutation_iterator const& y ) const - { - return std::distance( this->order_it_, y.order_it_ ); - } - - template - bool - equal( permutation_iterator const& y ) const - { - return( y.order_it_ == this->order_it_ ); - } - - IndexIterator order_it_; + ElementIterator m_elt_iter; };