1 /*=============================================================================
2 Copyright (c) 2007 Tobias Schwinger
3 Copyright (c) 2001-2011 Hartmut Kaiser
4 http://spirit.sourceforge.net/
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
13 #include <boost/spirit/home/support/multi_pass_wrapper.hpp>
14 #include <boost/swap.hpp>
16 namespace boost { namespace spirit {
18 namespace iterator_policies
21 struct input_iterator;
22 struct buffering_input_iterator;
26 struct split_functor_input;
33 class illegal_backtracking;
38 struct split_std_deque;
39 template<std::size_t N> struct fixed_size_queue;
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;
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;
58 , typename Policies = iterator_policies::default_policy<> >
61 template <typename T, typename Policies>
62 void swap(multi_pass<T, Policies> &x, multi_pass<T, Policies> &y);
64 }} // namespace boost::spirit
66 namespace boost { namespace spirit { namespace traits
68 // declare special functions allowing to integrate any multi_pass iterator
69 // with expectation points
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);
77 template <typename T, typename Policies>
78 void inhibit_clear_queue(multi_pass<T, Policies>&, bool);
80 template <typename T, typename Policies>
81 bool inhibit_clear_queue(multi_pass<T, Policies>&);
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_ {};