29 Ocak 2018 Pazartesi

asio buffer metodu

Giriş
Açıklaması şöyle.
boost::asio::buffer is a function that creates buffer objects (mutable or const),
Bu metodu asio::async_write() ile sıkça kullanılır. Bu metoda ikinci parametre olarak geçilir. Şöyle yaparız.
asio::async_write(socket, boost::asio::buffer(str), handler);
Metod iki parametre alır. Birinci parametre kaynak nesne, ikinci parametre byte sayısıdır, ancak ikinci parametreyi kullanmaya genelde gerek kalmaz.

const char *
Şöyle yaparız.
auto b = boost::asio::buffer("GET / HTTP/1.1\r\n\r\n");
std::array
Elimizde şöyle bir kod olsun
boost::array<float, 512> arr = { { 0.0f } };
Şöyle yaparız.
auto buffer = boost::asio::buffer(arr); 
std::string
Şöyle yaparız.
std::string str = ...;
boost::asio::buffer(str);
std::vector
Şöyle yaparız.
void ReadDataIntoBufferPassedIn(const boost::asio::mutable_buffer& buffer) {
   int* p = boost::asio::buffer_cast<int*>(buffer);
   *p = 5; // Do whatever you want with p
}

std::vector<int> v{1,2,3}; 
ReadDataIntoBufferPassedIn(boost::asio::buffer(v));
Diğer
buffer_cast metodu
asio::const_buffer nesnesinin başlangıç ve sonunu almak için kullanılır.
Örnek
Şöyle yaparız.
using Floats = boost::array<float, 10>;

Floats sending = { { M_PI } };
auto buffer = boost::asio::buffer(sending);

// extract the first float back 
std::cout << "Pi is " << boost::asio::buffer_cast<float const*>(buffer)[0] << "\n";
Örnek
Şöyle yaparız.
void test(asio::const_buffer const& buffer)
{
  auto first = asio::buffer_cast<const char*>(buffer);
  auto last = first + asio::buffer_size(buffer);

  std::copy(first, last, std::ostream_iterator<char>(std::cout));
  std::cout << std::endl;
}

int main()
{
  std::string s = "hello";

  test(asio::buffer(s));
}



Hiç yorum yok:

Yorum Gönder