Namespaces
Variants

std:: basic_streambuf

From cppreference.net
< cpp ‎ | io
Défini dans l'en-tête <streambuf>
template <

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

> class basic_streambuf ;

La classe basic_streambuf contrôle l'entrée et la sortie vers une séquence de caractères. Elle inclut et fournit l'accès à

  1. La séquence de caractères contrôlée , aussi appelée tampon , qui peut contenir une séquence d'entrée (également appelée zone de lecture ) pour la mise en mémoire tampon des opérations d'entrée et/ou une séquence de sortie (également appelée zone d'écriture ) pour la mise en mémoire tampon des opérations de sortie.
  2. La séquence de caractères associée , aussi appelée source (pour l'entrée) ou destination (pour la sortie). Cela peut être une entité accessible via une API système (fichier, socket TCP, port série, autre périphérique de caractères), ou cela peut être un objet ( std::vector , array , string literal ), qui peut être interprété comme une source ou une destination de caractères.

Les objets de flux d'E/S std::basic_istream et std::basic_ostream , ainsi que tous les objets qui en dérivent ( std::ofstream , std::stringstream , etc.), sont entièrement implémentés en termes de std::basic_streambuf .

La séquence de caractères contrôlée est un tableau de CharT qui, à tout moment, représente une sous-séquence, ou une "fenêtre" dans la séquence de caractères associée. Son état est décrit par trois pointeurs :

  1. Le pointeur de début pointe toujours sur l'élément le plus bas du tampon.
  2. Le pointeur suivant pointe sur l'élément qui est le prochain candidat pour la lecture ou l'écriture.
  3. Le pointeur de fin pointe juste après la fin du tampon.

Un objet basic_streambuf peut prendre en charge l'entrée (auquel cas le tampon décrit par les pointeurs de début, suivant et de fin est appelé zone de lecture ), la sortie ( zone d'écriture ), ou simultanément l'entrée et la sortie. Dans ce dernier cas, six pointeurs sont suivis, qui peuvent tous pointer vers des éléments du même tableau de caractères ou vers deux tableaux individuels.

Si le pointeur suivant est inférieur au pointeur de fin dans la zone de mise, une position d'écriture est disponible. Le pointeur suivant peut être déréférencé et assigné.

Si le pointeur suivant est inférieur au pointeur de fin dans la zone de récupération, une position de lecture est disponible. Le pointeur suivant peut être déréférencé et lu.

Si le pointeur suivant est supérieur au pointeur de début dans une zone de lecture, une position de remise est disponible, et le pointeur suivant peut être décrémenté, déréférencé et assigné, afin de remettre un caractère dans la zone de lecture.

La représentation des caractères et l'encodage dans la séquence contrôlée peuvent différer des représentations des caractères dans la séquence associée, auquel cas un std::codecvt facet de locale est typiquement utilisé pour effectuer la conversion. Des exemples courants sont les fichiers UTF-8 (ou autres multioctets) accédés via des std::wfstream objets : la séquence contrôlée est constituée de caractères wchar_t , mais la séquence associée est constituée d'octets.

L'implémentation typique de la classe de base std::basic_streambuf ne contient que les six pointeurs CharT* et une copie de std::locale comme membres de données. De plus, les implémentations peuvent conserver des copies mises en cache des facettes de locale, qui sont invalidées chaque fois que imbue() est appelé. Les tampons concrets tels que std::basic_filebuf ou std::basic_stringbuf sont dérivés de std::basic_streambuf .

std-streambuf.svg

Plusieurs typedefs pour les types de caractères courants sont fournis :

Défini dans l'en-tête <streambuf>
Type Définition
std::streambuf std :: basic_streambuf < char >
std::wstreambuf std :: basic_streambuf < wchar_t >

Table des matières

Types membres

Type de membre Définition
char_type CharT
traits_type Traits ; le programme est mal formé si Traits::char_type n'est pas CharT .
int_type Traits::int_type
pos_type Traits::pos_type
off_type Traits::off_type

Fonctions membres

[virtuel]
détruit l'objet basic_streambuf
(fonction membre publique virtuelle)
Locales
modifie la locale associée et invoque imbue ( )
(fonction membre publique)
obtient une copie des paramètres régionaux associés
(fonction membre publique)
Positionnement
appelle setbuf ( )
(fonction membre publique)
appelle seekoff ( )
(fonction membre publique)
appelle seekpos ( )
(fonction membre publique)
appelle sync ( )
(fonction membre publique)
Obtenir la surface
obtient le nombre de caractères immédiatement disponibles dans la zone de lecture
(fonction membre publique)
avance la séquence d'entrée, puis lit un caractère sans avancer à nouveau
(fonction membre publique)
(supprimé en C++17)
lit un caractère de la séquence d'entrée et avance la séquence
(fonction membre publique)
lit un caractère de la séquence d'entrée sans avancer la séquence
(fonction membre publique)
appelle xsgetn ( )
(fonction membre publique)
Zone de mise
écrit un caractère dans la zone de sortie et avance le pointeur suivant
(fonction membre publique)
appelle xsputn ( )
(fonction membre publique)
Putback
replace un caractère dans la séquence d'entrée
(fonction membre publique)
décale le pointeur suivant dans la séquence d'entrée d'une position vers l'arrière
(fonction membre publique)

Fonctions membres protégées

construit un objet basic_streambuf
(fonction membre protégée)
(C++11)
remplace un objet basic_streambuf
(fonction membre protégée)
(C++11)
échange deux objets basic_streambuf
(fonction membre protégée)
Locales
[virtual]
réagit à un changement de la locale associée
(fonction membre virtuelle protégée)
Positionnement
[virtual]
remplace le tampon par un tableau défini par l'utilisateur, si permis
(fonction membre protégée virtuelle)
[virtual]
repositionne le pointeur suivant dans la séquence d'entrée, la séquence de sortie, ou les deux, en utilisant l'adressage relatif
(fonction membre protégée virtuelle)
[virtual]
repositionne le pointeur suivant dans la séquence d'entrée, la séquence de sortie, ou les deux en utilisant l'adressage absolu
(fonction membre protégée virtuelle)
[virtual]
synchronise les tampons avec la séquence de caractères associée
(fonction membre protégée virtuelle)
Obtenir la surface
[virtual]
obtient le nombre de caractères disponibles en entrée dans la séquence d'entrée associée, si connu
(fonction membre protégée virtuelle)
[virtual]
lit les caractères de la séquence d'entrée associée vers la zone de récupération
(fonction membre protégée virtuelle)
[virtual]
lit les caractères de la séquence d'entrée associée vers la zone de récupération et avance le pointeur suivant
(fonction membre protégée virtuelle)
[virtual]
lit plusieurs caractères de la séquence d'entrée
(fonction membre protégée virtuelle)
renvoie un pointeur vers le début, le caractère courant et la fin de la zone de lecture
(fonction membre protégée)
avance le pointeur suivant dans la séquence d'entrée
(fonction membre protégée)
repositionne les pointeurs de début, suivant et fin de la séquence d'entrée
(fonction membre protégée)
Zone de mise
[virtual]
écrit plusieurs caractères dans la séquence de sortie
(fonction membre protégée virtuelle)
[virtual]
écrit des caractères dans la séquence de sortie associée depuis la zone de mise
(fonction membre protégée virtuelle)
renvoie un pointeur vers le début, le caractère courant et la fin de la zone d'écriture
(fonction membre protégée)
avance le pointeur suivant de la séquence de sortie
(fonction membre protégée)
repositionne les pointeurs de début, suivant et de fin de la séquence de sortie
(fonction membre protégée)
Putback
[virtual]
place un caractère dans la séquence d'entrée, en modifiant potentiellement la séquence d'entrée
(fonction membre protégée virtuelle)

Voir aussi

type d'objet, capable de contenir toutes les informations nécessaires pour contrôler un flux d'E/S en C
(typedef)