20 Mayıs 2018 Pazar

asio mutable_buffers_1 Sınıfı

Giriş
MutableBuffer ve MutableBufferSequence kavramlarını bilmek gerekir.

MutableBuffer Nedir
Açıklaması şöyle
MutableBuffer is a reference to a fixed-length area of mutable memory. Note that it does not in itself contain the memory.
MutableBufferSequence Nedir
Mutable Buffer Sequence sadece char tipi ile çalışır. boost::asio::buffers_iterator ile dolaşılabilir.

Tanımlama
Şöyle yaparız.
std::array<char, 512> block1{}, block2{};
std::vector<ba::mutable_buffers_1> blocks { boost::asio::buffer(block1),
  boost::asio::buffer(block2) };
Örnek
Bu yapıyı boost::asio::buffer_copy() ile tek bir dizi gibi kullanabiliriz. Elimizde şöyle bir kod olsun.
template <class MutableBufferSequence, class ReadHandler>
void my_read_some(MutableBufferSequence buf, ReadHandler handler) {

  char tmp[1024] = {};

  std::cin.read(tmp, sizeof(tmp));
  std::streamsize num = std::cin.gcount();

  if(std::cin || num) {
    boost::asio::buffer_copy(buf, ba::buffer(tmp, num));

    handler({}, num);
  } else {
    handler(ba::error::eof, num);
  }
}
boost::asio::buffers() ile  tek bir dizi gibi kullanabilir.z Kullanmak için şöyle yaparız.
auto handler = [&blocks](boost::system::error_code ec, size_t transferred) {
  if (ec)
    std::cout << "Error " << ec.message() << "\n";
  else {
    std::cout << "Received " << transferred << " bytes\n-------\n";

    std::copy_n(boost::asio::buffers_begin(blocks), transferred,
      std::ostreambuf_iterator<char>(std::cout));
    std::cout << "\n-------\n";
  }
};

my_read_some(blocks, handler);

Hiç yorum yok:

Yorum Gönder