LCOV - code coverage report
Current view: top level - http_proto - buffer.hpp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 15 36 41.7 %
Date: 2023-01-09 16:11:12 Functions: 6 11 54.5 %

          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_BUFFER_HPP
      11             : #define BOOST_HTTP_PROTO_BUFFER_HPP
      12             : 
      13             : #include <boost/http_proto/detail/config.hpp>
      14             : #include <cstdlib>
      15             : 
      16             : namespace boost {
      17             : namespace http_proto {
      18             : 
      19             : //------------------------------------------------
      20             : 
      21             : class mutable_buffer
      22             : {
      23             :     void* p_ = nullptr;
      24             :     std::size_t n_ = 0;
      25             : 
      26             : public:
      27         707 :     mutable_buffer() = default;
      28             :     mutable_buffer(
      29             :         mutable_buffer const&) = default;
      30             :     mutable_buffer& operator=(
      31             :         mutable_buffer const&) = default;
      32             : 
      33        2969 :     mutable_buffer(
      34             :         void* data,
      35             :         std::size_t size) noexcept
      36        2969 :         : p_(data)
      37        2969 :         , n_(size)
      38             :     {
      39        2969 :     }
      40             : 
      41             :     void*
      42        2969 :     data() const noexcept
      43             :     {
      44        2969 :         return p_;
      45             :     }
      46             : 
      47             :     std::size_t
      48        2969 :     size() const noexcept
      49             :     {
      50        2969 :         return n_;
      51             :     }
      52             : 
      53             :     mutable_buffer&
      54             :     operator+=(std::size_t n) noexcept
      55             :     {
      56             :         if(n >= n_)
      57             :         {
      58             :             p_ = static_cast<
      59             :                 char*>(p_) + n_;
      60             :             n_ = 0;
      61             :             return *this;
      62             :         }
      63             :         p_ = static_cast<
      64             :             char*>(p_) + n;
      65             :         n_ -= n;
      66             :         return *this;
      67             :     }
      68             : };
      69             : 
      70             : //------------------------------------------------
      71             : 
      72             : class const_buffer
      73             : {
      74             :     void const* p_ = nullptr;
      75             :     std::size_t n_ = 0;
      76             : 
      77             : public:
      78           0 :     const_buffer() = default;
      79             :     const_buffer(
      80             :         const_buffer const&) = default;
      81             :     const_buffer& operator=(
      82             :         const_buffer const&) = default;
      83             : 
      84           0 :     const_buffer(
      85             :         void const* data,
      86             :         std::size_t size) noexcept
      87           0 :         : p_(data)
      88           0 :         , n_(size)
      89             :     {
      90           0 :     }
      91             : 
      92           0 :     const_buffer(
      93             :         mutable_buffer const& other) noexcept
      94           0 :         : p_(other.data())
      95           0 :         , n_(other.size())
      96             :     {
      97           0 :     }
      98             : 
      99             :     void const*
     100             :     data() const noexcept
     101             :     {
     102             :         return p_;
     103             :     }
     104             : 
     105             :     std::size_t
     106           0 :     size() const noexcept
     107             :     {
     108           0 :         return n_;
     109             :     }
     110             : 
     111             :     const_buffer&
     112           0 :     operator+=(std::size_t n) noexcept
     113             :     {
     114           0 :         if(n >= n_)
     115             :         {
     116           0 :             p_ = static_cast<
     117           0 :                 char const*>(p_) + n_;
     118           0 :             n_ = 0;
     119           0 :             return *this;
     120             :         }
     121           0 :         p_ = static_cast<
     122           0 :             char const*>(p_) + n;
     123           0 :         n_ -= n;
     124           0 :         return *this;
     125             :     }
     126             : };
     127             : 
     128             : //------------------------------------------------
     129             : 
     130             : class mutable_buffers
     131             : {
     132             :     mutable_buffer const* p_ = nullptr;
     133             :     std::size_t n_ = 0;
     134             : 
     135             : public:
     136             :     using value_type = mutable_buffer;
     137             : 
     138             :     using iterator = value_type const*;
     139             : 
     140             :     mutable_buffers() = default;
     141             : 
     142             :     mutable_buffers(
     143             :         mutable_buffers const&) = default;
     144             : 
     145             :     mutable_buffers& operator=(
     146             :         mutable_buffers const&) = default;
     147             : 
     148        2969 :     mutable_buffers(
     149             :         value_type const* p,
     150             :         std::size_t n) noexcept
     151        2969 :         : p_(p)
     152        2969 :         , n_(n)
     153             :     {
     154        2969 :     }
     155             : 
     156             :     std::size_t
     157             :     size() const noexcept
     158             :     {
     159             :         return n_;
     160             :     }
     161             : 
     162             :     iterator
     163        2969 :     begin() const noexcept
     164             :     {
     165        2969 :         return p_;
     166             :     }
     167             : 
     168             :     iterator
     169             :     end() const noexcept
     170             :     {
     171             :         return p_ + n_;
     172             :     }
     173             : };
     174             : 
     175             : } // http_proto
     176             : } // boost
     177             : 
     178             : #endif

Generated by: LCOV version 1.15