-// (C) Copyright Toon Knapen 2001.\r
-// (C) Copyright David Abrahams 2003.\r
-// (C) Copyright Roland Richter 2003.\r
-// Distributed under the Boost Software License, Version 1.0. (See\r
-// accompanying file LICENSE_1_0.txt or copy at\r
-// http://www.boost.org/LICENSE_1_0.txt)\r
-\r
-#ifndef BOOST_PERMUTATION_ITERATOR_HPP\r
-#define BOOST_PERMUTATION_ITERATOR_HPP\r
-\r
-#include <iterator>\r
-\r
-#include <boost/iterator/iterator_adaptor.hpp>\r
-\r
-\r
-namespace boost\r
-{\r
-\r
-template< class ElementIterator\r
- , class IndexIterator>\r
-class permutation_iterator\r
- : public iterator_adaptor< \r
- permutation_iterator<ElementIterator, IndexIterator>\r
- , IndexIterator, typename detail::iterator_traits<ElementIterator>::value_type\r
- , use_default, typename detail::iterator_traits<ElementIterator>::reference>\r
-{\r
- typedef iterator_adaptor< \r
- permutation_iterator<ElementIterator, IndexIterator>\r
- , IndexIterator, typename detail::iterator_traits<ElementIterator>::value_type\r
- , use_default, typename detail::iterator_traits<ElementIterator>::reference> super_t;\r
-\r
- friend class iterator_core_access;\r
-\r
-public:\r
- permutation_iterator() : m_elt_iter() {}\r
-\r
- explicit permutation_iterator(ElementIterator x, IndexIterator y) \r
- : super_t(y), m_elt_iter(x) {}\r
-\r
- template<class OtherElementIterator, class OtherIndexIterator>\r
- permutation_iterator(\r
- permutation_iterator<OtherElementIterator, OtherIndexIterator> const& r\r
- , typename enable_if_convertible<OtherElementIterator, ElementIterator>::type* = 0\r
- , typename enable_if_convertible<OtherIndexIterator, IndexIterator>::type* = 0\r
- )\r
- : super_t(r.base()), m_elt_iter(r.m_elt_iter)\r
- {}\r
-\r
-private:\r
- typename super_t::reference dereference() const\r
- { return *(m_elt_iter + *this->base()); }\r
-\r
-#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS\r
- template <class,class> friend class permutation_iterator;\r
-#else\r
- public:\r
-#endif \r
- ElementIterator m_elt_iter;\r
-};\r
-\r
-\r
-template <class ElementIterator, class IndexIterator>\r
-permutation_iterator<ElementIterator, IndexIterator> \r
-make_permutation_iterator( ElementIterator e, IndexIterator i )\r
-{\r
- return permutation_iterator<ElementIterator, IndexIterator>( e, i );\r
-}\r
-\r
-\r
-} // namespace boost\r
-\r
-#endif\r
+// (C) Copyright Toon Knapen 2001.
+// (C) Copyright David Abrahams 2003.
+// (C) Copyright Roland Richter 2003.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_PERMUTATION_ITERATOR_HPP
+#define BOOST_PERMUTATION_ITERATOR_HPP
+
+#include <iterator>
+
+#include <boost/iterator/iterator_adaptor.hpp>
+
+
+namespace boost
+{
+
+template< class ElementIterator
+ , class IndexIterator>
+class permutation_iterator
+ : public iterator_adaptor<
+ permutation_iterator<ElementIterator, IndexIterator>
+ , IndexIterator, typename detail::iterator_traits<ElementIterator>::value_type
+ , use_default, typename detail::iterator_traits<ElementIterator>::reference>
+{
+ typedef iterator_adaptor<
+ permutation_iterator<ElementIterator, IndexIterator>
+ , IndexIterator, typename detail::iterator_traits<ElementIterator>::value_type
+ , use_default, typename detail::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:
+ typename super_t::reference dereference() const
+ { return *(m_elt_iter + *this->base()); }
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ template <class,class> friend class permutation_iterator;
+#else
+ public:
+#endif
+ ElementIterator m_elt_iter;
+};
+
+
+template <class ElementIterator, class IndexIterator>
+permutation_iterator<ElementIterator, IndexIterator>
+make_permutation_iterator( ElementIterator e, IndexIterator i )
+{
+ return permutation_iterator<ElementIterator, IndexIterator>( e, i );
+}
+
+
+} // namespace boost
+
+#endif