LCOV - code coverage report
Current view: top level - libs/url/src - parse_path.cpp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 23 23 100.0 %
Date: 2024-03-15 19:37:08 Functions: 1 1 100.0 %

          Line data    Source code
       1             : //
       2             : // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
       3             : // Copyright (c) 2022 Alan de Freitas (alandefreitas@gmail.com)
       4             : //
       5             : // Distributed under the Boost Software License, Version 1.0. (See accompanying
       6             : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       7             : //
       8             : // Official repository: https://github.com/boostorg/url
       9             : //
      10             : 
      11             : 
      12             : #include <boost/url/detail/config.hpp>
      13             : #include <boost/url/parse_path.hpp>
      14             : #include <boost/url/error.hpp>
      15             : #include "detail/path.hpp"
      16             : #include <boost/url/grammar/parse.hpp>
      17             : #include "boost/url/rfc/detail/path_rules.hpp"
      18             : 
      19             : namespace boost {
      20             : namespace urls {
      21             : 
      22             : system::result<segments_encoded_view>
      23         153 : parse_path(core::string_view s) noexcept
      24             : {
      25         153 :     auto it = s.data();
      26         153 :     auto const end = it + s.size();
      27         153 :     std::size_t dn = 0;
      28         153 :     std::size_t nseg = 0;
      29         153 :     if( it != end &&
      30         150 :             *it != '/')
      31         120 :         ++nseg;
      32         892 :     while(it != end)
      33             :     {
      34         751 :         if(*it == '/')
      35             :         {
      36         330 :             ++it;
      37         330 :             ++dn;
      38         330 :             ++nseg;
      39         330 :             continue;
      40             :         }
      41             :         auto rv = grammar::parse(
      42         421 :             it, end, detail::segment_rule);
      43         421 :         if(! rv)
      44          10 :             return rv.error();
      45         411 :         if(rv->empty())
      46             :         {
      47           2 :             BOOST_URL_RETURN_EC(
      48             :                 grammar::error::mismatch);
      49             :         }
      50         409 :         dn += rv->decoded_size();
      51             :     }
      52             :     // adjust nseg
      53         141 :     nseg = detail::path_segments(s, nseg);
      54         141 :     return segments_encoded_view(
      55         282 :         detail::path_ref(s, dn, nseg));
      56             : }
      57             : 
      58             : } // urls
      59             : } // boost
      60             : 

Generated by: LCOV version 1.15