]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/spirit/test/qi/test.hpp
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / boost / libs / spirit / test / qi / test.hpp
CommitLineData
7c673cae
FG
1/*=============================================================================
2 Copyright (c) 2001-2011 Joel de Guzman
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_TEST_FEBRUARY_01_2007_0605PM)
8#define BOOST_SPIRIT_TEST_FEBRUARY_01_2007_0605PM
9
10#include <boost/spirit/include/qi_parse.hpp>
11#include <boost/spirit/include/qi_what.hpp>
12#include <boost/variant/apply_visitor.hpp>
7c673cae
FG
13#include <iostream>
14
15namespace spirit_test
16{
17 template <typename Char, typename Parser>
18 bool test(Char const* in, Parser const& p, bool full_match = true)
19 {
20 // we don't care about the result of the "what" function.
21 // we only care that all parsers have it:
22 boost::spirit::qi::what(p);
23
24 Char const* last = in;
25 while (*last)
26 last++;
27 return boost::spirit::qi::parse(in, last, p)
28 && (!full_match || (in == last));
29 }
30
31 template <typename Char, typename Parser, typename Skipper>
32 bool test(Char const* in, Parser const& p
33 , Skipper const& s, bool full_match = true)
34 {
35 // we don't care about the result of the "what" function.
36 // we only care that all parsers have it:
37 boost::spirit::qi::what(p);
38
39 Char const* last = in;
40 while (*last)
41 last++;
42 return boost::spirit::qi::phrase_parse(in, last, p, s)
43 && (!full_match || (in == last));
44 }
45
46 template <typename Char, typename Parser>
47 bool binary_test(Char const* in, std::size_t size, Parser const& p,
48 bool full_match = true)
49 {
50 // we don't care about the result of the "what" function.
51 // we only care that all parsers have it:
52 boost::spirit::qi::what(p);
53
54 Char const* last = in + size;
55 return boost::spirit::qi::parse(in, last, p)
56 && (!full_match || (in == last));
57 }
58
59 template <typename Char, typename Parser, typename Skipper>
60 bool binary_test(Char const* in, std::size_t size, Parser const& p,
61 Skipper const& s, bool full_match = true)
62 {
63 // we don't care about the result of the "what" function.
64 // we only care that all parsers have it:
65 boost::spirit::qi::what(p);
66
67 Char const* last = in + size;
68 return boost::spirit::qi::phrase_parse(in, last, p, s)
69 && (!full_match || (in == last));
70 }
71
72 template <typename Char, typename Parser, typename Attr>
73 bool test_attr(Char const* in, Parser const& p
74 , Attr& attr, bool full_match = true)
75 {
76 // we don't care about the result of the "what" function.
77 // we only care that all parsers have it:
78 boost::spirit::qi::what(p);
79
80 Char const* last = in;
81 while (*last)
82 last++;
83 return boost::spirit::qi::parse(in, last, p, attr)
84 && (!full_match || (in == last));
85 }
86
87 template <typename Char, typename Parser, typename Attr, typename Skipper>
88 bool test_attr(Char const* in, Parser const& p
89 , Attr& attr, Skipper const& s, bool full_match = true)
90 {
91 // we don't care about the result of the "what" function.
92 // we only care that all parsers have it:
93 boost::spirit::qi::what(p);
94
95 Char const* last = in;
96 while (*last)
97 last++;
98 return boost::spirit::qi::phrase_parse(in, last, p, s, attr)
99 && (!full_match || (in == last));
100 }
101
102 template <typename Char, typename Parser, typename Attr>
103 bool binary_test_attr(Char const* in, std::size_t size, Parser const& p,
104 Attr& attr, bool full_match = true)
105 {
106 // we don't care about the result of the "what" function.
107 // we only care that all parsers have it:
108 boost::spirit::qi::what(p);
109
110 Char const* last = in + size;
111 return boost::spirit::qi::parse(in, last, p, attr)
112 && (!full_match || (in == last));
113 }
114
115 template <typename Char, typename Parser, typename Attr, typename Skipper>
116 bool binary_test_attr(Char const* in, std::size_t size, Parser const& p,
117 Attr& attr, Skipper const& s, bool full_match = true)
118 {
119 // we don't care about the result of the "what" function.
120 // we only care that all parsers have it:
121 boost::spirit::qi::what(p);
122
123 Char const* last = in + size;
124 return boost::spirit::qi::phrase_parse(in, last, p, s, attr)
125 && (!full_match || (in == last));
126 }
127
128 struct printer
129 {
130 typedef boost::spirit::utf8_string string;
131
132 void element(string const& tag, string const& value, int depth) const
133 {
134 for (int i = 0; i < (depth*4); ++i) // indent to depth
135 std::cout << ' ';
136
137 std::cout << "tag: " << tag;
138 if (value != "")
139 std::cout << ", value: " << value;
140 std::cout << std::endl;
141 }
142 };
143
144 void print_info(boost::spirit::info const& what)
145 {
146 using boost::spirit::basic_info_walker;
147
148 printer pr;
149 basic_info_walker<printer> walker(pr, what.tag, 0);
150 boost::apply_visitor(walker, what.value);
151 }
152}
153
154#endif