LCOV - code coverage report
Current view: top level - /jenkins/workspace/boost-root/libs/url/src/detail - any_segments_iter.cpp (source / functions) Coverage Total Hit
Test: coverage_remapped.info Lines: 100.0 % 62 62
Test Date: 2026-02-13 15:53:22 Functions: 100.0 % 12 12

            Line data    Source code
       1              : //
       2              : // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
       3              : // Copyright (c) 2023 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/rfc/detail/charsets.hpp>
      14              : #include <boost/url/detail/any_segments_iter.hpp>
      15              : #include <boost/core/detail/string_view.hpp>
      16              : #include <boost/url/encode.hpp>
      17              : #include <boost/url/rfc/pchars.hpp>
      18              : 
      19              : namespace boost {
      20              : namespace urls {
      21              : namespace detail {
      22              : 
      23              : //------------------------------------------------
      24              : //
      25              : // segment_iter
      26              : //
      27              : //------------------------------------------------
      28              : 
      29           75 : segment_iter::
      30              : segment_iter(
      31           75 :     core::string_view s_) noexcept
      32           75 :     : any_segments_iter(s_)
      33              : {
      34           75 :     front = s;
      35           75 :     fast_nseg = 1;
      36           75 : }
      37              : 
      38              : void
      39           75 : segment_iter::
      40              : rewind() noexcept
      41              : {
      42           75 :     at_end_ = false;
      43           75 : }
      44              : 
      45              : bool
      46          150 : segment_iter::
      47              : measure(
      48              :     std::size_t& n) noexcept
      49              : {
      50          150 :     if(at_end_)
      51           75 :         return false;
      52           75 :     encoding_opts opt;
      53           75 :     opt.space_as_plus = false;
      54           75 :     n += encoded_size(
      55              :         s,
      56           75 :         encode_colons ?
      57              :             nocolon_pchars :
      58              :             pchars,
      59              :         opt);
      60           75 :     at_end_ = true;
      61           75 :     return true;
      62              : }
      63              : 
      64              : void
      65           75 : segment_iter::
      66              : copy(
      67              :     char*& dest,
      68              :     char const* end) noexcept
      69              : {
      70           75 :     encoding_opts opt;
      71           75 :     opt.space_as_plus = false;
      72           75 :     dest += encode(
      73              :         dest,
      74           75 :         end - dest,
      75              :         s,
      76           75 :         encode_colons ?
      77              :             nocolon_pchars :
      78              :             pchars,
      79              :         opt);
      80           75 : }
      81              : 
      82              : //------------------------------------------------
      83              : //
      84              : // segments_iter_base
      85              : //
      86              : //------------------------------------------------
      87              : 
      88              : void
      89          188 : segments_iter_base::
      90              : measure_impl(
      91              :     std::size_t& n,
      92              :     core::string_view s,
      93              :     bool encode_colons) noexcept
      94              : {
      95          188 :     encoding_opts opt;
      96          188 :     opt.space_as_plus = false;
      97          188 :     n += encoded_size(
      98              :         s,
      99              :         encode_colons ?
     100              :             nocolon_pchars :
     101              :             pchars,
     102              :         opt);
     103          188 : }
     104              : 
     105              : void
     106          188 : segments_iter_base::
     107              : copy_impl(
     108              :     char*& dest,
     109              :     char const* end,
     110              :     core::string_view s,
     111              :     bool encode_colons) noexcept
     112              : {
     113          188 :     encoding_opts opt;
     114          188 :     opt.space_as_plus = false;
     115          188 :     dest += encode(
     116              :         dest,
     117          188 :         end - dest,
     118              :         s,
     119              :         encode_colons ?
     120              :             nocolon_pchars :
     121              :             pchars,
     122              :         opt);
     123          188 : }
     124              : 
     125              : //------------------------------------------------
     126              : //
     127              : // segment_encoded_iter
     128              : //
     129              : //------------------------------------------------
     130              : 
     131           72 : segment_encoded_iter::
     132              : segment_encoded_iter(
     133           72 :     pct_string_view const& s_) noexcept
     134           72 :     : any_segments_iter(s_)
     135              : {
     136           72 :     front = s;
     137           72 :     fast_nseg = 1;
     138           72 : }
     139              : 
     140              : void
     141           72 : segment_encoded_iter::
     142              : rewind() noexcept
     143              : {
     144           72 :     at_end_ = false;
     145           72 : }
     146              : 
     147              : bool
     148          144 : segment_encoded_iter::
     149              : measure(
     150              :     std::size_t& n) noexcept
     151              : {
     152          144 :     if(at_end_)
     153           72 :         return false;
     154           72 :     n += detail::re_encoded_size_unsafe(
     155              :         s,
     156           72 :         encode_colons ?
     157              :             nocolon_pchars :
     158              :             pchars);
     159           72 :     at_end_ = true;
     160           72 :     return true;
     161              : }
     162              : 
     163              : void
     164           72 : segment_encoded_iter::
     165              : copy(
     166              :     char*& dest,
     167              :     char const* end) noexcept
     168              : {
     169           72 :     detail::re_encode_unsafe(
     170              :         dest,
     171              :         end,
     172              :         s,
     173           72 :         encode_colons ?
     174              :             nocolon_pchars :
     175              :             pchars);
     176           72 : }
     177              : 
     178              : //------------------------------------------------
     179              : //
     180              : // segments_encoded_iter_base
     181              : //
     182              : //------------------------------------------------
     183              : 
     184              : void
     185          399 : segments_encoded_iter_base::
     186              : measure_impl(
     187              :     std::size_t& n,
     188              :     core::string_view s,
     189              :     bool encode_colons) noexcept
     190              : {
     191          399 :     n += detail::re_encoded_size_unsafe(
     192              :         s,
     193              :         encode_colons ?
     194              :             nocolon_pchars :
     195              :             pchars);
     196          399 : }
     197              : 
     198              : void
     199          397 : segments_encoded_iter_base::
     200              : copy_impl(
     201              :     char*& dest,
     202              :     char const* end,
     203              :     core::string_view s,
     204              :     bool encode_colons) noexcept
     205              : {
     206          397 :     detail::re_encode_unsafe(
     207              :         dest,
     208              :         end,
     209              :         s,
     210              :         encode_colons ?
     211              :             nocolon_pchars :
     212              :             pchars);
     213          397 : }
     214              : 
     215              : } // detail
     216              : } // urls
     217              : } // boost
     218              : 
        

Generated by: LCOV version 2.3