1 //  Copyright (c) 2001 Daniel C. Nuffer
2 //  Copyright (c) 2001-2011 Hartmut Kaiser
3 //
4 //  Distributed under the Boost Software License, Version 1.0. (See accompanying
5 //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 
7 #if !defined(BOOST_SPIRIT_ITERATOR_MULTI_PASS_MAR_16_2007_1122AM)
8 #define BOOST_SPIRIT_ITERATOR_MULTI_PASS_MAR_16_2007_1122AM
9 
10 #include <boost/config.hpp>
11 #include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>
12 #include <boost/iterator.hpp>
13 #include <boost/mpl/bool.hpp>
14 #include <iterator>
15 #include <algorithm>
16 
17 ///////////////////////////////////////////////////////////////////////////////
18 namespace boost { namespace spirit { namespace detail
19 {
20 
21     ///////////////////////////////////////////////////////////////////////////
22     //  Default implementations of the different policies to be used with a
23     //  multi_pass iterator
24     ///////////////////////////////////////////////////////////////////////////
25     struct default_input_policy
26     {
default_input_policyboost::spirit::detail::default_input_policy27         default_input_policy() {}
28 
29         template <typename Functor>
default_input_policyboost::spirit::detail::default_input_policy30         default_input_policy(Functor const&) {}
31 
32         template <typename MultiPass>
destroyboost::spirit::detail::default_input_policy33         static void destroy(MultiPass&) {}
34 
swapboost::spirit::detail::default_input_policy35         void swap(default_input_policy&) {}
36 
37         template <typename MultiPass, typename TokenType>
38         static void advance_input(MultiPass& mp);
39 
40         template <typename MultiPass>
41         static typename MultiPass::reference get_input(MultiPass& mp);
42 
43         template <typename MultiPass>
44         static bool input_at_eof(MultiPass const& mp);
45 
46         template <typename MultiPass, typename TokenType>
47         static bool input_is_valid(MultiPass& mp, TokenType& curtok);
48     };
49 
50     struct default_ownership_policy
51     {
52         template <typename MultiPass>
destroyboost::spirit::detail::default_ownership_policy53         static void destroy(MultiPass&) {}
54 
swapboost::spirit::detail::default_ownership_policy55         void swap(default_ownership_policy&) {}
56 
57         template <typename MultiPass>
cloneboost::spirit::detail::default_ownership_policy58         static void clone(MultiPass&) {}
59 
60         template <typename MultiPass>
61         static bool release(MultiPass& mp);
62 
63         template <typename MultiPass>
64         static bool is_unique(MultiPass const& mp);
65     };
66 
67     struct default_storage_policy
68     {
69         template <typename MultiPass>
destroyboost::spirit::detail::default_storage_policy70         static void destroy(MultiPass&) {}
71 
swapboost::spirit::detail::default_storage_policy72         void swap(default_storage_policy&) {}
73 
74         template <typename MultiPass>
75         static typename MultiPass::reference dereference(MultiPass const& mp);
76 
77         template <typename MultiPass>
incrementboost::spirit::detail::default_storage_policy78         static void increment(MultiPass&) {}
79 
80         template <typename MultiPass>
clear_queueboost::spirit::detail::default_storage_policy81         static void clear_queue(MultiPass&) {}
82 
83         template <typename MultiPass>
84         static bool is_eof(MultiPass const& mp);
85 
86         template <typename MultiPass>
87         static bool equal_to(MultiPass const& mp, MultiPass const& x);
88 
89         template <typename MultiPass>
90         static bool less_than(MultiPass const& mp, MultiPass const& x);
91     };
92 
93     struct default_checking_policy
94     {
95         template <typename MultiPass>
destroyboost::spirit::detail::default_checking_policy96         static void destroy(MultiPass&) {}
97 
swapboost::spirit::detail::default_checking_policy98         void swap(default_checking_policy&) {}
99 
100         template <typename MultiPass>
docheckboost::spirit::detail::default_checking_policy101         static void docheck(MultiPass const&) {}
102 
103         template <typename MultiPass>
clear_queueboost::spirit::detail::default_checking_policy104         static void clear_queue(MultiPass&) {}
105     };
106 
107 }}}
108 
109 #endif
110