GCC Code Coverage Report


Directory: libs/url/
File: boost/url/grammar/parse.hpp
Date: 2024-03-12 19:37:18
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 @see
38 @ref result.
39 */
40 template<class Rule>
41 system::result<typename Rule::value_type>
42 parse(
43 char const*& it,
44 char const* end,
45 Rule const& r);
46
47 /** Parse a character buffer using a rule
48
49 This function parses a complete string into
50 the specified sequence of rules. If the
51 string is not completely consumed, an
52 error is returned instead.
53
54 @param s The input string
55
56 @param r The rule to use
57
58 @return The parsed value upon success,
59 otherwise an error.
60
61 @see
62 @ref result.
63 */
64 template<class Rule>
65 system::result<typename Rule::value_type>
66 parse(
67 core::string_view s,
68 Rule const& r);
69
70 //------------------------------------------------
71
72 #ifndef BOOST_URL_DOCS
73 namespace detail {
74
75 template<class Rule>
76 struct rule_ref
77 {
78 Rule const& r_;
79
80 using value_type =
81 typename Rule::value_type;
82
83 system::result<value_type>
84 1 parse(
85 char const*& it,
86 char const* end) const
87 {
88 1 return r_.parse(it, end);
89 }
90 };
91
92 } // detail
93 #endif
94
95 /** Return a reference to a rule
96
97 This function returns a rule which
98 references the specified object. This is
99 used to reduce the number of bytes of
100 storage (`sizeof`) required by a combinator
101 when it stores a copy of the object.
102 <br>
103 Ownership of the object is not transferred;
104 the caller is responsible for ensuring the
105 lifetime of the object is extended until it
106 is no longer referenced. For best results,
107 `ref` should only be used with compile-time
108 constants.
109
110 @param r The rule to use
111 */
112 template<class Rule>
113 constexpr
114 #ifdef BOOST_URL_DOCS
115 __implementation_defined__
116 #else
117 typename std::enable_if<
118 is_rule<Rule>::value &&
119 ! std::is_same<Rule,
120 detail::rule_ref<Rule> >::value,
121 detail::rule_ref<Rule> >::type
122 #endif
123 1 ref(Rule const& r) noexcept
124 {
125 return detail::rule_ref<
126 1 Rule>{r};
127 }
128
129 #ifndef BOOST_URL_DOCS
130 // If you get a compile error here it
131 // means you called ref with something
132 // that is not a CharSet or Rule!
133 constexpr
134 void
135 ref(...) = delete;
136 #endif
137
138 } // grammar
139 } // urls
140 } // boost
141
142 #include <boost/url/grammar/impl/parse.hpp>
143
144 #endif
145