]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/tools/quickbook/src/iterator.hpp
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / boost / tools / quickbook / src / iterator.hpp
CommitLineData
7c673cae
FG
1/*=============================================================================
2 Copyright (c) 2010 Daniel James
3
4 Use, modification and distribution is subject to the Boost Software
5 License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6 http://www.boost.org/LICENSE_1_0.txt)
7=============================================================================*/
8
9#if !defined(BOOST_SPIRIT_QUICKBOOK_ITERATOR_HPP)
10#define BOOST_SPIRIT_QUICKBOOK_ITERATOR_HPP
11
11fdf7f2 12#include <iterator>
7c673cae 13#include <boost/iterator/iterator_traits.hpp>
11fdf7f2 14#include <boost/operators.hpp>
7c673cae 15#include <boost/range/iterator_range.hpp>
b32b8144 16#include "string_view.hpp"
7c673cae
FG
17
18namespace quickbook
19{
20 template <typename Iterator>
21 struct lookback_iterator
22 : boost::forward_iterator_helper<
11fdf7f2
TL
23 lookback_iterator<Iterator>,
24 typename boost::iterator_value<Iterator>::type,
25 typename boost::iterator_difference<Iterator>::type,
26 typename boost::iterator_pointer<Iterator>::type,
27 typename boost::iterator_reference<Iterator>::type>
7c673cae
FG
28 {
29 lookback_iterator() {}
11fdf7f2
TL
30 explicit lookback_iterator(Iterator i) : original_(i), base_(i) {}
31
7c673cae 32 friend bool operator==(
11fdf7f2 33 lookback_iterator const& x, lookback_iterator const& y)
7c673cae
FG
34 {
35 return x.base_ == y.base_;
36 }
11fdf7f2 37
7c673cae
FG
38 lookback_iterator& operator++()
39 {
40 ++base_;
41 return *this;
42 }
11fdf7f2 43
7c673cae
FG
44 typename boost::iterator_reference<Iterator>::type operator*() const
45 {
46 return *base_;
47 }
11fdf7f2
TL
48
49 Iterator base() const { return base_; }
7c673cae
FG
50
51 typedef boost::iterator_range<std::reverse_iterator<Iterator> >
52 lookback_range;
53
54 lookback_range lookback() const
55 {
56 return lookback_range(base_, original_);
57 }
11fdf7f2
TL
58
59 private:
7c673cae
FG
60 Iterator original_;
61 Iterator base_;
62 };
b32b8144
FG
63
64 typedef lookback_iterator<string_iterator> parse_iterator;
7c673cae
FG
65}
66
67#endif