streambuf_facade and stream_facadeWriting a new stream or stream buffer class using the Boost Iostreams library is easy: we simply write a class modeling the Device concept, then use that class as the template argument to streambuf_facade:
#include <boost/iostreams/stream_facade.hpp> #include <boost/iostreams/streambuf_facade.hpp> namespace io = boost::iostreams; class my_device { /* */ }; typedef io::stream_facade<my_device> my_stream; typedef io::streambuf_facade<my_device> my_streambuf;
Here io::stream_facade<my_device> is a derived class of std::basic_streambuf, and io::stream_facade<my_device> is a derived class of std::basic_istream, std::basic_ostream or std::basic_iostream depending on the mode of my_device, i.e., depending on which of the fundamental i/o operations read, write and seek it supports.
The template io::stream_facade is provided as a convenience. It's always possibly to avoid io::stream_facade<my_device> and simply use io::stream_facade together with one of the standard library stream templates. E.g.,
#include <ostream> #include <boost/iostreams/device/file.hpp> #include <boost/iostreams/stream_facade.hpp> namespace io = boost::iostreams; int main() { io::stream_facade<file_sink> buf("log.txt"); std::ostream out(&buf); // Write to out } typedef io::stream_facade<my_device> my_stream; typedef io::streambuf_facade<my_device> my_streambuf;
Another way to define a new stream or stream buffer class using the Boost Iostreams library is to derive from filtering_stream or filtering_streambuf.
The next three items will demonstrate how to write Devices for accessing STL-compatible containers. The source code for the examples can be found in the header <libs/iostreams/example/container_device.hpp>
Revised 20 May, 2004
© Copyright Jonathan Turkanis, 2004
Use, modification, and distribution are subject to the Boost Software License, Version 2.0. (See accompanying file LICENSE_2_0.txt or copy at http://www.boost.org/LICENSE_2_0.txt)