LCOV - code coverage report
Current view: top level - libs/url/src/rfc/relative_ref_rule.cpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 95.7 % 23 22
Test Date: 2025-01-10 18:07:09 Functions: 100.0 % 1 1

            Line data    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              : 
      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         1348 : 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         1348 :     detail::url_impl u(detail::url_impl::from::string);
      34         1348 :     u.cs_ = it;
      35              : 
      36              :     // relative-part
      37              :     {
      38              :         auto rv = grammar::parse(
      39              :             it, end,
      40         1348 :             detail::relative_part_rule);
      41         1348 :         if(! rv)
      42           41 :             return rv.error();
      43         1307 :         if(rv->has_authority)
      44          243 :             u.apply_authority(rv->authority);
      45         1307 :         u.apply_path(
      46         1307 :             rv->path, rv->segment_count);
      47         1348 :     }
      48              : 
      49              :     // [ "?" query ]
      50              :     {
      51         1307 :         auto rv = grammar::parse(
      52              :             it, end, detail::query_part_rule);
      53         1307 :         if(! rv)
      54            0 :             return rv.error();
      55         1307 :         auto& v = *rv;
      56         1307 :         if(v.has_query)
      57              :         {
      58              :             // map "?" to { {} }
      59          225 :             u.apply_query(
      60              :                 v.query,
      61              :                 v.count);
      62              :         }
      63              :     }
      64              : 
      65              :     // [ "#" fragment ]
      66              :     {
      67         1307 :         auto rv = grammar::parse(
      68              :             it, end, detail::fragment_part_rule);
      69         1307 :         if(! rv)
      70            1 :             return rv.error();
      71         1306 :         if(rv->has_fragment)
      72           62 :             u.apply_frag(rv->fragment);
      73              :     }
      74              : 
      75         1306 :     return u.construct();
      76              : }
      77              : 
      78              : } // urls
      79              : } // boost
      80              : 
        

Generated by: LCOV version 2.1