diff options
Diffstat (limited to 'tools/quickbook/src/iterator.hpp')
-rw-r--r-- | tools/quickbook/src/iterator.hpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/tools/quickbook/src/iterator.hpp b/tools/quickbook/src/iterator.hpp new file mode 100644 index 0000000000..5897664d2d --- /dev/null +++ b/tools/quickbook/src/iterator.hpp @@ -0,0 +1,69 @@ +/*============================================================================= + Copyright (c) 2010 Daniel James + + Use, modification and distribution is subject to 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) +=============================================================================*/ + +#if !defined(BOOST_SPIRIT_QUICKBOOK_ITERATOR_HPP) +#define BOOST_SPIRIT_QUICKBOOK_ITERATOR_HPP + +#include <boost/operators.hpp> +#include <boost/iterator/iterator_traits.hpp> +#include <boost/range/iterator_range.hpp> +#include <iterator> + +namespace quickbook +{ + template <typename Iterator> + struct lookback_iterator + : boost::forward_iterator_helper< + lookback_iterator<Iterator>, + typename boost::iterator_value<Iterator>::type, + typename boost::iterator_difference<Iterator>::type, + typename boost::iterator_pointer<Iterator>::type, + typename boost::iterator_reference<Iterator>::type + > + { + lookback_iterator() {} + explicit lookback_iterator(Iterator base) + : original_(base), base_(base) {} + + friend bool operator==( + lookback_iterator const& x, + lookback_iterator const& y) + { + return x.base_ == y.base_; + } + + lookback_iterator& operator++() + { + ++base_; + return *this; + } + + typename boost::iterator_reference<Iterator>::type operator*() const + { + return *base_; + } + + Iterator base() const { + return base_; + } + + typedef boost::iterator_range<std::reverse_iterator<Iterator> > + lookback_range; + + lookback_range lookback() const + { + return lookback_range(base_, original_); + } + + private: + Iterator original_; + Iterator base_; + }; +} + +#endif |