ConstBufferSequence
A ConstBufferSequence represents zero or more contiguous memory regions
as a bidirectional range whose value type is convertible to const_buffer,
or as an object which is convertible to const_buffer.
Concept Definition
template<typename T>
concept const_buffer_sequence =
std::is_convertible_v<T, const_buffer> || (
std::ranges::bidirectional_range<T> &&
std::is_convertible_v<std::ranges::range_value_t<T>, const_buffer>);
Requirements
-
Tdenotes a type meeting the ConstBufferSequence requirements. -
tdenotes a value of typeT. -
udenotes a value of typeT.
| Expression | Type | Semantics, Pre/Post-conditions |
|---|---|---|
|
|
|
|
Iterator |
Returns a bidirectional iterator to the first buffer, or |
|
Iterator |
Returns a bidirectional iterator one past the last buffer. |
|
Convertible to |
Where |
|
Copy construction. |
Iteration
While std::ranges::begin and std::ranges::end work on bidirectional ranges,
they do not handle objects merely convertible to const_buffer. Use
and buffers::begin for uniform handling:buffers::end
template<class ConstBufferSequence>
void print_buffers(ConstBufferSequence const& bs)
{
for(auto it = buffers::begin(bs); it != buffers::end(bs); ++it)
{
const_buffer b = *it;
std::cout << "Buffer: " << b.size() << " bytes\n";
}
}
// Works with ranges
std::vector<const_buffer> v = /* ... */;
print_buffers(v);
// Also works with single buffers
const_buffer cb(data, len);
print_buffers(cb);
Copy Semantics
Copies of a buffer sequence must reference the same underlying memory:
T t(u);
static_assert(const_buffer_sequence<T>);
assert(std::equal(
buffers::begin(t), buffers::end(t),
buffers::begin(u), buffers::end(u),
[](const_buffer const& b1, const_buffer const& b2)
{
return b1.data() == b2.data() && b1.size() == b2.size();
}));
This property enables efficient pass-by-value semantics. Copying a buffer sequence is cheap because only the handle is copied, not the underlying data.
Models
The following types model ConstBufferSequence:
-
mutable_buffer(implicitly converts toconst_buffer) -
std::array<const_buffer, N> -
std::vector<const_buffer>
See Also
-
MutableBufferSequence - Writable buffer sequences
-
Introduction - Buffer sequence concepts explained
-
Algorithms - Functions operating on buffer sequences