Namespaces
Variants

std::strstreambuf:: overflow

From cppreference.net
protected :
virtual int_type overflow ( int_type c = EOF ) ;
(obsoleto en C++98)
(eliminado en C++26)

Añade el carácter c al área de escritura del búfer, reasignando si es posible.

1) Si c == EOF , no hace nada.
2) De lo contrario, si el área de escritura tiene una posición disponible ( pptr ( ) < epptr ( ) ), almacena el carácter como si fuera mediante * pptr ( ) ++ = c .
3) De lo contrario, si el modo del búfer de flujo no es dinámico o el búfer de flujo está actualmente congelado, la función falla y retorna EOF .
4) De lo contrario, la función reasigna (o asigna inicialmente) un arreglo dinámico lo suficientemente grande para contener los contenidos del arreglo dinámico actual (si existe) más al menos una posición de escritura adicional. Si se utilizó un puntero a la función de asignación palloc en el constructor, esa función se llama con ( * palloc ) ( n ) donde n es el número de bytes a asignar, de lo contrario se utiliza new char [ n ] . Si se utilizó un puntero a la función de desasignación pfree en el constructor, esa función se llama con ( * pfree ) ( p ) para desasignar el arreglo anterior, si es necesario, de lo contrario se utiliza delete [ ] p . Si la asignación falla, la función falla y retorna EOF .

Contenidos

Parámetros

c - el carácter a almacenar en el área de put

Valor de retorno

Si c == EOF , retorna algún valor diferente de EOF . De lo contrario, retorna ( unsigned char ) ( c ) en caso de éxito, EOF en caso de fallo.

Ejemplo

#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; // read-write dynamic strstreambuf
    std::iostream stream(&sbuf);
    stream << "Sufficiently long string to overflow the initial allocation, at least "
           << " on some systems.";
}

Salida posible:

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

Véase también

[virtual]
escribe caracteres a la secuencia de salida asociada desde el área de escritura
(función miembro protegida virtual de std::basic_streambuf<CharT,Traits> )
[virtual]
añade un carácter a la secuencia de salida
(función miembro protegida virtual de std::basic_stringbuf<CharT,Traits,Allocator> )
[virtual]
escribe caracteres al archivo asociado desde el área de escritura
(función miembro protegida virtual de std::basic_filebuf<CharT,Traits> )
escribe un carácter al área de escritura y avanza el siguiente puntero
(función miembro pública de std::basic_streambuf<CharT,Traits> )
inserta un carácter
(función miembro pública de std::basic_ostream<CharT,Traits> )