FBB::OFilterBuf(3bobcat)

ostream filtering
(libbobcat-dev_6.02.02)

2005-2022

NAME

FBB::OFilterBuf - Base class for std::ostream filtering

SYNOPSIS

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

DESCRIPTION

The FBB::OFilterBuf class is a specialization of the std::streambuf class and can be used as a base class for classes implementing ostream-filtering.

Ostream filtering is defined here as the process by which inserted characters are subject to processing before they are passed on to another (filtered) ostream object (or they may be rejected). The filtering may also result in inserting additional information into the filtered ostream.

Chaining of filters is also possible: the filtered ostream may itself use an OFilterBuf to filter its received information before passing it on to yet another ostream.

As OFilterBuf inherits from std::streambuf an OFilterBuf object can be used to provide an ostream object with a std::streambuf. Information inserted into such a stream travels the following route:

To implement a simple copy-filter (i.e., all characters are accepted as-is) a class must be derived from OFilterBuf providing an overriding implementation of overflow(), e.g., as follows:

    int DerivedClass::overflow(int ch)
    {
        out().put(ch);
    }
        
Next this std::streambuf specialization can be associated with an ostream into which information to be `copy filtered' can be inserted (cf. the EXAMPLE section below).

NAMESPACE

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

INHERITS FROM

std::streambuf

CONSTRUCTORS

As OFilterBuf should be used as a base class all its constructors are protected.

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

PROTECTED MEMBER FUNCTIONS

Except for the public members inherited from std::ostreambuf all of OFilterBuf's members are protected.

Derived classes should provide their own implementation of int underflow(int ch) to implement filtering.

EXAMPLE


    #include <iostream>
    #include <cctype>
    #include <bobcat/ofilterbuf>

    struct NoDigits: public FBB::OFilterBuf
    {
        NoDigits(std::ostream &out)
        :
            OFilterBuf(out)
        {}

        private:
            int overflow(int ch) override
            {
                if (not isdigit(ch))
                    out().put(ch);
                return ch;
            }
    };

    using namespace FBB;
    using namespace std;

    int main()
    {
        NoDigits nod(cout);     // no digits to cout
        ostream out(&nod);

        out << cin.rdbuf();      // rm digits from cin
    }
        

FILES

bobcat/ofilterbuf - defines the class interface

SEE ALSO

bobcat(7), ifilterbuf(3bobcat)

BUGS

None Reported.

BOBCAT PROJECT FILES

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).