Считать данные в кольцевой буфер

Можно ли использовать boost::circular_buffer с boost::asio?

В частности, я хочу прочитать фиксированное количество байтов с boost::asio::async_write и сохраните их прямо в кольцевой буфер без копирования.

Некоторый пример кода был бы очень хорош!

4

Решение

На данный момент (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);
1

Другие решения

Других решений пока нет …