mirror of
https://github.com/boostorg/iterator.git
synced 2025-07-30 12:57:23 +02:00
Removed workarounds for older compilers from permutation_iterator.hpp.
This commit is contained in:
@ -5,8 +5,8 @@
|
|||||||
// accompanying file LICENSE_1_0.txt or copy at
|
// accompanying file LICENSE_1_0.txt or copy at
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
#ifndef BOOST_PERMUTATION_ITERATOR_HPP
|
#ifndef BOOST_ITERATOR_PERMUTATION_ITERATOR_HPP_INCLUDED_
|
||||||
#define BOOST_PERMUTATION_ITERATOR_HPP
|
#define BOOST_ITERATOR_PERMUTATION_ITERATOR_HPP_INCLUDED_
|
||||||
|
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
|
||||||
@ -17,54 +17,62 @@
|
|||||||
namespace boost {
|
namespace boost {
|
||||||
namespace iterators {
|
namespace iterators {
|
||||||
|
|
||||||
template< class ElementIterator
|
template< typename ElementIterator, typename IndexIterator >
|
||||||
, class IndexIterator>
|
class permutation_iterator :
|
||||||
class permutation_iterator
|
public iterator_adaptor<
|
||||||
: public iterator_adaptor<
|
permutation_iterator< ElementIterator, IndexIterator >,
|
||||||
permutation_iterator<ElementIterator, IndexIterator>
|
IndexIterator,
|
||||||
, IndexIterator, typename std::iterator_traits<ElementIterator>::value_type
|
typename std::iterator_traits< ElementIterator >::value_type,
|
||||||
, use_default, typename std::iterator_traits<ElementIterator>::reference>
|
use_default,
|
||||||
|
typename std::iterator_traits< ElementIterator >::reference
|
||||||
|
>
|
||||||
{
|
{
|
||||||
typedef iterator_adaptor<
|
friend class iterator_core_access;
|
||||||
permutation_iterator<ElementIterator, IndexIterator>
|
template< typename, typename >
|
||||||
, IndexIterator, typename std::iterator_traits<ElementIterator>::value_type
|
friend class permutation_iterator;
|
||||||
, use_default, typename std::iterator_traits<ElementIterator>::reference> super_t;
|
|
||||||
|
|
||||||
friend class iterator_core_access;
|
|
||||||
|
|
||||||
public:
|
|
||||||
permutation_iterator() : m_elt_iter() {}
|
|
||||||
|
|
||||||
explicit permutation_iterator(ElementIterator x, IndexIterator y)
|
|
||||||
: super_t(y), m_elt_iter(x) {}
|
|
||||||
|
|
||||||
template<class OtherElementIterator, class OtherIndexIterator>
|
|
||||||
permutation_iterator(
|
|
||||||
permutation_iterator<OtherElementIterator, OtherIndexIterator> const& r
|
|
||||||
, typename enable_if_convertible<OtherElementIterator, ElementIterator>::type* = 0
|
|
||||||
, typename enable_if_convertible<OtherIndexIterator, IndexIterator>::type* = 0
|
|
||||||
)
|
|
||||||
: super_t(r.base()), m_elt_iter(r.m_elt_iter)
|
|
||||||
{}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
typename super_t::reference dereference() const
|
using super_t = iterator_adaptor<
|
||||||
{ return *(m_elt_iter + *this->base()); }
|
permutation_iterator< ElementIterator, IndexIterator >,
|
||||||
|
IndexIterator,
|
||||||
|
typename std::iterator_traits< ElementIterator >::value_type,
|
||||||
|
use_default,
|
||||||
|
typename std::iterator_traits< ElementIterator >::reference
|
||||||
|
>;
|
||||||
|
|
||||||
#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
|
public:
|
||||||
template <class,class> friend class permutation_iterator;
|
permutation_iterator() :
|
||||||
#else
|
m_elt_iter()
|
||||||
public:
|
{}
|
||||||
#endif
|
|
||||||
|
explicit permutation_iterator(ElementIterator x, IndexIterator y) :
|
||||||
|
super_t(y),
|
||||||
|
m_elt_iter(x)
|
||||||
|
{}
|
||||||
|
|
||||||
|
template<
|
||||||
|
typename OtherElementIterator,
|
||||||
|
typename OtherIndexIterator,
|
||||||
|
typename = enable_if_convertible_t< OtherElementIterator, ElementIterator >,
|
||||||
|
typename = enable_if_convertible_t< OtherIndexIterator, IndexIterator >
|
||||||
|
>
|
||||||
|
permutation_iterator(permutation_iterator< OtherElementIterator, OtherIndexIterator > const& r) :
|
||||||
|
super_t(r.base()),
|
||||||
|
m_elt_iter(r.m_elt_iter)
|
||||||
|
{}
|
||||||
|
|
||||||
|
private:
|
||||||
|
typename super_t::reference dereference() const { return *(m_elt_iter + *this->base()); }
|
||||||
|
|
||||||
|
private:
|
||||||
ElementIterator m_elt_iter;
|
ElementIterator m_elt_iter;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
template <class ElementIterator, class IndexIterator>
|
template< typename ElementIterator, typename IndexIterator >
|
||||||
inline permutation_iterator<ElementIterator, IndexIterator>
|
inline permutation_iterator< ElementIterator, IndexIterator > make_permutation_iterator(ElementIterator e, IndexIterator i)
|
||||||
make_permutation_iterator( ElementIterator e, IndexIterator i )
|
|
||||||
{
|
{
|
||||||
return permutation_iterator<ElementIterator, IndexIterator>( e, i );
|
return permutation_iterator< ElementIterator, IndexIterator >(e, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace iterators
|
} // namespace iterators
|
||||||
@ -74,4 +82,4 @@ using iterators::make_permutation_iterator;
|
|||||||
|
|
||||||
} // namespace boost
|
} // namespace boost
|
||||||
|
|
||||||
#endif
|
#endif // BOOST_ITERATOR_PERMUTATION_ITERATOR_HPP_INCLUDED_
|
||||||
|
Reference in New Issue
Block a user