diff options
Diffstat (limited to '3rdParty/Boost/boost/iterator/reverse_iterator.hpp')
-rw-r--r-- | 3rdParty/Boost/boost/iterator/reverse_iterator.hpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/3rdParty/Boost/boost/iterator/reverse_iterator.hpp b/3rdParty/Boost/boost/iterator/reverse_iterator.hpp new file mode 100644 index 0000000..97b6b48 --- /dev/null +++ b/3rdParty/Boost/boost/iterator/reverse_iterator.hpp @@ -0,0 +1,69 @@ +// (C) Copyright David Abrahams 2002. +// (C) Copyright Jeremy Siek 2002. +// (C) Copyright Thomas Witt 2002. +// 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_REVERSE_ITERATOR_23022003THW_HPP +#define BOOST_REVERSE_ITERATOR_23022003THW_HPP + +#include <boost/iterator.hpp> +#include <boost/utility.hpp> +#include <boost/iterator/iterator_adaptor.hpp> + +namespace boost +{ + + // + // + // + template <class Iterator> + class reverse_iterator + : public iterator_adaptor< reverse_iterator<Iterator>, Iterator > + { + typedef iterator_adaptor< reverse_iterator<Iterator>, Iterator > super_t; + + friend class iterator_core_access; + + public: + reverse_iterator() {} + + explicit reverse_iterator(Iterator x) + : super_t(x) {} + + template<class OtherIterator> + reverse_iterator( + reverse_iterator<OtherIterator> const& r + , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 + ) + : super_t(r.base()) + {} + + private: + typename super_t::reference dereference() const { return *boost::prior(this->base()); } + + void increment() { --this->base_reference(); } + void decrement() { ++this->base_reference(); } + + void advance(typename super_t::difference_type n) + { + this->base_reference() += -n; + } + + template <class OtherIterator> + typename super_t::difference_type + distance_to(reverse_iterator<OtherIterator> const& y) const + { + return this->base_reference() - y.base(); + } + }; + + template <class BidirectionalIterator> + reverse_iterator<BidirectionalIterator> make_reverse_iterator(BidirectionalIterator x) + { + return reverse_iterator<BidirectionalIterator>(x); + } + +} // namespace boost + +#endif // BOOST_REVERSE_ITERATOR_23022003THW_HPP |