LCOV - code coverage report
Current view: top level - boost/buffers/mutable_buffer_span.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 100.0 % 16 16
Test Date: 2024-07-24 21:34:17 Functions: 100.0 % 6 6

            Line data    Source code
       1              : //
       2              : // Copyright (c) 2023 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/buffers
       8              : //
       9              : 
      10              : #ifndef BOOST_BUFFERS_MUTABLE_BUFFER_SPAN_HPP
      11              : #define BOOST_BUFFERS_MUTABLE_BUFFER_SPAN_HPP
      12              : 
      13              : #include <boost/buffers/detail/config.hpp>
      14              : #include <boost/buffers/mutable_buffer.hpp>
      15              : #include <boost/buffers/mutable_buffer_subspan.hpp>
      16              : #include <boost/buffers/type_traits.hpp>
      17              : 
      18              : namespace boost {
      19              : namespace buffers {
      20              : 
      21              : /** Holds a span of buffers that are modifiable.
      22              : 
      23              :     Objects of this type meet the requirements
      24              :     of <em>MutableBufferSequence</em>.
      25              : */
      26              : class mutable_buffer_span
      27              : {
      28              :     mutable_buffer const* p_ = nullptr;
      29              :     std::size_t n_ = 0;
      30              : 
      31              :     friend class mutable_buffer_subspan;
      32              : 
      33              : public:
      34              :     /** The type of buffer.
      35              :     */
      36              :     using value_type = mutable_buffer;
      37              : 
      38              :     /** The type of iterators returned.
      39              :     */
      40              :     using const_iterator = value_type const*;
      41              : 
      42              :     /** Constructor.
      43              :     */
      44              :     mutable_buffer_span() = default;
      45              : 
      46              :     /** Constructor.
      47              :     */
      48        16150 :     mutable_buffer_span(
      49              :         mutable_buffer const* p,
      50              :         std::size_t n) noexcept
      51        16150 :         : p_(p)
      52        16150 :         , n_(n)
      53              :     {
      54        16150 :     }
      55              : 
      56              :     /** Constructor.
      57              :     */
      58              :     template<
      59              :         class MutableBufferSequence
      60              :         , class = typename std::enable_if<
      61              :             ! std::is_same<
      62              :                 MutableBufferSequence,
      63              :                 mutable_buffer_span>::value &&
      64              :             is_mutable_buffer_sequence<
      65              :                 MutableBufferSequence>::value &&
      66              :             std::is_same<decltype(
      67              :                 std::declval<MutableBufferSequence
      68              :                     const&>().begin()),
      69              :                 mutable_buffer const*>::value
      70              :             >::type
      71              :     >
      72              :     explicit
      73            1 :     mutable_buffer_span(
      74              :         MutableBufferSequence const& bs) noexcept
      75            1 :         : p_(bs.begin())
      76            1 :         , n_(bs.end() - bs.begin())
      77              :     {
      78            1 :     }
      79              : 
      80              :     /** Constructor.
      81              :     */
      82              :     inline
      83              :     mutable_buffer_span(
      84              :         mutable_buffer_span const&) = default;
      85              : 
      86              :     /** Assignment.
      87              :     */
      88              :     mutable_buffer_span& operator=(
      89              :         mutable_buffer_span const&) = default;
      90              : 
      91              :     /** Return an iterator to the beginning.
      92              :     */
      93              :     const_iterator
      94        13100 :     begin() const noexcept
      95              :     {
      96        13100 :         return p_;
      97              :     }
      98              : 
      99              :     /** Return an iterator to the end.
     100              :     */
     101              :     const_iterator
     102        13100 :     end() const noexcept
     103              :     {
     104        13100 :         return p_ + n_;
     105              :     }
     106              : 
     107              :     friend
     108              :     mutable_buffer_subspan
     109          374 :     tag_invoke(
     110              :         prefix_tag const&,
     111              :         mutable_buffer_span const& s,
     112              :         std::size_t n) noexcept
     113              :     {
     114          374 :         return s.prefix_impl(n);
     115              :     }
     116              : 
     117              :     friend
     118              :     mutable_buffer_subspan
     119          374 :     tag_invoke(
     120              :         suffix_tag const&,
     121              :         mutable_buffer_span const& s,
     122              :         std::size_t n) noexcept
     123              :     {
     124          374 :         return s.suffix_impl(n);
     125              :     }
     126              : 
     127              : private:
     128              :     inline
     129              :     mutable_buffer_subspan
     130              :     prefix_impl(std::size_t n) const noexcept;
     131              : 
     132              :     inline
     133              :     mutable_buffer_subspan
     134              :     suffix_impl(std::size_t n) const noexcept;
     135              : };
     136              : 
     137              : } // buffers
     138              : } // boost
     139              : 
     140              : #include <boost/buffers/impl/mutable_buffer_span.hpp>
     141              : 
     142              : #endif
        

Generated by: LCOV version 2.1