GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 100.0% 13 / 0 / 13
Functions: 100.0% 1 / 0 / 1
Branches: 100.0% 6 / 0 / 6

libs/url/src/rfc/detail/fragment_part_rule.hpp
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_RFC_DETAIL_FRAGMENT_PART_RULE_HPP
11 #define BOOST_URL_RFC_DETAIL_FRAGMENT_PART_RULE_HPP
12
13 #include "boost/url/rfc/pct_encoded_rule.hpp"
14 #include "charsets.hpp"
15 #include "boost/url/grammar/parse.hpp"
16
17 namespace boost {
18 namespace urls {
19 namespace detail {
20
21 /** Rule for fragment-part
22
23 @par BNF
24 @code
25 fragment-part = [ "#" fragment ]
26
27 fragment = *( pchar / "/" / "?" )
28 @endcode
29
30 @par Specification
31 @li <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-3.5"
32 >3.5. Fragment (rfc3986)</a>
33 */
34 struct fragment_part_rule_t
35 {
36 struct value_type
37 {
38 pct_string_view fragment;
39 bool has_fragment = false;
40 };
41
42 system::result<value_type>
43 3557 parse(
44 char const*& it,
45 char const* end
46 ) const noexcept
47 {
48
2/2
✓ Branch 0 taken 391 times.
✓ Branch 1 taken 3166 times.
3557 if( it == end ||
49
2/2
✓ Branch 0 taken 172 times.
✓ Branch 1 taken 219 times.
391 *it != '#')
50 3338 return {};
51 219 ++it;
52 219 auto rv = grammar::parse(
53 219 it, end, pct_encoded_rule(
54 fragment_chars));
55
2/2
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 217 times.
219 if(! rv)
56 2 return rv.error();
57 217 value_type t;
58 217 t.fragment = *rv;
59 217 t.has_fragment = true;
60 217 return t;
61 }
62 };
63 constexpr fragment_part_rule_t fragment_part_rule{};
64
65 } // detail
66 } // urls
67 } // boost
68
69 #endif
70