include/boost/url/grammar/impl/parse.hpp

100.0% Lines (11/11) 97.3% Functions (109/114) 88.9% Branches (8/9)
include/boost/url/grammar/impl/parse.hpp
Line Branch Hits Source Code
1 //
2 // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
3 // Copyright (c) 2022 Alan de Freitas (alandefreitas@gmail.com)
4 //
5 // Distributed under the Boost Software License, Version 1.0. (See accompanying
6 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 //
8 // Official repository: https://github.com/boostorg/url
9 //
10
11 #ifndef BOOST_URL_GRAMMAR_IMPL_PARSE_HPP
12 #define BOOST_URL_GRAMMAR_IMPL_PARSE_HPP
13
14 #include <boost/url/grammar/error.hpp>
15 #include <boost/url/grammar/type_traits.hpp>
16
17 namespace boost {
18 namespace urls {
19 namespace grammar {
20
21 template<BOOST_URL_CONSTRAINT(Rule) R>
22 BOOST_URL_CXX14_CONSTEXPR
23 auto
24 68784 parse(
25 char const*& it,
26 char const* end,
27 R const& r) ->
28 system::result<typename R::value_type>
29 {
30 // If this goes off, it means the rule
31 // passed in did not meet the requirements.
32 // Please check the documentation.
33 static_assert(
34 is_rule<R>::value,
35 "Rule requirements not met");
36
37 68784 return r.parse(it, end);
38 }
39
40 template<BOOST_URL_CONSTRAINT(Rule) R>
41 BOOST_URL_CXX14_CONSTEXPR
42 auto
43 6079 parse(
44 core::string_view s,
45 R const& r) ->
46 system::result<typename R::value_type>
47 {
48 // If this goes off, it means the rule
49 // passed in did not meet the requirements.
50 // Please check the documentation.
51 static_assert(
52 is_rule<R>::value,
53 "Rule requirements not met");
54
55 6079 auto it = s.data();
56 6079 auto const end = it + s.size();
57
1/1
✓ Branch 1 taken 53 times.
6079 auto rv = r.parse(it, end);
58
5/6
✓ Branch 1 taken 4848 times.
✓ Branch 2 taken 786 times.
✓ Branch 3 taken 235 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5346 times.
✓ Branch 4 taken 53 times.
11344 if( rv &&
59
2/2
✓ Branch 0 taken 235 times.
✓ Branch 1 taken 4613 times.
5265 it != end)
60 243 return error::leftover;
61 5836 return rv;
62 325 }
63
64 } // grammar
65 } // urls
66 } // boost
67
68 #endif
69