GCC Code Coverage Report


Directory: libs/url/
File: src/rfc/relative_ref_rule.cpp
Date: 2025-11-10 19:06:22
Exec Total Coverage
Lines: 22 23 95.7%
Functions: 1 1 100.0%
Branches: 13 14 92.9%

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
11 #include <boost/url/detail/config.hpp>
12 #include <boost/url/rfc/relative_ref_rule.hpp>
13 #include <boost/url/rfc/query_rule.hpp>
14 #include "detail/fragment_part_rule.hpp"
15 #include "detail/query_part_rule.hpp"
16 #include "detail/relative_part_rule.hpp"
17 #include <boost/url/grammar/delim_rule.hpp>
18 #include <boost/url/grammar/tuple_rule.hpp>
19 #include <boost/url/grammar/optional_rule.hpp>
20 #include <boost/url/grammar/parse.hpp>
21
22 namespace boost {
23 namespace urls {
24
25 auto
26 1350 implementation_defined::relative_ref_rule_t::
27 parse(
28 char const*& it,
29 char const* const end
30 ) const noexcept ->
31 system::result<value_type>
32 {
33 1350 detail::url_impl u(detail::url_impl::from::string);
34 1350 u.cs_ = it;
35
36 // relative-part
37 {
38 auto rv = grammar::parse(
39 it, end,
40 1350 detail::relative_part_rule);
41
2/2
✓ Branch 1 taken 41 times.
✓ Branch 2 taken 1309 times.
1350 if(! rv)
42 41 return rv.error();
43
2/2
✓ Branch 1 taken 243 times.
✓ Branch 2 taken 1066 times.
1309 if(rv->has_authority)
44 243 u.apply_authority(rv->authority);
45 1309 u.apply_path(
46 1309 rv->path, rv->segment_count);
47
2/2
✓ Branch 1 taken 1309 times.
✓ Branch 2 taken 41 times.
1350 }
48
49 // [ "?" query ]
50 {
51 1309 auto rv = grammar::parse(
52 it, end, detail::query_part_rule);
53
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1309 times.
1309 if(! rv)
54 return rv.error();
55 1309 auto& v = *rv;
56
2/2
✓ Branch 0 taken 226 times.
✓ Branch 1 taken 1083 times.
1309 if(v.has_query)
57 {
58 // map "?" to { {} }
59 226 u.apply_query(
60 v.query,
61 v.count);
62 }
63 }
64
65 // [ "#" fragment ]
66 {
67 1309 auto rv = grammar::parse(
68 it, end, detail::fragment_part_rule);
69
2/2
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 1308 times.
1309 if(! rv)
70 1 return rv.error();
71
2/2
✓ Branch 1 taken 62 times.
✓ Branch 2 taken 1246 times.
1308 if(rv->has_fragment)
72 62 u.apply_frag(rv->fragment);
73 }
74
75 1308 return u.construct();
76 }
77
78 } // urls
79 } // boost
80
81