class
<streambuf> <iostream>
std::streambuf
typedef basic_streambuf<char> streambuf;
Base buffer class for streams
This template is designed as base virtual class for all stream buffer classes that handle narrow characters (of type char
).
It is an instantiation of basic_streambuf with the following template parameters:
template parameter | definition | comments |
charT | char | Aliased as member char_type |
traits | char_traits<char> | Aliased as member traits_type |
A stream buffer is an object in charge of performing the reading and writing operations of the stream object it is associated with: the stream delegates all such operations to its associated stream buffer object, which is an intermediary between the stream and its controlled input and output sequences.
All stream objects, no matter whether buffered or unbuffered, have an associated stream buffer: Some stream buffer types may then be set to either use an intermediate buffer or not.
Stream buffer objects keep internally, at least:
- A locale object, used for locale-dependent operations.
- A set of internal pointers to keep an input buffer: eback, gptr, egptr.
- A set of internal pointers to keep an output buffer: pbase, pptr, epptr.
Internally, the streambuf class is an elaborated base class designed to provide a uniform public interface for all derived classes: These public functions call virtual protected members that derived classes may override to implement specific behavior. These overridden virtual functions have access to the internals of the streambuf class by means of a set of protected functions (see below).
Public member functions
The common functionality for all stream buffers is provided through the following public member functions:
- (constructor)
- Construct object (public member function)
- (destructor)
- Destroy object (public member function)
Locales:
- pubimbue
- Imbue locale (public member function)
- getloc
- Get current locale (public member function)
Buffer management and positioning:
- pubsetbuf
- Set buffer array (public member function)
- pubseekoff
- Set internal position pointer to relative position (public member function)
- pubseekpos
- Set internal position pointer to absolute position (public member function)
- pubsync
- Synchronize stream buffer (public member function)
Input functions (get):
- in_avail
- Get number of characters available to read (public member function)
- snextc
- Advance to next position and get character (public member function)
- sbumpc
- Get current character and advance to next position (public member function)
- sgetc
- Get current character (public member function)
- sgetn
- Get sequence of characters (public member function)
- sputbackc
- Put character back (public member function)
- sungetc
- Decrease current position (public member function)
Output functions (put):
- sputc
- Store character at current put position and increase put pointer (public member function)
- sputn
- Put sequence of characters (public member function)
Protected member functions
The public functions do not perform their operations directly on the controlled input and output sequences, but mostly rely on two arrays accessible by a set of internal pointers:
| beginning
(beginning pointers) | current position
(get/put pointer) | end
(end pointers) |
Input sequence | eback | gptr | egptr |
Output sequence | pbase | pptr | epptr |
The following protected member functions provide access to these pointers:
Input sequence (get):
- eback
- Pointer to beginning of input sequence (protected member function)
- gptr
- Pointer to current position of input sequence (protected member function)
- egptr
- Pointer to end of input sequence (protected member function)
- gbump
- Increase get pointer (protected member function)
- setg
- Set input sequence pointers (protected member function)
Output sequence (put):
- pbase
- Pointer to beginning of output sequence (protected member function)
- pptr
- Pointer to current position of output sequence (protected member function)
- epptr
- Pointer to end of output sequence (protected member function)
- pbump
- Increase put pointer (protected member function)
- setp
- Set output sequence pointers (protected member function)
Copying:
- operator=
- Streambuf assignment (public member function)
- swap
- Swap stream buffers (public member function)
Virtual protected member functions
Each streambuf-derived class shall define members that keep the validity of the pointers above with respect to their own type of controlled sequence; Modifying the values of the pointers, reallocating the sequences themselves and perfoming all necessary synchronizations with the associated character sequence.
With this design, the core functionality involving the process of reading and writing directly to the specific associated character sequence and to manage the controlled sequences is provided by means of virtual functions, which are overriden as necessary by derived classes:
Locales:
- imbue
- Imbue locale (protected virtual member function)
Buffer management and positioning:
- setbuf
- Set buffer (protected virtual member function)
- seekoff
- Set internal position pointer to relative position (protected virtual member function)
- seekpos
- Set internal position pointer to absolute position (protected virtual member function)
- sync
- Synchronize stream buffer (protected virtual member function)
Input functions (get):
- showmanyc
- Get number of characters available (protected virtual member function)
- xsgetn
- Get sequence of characters (protected virtual member function)
- underflow
- Get character on underflow (protected virtual member function)
- uflow
- Get character on underflow and advance position (protected virtual member function)
- pbackfail
- Put character back in the case of backup underflow (protected virtual member function)
Output functions (put):
- xsputn
- Put sequence of characters (protected virtual member function)
- overflow
- Put character on overflow (protected virtual member function)