GCC Code Coverage Report


Directory: libs/url/
File: src/rfc/detail/query_part_rule.hpp
Date: 2025-11-10 19:06:22
Exec Total Coverage
Lines: 13 13 100.0%
Functions: 1 1 100.0%
Branches: 6 8 75.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_QUERY_PART_RULE_HPP
11 #define BOOST_URL_RFC_DETAIL_QUERY_PART_RULE_HPP
12
13 #include "boost/url/detail/config.hpp"
14 #include "boost/url/error_types.hpp"
15 #include "boost/url/pct_string_view.hpp"
16 #include "boost/url/rfc/query_rule.hpp"
17 #include "boost/url/grammar/parse.hpp"
18 #include <cstdlib>
19
20 namespace boost {
21 namespace urls {
22 namespace detail {
23
24 /** Rule for query-part
25
26 @par BNF
27 @code
28 query-part = [ "?" query ]
29 @endcode
30 */
31 struct query_part_rule_t
32 {
33 struct value_type
34 {
35 pct_string_view query;
36 std::size_t count = 0;
37 bool has_query = false;
38 };
39
40 auto
41 3573 parse(
42 char const*& it,
43 char const* end
44 ) const noexcept ->
45 system::result<value_type>
46 {
47
2/2
✓ Branch 0 taken 673 times.
✓ Branch 1 taken 2900 times.
3573 if( it == end ||
48
2/2
✓ Branch 0 taken 226 times.
✓ Branch 1 taken 447 times.
673 *it != '?')
49 3126 return {};
50 447 ++it;
51 447 auto rv = grammar::parse(
52 it, end, query_rule);
53 // query_rule is optionally empty and must not fail
54
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 447 times.
447 BOOST_ASSERT( rv );
55 447 value_type t;
56 447 t.query = rv->buffer();
57 447 t.count = rv->size();
58 // a query_rule represents at least one parameter:
59 // <empty key, no value>
60
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 447 times.
447 BOOST_ASSERT( t.count );
61 447 t.has_query = true;
62 447 return t;
63 }
64 };
65
66 constexpr query_part_rule_t query_part_rule{};
67
68 } // detail
69 } // urls
70 } // boost
71
72 #endif
73