TLA Line data Source 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
43 HIT 5 : operator()(
44 : MutableBufferSequence const& bs) const noexcept
45 : {
46 5 : auto const it = buffer_sequence_begin(bs);
47 5 : if(it != buffer_sequence_end(bs))
48 4 : return *it;
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
61 5 : operator()(
62 : ConstBufferSequence const& bs) const noexcept
63 : {
64 5 : auto const it = buffer_sequence_begin(bs);
65 5 : if(it != buffer_sequence_end(bs))
66 4 : return *it;
67 1 : return {};
68 : }
69 : } const buffers_front{};
70 :
71 : } // capy
72 : } // boost
73 :
74 : #endif
|