GCC Code Coverage Report


Directory: libs/url/
File: boost/url/grammar/parse.hpp
Date: 2024-08-20 16:05:55
Exec Total Coverage
Lines: 4 4 100.0%
Functions: 2 2 100.0%
Branches: 0 0 -%

Line Branch Exec Source
1 //
2 // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
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 // Official repository: https://github.com/boostorg/url
8 //
9
10 #ifndef BOOST_URL_GRAMMAR_PARSE_HPP
11 #define BOOST_URL_GRAMMAR_PARSE_HPP
12
13 #include <boost/url/detail/config.hpp>
14 #include <boost/url/error_types.hpp>
15 #include <boost/core/detail/string_view.hpp>
16 #include <boost/url/grammar/type_traits.hpp>
17
18 namespace boost {
19 namespace urls {
20 namespace grammar {
21
22 //------------------------------------------------
23
24 /** Parse a character buffer using a rule
25
26 @param it A pointer to the start. The
27 caller's variable is changed to
28 reflect the amount of input consumed.
29
30 @param end A pointer to the end.
31
32 @param r The rule to use
33
34 @return The parsed value upon success,
35 otherwise an error.
36 */
37 template<class Rule>
38 system::result<typename Rule::value_type>
39 parse(
40 char const*& it,
41 char const* end,
42 Rule const& r);
43
44 /** Parse a character buffer using a rule
45
46 This function parses a complete string into
47 the specified sequence of rules. If the
48 string is not completely consumed, an
49 error is returned instead.
50
51 @param s The input string
52
53 @param r The rule to use
54
55 @return The parsed value upon success,
56 otherwise an error.
57 */
58 template<class Rule>
59 system::result<typename Rule::value_type>
60 parse(
61 core::string_view s,
62 Rule const& r);
63
64 //------------------------------------------------
65
66 #ifndef BOOST_URL_DOCS
67 namespace implementation_defined {
68
69 template<class Rule>
70 struct rule_ref
71 {
72 Rule const& r_;
73
74 using value_type =
75 typename Rule::value_type;
76
77 system::result<value_type>
78 1 parse(
79 char const*& it,
80 char const* end) const
81 {
82 1 return r_.parse(it, end);
83 }
84 };
85
86 } // detail
87 #endif
88
89 /** Return a reference to a rule
90
91 This function returns a rule which
92 references the specified object. This is
93 used to reduce the number of bytes of
94 storage (`sizeof`) required by a combinator
95 when it stores a copy of the object.
96 <br>
97 Ownership of the object is not transferred;
98 the caller is responsible for ensuring the
99 lifetime of the object is extended until it
100 is no longer referenced. For best results,
101 `ref` should only be used with compile-time
102 constants.
103
104 @param r The rule to use
105 */
106 #ifdef BOOST_URL_DOCS
107 template<class Rule>
108 constexpr
109 __implementation_defined__
110 ref(Rule const& r) noexcept;
111 #else
112
113 /** Return a reference to a rule
114
115 This function returns a rule which
116 references the specified object. This is
117 used to reduce the number of bytes of
118 storage (`sizeof`) required by a combinator
119 when it stores a copy of the object.
120 <br>
121 Ownership of the object is not transferred;
122 the caller is responsible for ensuring the
123 lifetime of the object is extended until it
124 is no longer referenced. For best results,
125 `ref` should only be used with compile-time
126 constants.
127
128 @param r The rule to use
129 */
130 template<class Rule>
131 constexpr
132 typename std::enable_if<
133 is_rule<Rule>::value &&
134 ! std::is_same<Rule,
135 implementation_defined::rule_ref<Rule> >::value,
136 implementation_defined::rule_ref<Rule> >::type
137 1 ref(Rule const& r) noexcept
138 {
139 return implementation_defined::rule_ref<
140 1 Rule>{r};
141 }
142 #endif
143
144 #ifndef BOOST_URL_DOCS
145 #ifndef BOOST_URL_MRDOCS
146 // If you get a compile error here it
147 // means you called ref with something
148 // that is not a CharSet or Rule!
149 constexpr
150 void
151 ref(...) = delete;
152 #endif
153 #endif
154
155 } // grammar
156 } // urls
157 } // boost
158
159 #include <boost/url/grammar/impl/parse.hpp>
160
161 #endif
162