GCC Code Coverage Report


Directory: libs/url/
File: boost/url/rfc/detail/fragment_part_rule.hpp
Date: 2023-12-15 15:31:49
Exec Total Coverage
Lines: 13 13 100.0%
Functions: 1 1 100.0%
Branches: 6 6 100.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_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 <boost/url/rfc/detail/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 3461 parse(
44 char const*& it,
45 char const* end
46 ) const noexcept
47 {
48
2/2
✓ Branch 0 taken 375 times.
✓ Branch 1 taken 3086 times.
3461 if( it == end ||
49
2/2
✓ Branch 0 taken 171 times.
✓ Branch 1 taken 204 times.
375 *it != '#')
50 3257 return {};
51 204 ++it;
52 auto rv = grammar::parse(
53 204 it, end, pct_encoded_rule(
54 204 fragment_chars));
55
2/2
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 202 times.
204 if(! rv)
56 2 return rv.error();
57 202 value_type t;
58 202 t.fragment = *rv;
59 202 t.has_fragment = true;
60 202 return t;
61 }
62 };
63 constexpr fragment_part_rule_t fragment_part_rule{};
64
65 } // detail
66 } // urls
67 } // boost
68
69 #endif
70