commit metodu
Açıklaması şöyle. Commit ve prepare beraber kullanılır.
Şöyle yaparız.
Senkron metodlar ile kullanmak için önce bellek ayırırız. Şöyle yaparız.
asenkron metodlar ile kullanmak için şöyle yaparız. Burada prepare() ile önce bellek ayrıldığı varsayılıyor.
Şöyle yaparız. Burada prepare() ile önce bellek ayrıldığı varsayılıyor.
streambuf nesnesine yazmak için normalde şöyle yaparız. Yani OutputStream haline getiririz.
Açıklaması şöyle. Commit ve prepare beraber kullanılır.
ÖrnekRequires a preceding call prepare(x) where x >= n, and no intervening operations that modify the input or output sequence.
Şöyle yaparız.
void direct_insert(asio::streambuf& sb, std::string const& data)
{
auto size = data.size();
auto buffer = sb.prepare(size);
std::copy(begin(data), end(data), asio::buffer_cast<char*>(buffer));
sb.commit(size);
}
ÖrnekSenkron metodlar ile kullanmak için önce bellek ayırırız. Şöyle yaparız.
buf.commit (10);
Sonra şöyle yaparız.boost::asio::streambuf buf;
// prepare() 512 bytes for the output sequence. The input sequence
// is empty.
auto bufs = buf.prepare(512);
// Read from the socket, writing into the output sequence. The
// input sequence is empty and the output sequence contains "hello".
size_t n = sock.receive (bufs);
// Remove 'n' (5) bytes from output sequence appending them to the
// input sequence. The input sequence contains "hello" and the
// output sequence has 507 bytes.
buf.commit(n);
// The input and output sequence remain unchanged.
std::istream is(&buf);
std::string s;
// Read from the input sequence and consume the read data. The string
// 's' contains "hello". The input sequence is empty, the output
// sequence remains unchanged.
is >> s;
Örnekasenkron metodlar ile kullanmak için şöyle yaparız. Burada prepare() ile önce bellek ayrıldığı varsayılıyor.
void Foo::readHandler(const boost::system::error_code &error,
std::size_t bytes_transferred)
{
if(!error)
{
buf.commit(bytes_transferred);
std::istream istrm(&buf);
std::string message;
istrm >> message;
...
} else {
// ...
}
}
ÖrnekŞöyle yaparız. Burada prepare() ile önce bellek ayrıldığı varsayılıyor.
asio::async_read_until(socket, buf, "\n",
[self = shared_from_this()](auto const&ec, auto size)
{
if (size == 0 )
{
// error condition
...
}
else {
self->buffer.commit(size);
std::istream is(std::addressof(self->buffer_));
std::string str;
while (std::getline(is, str))
{
...
}
self->run();
}
});
Örnekstreambuf nesnesine yazmak için normalde şöyle yaparız. Yani OutputStream haline getiririz.
boost::asio::streambuf buffer;
std::ostream os(&buffer);
uint32_t value = 0x12345678;
os << value; // Gives ascii 305419896
os.write((const char *) &value, sizeof(value)); // fives 0x12345678
Ancak şöyle de yapılabilir. Burada prepare() ile önce bellek ayrıldığı varsayılıyor.buffer.commit(boost::asio::buffer_copy(
buffer.prepare(sizeof(value)),
boost::asio::buffer(&value, sizeof(value))));
Hiç yorum yok:
Yorum Gönder