Compartir vía


basic_stringbuf (Clase)

Describe un búfer de secuencia que controla la transmisión bidireccional entre elementos de tipo Elem —cuyos rasgos de caracteres están determinados por la clase Tr— y una secuencia de elementos almacenados en un objeto Array.

Sintaxis

template <class Elem, class Tr = char_traits<Elem>,
    class Alloc = allocator<Elem>>
class basic_stringbuf : public basic_streambuf<Elem, Tr>

Parámetros

Alloc
Clase de asignador.

Elem
Tipo de elemento básico de la cadena.

Tr
Rasgos de caracteres especializados en el elemento básico de la cadena.

Comentarios

El objeto está asignado, extendido y liberado según sea necesario para dar cabida a los cambios en la secuencia.

Un objeto de clase basic_stringbuf<Elem, Tr, Alloc> almacena una copia del argumento ios_base::openmode de su constructor como su modo stringbuf mode:

  • Si mode & ios_base::in es distinto de cero, el búfer de entrada es accesible. Para obtener más información, vea basic_streambuf (Clase).

  • Si mode & ios_base::out es distinto de cero, el búfer de salida es accesible.

Constructores

Constructor Descripción
basic_stringbuf Construye un objeto de tipo basic_stringbuf.

Typedefs

Nombre de tipo Descripción
allocator_type El tipo es un sinónimo del parámetro de plantilla Alloc.
char_type Asocia un nombre de tipo al parámetro de plantilla Elem.
int_type Hace que este tipo en el ámbito de basic_filebuf equivalga al tipo con el mismo nombre del ámbito Tr.
off_type Hace que este tipo en el ámbito de basic_filebuf equivalga al tipo con el mismo nombre del ámbito Tr.
pos_type Hace que este tipo en el ámbito de basic_filebuf equivalga al tipo con el mismo nombre del ámbito Tr.
traits_type Asocia un nombre de tipo al parámetro de plantilla Tr.

Funciones miembro

Función de miembro Descripción
overflow Función virtual protegida a la que se puede llamar cuando se inserta un carácter nuevo en un búfer lleno.
pbackfail La función miembro virtual protegida trata de colocar un elemento en el búfer de entrada y, después, convertirlo en el elemento actual (indicado por el siguiente puntero).
seekoff La función miembro virtual protegida trata de modificar las posiciones actuales de las secuencias controladas.
seekpos La función miembro virtual protegida trata de modificar las posiciones actuales de las secuencias controladas.
str Establece u obtiene el texto en un búfer de cadena sin cambiar la posición de escritura.
swap
underflow Función miembro virtual protegida que extrae el elemento actual de la secuencia de entrada.

Requisitos

Encabezado:<sstream>

Espacio de nombres: std

basic_stringbuf::allocator_type

El tipo es un sinónimo del parámetro de plantilla Alloc.

typedef Alloc allocator_type;

basic_stringbuf::basic_stringbuf

Construye un objeto de tipo basic_stringbuf.

basic_stringbuf(
    ios_base::openmode _Mode = ios_base::in | ios_base::out);

basic_stringbuf(
    const basic_string<Elem, Tr, Alloc>& str,
    ios_base::openmode _Mode = ios_base::in | ios_base::out);

Parámetros

_Mode
Una de las enumeraciones de ios_base::openmode.

str
Un objeto de tipo basic_string.

Comentarios

El primer constructor almacena un puntero nulo en todos los punteros que controlan el búfer de entrada y el de salida. Para obtener más información, vea la sección Comentarios del tema basic_streambuf (Clase). También almacena _Mode como el modo stringbuf. Para obtener más información, vea la sección Comentarios del tema basic_stringbuf (Clase).

El segundo constructor asigna una copia de la secuencia controlada por el objeto de cadena str. Si _Mode & ios_base::in es distinto de cero, establece el búfer de entrada para que comience a leer al inicio de la secuencia. Si _Mode & ios_base::out es distinto de cero, establece el búfer de salida para que comience a escribir al inicio de la secuencia. También almacena _Mode como el modo stringbuf. Para obtener más información, vea la sección Comentarios del tema basic_stringbuf (Clase).

basic_stringbuf::char_type

Asocia un nombre de tipo al parámetro de plantilla Elem.

typedef Elem char_type;

basic_stringbuf::int_type

Hace que este tipo en el ámbito de basic_filebuf equivalga al tipo con el mismo nombre del ámbito Tr.

typedef typename traits_type::int_type int_type;

basic_stringbuf::off_type

Hace que este tipo en el ámbito de basic_filebuf equivalga al tipo con el mismo nombre del ámbito Tr.

typedef typename traits_type::off_type off_type;

basic_stringbuf::overflow

Función virtual protegida a la que se puede llamar cuando se inserta un carácter nuevo en un búfer lleno.

virtual int_type overflow(int_type _Meta = traits_type::eof());

Parámetros

_Meta
El carácter que se va a insertar en el búfer o traits_type::eof.

Valor devuelto

Si la función no se puede ejecutar correctamente, devuelve traits_type::eof. De lo contrario, devuelve traits_type::not_eof(_ Meta).

Comentarios

Si _Meta no es igual a traits_type::eof, la función miembro virtual protegida intenta insertar el elemento traits_type::to_char_type(_Meta) en el búfer de salida. Puede hacerlo de varias maneras:

  • Si está disponible una posición de escritura, puede almacenar el elemento en la posición de escritura e incrementar el puntero siguiente para el búfer de salida.

  • Puede proporcionar una posición de escritura al asignar almacenamiento nuevo o adicional para el búfer de salida. Extender el búfer de salida de esta forma también extiende cualquier búfer de entrada asociado.

basic_stringbuf::p backfail

La función miembro virtual protegida intenta devolver un elemento al búfer de entrada y, después, convertirlo en el elemento actual (indicado por el siguiente puntero).

virtual int_type pbackfail(int_type _Meta = traits_type::eof());

Parámetros

_Meta
El carácter que se va a insertar en el búfer o traits_type::eof.

Valor devuelto

Si la función no se puede ejecutar correctamente, devuelve traits_type::eof. De lo contrario, devuelve traits_type::not_eof(_ Meta).

Comentarios

Si _Meta es igual a traits_type::eof, el elemento que se va a devolver es realmente el que ya está en el flujo por delante del elemento actual. De lo contrario, ese elemento se sustituye por bytes = traits_type::to_char_type(_ Meta). La función puede devolver un elemento de distintas maneras:

  • Si está disponible una posición de devolución y el elemento almacenado es igual a byte, puede disminuir el puntero siguiente para el búfer de entrada.

  • Si está disponible una posición de devolución y si el modo de stringbuf permite que la secuencia se modifique (mode & ios_base::out es distinto de cero), puede almacenar byte en la posición de devolución y disminuir el puntero siguiente para el búfer de entrada.

basic_stringbuf::p os_type

Hace que este tipo en el ámbito de basic_filebuf equivalga al tipo con el mismo nombre del ámbito Tr.

typedef typename traits_type::pos_type pos_type;

basic_stringbuf::seekoff

La función miembro virtual protegida trata de modificar las posiciones actuales de las secuencias controladas.

virtual pos_type seekoff(
    off_type _Off,
    ios_base::seekdir _Way,
    ios_base::openmode _Mode = ios_base::in | ios_base::out);

Parámetros

_Off
La posición que se va a buscar relativa a _Way. Para obtener más información, vea basic_stringbuf::off_type.

_Way
El punto de partida de las operaciones de desplazamiento. Vea los valores posibles en ios_base::seekdir.

_Mode
Especifica el modo de la posición del puntero. El valor predeterminado es permitirle modificar las posiciones de lectura y escritura. Para obtener más información, vea ios_base::openmode.

Valor devuelto

Devuelve la posición nueva o una posición de flujo no válida.

Comentarios

Para un objeto de la clase basic_stringbuf<Elem, Tr, Alloc>, una posición de flujo consta solo de un desplazamiento de flujo. El desplazamiento cero designa el primer elemento de la secuencia controlada.

La nueva posición se determina de la siguiente forma:

  • Si _Way == ios_base::beg, la nueva posición es el principio del flujo más _Off.

  • Si _Way == ios_base::cur, la nueva posición es la posición actual del flujo más _Off.

  • Si _Way == ios_base::end, la nueva posición es el final del flujo más _Off.

Si _Mode & ios_base::in es distinto de cero, la función modifica la siguiente posición de lectura en el búfer de entrada. Si _Mode & ios_base::out es distinto de cero, la función modifica la siguiente posición de escritura en el búfer de salida. Para que un flujo se vea afectado, debe existir su búfer. Para que una operación de posicionamiento se realice correctamente, la posición de la secuencia resultante debe encontrarse dentro de la secuencia controlada. Si la función afecta a ambas posiciones del flujo, _Way debe ser ios_base::beg o ios_base::end y ambos flujos se colocan en el mismo elemento. En caso contrario (o si no se ve afectada ninguna posición), se produce un error en la operación de posicionamiento.

Si la función modifica correctamente una o las dos posiciones del flujo, devuelve la posición del flujo resultante. De lo contrario, se produce un error y devuelve una posición de flujo no válida.

basic_stringbuf::seekpos

La función miembro virtual protegida trata de modificar las posiciones actuales de las secuencias controladas.

virtual pos_type seekpos(pos_type _Sp, ios_base::openmode _Mode = ios_base::in | ios_base::out);

Parámetros

_Sp
La posición que se va a buscar.

_Mode
Especifica el modo de la posición del puntero. El valor predeterminado es permitirle modificar las posiciones de lectura y escritura.

Valor devuelto

Si la función modifica correctamente una o las dos posiciones del flujo, devuelve la posición del flujo resultante. De lo contrario, se produce un error y devuelve una posición de flujo no válida. Para determinar si la posición del flujo no es válida, compare el valor devuelto con pos_type(off_type(-1)).

Comentarios

Para un objeto de la clase class basic_stringbuf<Elem, Tr, Alloc>, una posición de flujo consta solo de un desplazamiento de flujo. El desplazamiento cero designa el primer elemento de la secuencia controlada. La nueva posición se determina mediante _ Sp.

Si mode & ios_base::in es distinto de cero, la función modifica la siguiente posición de lectura en el búfer de entrada. Si mode & ios_base::out es distinto de cero, la función modifica la siguiente posición de escritura en el búfer de salida. Para que un flujo se vea afectado, debe existir su búfer. Para que una operación de posicionamiento se realice correctamente, la posición de la secuencia resultante debe encontrarse dentro de la secuencia controlada. En caso contrario (o si no se ve afectada ninguna posición), se produce un error en la operación de posicionamiento.

basic_stringbuf::str

Establece u obtiene el texto en un búfer de cadena sin cambiar la posición de escritura.

basic_string<Elem, Tr, Alloc> str() const;
void str(
    const basic_string<Elem, Tr, Alloc>& _Newstr);

Parámetros

_Newstr
La nueva cadena.

Valor devuelto

Devuelve un objeto de clase basic_string<Elem, Tr, Alloc >, cuya secuencia controlada es una copia de la secuencia controlada por *this.

Comentarios

El primer miembro de la función devuelve un objeto de clase basic_string<Elem, Tr, Alloc>, cuya secuencia controlada es una copia de la secuencia controlada por *this. La secuencia copiada depende del modo de stringbuf almacenado:

  • Si mode & ios_base::out es distinto de cero y existe un búfer de salida, la secuencia es el búfer de salida completo (elementos epptr - pbase que empiezan por pbase).

  • Si mode & ios_base::in es distinto de cero y existe un búfer de entrada, la secuencia es el búfer de entrada completo (elementos egptr - eback que empiezan por eback).

  • De lo contrario, la secuencia copiada está vacía.

La segunda función miembro desasigna cualquier secuencia controlada actualmente por *this. Después asigna una copia de la secuencia controlada por _Newstr. Si mode & ios_base::in es distinto de cero, establece el búfer de entrada para que comience a leer al inicio de la secuencia. Si mode & ios_base::out es distinto de cero, establece el búfer de salida para que comience a escribir al inicio de la secuencia.

Ejemplo

// basic_stringbuf_str.cpp
// compile with: /EHsc
#include <iostream>
#include <sstream>

using namespace std;

int main( )
{
   basic_string<char> i( "test" );
   stringstream ss;

   ss.rdbuf( )->str( i );
   cout << ss.str( ) << endl;

   ss << "z";
   cout << ss.str( ) << endl;

   ss.rdbuf( )->str( "be" );
   cout << ss.str( ) << endl;
}
test
zest
be

basic_stringbuf::traits_type

Asocia un nombre de tipo al parámetro de plantilla Tr.

typedef Tr traits_type;

Comentarios

El tipo es un sinónimo del parámetro de plantilla Tr.

basic_stringbuf::underflow

Función virtual protegida que extrae el elemento actual de la secuencia de entrada.

virtual int_type underflow();

Valor devuelto

Si la función no se puede ejecutar correctamente, devuelve traits_type::eof. De lo contrario, devuelve el elemento actual en el flujo de entrada, que está convertido.

Comentarios

La función miembro virtual protegida intenta extraer el elemento actual byte del búfer de entrada, avanzar la posición del flujo actual y devolver el elemento como traits_type::to_int_type( byte). Solo puede hacerlo de una manera: si está disponible una posición de lectura, toma byte como el elemento almacenado en la posición de lectura y avanza el puntero siguiente del búfer de entrada.

basic_streambuf::swap

Intercambia el contenido de este búfer de cadena con otro búfer de cadena.

void basic_stringbuf<T>::swap(basic_stringbuf& other)

Parámetros

other
El parámetro basic_stringbuf cuyo contenido se intercambiará con este basic_stringbuf.

Comentarios

basic_stringbuf::operator=

Asigna el contenido del basic_stringbuf del lado derecho del operador al basic_stringbuf del lado izquierdo.

basic_stringbuf& basic_stringbuf:: operator=(const basic_stringbuf& other)

Parámetros

other
Un basic_stringbuf cuyo contenido, incluidas las características de configuración regional, se asignará al stringbuf del lado izquierdo del operador.

Comentarios

Consulte también

Seguridad para subprocesos en la biblioteca estándar de C++
Programación con iostream
Convenciones de iostreams