]> git.sesse.net Git - casparcg/blob - dependencies/boost/boost/spirit/home/support/iterators/multi_pass_fwd.hpp
Manually merged pull request #222
[casparcg] / dependencies / boost / boost / spirit / home / support / iterators / multi_pass_fwd.hpp
1 /*=============================================================================
2     Copyright (c) 2007 Tobias Schwinger
3     Copyright (c) 2001-2011 Hartmut Kaiser
4     http://spirit.sourceforge.net/
5
6     Distributed under the Boost Software License, Version 1.0. (See accompanying
7     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8 =============================================================================*/
9 #if !defined(BOOST_SPIRIT_ITERATOR_MULTI_PASS_FWD_APR_18_2008_1102AM)
10 #define BOOST_SPIRIT_ITERATOR_MULTI_PASS_FWD_APR_18_2008_1102AM
11
12 #include <cstddef>
13 #include <boost/spirit/home/support/multi_pass_wrapper.hpp>
14 #include <boost/swap.hpp>
15
16 namespace boost { namespace spirit {
17
18     namespace iterator_policies
19     {
20         // input policies
21         struct input_iterator;
22         struct buffering_input_iterator;
23         struct istream;
24         struct lex_input;
25         struct functor_input;
26         struct split_functor_input;
27
28         // ownership policies
29         struct ref_counted;
30         struct first_owner;
31
32         // checking policies
33         class illegal_backtracking;
34         struct buf_id_check;
35         struct no_check;
36
37         // storage policies
38         struct split_std_deque;
39         template<std::size_t N> struct fixed_size_queue;
40
41         // policy combiner
42 #if defined(BOOST_SPIRIT_DEBUG)
43         template<typename Ownership = ref_counted
44           , typename Checking = buf_id_check
45           , typename Input = buffering_input_iterator
46           , typename Storage = split_std_deque>
47         struct default_policy;
48 #else
49         template<typename Ownership = ref_counted
50           , typename Checking = no_check
51           , typename Input = buffering_input_iterator
52           , typename Storage = split_std_deque>
53         struct default_policy;
54 #endif
55     }
56
57     template <typename T
58       , typename Policies = iterator_policies::default_policy<> >
59     class multi_pass;
60
61     template <typename T, typename Policies>
62     void swap(multi_pass<T, Policies> &x, multi_pass<T, Policies> &y);
63
64 }} // namespace boost::spirit
65
66 namespace boost { namespace spirit { namespace traits
67 {
68     // declare special functions allowing to integrate any multi_pass iterator
69     // with expectation points
70
71     // multi_pass iterators require special handling (for the non-specialized
72     // versions of these functions see support/multi_pass_wrapper.hpp)
73     template <typename T, typename Policies>
74     void clear_queue(multi_pass<T, Policies>&
75       , BOOST_SCOPED_ENUM(clear_mode) mode = clear_mode::clear_if_enabled);
76
77     template <typename T, typename Policies>
78     void inhibit_clear_queue(multi_pass<T, Policies>&, bool);
79
80     template <typename T, typename Policies>
81     bool inhibit_clear_queue(multi_pass<T, Policies>&);
82
83     // Helper template to recognize a multi_pass iterator. This specialization
84     // will be instantiated for any multi_pass iterator.
85     template <typename T, typename Policies>
86     struct is_multi_pass<multi_pass<T, Policies> > : mpl::true_ {};
87
88 }}}
89
90 #endif
91