LCOV - code coverage report
Current view: top level - libs/url/src/rfc - relative_ref_rule.cpp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 23 24 95.8 %
Date: 2024-03-05 20:06:56 Functions: 1 1 100.0 %

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

Generated by: LCOV version 1.15