2 Eylül 2017 Cumartesi

iostreams stream Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/iostreams/stream.hpp>
Bu sınıf std::istream& nesnesine çevrilebilir.

Elimizde file_descriptor_sink,file_descriptor_source,array_source gibi stream arayüzünü desteklemeyen nesneler var ise, bu nesneleri sarmalayarak stream olarak kullanabilmemizi sağlar.

STL Algoritmaları
Bu sınıfı STL algoritmaları ile kullanılabilir. 

Örnek - std::copy
Şöyle yaparız.

template <typename Out>
Out read_file(std::string const& path, Out out) {

  io::stream<io::file_source> stream = ...;
  ...
  return out = std::copy(std::istreambuf_iterator<char>{stream}, {}, out);
}
Constructor - array_source
Okuma için kullanılır.Şu satırı dahil ederiz.
#include <boost/iostreams/device/array.hpp>
Şöyle yaparız.
char buf[] = "hello world\nbye world";
bis::array_source source(buf, strlen(buf));
bis::stream<bis::array_source> stream (source);

foo(stream);
Daha sonra bu stream'den okuma yaparız.Şöyle yaparız.
void foo(std::istream& is) {
  std::string line;
  while (getline(is, line)) {
    std::cout << " * '" << line << "'\n";
  }
}
Constructor - basic_array_source
Şöyle yaparız. Stream array'i aşınca bad() bitini kaldırır.

bios::basic_array_source<char> source = ...;
bios::stream <bios::basic_array_source<char>> stream (source);
Constructor - file_descriptor_sink
Yazma için kullanılılır. Şu satırı dahil ederiz.
#include <boost/iostreams/device/file_descriptor.hpp>
Şöyle yaparız.
bis::file_descriptor_sink fd_sink = ...;
bis::stream <bis::file_descriptor_sink> stream (fd_sink);

stream << "...";
Constructor - file_descriptor_source
Okuma için kullanılır. Şu satırı dahil ederiz.
#include <boost/iostreams/device/file_descriptor.hpp>
Örnek
Şöyle yaparız.
bis::file_descriptor_source fd_source = ...;
bis::stream <bis::file_descriptor_source> stream (fd_source);

std::string str;
while (std::getline(stream, str))
{
  ...
}
Örnek
C++ ifstream veya wifstream sınıfları wchar_t alan constructor sunmuyor. Şöyle yaparız.
fs::wpath const fname = L"test.xml";
io::file_descriptor_source fd_source (fname);
io::stream<io::file_descriptor_source> stream (fd_source);
Constructor - file_source
Şöyle yaparız.
std::string const path = ...;

ios::stream<ios::file_source> stream;
stream.exceptions (std::ios::badbit | std::ios::eofbit | std::ios::failbit);
stream.open (path, std::ios::binary);

rdbuf metodu
Şöyle yaparız.
std::istream wrap(is.rdbuf());


Hiç yorum yok:

Yorum Gönder