LCOV - code coverage report
Current view: top level - libs/http_proto/src/detail/impl/filter.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 96.4 % 28 27
Test Date: 2025-05-26 06:53:20 Functions: 100.0 % 2 2

            Line data    Source code
       1              : //
       2              : // Copyright (c) 2023 Vinnie Falco (vinnie.falco@gmail.com)
       3              : // Copyright (c) 2024 Mohammad Nejati
       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/cppalliance/http_proto
       9              : //
      10              : 
      11              : #ifndef BOOST_HTTP_PROTO_DETAIL_IMPL_FILTER_HPP
      12              : #define BOOST_HTTP_PROTO_DETAIL_IMPL_FILTER_HPP
      13              : 
      14              : #include <boost/buffers/range.hpp>
      15              : #include <boost/buffers/sans_prefix.hpp>
      16              : 
      17              : namespace boost {
      18              : namespace http_proto {
      19              : namespace detail {
      20              : 
      21              : template<
      22              :     class MutableBufferSequence,
      23              :     class ConstBufferSequence>
      24              : auto
      25        60084 : filter::
      26              : process_impl(
      27              :     MutableBufferSequence const& out,
      28              :     ConstBufferSequence const& in,
      29              :     bool more) ->
      30              :         results
      31              : {
      32        60084 :     results rv;
      33        60084 :     auto it_o = buffers::begin(out);
      34        60084 :     auto it_i = buffers::begin(in);
      35              : 
      36       120168 :     if( it_o == buffers::end(out) ||
      37        60084 :         it_i == buffers::end(in) )
      38            0 :         return rv;
      39              : 
      40        60084 :     auto ob = *it_o++;
      41        60084 :     auto ib = *it_i++;
      42        59334 :     for(;;)
      43              :     {
      44              :         // empty buffers may be passed, and this is
      45              :         // intentional and valid.
      46       119418 :         results rs = process_impl(ob, ib, more);
      47              : 
      48       119418 :         rv.out_bytes += rs.out_bytes;
      49       119418 :         rv.in_bytes  += rs.in_bytes;
      50       119418 :         rv.ec         = rs.ec;
      51       119418 :         rv.finished   = rs.finished;
      52              : 
      53       119418 :         if( rv.finished || rv.ec )
      54        60084 :             return rv;
      55              : 
      56       119297 :         ob = buffers::sans_prefix(ob, rs.out_bytes);
      57       119297 :         ib = buffers::sans_prefix(ib, rs.in_bytes);
      58              : 
      59       119297 :         if( ob.size() == 0 )
      60              :         {
      61         6001 :             if( it_o == buffers::end(out) )
      62         3467 :                 return rv;
      63         2534 :             ob = *it_o++;
      64              :         }
      65              : 
      66       115830 :         if( ib.size() == 0 )
      67              :         {
      68       113301 :             if( it_i == buffers::end(in) )
      69              :             {
      70              :                 // if `more == false` we return only
      71              :                 // when `out` buffers are full.
      72        56496 :                 if( more )
      73        56496 :                     return rv;
      74              :             }
      75              :             else
      76              :             {
      77        56805 :                 ib = *it_i++;
      78              :             }
      79              :         }
      80              :     }
      81              : }
      82              : 
      83              : } // detail
      84              : } // http_proto
      85              : } // boost
      86              : 
      87              : #endif
        

Generated by: LCOV version 2.1