std::basic_streambuf
| Definiert in Header <streambuf> |
||
| template< class CharT, |
||
Die Klasse basic_streambuf steuert die Eingabe und Ausgabe einer Zeichensequenz. Sie enthält und stellt Zugriff auf
- Die gesteuerte Zeichensequenz, auch als Puffer bezeichnet, welche eine Eingabesequenz (auch als Get-Bereich bezeichnet) zur Pufferung von Eingabeoperationen und/oder eine Ausgabesequenz (auch als Put-Bereich bezeichnet) zur Pufferung von Ausgabeoperationen enthalten kann.
- Die assoziierte Zeichensequenz, auch als Quelle (für Eingabe) oder Senke (für Ausgabe) bezeichnet. Dies kann eine Entität sein, auf die über eine Betriebssystem-API (Datei, TCP-Socket, serielle Schnittstelle, anderes Zeichengerät) zugegriffen wird, 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 von ihnen abgeleiteten Objekte (std::ofstream, std::stringstream usw.) werden vollständig auf Basis von std::basic_streambuf implementiert.
Die gesteuerte Zeichensequenz ist ein Array von CharT, das jederzeit eine Teilsequenz oder ein "Fenster" in die assoziierte Zeichensequenz darstellt. Sein Zustand wird durch drei Zeiger beschrieben
- Der Anfangszeiger zeigt immer auf das unterste Element des Puffers.
- Der Nächstzeiger zeigt auf das Element, das der nächste Kandidat für Lesen oder Schreiben ist.
- Der Endzeiger zeigt auf eine Position hinter dem Ende des Puffers.
Ein basic_streambuf-Objekt kann Eingabe (in diesem Fall wird der durch die Anfangs-, Nächste- und Endzeiger beschriebene Puffer als Get-Bereich bezeichnet), Ausgabe (Put-Bereich) oder gleichzeitig Eingabe und Ausgabe unterstützen. In letzterem Fall werden sechs Zeiger verwaltet, die alle auf Elemente desselben Zeichenarrays oder auf zwei einzelne 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 im Get-Bereich kleiner als der Endzeiger ist, ist eine Leseposition verfügbar. Der Nächste-Zeiger kann dereferenziert und gelesen werden.
Wenn der Nächste-Zeiger in einem Get-Bereich 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 in den Get-Bereich zurückzulegen.
Die Zeichenrepräsentation und Kodierung in der gesteuerten Sequenz kann sich von den Zeichenrepräsentationen in der assoziierten Sequenz unterscheiden. In diesem Fall wird typischerweise eine std::codecvt Locale Facette verwendet, um die Konvertierung durchzuführen. Gängige Beispiele sind UTF-8-Dateien (oder andere Multibyte-Dateien), auf die über std::wfstream-Objekte zugegriffen wird: Die gesteuerte Sequenz besteht aus wchar_t-Zeichen, aber die assoziierte Sequenz besteht aus Bytes.
Die typische Implementierung der Basisklasse std::basic_streambuf enthält nur die sechs CharT*-Zeiger und eine Kopie von std::locale als Datenmember. Zusätzlich können Implementierungen zwischengespeicherte Kopien von Locale Facetten enthalten, die ungültig werden, wenn imbue() aufgerufen wird. Die konkreten Puffer wie std::basic_filebuf oder std::basic_stringbuf leiten sich von std::basic_streambuf ab.
Mehrere Typedefs für gängige Zeichentypen werden bereitgestellt
| Definiert in Header
<streambuf> | |
| Typ | Definition |
std::streambuf
|
std::basic_streambuf<char> |
std::wstreambuf
|
std::basic_streambuf<wchar_t> |
Inhalt |
[bearbeiten] Member-Typen
| 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 |
[bearbeiten] Memberfunktionen
| [virtuell] |
zerstört das basic_streambuf-Objekt(virtuelle öffentliche Memberfunktion) |
Lokale | |
| ändert die zugeordnete Locale und ruft imbue() auf (öffentliche Memberfunktion) | |
| holt eine Kopie der zugeordneten Locale (öffentliche Memberfunktion) | |
Positionierung | |
| ruft setbuf() auf (öffentliche Memberfunktion) | |
| ruft seekoff() auf (öffentliche Memberfunktion) | |
| ruft seekpos() auf (öffentliche Memberfunktion) | |
| ruft sync() auf (öffentliche Memberfunktion) | |
Get-Bereich | |
| holt die Anzahl der im Get-Bereich sofort verfügbaren Zeichen (öffentliche Memberfunktion) | |
| bewegt die Eingabesequenz vorwärts und liest dann ein Zeichen, ohne erneut vorzurücken (öffentliche Memberfunktion) | |
| (in C++17 entfernt) |
liest ein Zeichen aus der Eingabesequenz und rückt die Sequenz vor (öffentliche Memberfunktion) |
| liest ein Zeichen aus der Eingabesequenz, ohne die Sequenz vorzurücken (öffentliche Memberfunktion) | |
| ruft xsgetn() auf (öffentliche Memberfunktion) | |
Put-Bereich | |
| schreibt ein Zeichen in den Put-Bereich und rückt den nächsten Zeiger vor (öffentliche Memberfunktion) | |
| ruft xsputn() auf (öffentliche Memberfunktion) | |
Putback | |
| legt ein Zeichen zurück in die Eingabesequenz (öffentliche Memberfunktion) | |
| verschiebt den nächsten Zeiger in der Eingabesequenz um eins zurück (öffentliche Memberfunktion) | |
Geschützte Memberfunktionen | |
konstruiert ein basic_streambuf-Objekt(geschützte Member-Funktion) | |
| (C++11) |
ersetzt ein basic_streambuf-Objekt(geschützte Member-Funktion) |
| (C++11) |
tauscht zwei basic_streambuf-Objekte(geschützte Member-Funktion) |
Lokale | |
| [virtuell] |
reagiert auf eine Änderung der zugeordneten Locale (virtuelle geschützte Memberfunktion) |
Positionierung | |
| [virtuell] |
ersetzt den Puffer durch ein benutzerdefiniertes Array, falls zulässig (virtuelle geschützte Memberfunktion) |
| [virtuell] |
positioniert den nächsten Zeiger in der Eingabesequenz, Ausgabesequenz oder beidem neu, unter Verwendung relativer Adressierung (virtuelle geschützte Memberfunktion) |
| [virtuell] |
positioniert den nächsten Zeiger in der Eingabesequenz, Ausgabesequenz oder beidem neu, unter Verwendung absoluter Adressierung (virtuelle geschützte Memberfunktion) |
| [virtuell] |
synchronisiert die Puffer mit der zugeordneten Zeichensequenz (virtuelle geschützte Memberfunktion) |
Get-Bereich | |
| [virtuell] |
holt die Anzahl der für die Eingabe in der zugeordneten Eingabesequenz verfügbaren Zeichen, falls bekannt (virtuelle geschützte Memberfunktion) |
| [virtuell] |
liest Zeichen aus der zugeordneten Eingabesequenz in den Get-Bereich (virtuelle geschützte Memberfunktion) |
| [virtuell] |
liest Zeichen aus der zugeordneten Eingabesequenz in den Get-Bereich und rückt den nächsten Zeiger vor (virtuelle geschützte Memberfunktion) |
| [virtuell] |
liest mehrere Zeichen aus der Eingabesequenz (virtuelle geschützte Memberfunktion) |
| gibt einen Zeiger auf den Anfang, das aktuelle Zeichen und das Ende des Get-Bereichs zurück (geschützte Member-Funktion) | |
| rückt den nächsten Zeiger in der Eingabesequenz vor (geschützte Member-Funktion) | |
| positioniert die Zeiger für Anfang, nächsten und Ende der Eingabesequenz neu (geschützte Member-Funktion) | |
Put-Bereich | |
| [virtuell] |
schreibt mehrere Zeichen in die Ausgabesequenz (virtuelle geschützte Memberfunktion) |
| [virtuell] |
schreibt Zeichen aus dem Put-Bereich in die zugeordnete Ausgabesequenz (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) | |
| rückt den nächsten Zeiger der Ausgabesequenz vor (geschützte Member-Funktion) | |
| positioniert die Zeiger für Anfang, nächsten und Ende der Ausgabesequenz neu (geschützte Member-Funktion) | |
Putback | |
| [virtuell] |
legt ein Zeichen in die Eingabesequenz zurück, möglicherweise unter Änderung der Eingabesequenz (virtuelle geschützte Memberfunktion) |
[bearbeiten] Siehe auch
| Objekttyp, der alle für die Steuerung eines C-I/O-Streams benötigten Informationen speichern kann (typedef) |