std::basic_streambuf<CharT,Traits>:: underflow
|
protected
:
virtual int_type underflow ( ) ; |
||
Garantit qu'au moins un caractère est disponible dans la zone d'entrée en mettant à jour les pointeurs vers la zone d'entrée (si nécessaire) et en lisant plus de données depuis la séquence d'entrée (le cas échéant). Retourne la valeur de ce caractère (convertie en
int_type
avec
Traits
::
to_int_type
(
c
)
) en cas de succès ou
Traits
::
eof
(
)
en cas d'échec.
La fonction peut mettre à jour
gptr
,
egptr
et
eback
pour définir l'emplacement des nouvelles données chargées (le cas échéant). En cas d'échec, la fonction garantit que soit
gptr
(
)
==
nullptr
soit
gptr
(
)
==
egptr
.
La version de la fonction de la classe de base ne fait rien. Les classes dérivées peuvent redéfinir cette fonction pour permettre des mises à jour de la zone d'acquisition en cas d'épuisement.
Table des matières |
Paramètres
(aucun)
Valeur de retour
La valeur du caractère pointé par le pointeur de lecture après l'appel en cas de succès, ou Traits :: eof ( ) sinon.
La version de la fonction de la classe de base retourne traits :: eof ( ) .
Remarque
Les fonctions publiques de std::streambuf appellent cette fonction uniquement si gptr ( ) == nullptr ou gptr ( ) >= egptr ( ) .
Exemple
#include <iostream> #include <sstream> class null_filter_buf : public std::streambuf { std::streambuf* src; char ch; // single-byte buffer protected: int underflow() { traits_type::int_type i; while ((i = src->sbumpc()) == '\0') ; // skip zeroes if (!traits_type::eq_int_type(i, traits_type::eof())) { ch = traits_type::to_char_type(i); setg(&ch, &ch, &ch+1); // make one read position available } return i; } public: null_filter_buf(std::streambuf* buf) : src(buf) { setg(&ch, &ch + 1, &ch + 1); // buffer is initially full } }; void filtered_read(std::istream& in) { std::streambuf* orig = in.rdbuf(); null_filter_buf buf(orig); in.rdbuf(&buf); for (char c; in.get(c);) std::cout << c; in.rdbuf(orig); } int main() { char a[] = "This i\0s \0an e\0\0\0xample"; std::istringstream in(std::string(std::begin(a), std::end(a))); filtered_read(in); }
Sortie :
This is an example
Voir aussi
|
[virtual]
|
lit les caractères de la séquence d'entrée associée vers la zone de lecture et avance le pointeur suivant
(fonction membre protégée virtuelle) |
|
[virtual]
|
écrit les caractères vers la séquence de sortie associée depuis la zone d'écriture
(fonction membre protégée virtuelle) |
|
[virtual]
|
lit depuis le fichier associé
(fonction membre protégée virtuelle de
std::basic_filebuf<CharT,Traits>
)
|
|
[virtual]
|
retourne le prochain caractère disponible dans la séquence d'entrée
(fonction membre protégée virtuelle de
std::basic_stringbuf<CharT,Traits,Allocator>
)
|
|
[virtual]
|
lit un caractère de la séquence d'entrée sans avancer le pointeur suivant
(fonction membre protégée virtuelle de
std::strstreambuf
)
|