mirror of
https://github.com/boostorg/quickbook.git
synced 2026-01-26 18:52:26 +00:00
70 lines
1.9 KiB
C++
70 lines
1.9 KiB
C++
/*=============================================================================
|
|
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
|