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

100.0% Lines (11/11) 95.5% Functions (85/91) 88.9% Branches (8/9)
libs/url/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 //
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_IMPL_PARSE_HPP
11 #define BOOST_URL_GRAMMAR_IMPL_PARSE_HPP
12
13 #include <boost/url/grammar/error.hpp>
14 #include <boost/url/grammar/type_traits.hpp>
15
16 namespace boost {
17 namespace urls {
18 namespace grammar {
19
20 template<BOOST_URL_CONSTRAINT(Rule) R>
21 BOOST_URL_NO_INLINE
22 auto
23 71250 parse(
24 char const*& it,
25 char const* end,
26 R const& r) ->
27 system::result<typename R::value_type>
28 {
29 // If this goes off, it means the rule
30 // passed in did not meet the requirements.
31 // Please check the documentation.
32 static_assert(
33 is_rule<R>::value,
34 "Rule requirements not met");
35
36 71250 return r.parse(it, end);
37 }
38
39 template<BOOST_URL_CONSTRAINT(Rule) R>
40 BOOST_URL_NO_INLINE
41 auto
42 6011 parse(
43 core::string_view s,
44 R const& r) ->
45 system::result<typename R::value_type>
46 {
47 // If this goes off, it means the rule
48 // passed in did not meet the requirements.
49 // Please check the documentation.
50 static_assert(
51 is_rule<R>::value,
52 "Rule requirements not met");
53
54 6011 auto it = s.data();
55 6011 auto const end = it + s.size();
56
1/1
✓ Branch 1 taken 53 times.
6011 auto rv = r.parse(it, end);
57
5/6
✓ Branch 1 taken 1320 times.
✓ Branch 2 taken 699 times.
✓ Branch 3 taken 57 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1909 times.
✓ Branch 4 taken 53 times.
11248 if( rv &&
58
2/2
✓ Branch 0 taken 57 times.
✓ Branch 1 taken 1263 times.
5237 it != end)
59 243 return error::leftover;
60 5768 return rv;
61 642 }
62
63 } // grammar
64 } // urls
65 } // boost
66
67 #endif
68