Namespaces
Variants

std::strstreambuf:: overflow

From cppreference.net
protected :
virtual int_type overflow ( int_type c = EOF ) ;
(obsolète en C++98)
(supprimé en C++26)

Ajoute le caractère c à la zone de sortie du tampon, en réallouant si possible.

1) Si c == EOF , ne fait rien.
2) Sinon, si la zone de sortie a une position d'écriture disponible ( pptr ( ) < epptr ( ) ), stocke le caractère comme par * pptr ( ) ++ = c .
3) Sinon, si le mode du tampon de flux n'est pas dynamique ou si le tampon de flux est actuellement gelé, la fonction échoue et retourne EOF .
4) Sinon, la fonction réalloue (ou alloue initialement) un tableau dynamique suffisamment grand pour contenir les éléments du tableau dynamique actuel (s'il existe) plus au moins une position d'écriture supplémentaire. Si un pointeur vers la fonction d'allocation palloc a été utilisé dans le constructeur, cette fonction est appelée avec ( * palloc ) ( n ) n est le nombre d'octets à allouer, sinon new char [ n ] est utilisé. Si un pointeur vers la fonction de désallocation pfree a été utilisé dans le constructeur, cette fonction est appelée avec ( * pfree ) ( p ) pour désallouer le tableau précédent, si nécessaire, sinon delete [ ] p est utilisé. Si l'allocation échoue, la fonction échoue et retourne EOF .

Table des matières

Paramètres

c - le caractère à stocker dans la zone de mise

Valeur de retour

Si c == EOF , retourne une valeur différente de EOF . Sinon, retourne ( unsigned char ) ( c ) en cas de succès, EOF en cas d'échec.

Exemple

#include <iostream>
#include <strstream>
struct mybuf : std::strstreambuf
{
    int_type overflow(int_type c) 
    {
        std::cout << "Before overflow(): size of the put area is " << epptr()-pbase()
                  << " with " << epptr()-pptr() << " write positions available\n";
        int_type rc = std::strstreambuf::overflow(c);
        std::cout << "After overflow(): size of the put area is " << epptr()-pbase()
                  << " with " << epptr()-pptr() << " write positions available\n";
        return rc;
    }
};
int main()
{
    mybuf sbuf; // strstreambuf dynamique en lecture-écriture
    std::iostream stream(&sbuf);
    stream << "Sufficiently long string to overflow the initial allocation, at least "
           << " on some systems.";
}

Sortie possible :

Before overflow(): size of the put area is 16 with 0 write positions available
After overflow(): size of the put area is 32 with 15 write positions available
Before overflow(): size of the put area is 32 with 0 write positions available
After overflow(): size of the put area is 64 with 31 write positions available
Before overflow(): size of the put area is 64 with 0 write positions available
After overflow(): size of the put area is 128 with 63 write positions available

Voir aussi

[virtual]
écrit des caractères dans la séquence de sortie associée depuis la zone de mise
(fonction membre protégée virtuelle de std::basic_streambuf<CharT,Traits> )
[virtual]
ajoute un caractère à la séquence de sortie
(fonction membre protégée virtuelle de std::basic_stringbuf<CharT,Traits,Allocator> )
[virtual]
écrit des caractères dans le fichier associé depuis la zone de mise
(fonction membre protégée virtuelle de std::basic_filebuf<CharT,Traits> )
écrit un caractère dans la zone de mise et avance le pointeur suivant
(fonction membre publique de std::basic_streambuf<CharT,Traits> )
insère un caractère
(fonction membre publique de std::basic_ostream<CharT,Traits> )