Scroll to navigation

FBB::MultiBuf(3bobcat) Writing multiple streams FBB::MultiBuf(3bobcat)

NAME

FBB::MultiBuf - Selectively writes multiple streams

SYNOPSIS

#include <bobcat/multibuf>
Linking option: -lbobcat

DESCRIPTION

The FBB::MultiBuf class is a specialization of std::streambuf. It can be used to write selectively to multiple std::ostreams. Each std::ostream that is associated with a MultiBuf has a mode-tag indicating whether the stream should always be used when information is inserted into the MultiBuf, just once, or not at all.

A std::ostream initialized with the address of a MultiBuf then the constructed std::ostream becomes an output-multiplexer: by inserting information into the std::ostream object all std::ostream objects added to its MultiBuf buffer which have an active mode receive that information.

All active streams passed to a MultiBuf object should outlive the MultiBuf object. It is the responsibility of the MultiBuf user that this requirement is met.

MultiBuf objects insert information to their configured std::ostream objects (not directly to those streams’ std::streambuf objects).

No assumptions should be made about the order in which the std::ostream objects that are associated with the MultiBuf objects are visited when information is inserted.

NAMESPACE

FBB
All constructors, members, operators and manipulators, mentioned in this man-page, are defined in the namespace FBB.

INHERITS FROM

std::streambuf

ENUMERATION

The MultiBuf::Mode enumeration defines the following values:

OFF:
No information is inserted into std::ostreams associated with the mode OFF;
ON:
Information inserted into the std::ostream using a MultiBuf streambuf is inserted in all std::ostream objects associated with the mode ON;
ONCE:
Information inserted into the std::ostream using a MultiBuf streambuf is inserted in all std::ostream objects associated with the mode ONCE up through the next std::flush. Following the std::flush insertion the std::ostream’s mode is set to RESET;
RESET:
No information is inserted into std::ostreams associated with the mode RESET. See also the members reset and setOnce below.

NESTED CLASS

The class MultiBuf::Stream is a nested class of MultiBuf. It offers the following public members:

std::ostream &ostream() const:
This member returns a reference to the Stream’s std::ostream. The returned ostream can be processed independently from the other ostream objects provided to the MultiBuf object. See also the members begin and streamVect below;
Mode mode() const:
This member returns the Stream’s Mode.

TYPES

The following types are defined by the class FBB:MultiBuf:

StreamVect:
A synonym of std::vector<MultiBuf::Stream>;
const_iterator:
A synonym of StreamVect::const_iterator.

CONSTRUCTORS

MultiBuf():
A MultiBuf object is initialized without associated std::ostream objects;
MultiBuf(std::ostream &os, Mode mode = ON):
A MultiBuf object which is associated with the specified std::ostream and Mode mode is initialized, by default using Mode ON;
MultiBuf(std::ostream, std::ostream, ...):
This constructor creates a MultiBuf object associated with all std::ostream objects specified as the constructor’s arguments, using Mode ON for all the specified ostream objects;
MultiBuf(std::ostream, Mode mode, ...):
This constructor creates a MultiBuf object receiving pairs of arguments. The first element of each pair is a std::ostream, the second element is the std::ostream’s Mode.

Copy and move constructors (and assignment operators) are available.

MEMBER FUNCTIONS

All members of std::ostringstream and std::exception are available, as MultiBuf inherits from these classes. However, the std::streambuf’s default seek_off and seek_pos (both returning -1) are used as the streams handled by a MultiBuf object may not all support seek operations.

const_iterator begin() const:
A const-iterator to the first Stream object stored in the MultiBuf object is returned;
void clear():
The MultiBuf’s StreamVect is cleared;
const_iterator end() const:
A const-iterator referring just beyond the last Stream object stored in the MultiBuf object is returned;
void insert(std::ostream &os, Mode mode = ON):
A Stream object referring to the arguments’ std::ostream object using the specified Mode is added to the current set of Stream objects. Note that insert may be called repeatedly with the same std::ostream arguments;
void insert(std::vector<stream> const &os):
This member adds all stream objects stored in the os vector to
Mode mode() const:
The Mode associated with a Stream object referring to os is returned. If no such Stream object is available Mode OFF is returned;
bool remove(std::ostream &os):
The (first) Stream object referring to os is removed from MultiBuf’s StreamVect, and true is returned. If no Stream object refers to os then false is returned;
bool remove(size_t idx):
If idx is at least equal to the StreamVect’s size false is returned. Otherwise element idx of the MultiBuf’s StreamVect is removed, and true is returned;
void reset(Mode mode):
The Mode values of all Stream objects maintained by the MultiBuf object are set to mode;
bool reset(ostream &os, Mode mode):
The Mode of the first Stream object referring to os is set to mode and true is returned. If no such Stream object is available false is returned;
void void setOnce():
The Mode RESET values of all Stream objects are changed to Mode ONCE;
void void setOnce(std::ostream &os):
The Mode value of the first Stream object referring to os is set to Mode ONCE;
bool void setOnce(size_t idx):
If idx is at least equal to the StreamVect’s size false is returned. Otherwise the Mode value of element idx of the StreamVect is set to ONCE and true is returned.
size_t size() const:
Returns the StreamVect’s size;
MultiBuf::StreamVect const &streamVect() const:
Returns a const-reference to the MultiBuf’s StreamVect.

EXAMPLE

#include <iostream>
#include <fstream>
#include <bobcat/multibuf>
using namespace std;
using namespace FBB;
int main()
{

MultiBuf msb(cout);
ostream os(&msb);
ofstream out("out");
msb.insert(out, MultiBuf::ONCE);
os << "This is on cout and out\n"
"This is on cout only\n";
msb.setOnce();
os << "This is on cout and out\n"
"This is on cout only\n"; }

FILES

bobcat/multibuf - defines the class interface

SEE ALSO

bobcat(7)

BUGS

None Reported.

BOBCAT PROJECT FILES

https://fbb-git.gitlab.io/bobcat/: gitlab project page;

Debian Bobcat project files:

libbobcat6: debian package containing the shared library, changelog and copyright note;
libbobcat-dev: debian package containing the static library, headers, manual pages, and developer info;

BOBCAT

Bobcat is an acronym of `Brokken’s Own Base Classes And Templates’.

COPYRIGHT

This is free software, distributed under the terms of the GNU General Public License (GPL).

AUTHOR

Frank B. Brokken (f.b.brokken@rug.nl).

2005-2026 libbobcat-dev_6.12.00