Program Listing for File SendMessageUnbuffered.cpp
↰ Return to documentation for file (BackendAsyncmsg/SendMessageUnbuffered.cpp
)
#include "SendMessageUnbuffered.hpp"
#include <algorithm>
netio3::asyncmsg::SendMessageUnbuffered::SendMessageUnbuffered(
const std::span<const std::uint8_t> data,
const std::span<const std::uint8_t> header_data,
const std::uint64_t key) :
m_data{data}, m_header_data{header_data.begin(), header_data.end()}, m_key{key}
{}
netio3::asyncmsg::SendMessageUnbuffered::SendMessageUnbuffered(
const std::span<const iovec> data,
const std::span<const std::uint8_t> header_data,
const std::uint64_t key) :
m_data{[data]() {
auto transformed = std::vector<std::span<const std::uint8_t>>{};
std::ranges::transform(
data,
std::back_inserter(transformed),
[](const auto& entry) -> decltype(transformed)::value_type {
return {static_cast<const std::uint8_t*>(entry.iov_base), entry.iov_len};
});
return transformed;
}()},
m_header_data{header_data.begin(), header_data.end()},
m_key{key}
{}
void netio3::asyncmsg::SendMessageUnbuffered::toBuffers(
std::vector<boost::asio::const_buffer>& buffers) const
{
const boost::asio::const_buffer headerDataBuffer(m_header_data.data(), std::size(m_header_data));
buffers.push_back(headerDataBuffer);
std::ranges::transform(m_data, std::back_inserter(buffers), [](const auto& entry) {
return boost::asio::const_buffer(entry.data(), std::size(entry));
});
}