Namespaces
Variants

std:: basic_streambuf

From cppreference.net
< cpp ‎ | io
Definiert in Header <streambuf>
template <

class CharT,
class Traits = std:: char_traits < CharT >

> class basic_streambuf ;

Die Klasse basic_streambuf steuert die Eingabe und Ausgabe für eine Zeichensequenz. Sie beinhaltet und ermöglicht den Zugriff auf

  1. 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.
  2. 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:

  1. Der beginning pointer zeigt immer auf das niedrigste Element des Puffers.
  2. Der next pointer zeigt auf das Element, das der nächste Kandidat zum Lesen oder Schreiben ist.
  3. 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.

std-streambuf.svg

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)