---
name: "eoi"
section: "3bobcat"
platform: "linux"
package: "libbobcat-dev"
version: "6.07.01-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/eoi"
---

# eoi(3bobcat)

std::streambuf class offering an eoi manipulator

## NAME

FBB::Eoi - std::streambuf class offering an eoi manipulator

## SYNOPSIS

**#include \<bobcat/eoi\>**\
 Linking option: *-lbobcat*

## DESCRIPTION

The class *Eoi* inherits from *std::streambuf* and may therefore be used as a base class of classes specializing *std::streambuf*. It is particularly useful for classes implementing output operations, as it can be used to specify the \`true end’ of the generated output. E.g., an *std::istream in* object may insert its content into a *std::ostream out* object using the familiar *out \<\< in.rdbuf()* expression, but that doesn’t allow *out* to conclude that it has received all of its information. Sometimes additional actions are required to complete the output (this happens with, e.g., *EncryptBuf* objects (cf. [**encryptbuf**(3bobcat)](/encryptbuf/3bobcat.md)) where after encrypting all input padding characters may have to be added to the encrypted document). If *out* is initialized with the address of an *EncryptBuf* *std::streambuf* then the true end of the input can be indicated by inserting the *eoi* manipulator. The resulting expression becomes *std::cout \<\<* *in.rdbuf() \<\< eoi*, and the manipulator ensures that the correct padding is handled.

## NAMESPACE

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

## INHERITS FROM

*std::streambuf*

## PROTECTED CONSTRUCTOR

- o

  **Eoi()**:\
   Analogously to *std::streambuf* only a default protected constructor is available.

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

## MEMBER FUNCTIONS

All members of *std:streambuf* are available, as **FBB::Eoi** inherits from these classes.

## VIRTUAL MEMBER FUNCTION

- o

  **virtual void eoi\_()**:\
   The virtual member function *eoi\_* is a private member that can be overridden by derived classes. By default it performs no actions.

## MANIPULATOR

- o

  **std::ostream &FBB::eoi(std::ostream &out)**:\
   The *eoi* manipulator can be inserted into the *ostream* using a streambuf which is inherited from *FBB::EoiBuf* to stop further insertions into the *ostream*. If it is inserted into a plain *std::ostream* nothing happens.

-

  *eoi* can also be called as a function, receiving the stream that uses an *FBB::EoiBuf* as its *streambuf*. By default the *eoi* manipulator performs no actions. To use the manipulator in a class derived from *EoiBuf* the following approach can be used:

  ```
      1. define a tt(bool d_eoi) data member, initialized to tt(false);
      2. define a tt(void eoi_() override) member;
      3. tt(eoi_) returns if tt(d_eoi == true), otherwise:
      4. it sets tt(d_eoi) to tt(true) and performs the actions normally
          performed by the class’s destructor;
      5. the class’s destructor calls tt(eoi_()).
  ```

## EXAMPLE

See the example provided in the [*osymcryptstream*(3bobcat)](/osymcryptstream/3bobcat.md) man-page

## FILES

*bobcat/eoi* - defines the class interface

## SEE ALSO

[**bobcat**(7)](/bobcat/7.md), [**eoibuf**(3bobcat)](/eoibuf/3bobcat.md)

## BUGS

None Reported.

## BOBCAT PROJECT FILES

- o

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

Debian Bobcat project files:

- o

  *libbobcat6*: debian package containing the shared library, changelog and copyright note;

- o

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