LCOV - code coverage report
Current view: top level - boost/http_proto/detail/impl/array_of_buffers.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 97.4 % 38 37
Test Date: 2025-05-26 06:53:20 Functions: 100.0 % 9 9

            Line data    Source code
       1              : //
       2              : // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.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/cppalliance/http_proto
       8              : //
       9              : 
      10              : #ifndef BOOST_HTTP_PROTO_DETAIL_IMPL_ARRAY_OF_BUFFERS_HPP
      11              : #define BOOST_HTTP_PROTO_DETAIL_IMPL_ARRAY_OF_BUFFERS_HPP
      12              : 
      13              : #include <boost/buffers/sans_prefix.hpp>
      14              : #include <boost/http_proto/detail/except.hpp>
      15              : #include <boost/assert.hpp>
      16              : 
      17              : namespace boost {
      18              : namespace http_proto {
      19              : namespace detail {
      20              : 
      21              : template<bool isConst>
      22           99 : array_of_buffers<isConst>::
      23              : array_of_buffers(
      24              :     value_type* p,
      25              :     std::size_t n) noexcept
      26           99 :     : o_(p)
      27           99 :     , p_(p)
      28           99 :     , n_(n)
      29           99 :     , c_(n)
      30              : {
      31           99 : }
      32              : 
      33              : template<bool isConst>
      34              : bool
      35              : array_of_buffers<isConst>::
      36              : empty() const noexcept
      37              : {
      38              :     return n_ == 0;
      39              : }
      40              : 
      41              : template<bool isConst>
      42              : auto
      43        15535 : array_of_buffers<isConst>::
      44              : data() const noexcept ->
      45              :     value_type*
      46              : {
      47        15535 :     return p_;
      48              : }
      49              : 
      50              : template<bool isConst>
      51              : std::size_t
      52        12487 : array_of_buffers<isConst>::
      53              : size() const noexcept
      54              : {
      55        12487 :     return n_;
      56              : }
      57              : 
      58              : template<bool isConst>
      59              : std::size_t
      60        24800 : array_of_buffers<isConst>::
      61              : capacity() const noexcept
      62              : {
      63        24800 :     return c_;
      64              : }
      65              : 
      66              : template<bool isConst>
      67              : auto
      68        25214 : array_of_buffers<isConst>::
      69              : begin() const noexcept ->
      70              :     iterator
      71              : {
      72        25214 :     return p_;
      73              : }
      74              : 
      75              : template<bool isConst>
      76              : auto
      77        25214 : array_of_buffers<isConst>::
      78              : end() const noexcept ->
      79              :     iterator
      80              : {
      81        25214 :     return p_ + n_;
      82              : }
      83              : 
      84              : template<bool isConst>
      85              : auto
      86        37561 : array_of_buffers<isConst>::
      87              : operator[](
      88              :     std::size_t i) const noexcept ->
      89              :         value_type&
      90              : {
      91        37561 :     BOOST_ASSERT(i < n_);
      92        37561 :     return p_[i];
      93              : }
      94              : 
      95              : template<bool isConst>
      96              : void
      97        15951 : array_of_buffers<isConst>::
      98              : consume(std::size_t n)
      99              : {
     100        34651 :     while(n_ > 0)
     101              :     {
     102        34606 :         if(n < p_->size())
     103              :         {
     104         2942 :             *p_ = buffers::sans_prefix(*p_, n);
     105         2942 :             return;
     106              :         }
     107        31664 :         n -= p_->size();
     108        31664 :         ++p_;
     109        31664 :         --n_;
     110        31664 :         if(n == 0)
     111        12964 :             return;
     112              :     }
     113              : 
     114              :     // n exceeded available size
     115           45 :     if(n > 0)
     116            0 :         detail::throw_logic_error();
     117              : }
     118              : 
     119              : template<bool isConst>
     120              : void
     121        12400 : array_of_buffers<isConst>::
     122              : reset(std::size_t n)
     123              : {
     124        12400 :     BOOST_ASSERT(n <= capacity());
     125        12400 :     p_ = o_;
     126        12400 :     n_ = n;
     127        68239 :     for( auto p = p_; p < p_ + n; ++p )
     128        55839 :         *p = value_type();
     129        12400 : }
     130              : 
     131              : } // detail
     132              : } // http_proto
     133              : } // boost
     134              : 
     135              : #endif
        

Generated by: LCOV version 2.1