Можно ли использовать boost::circular_buffer
с boost::asio
?
В частности, я хочу прочитать фиксированное количество байтов с boost::asio::async_write
и сохраните их прямо в кольцевой буфер без копирования.
Некоторый пример кода был бы очень хорош!
На данный момент (Boost 1.66) невозможно читать данные в boost::circular_buffer
потому что он не предоставляет никакого способа зарезервировать пространство в базовом буфере, что является обязательным условием для создания mutable_buffer
нужно позвонить asio::read
,
Но это возможно записывать от boost::circular_buffer
:
boost::circular_buffer<char> cir_buf;
FillBuffer(cir_buf);
// Construct a buffer sequence with either 1 or 2 data chunks
std::vector<boost::asio::const_buffer> buffer_sequence;
auto arr1 = cir_buf.array_one();
buffer_sequence.push_back(boost::asio::buffer(arr1.first, arr1.second));
auto arr2 = cir_buf.array_two();
if (arr2.second != 0) {
buffer_sequence.push_back(boost::asio::buffer(arr2.first, arr2.second));
}
boost::asio::write(socket_, buffer_sequence);
Других решений пока нет …