]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/tools/quickbook/src/iterator.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / tools / quickbook / src / iterator.hpp
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
12 #include <boost/operators.hpp>
13 #include <boost/iterator/iterator_traits.hpp>
14 #include <boost/range/iterator_range.hpp>
15 #include <iterator>
16 #include "string_view.hpp"
17
18 namespace quickbook
19 {
20 template <typename Iterator>
21 struct lookback_iterator
22 : boost::forward_iterator_helper<
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
28 >
29 {
30 lookback_iterator() {}
31 explicit lookback_iterator(Iterator i)
32 : original_(i), base_(i) {}
33
34 friend bool operator==(
35 lookback_iterator const& x,
36 lookback_iterator const& y)
37 {
38 return x.base_ == y.base_;
39 }
40
41 lookback_iterator& operator++()
42 {
43 ++base_;
44 return *this;
45 }
46
47 typename boost::iterator_reference<Iterator>::type operator*() const
48 {
49 return *base_;
50 }
51
52 Iterator base() const {
53 return base_;
54 }
55
56 typedef boost::iterator_range<std::reverse_iterator<Iterator> >
57 lookback_range;
58
59 lookback_range lookback() const
60 {
61 return lookback_range(base_, original_);
62 }
63
64 private:
65 Iterator original_;
66 Iterator base_;
67 };
68
69 typedef lookback_iterator<string_iterator> parse_iterator;
70 }
71
72 #endif