std:: basic_streambuf
|
Definiert in Header
<streambuf>
|
||
|
template
<
class
CharT,
|
||
Die Klasse
basic_streambuf
steuert die Eingabe und Ausgabe für eine Zeichensequenz. Sie beinhaltet und ermöglicht den Zugriff auf
- Die gesteuerte Zeichensequenz , auch genannt Puffer , welche eine Eingabesequenz (auch genannt Lesebereich ) zur Pufferung von Eingabeoperationen und/oder eine Ausgabesequenz (auch genannt Schreibbereich ) zur Pufferung von Ausgabeoperationen enthalten kann.
- Die assoziierte Zeichensequenz , auch genannt Quelle (für Eingabe) oder Senke (für Ausgabe). Dies kann eine Entität sein, die über eine Betriebssystem-API zugänglich ist (Datei, TCP-Socket, serielle Schnittstelle, anderes Zeichengerät), oder es kann ein Objekt sein ( std::vector , array , string literal ), das als Zeichenquelle oder -senke interpretiert werden kann.
Die I/O-Stream-Objekte
std::basic_istream
und
std::basic_ostream
, sowie alle davon abgeleiteten Objekte (
std::ofstream
,
std::stringstream
, etc.), werden vollständig in Form von
std::basic_streambuf
implementiert.
Die gesteuerte Zeichenfolge ist ein Array von
CharT
, das zu jeder Zeit eine Teilsequenz oder ein "Fenster" in die zugehörige Zeichenfolge darstellt. Ihr Zustand wird durch drei Zeiger beschrieben:
- Der beginning pointer zeigt immer auf das niedrigste Element des Puffers.
- Der next pointer zeigt auf das Element, das der nächste Kandidat zum Lesen oder Schreiben ist.
- Der end pointer zeigt auf die Position direkt nach dem Ende des Puffers.
Ein
basic_streambuf
-Objekt kann Eingabe unterstützen (in diesem Fall wird der durch die Anfangs-, Nächste- und End-Zeiger beschriebene Puffer als
Get-Bereich
bezeichnet), Ausgabe (
Put-Bereich
) oder gleichzeitig Eingabe und Ausgabe. Im letzteren Fall werden sechs Zeiger verfolgt, die alle auf Elemente desselben Zeichenarrays oder zwei separate Arrays zeigen können.
Wenn der nächste Zeiger im Put-Bereich kleiner als der Endzeiger ist, ist eine Schreibposition verfügbar. Der nächste Zeiger kann dereferenziert und zugewiesen werden.
Wenn der nächste Zeiger kleiner als der Endzeiger im Get-Bereich ist, ist eine Leseposition verfügbar. Der nächste Zeiger kann dereferenziert und daraus gelesen werden.
Wenn der nächste Zeiger in einem Lesebereich größer als der Anfangszeiger ist, ist eine Putback-Position verfügbar, und der nächste Zeiger kann dekrementiert, dereferenziert und zugewiesen werden, um ein Zeichen zurück in den Lesebereich zu setzen.
Die Zeichendarstellung und Kodierung in der kontrollierten Sequenz kann sich von den Zeichendarstellungen in der assoziierten Sequenz unterscheiden, in welchem Fall typischerweise ein std::codecvt Locale-Facet verwendet wird, um die Konvertierung durchzuführen. Häufige Beispiele sind UTF-8 (oder andere Multibyte)-Dateien, die über std::wfstream Objekte zugänglich sind: Die kontrollierte Sequenz besteht aus wchar_t Zeichen, aber die assoziierte Sequenz besteht aus Bytes.
Typische Implementierung der
std::basic_streambuf
Basisklasse enthält nur die sechs
CharT*
Zeiger und eine Kopie von
std::locale
als Datenmitglieder. Zusätzlich können Implementierungen zwischengespeicherte Kopien von Locale-Facets halten, die bei jedem Aufruf von
imbue()
ungültig werden. Konkrete Puffer wie
std::basic_filebuf
oder
std::basic_stringbuf
sind von
std::basic_streambuf
abgeleitet.
Es werden mehrere Typdefinitionen für gängige Zeichentypen bereitgestellt:
|
Definiert im Header
<streambuf>
|
|
| Typ | Definition |
std::streambuf
|
std :: basic_streambuf < char > |
std::wstreambuf
|
std :: basic_streambuf < wchar_t > |
Inhaltsverzeichnis |
Mitgliedertypen
| Mitgliedertyp | Definition |
char_type
|
CharT
|
traits_type
|
Traits
; das Programm ist fehlerhaft, wenn
Traits::char_type
nicht
CharT
ist.
|
int_type
|
Traits::int_type
|
pos_type
|
Traits::pos_type
|
off_type
|
Traits::off_type
|
Memberfunktionen
|
[virtual]
|
zerstört das
basic_streambuf
Objekt
(virtuelle öffentliche Mitgliedsfunktion) |
Locales |
|
|
ändert die zugeordnete Locale und ruft
imbue
(
)
(öffentliche Elementfunktion) |
|
|
erhält eine Kopie des assoziierten Locale
(öffentliche Elementfunktion) |
|
Positionierung |
|
|
ruft
setbuf
(
)
(öffentliche Elementfunktion) |
|
|
ruft
seekoff
(
)
(öffentliche Elementfunktion) |
|
|
ruft
seekpos
(
)
(öffentliche Elementfunktion) |
|
|
ruft
sync
(
)
auf
(öffentliche Elementfunktion) |
|
Bereich abrufen |
|
|
ermittelt die Anzahl der sofort verfügbaren Zeichen im Lesebereich
(öffentliche Elementfunktion) |
|
|
bewegt die Eingabesequenz vor und liest dann ein Zeichen ohne erneutes Vorrücken
(öffentliche Elementfunktion) |
|
|
(entfernt in C++17)
|
liest ein Zeichen aus der Eingabesequenz und bewegt die Sequenz vorwärts
(öffentliche Elementfunktion) |
|
liest ein Zeichen aus der Eingabesequenz ohne Fortschreiten der Sequenz
(öffentliche Elementfunktion) |
|
|
ruft
xsgetn
(
)
(öffentliche Elementfunktion) |
|
Put-Bereich |
|
|
schreibt ein Zeichen in den Put-Bereich und erhöht den nächsten Zeiger
(öffentliche Elementfunktion) |
|
|
ruft
xsputn
(
)
(öffentliche Elementfunktion) |
|
Putback |
|
|
setzt ein Zeichen zurück in die Eingabesequenz
(öffentliche Elementfunktion) |
|
|
bewegt den nächsten Zeiger in der Eingabesequenz um eins zurück
(öffentliche Elementfunktion) |
|
Geschützte Memberfunktionen |
|
Konstruiert ein
basic_streambuf
Objekt
(geschützte Elementfunktion) |
|
|
(C++11)
|
ersetzt ein
basic_streambuf
Objekt
(geschützte Elementfunktion) |
|
(C++11)
|
tauscht zwei
basic_streambuf
Objekte aus
(geschützte Elementfunktion) |
Locales |
|
|
[virtual]
|
reagiert auf eine Änderung des assoziierten Locale
(geschützte virtuelle Elementfunktion) |
Positionierung |
|
|
[virtual]
|
ersetzt den Puffer durch ein benutzerdefiniertes Array, falls erlaubt
(virtuelle geschützte Member-Funktion) |
|
[virtual]
|
positioniert den nächsten Zeiger in der Eingabesequenz, Ausgabesequenz oder beiden neu, unter Verwendung relativer Adressierung
(virtuelle geschützte Memberfunktion) |
|
[virtual]
|
positioniert den nächsten Zeiger in der Eingabesequenz, Ausgabesequenz oder beiden mittels absoluter Adressierung neu
(virtuelle geschützte Elementfunktion) |
|
[virtual]
|
synchronisiert die Puffer mit der assoziierten Zeichensequenz
(virtuelle geschützte Elementfunktion) |
Bereich abrufen |
|
|
[virtual]
|
ermittelt die Anzahl der für die Eingabe verfügbaren Zeichen in der zugehörigen Eingabesequenz, falls bekannt
(virtuelle geschützte Memberfunktion) |
|
[virtual]
|
liest Zeichen aus der zugehörigen Eingabesequenz in den Get-Bereich
(virtuelle geschützte Member-Funktion) |
|
[virtual]
|
liest Zeichen aus der zugehörigen Eingabesequenz in den Get-Bereich und bewegt den nächsten Zeiger
(virtuelle geschützte Memberfunktion) |
|
[virtual]
|
liest mehrere Zeichen aus der Eingabesequenz
(virtuelle geschützte Memberfunktion) |
|
gibt einen Zeiger auf den Anfang, das aktuelle Zeichen und das Ende des Lesebereichs zurück
(geschützte Elementfunktion) |
|
|
bewegt den nächsten Zeiger in der Eingabesequenz vor
(geschützte Elementfunktion) |
|
|
positioniert die Anfang-, Nächste- und End-Zeiger der Eingabesequenz neu
(geschützte Elementfunktion) |
|
Put-Bereich |
|
|
[virtual]
|
schreibt mehrere Zeichen in die Ausgabesequenz
(geschützte virtuelle Member-Funktion) |
|
[virtual]
|
schreibt Zeichen in die zugehörige Ausgabesequenz aus dem Put-Bereich
(virtuelle geschützte Memberfunktion) |
|
gibt einen Zeiger auf den Anfang, das aktuelle Zeichen und das Ende des Put-Bereichs zurück
(geschützte Member-Funktion) |
|
|
bewegt den nächsten Zeiger der Ausgabesequenz vorwärts
(geschützte Memberfunktion) |
|
|
positioniert die Anfangs-, Nächste- und End-Zeiger der Ausgabesequenz neu
(geschützte Elementfunktion) |
|
Putback |
|
|
[virtual]
|
setzt ein Zeichen zurück in die Eingabesequenz und modifiziert möglicherweise die Eingabesequenz
(virtuelle geschützte Member-Funktion) |
Siehe auch
|
Objekttyp, der in der Lage ist, alle Informationen zu speichern, die zur Steuerung eines C-I/O-Streams benötigt werden
(typedef) |