annotate DEPENDENCIES/generic/include/boost/iterator/permutation_iterator.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 // (C) Copyright Toon Knapen 2001.
Chris@16 2 // (C) Copyright David Abrahams 2003.
Chris@16 3 // (C) Copyright Roland Richter 2003.
Chris@16 4 // Distributed under the Boost Software License, Version 1.0. (See
Chris@16 5 // accompanying file LICENSE_1_0.txt or copy at
Chris@16 6 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 7
Chris@16 8 #ifndef BOOST_PERMUTATION_ITERATOR_HPP
Chris@16 9 #define BOOST_PERMUTATION_ITERATOR_HPP
Chris@16 10
Chris@16 11 #include <iterator>
Chris@16 12
Chris@16 13 #include <boost/iterator/iterator_adaptor.hpp>
Chris@16 14
Chris@16 15
Chris@101 16 namespace boost {
Chris@101 17 namespace iterators {
Chris@16 18
Chris@16 19 template< class ElementIterator
Chris@16 20 , class IndexIterator>
Chris@16 21 class permutation_iterator
Chris@101 22 : public iterator_adaptor<
Chris@16 23 permutation_iterator<ElementIterator, IndexIterator>
Chris@101 24 , IndexIterator, typename boost::detail::iterator_traits<ElementIterator>::value_type
Chris@101 25 , use_default, typename boost::detail::iterator_traits<ElementIterator>::reference>
Chris@16 26 {
Chris@101 27 typedef iterator_adaptor<
Chris@16 28 permutation_iterator<ElementIterator, IndexIterator>
Chris@101 29 , IndexIterator, typename boost::detail::iterator_traits<ElementIterator>::value_type
Chris@101 30 , use_default, typename boost::detail::iterator_traits<ElementIterator>::reference> super_t;
Chris@16 31
Chris@16 32 friend class iterator_core_access;
Chris@16 33
Chris@16 34 public:
Chris@16 35 permutation_iterator() : m_elt_iter() {}
Chris@16 36
Chris@101 37 explicit permutation_iterator(ElementIterator x, IndexIterator y)
Chris@16 38 : super_t(y), m_elt_iter(x) {}
Chris@16 39
Chris@16 40 template<class OtherElementIterator, class OtherIndexIterator>
Chris@16 41 permutation_iterator(
Chris@16 42 permutation_iterator<OtherElementIterator, OtherIndexIterator> const& r
Chris@16 43 , typename enable_if_convertible<OtherElementIterator, ElementIterator>::type* = 0
Chris@16 44 , typename enable_if_convertible<OtherIndexIterator, IndexIterator>::type* = 0
Chris@16 45 )
Chris@16 46 : super_t(r.base()), m_elt_iter(r.m_elt_iter)
Chris@16 47 {}
Chris@16 48
Chris@16 49 private:
Chris@16 50 typename super_t::reference dereference() const
Chris@16 51 { return *(m_elt_iter + *this->base()); }
Chris@16 52
Chris@16 53 #ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
Chris@16 54 template <class,class> friend class permutation_iterator;
Chris@16 55 #else
Chris@16 56 public:
Chris@101 57 #endif
Chris@16 58 ElementIterator m_elt_iter;
Chris@16 59 };
Chris@16 60
Chris@16 61
Chris@16 62 template <class ElementIterator, class IndexIterator>
Chris@101 63 inline permutation_iterator<ElementIterator, IndexIterator>
Chris@16 64 make_permutation_iterator( ElementIterator e, IndexIterator i )
Chris@16 65 {
Chris@16 66 return permutation_iterator<ElementIterator, IndexIterator>( e, i );
Chris@16 67 }
Chris@16 68
Chris@101 69 } // namespace iterators
Chris@101 70
Chris@101 71 using iterators::permutation_iterator;
Chris@101 72 using iterators::make_permutation_iterator;
Chris@16 73
Chris@16 74 } // namespace boost
Chris@16 75
Chris@16 76 #endif