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

            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          421 :         auto rv = grammar::parse(
      42              :             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 2.1