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/mpl/bool.hpp>
13 #include <iterator>
14 #include <algorithm>
15 
16 ///////////////////////////////////////////////////////////////////////////////
17 namespace boost { namespace spirit { namespace detail
18 {
19 
20     ///////////////////////////////////////////////////////////////////////////
21     //  Default implementations of the different policies to be used with a
22     //  multi_pass iterator
23     ///////////////////////////////////////////////////////////////////////////
24     struct default_input_policy
25     {
default_input_policyboost::spirit::detail::default_input_policy26         default_input_policy() {}
27 
28         template <typename Functor>
default_input_policyboost::spirit::detail::default_input_policy29         default_input_policy(Functor const&) {}
30 
31         template <typename MultiPass>
destroyboost::spirit::detail::default_input_policy32         static void destroy(MultiPass&) {}
33 
swapboost::spirit::detail::default_input_policy34         void swap(default_input_policy&) {}
35 
36         template <typename MultiPass, typename TokenType>
37         static void advance_input(MultiPass& mp);
38 
39         template <typename MultiPass>
40         static typename MultiPass::reference get_input(MultiPass& mp);
41 
42         template <typename MultiPass>
43         static bool input_at_eof(MultiPass const& mp);
44 
45         template <typename MultiPass, typename TokenType>
46         static bool input_is_valid(MultiPass& mp, TokenType& curtok);
47     };
48 
49     struct default_ownership_policy
50     {
51         template <typename MultiPass>
destroyboost::spirit::detail::default_ownership_policy52         static void destroy(MultiPass&) {}
53 
swapboost::spirit::detail::default_ownership_policy54         void swap(default_ownership_policy&) {}
55 
56         template <typename MultiPass>
cloneboost::spirit::detail::default_ownership_policy57         static void clone(MultiPass&) {}
58 
59         template <typename MultiPass>
60         static bool release(MultiPass& mp);
61 
62         template <typename MultiPass>
63         static bool is_unique(MultiPass const& mp);
64     };
65 
66     struct default_storage_policy
67     {
68         template <typename MultiPass>
destroyboost::spirit::detail::default_storage_policy69         static void destroy(MultiPass&) {}
70 
swapboost::spirit::detail::default_storage_policy71         void swap(default_storage_policy&) {}
72 
73         template <typename MultiPass>
74         static typename MultiPass::reference dereference(MultiPass const& mp);
75 
76         template <typename MultiPass>
incrementboost::spirit::detail::default_storage_policy77         static void increment(MultiPass&) {}
78 
79         template <typename MultiPass>
clear_queueboost::spirit::detail::default_storage_policy80         static void clear_queue(MultiPass&) {}
81 
82         template <typename MultiPass>
83         static bool is_eof(MultiPass const& mp);
84 
85         template <typename MultiPass>
86         static bool equal_to(MultiPass const& mp, MultiPass const& x);
87 
88         template <typename MultiPass>
89         static bool less_than(MultiPass const& mp, MultiPass const& x);
90     };
91 
92     struct default_checking_policy
93     {
94         template <typename MultiPass>
destroyboost::spirit::detail::default_checking_policy95         static void destroy(MultiPass&) {}
96 
swapboost::spirit::detail::default_checking_policy97         void swap(default_checking_policy&) {}
98 
99         template <typename MultiPass>
docheckboost::spirit::detail::default_checking_policy100         static void docheck(MultiPass const&) {}
101 
102         template <typename MultiPass>
clear_queueboost::spirit::detail::default_checking_policy103         static void clear_queue(MultiPass&) {}
104     };
105 
106 }}}
107 
108 #endif
109