# FBB::EoiBuf(3bobcat)

## End-Of-Information Base class
(libbobcat-dev_5.07.03)

## 2005-2021

## NAME

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

## SYNOPSIS

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

## DESCRIPTION

The class EoiBuf inherits from Eoi and may therefore be used as a base class of classes specializing std::streambuf. It also provides a configurable character buffer for storing characters received from their devices. Often, when deriving classes from std::streambuf the derived classes must implement storage to and retrieval from a character buffer. By deriving from EoiBuf buffer-handling is automatically provided.

## NAMESPACE

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

## INHERITS FROM

Eoi (and thus from: std::streambuf)

## PROTECTED CONSTRUCTOR

Analogously to std::streambuf only protected constructors are available.

- EoiBuf():
  The default constructor initializes an empty buffer.

- EoiBuf(size_t size):
  This initializes an empty buffer of a predefined size of size characters .

Note that there's no inherent limit to the size of the internal buffer: its size can always be enlarged or reduced.

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

## PROTECTED MEMBER FUNCTIONS

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

- std::string &buffer():
  A reference to the internal buffer is returned;

- size_t bufSize() const:
  The length (size) of the internal buffer is returned;

- void resize(size_t size):
  The size of the internal buffer is changed to size characters;

- void setg(unsigned next, unsigned beyond):
  The streambuf::eback member returns the address of the internal buffer's first character, streambuf::gptr returns the address of the internal buffer's next character, streambuf::egptr returns the the address of the internal buffer's beyond character;

- void setp():
  The streambuf::pbase and pptr members return the address of the internal buffer's first character, streambuf::epptr returns the address immediately beyond the internal buffer's last character;

- unsigned char *ucharPtr():
  The address of the first character of the internal buffer is returned as a pointer to an unsigned character;

- unsigned char const *ucharPtr() const:
  Same as the previous member, but this time the address of the first character of the internal buffer is returned as a pointer to an immutable unsigned character.

## PROTECTED STATIC MEMBER FUNCTIONS

The following two static members are provided as convenient functions for derived classes to convert the address of the first character of std::string objects to pointers to unsigned characters:

- unsigned char *ucharPtr(std::string &str):
  The address of the first character of str is returned as a pointer to an unsigned character;

- unsigned char const *ucharPtr(std::string const &str) const:
  Same as the previous member, but this time the address of the first character of str is returned as a pointer to an immutable unsigned character.

  ## EXAMPLE

  Here is an example from the implementation of EncryptBuf:

      #include "encryptbuf.ih"

      void EncryptBuf::flushBuffer()  // called by overflow when d_buffer is
                                      // full and by end()
      {
          int srcLen = pptr() - pbase();

          int encryptedLen;
          if (
              not EVP_EncryptUpdate(d_ctx,
                                    ucharPtr(d_encrypted), &encryptedLen,
                                    ucharPtr(),  srcLen)
          )
              throw Exception{ 1 } << "Encrypt update failed";

          d_outStream.write(&d_encrypted[0], encryptedLen);

          setp();                     // reset the buffer
      }

  ## FILES

  bobcat/eoibuf - defines the class interface

  ## SEE ALSO

  bobcat(7), eoi(3bobcat)

  ## BUGS

  None Reported.

  ## BOBCAT PROJECT FILES

  - https://fbb-git.gitlab.io/bobcat/: gitlab project page;
  - bobcat_5.07.03-x.dsc: detached signature;
  - bobcat_5.07.03-x.tar.gz: source archive;
  - bobcat_5.07.03-x_i386.changes: change log;
  - libbobcat1_5.07.03-x_*.deb: debian package containing the libraries;
  - libbobcat1-dev_5.07.03-x_*.deb: debian package containing the libraries, headers and manual pages;

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