21 Nisan 2016 Perşembe

boost iostreams array_device

Array Device Sınıfları
Bu sınıflar stream'in verilen diziye yazmasını veya diziden okumasını sağlar.

basic_array_sink - Write only
Yazma aracı. Stream verilen buffer'a yazar. Örnek
char buffer[4096];

boost::iostreams::basic_array_sink<char> sr(buffer, buffer_size);  
boost::iostreams::stream< boost::iostreams::basic_array_sink<char> > source(sr);

boost::archive::binary_oarchive oa(source);

oa << serializable_object; 
Eskiden strstream sınıfı da bu özelliği sağlardı. Sonradan bu sınıf deprecate edildi.
void fun(char *buff, unsigned size)
{
    std::strstream str(buff, size);
    str << "hello world: " << 5;
}
Aslında basic_array_sink benzeri bir sınıf kodlamak çok kolay. Tüm yapmamız gereken belirtilen bellek alanına verilen değeri memcpy ile kopyalamak ve destination pointer'ı ilerletmek.

basic_array - Read ve Write
Örnek ver

array_sink - Write
basic_array<char> sınıfının özelleşmiş halidir. char dizisi ile çalışırken şöyle yaparız
#include <boost/iostreams/device/array.hpp>
#include <boost/iostreams/stream.hpp>
#include <iostream>

using namespace boost::iostreams;

int main()
{
  char buffer[16];
  array_sink sink{buffer};
  stream<array_sink> os{sink};
  os << "Boost" << std::flush;
  std::cout.write(buffer, 5);
}
boost::array ile çalışırken şöyle yaparız.
using namespace boost::iostreams;

boost::array<char, 16384> headerBuf;
array_sink          sink    {headerBuf.begin(), headerBuf.size()};
stream<array_sink>  os      {sink};
os << "somedata";

Hiç yorum yok:

Yorum Gönder