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_CONST_BUFFER_PAIR_HPP
11 : #define BOOST_BUFFERS_CONST_BUFFER_PAIR_HPP
12 :
13 : #include <boost/buffers/detail/config.hpp>
14 : #include <boost/buffers/const_buffer.hpp>
15 : #include <boost/buffers/mutable_buffer_pair.hpp>
16 : #include <boost/assert.hpp>
17 :
18 : namespace boost {
19 : namespace buffers {
20 :
21 : /** A constant buffer pair
22 : */
23 : class const_buffer_pair
24 : {
25 : public:
26 : using value_type = const_buffer;
27 :
28 : using const_iterator = value_type const*;
29 :
30 : /** Constructor.
31 : */
32 : const_buffer_pair() = default;
33 :
34 : /** Constructor.
35 : */
36 : const_buffer_pair(
37 : const_buffer_pair const&) = default;
38 :
39 : /** Constructor.
40 : */
41 286606 : const_buffer_pair(
42 : const_buffer const& b0,
43 : const_buffer const& b1) noexcept
44 286606 : : b_{ b0, b1 }
45 : {
46 286606 : }
47 :
48 : /** Constructor.
49 : */
50 16 : const_buffer_pair(
51 : mutable_buffer_pair const& bs) noexcept
52 16 : : b_{ bs.begin()[0], bs.begin()[1] }
53 : {
54 16 : }
55 :
56 : /** Assignment.
57 : */
58 : const_buffer_pair& operator=(
59 : const_buffer_pair const&) = default;
60 :
61 : /** Assignment.
62 : */
63 16 : const_buffer_pair& operator=(
64 : mutable_buffer_pair const& other) noexcept
65 : {
66 16 : b_[0] = other.begin()[0];
67 16 : b_[1] = other.begin()[1];
68 16 : return *this;
69 : }
70 :
71 : const_buffer const&
72 64 : operator[](unsigned i) const noexcept
73 : {
74 64 : BOOST_ASSERT(i < 2);
75 64 : return b_[i];
76 : }
77 :
78 : const_buffer&
79 64 : operator[](unsigned i) noexcept
80 : {
81 64 : BOOST_ASSERT(i < 2);
82 64 : return b_[i];
83 : }
84 :
85 : const_iterator
86 774271 : begin() const noexcept
87 : {
88 774271 : return b_;
89 : }
90 :
91 : const_iterator
92 774270 : end() const noexcept
93 : {
94 774270 : return b_ + 2;
95 : }
96 :
97 : friend
98 : const_buffer_pair
99 139808 : tag_invoke(
100 : prefix_tag const&,
101 : const_buffer_pair const& b,
102 : std::size_t n) noexcept
103 : {
104 139808 : return b.prefix_impl(n);
105 : }
106 :
107 : friend
108 : const_buffer_pair
109 139808 : tag_invoke(
110 : suffix_tag const&,
111 : const_buffer_pair const& b,
112 : std::size_t n) noexcept
113 : {
114 139808 : return b.suffix_impl(n);
115 : }
116 :
117 : private:
118 : BOOST_BUFFERS_DECL
119 : const_buffer_pair
120 : prefix_impl(
121 : std::size_t n) const noexcept;
122 :
123 : BOOST_BUFFERS_DECL
124 : const_buffer_pair
125 : suffix_impl(
126 : std::size_t n) const noexcept;
127 :
128 : const_buffer b_[2];
129 : };
130 :
131 : } // buffers
132 : } // boost
133 :
134 : #endif
|