100.00% Lines (10/10) 100.00% Functions (2/2)
TLA Baseline Branch
Line Hits Code Line Hits Code
  1 + //
  2 + // Copyright (c) 2023 Vinnie Falco (vinnie.falco@gmail.com)
  3 + // Copyright (c) 2026 Steve Gerbino
  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/capy
  9 + //
  10 +
  11 + #ifndef BOOST_CAPY_BUFFERS_BUFFERS_FRONT_HPP
  12 + #define BOOST_CAPY_BUFFERS_BUFFERS_FRONT_HPP
  13 +
  14 + #include <boost/capy/detail/config.hpp>
  15 + #include <boost/capy/buffers.hpp>
  16 +
  17 + namespace boost {
  18 + namespace capy {
  19 +
  20 + // MrDocs 0.8.0 flags this object as `buffers_front: variable is
  21 + // undocumented`, as it does the other five buffer CPOs
  22 + // (buffer_sequence_begin, buffer_sequence_end, buffer_size, buffers_empty,
  23 + // buffer_copy). The finding is grandfathered in doc/lint/baseline.json.
  24 + // Silencing it buys nothing: on the synthesised overload page MrDocs renders
  25 + // neither the record-level docstring below nor one attached to the variable,
  26 + // so any docstring that clears the warning is invisible to readers -- a
  27 + // second, dead copy of this prose. Verified twice against the built site.
  28 + /** Return the first buffer in a sequence.
  29 +
  30 + @functionobject
  31 + */
  32 + constexpr struct
  33 + {
  34 + /** Return the first mutable buffer, or an empty buffer.
  35 +
  36 + @param bs The buffer sequence to inspect.
  37 +
  38 + @return The first buffer in `bs`, or an empty buffer if `bs`
  39 + contains no buffers.
  40 + */
  41 + template<MutableBufferSequence MutableBufferSequence>
  42 + mutable_buffer
HITGNC   43 + 5 operator()(
  44 + MutableBufferSequence const& bs) const noexcept
  45 + {
HITGNC   46 + 5 auto const it = buffer_sequence_begin(bs);
HITGNC   47 + 5 if(it != buffer_sequence_end(bs))
HITGNC   48 + 4 return *it;
HITGNC   49 + 1 return {};
  50 + }
  51 +
  52 + /** Return the first const buffer, or an empty buffer.
  53 +
  54 + @param bs The buffer sequence to inspect.
  55 +
  56 + @return The first buffer in `bs`, or an empty buffer if `bs`
  57 + contains no buffers.
  58 + */
  59 + template<ConstBufferSequence ConstBufferSequence>
  60 + const_buffer
HITGNC   61 + 5 operator()(
  62 + ConstBufferSequence const& bs) const noexcept
  63 + {
HITGNC   64 + 5 auto const it = buffer_sequence_begin(bs);
HITGNC   65 + 5 if(it != buffer_sequence_end(bs))
HITGNC   66 + 4 return *it;
HITGNC   67 + 1 return {};
  68 + }
  69 + } const buffers_front{};
  70 +
  71 + } // capy
  72 + } // boost
  73 +
  74 + #endif