Възможно ли е да се използва boost::circular_buffer
с boost::asio
?
По-конкретно искам да прочета фиксиран брой байтове с boost::asio::async_write
и да ги съхраня директно в кръговия буфер без копиране.
Някакъв примерен код би бил много добър!
Възможно ли е да се използва 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);
circular_buffer
: _ 2 _ a>,array_two
, < a href="http://tinyurl.com/lmg2axt" rel="nofollow noreferrer">rotate
иlinearize
. Можете да използватеarray_one()
иarray_two()
, за да получите вътрешни буфери (отрезки от един голям буфер) и да захранватеboost::asio::buffer
с тях. - person Evgeny Panasyuk   schedule 09.11.2013array_one
иarray_two
. - person Robert Hegner   schedule 09.11.2013async_write
? - person rustyx   schedule 29.12.2017