Compartilhar via


Classe basic_stringbuf

Descreve um buffer de fluxo que controla a transmissão de elementos do tipo Elem, cujas características de caractere são determinadas pela classe Tr, para e de uma sequência de elementos armazenados em um objeto de matriz.

Sintaxe

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

Parâmetros

Alloc
A classe do alocador.

Elem
O tipo do elemento básico da cadeia de caracteres.

Tr
As características de caractere especializadas no elemento básico da cadeia de caracteres.

Comentários

O objeto é alocado, estendido e liberado, conforme o necessário, para acomodar as alterações na sequência.

Um objeto da classe basic_stringbuf<Elem, Tr, Alloc> armazena uma cópia do argumento ios_base::openmode de seu construtor como seu modo stringbuf mode:

  • Se mode & ios_base::in é diferente de zero, o buffer de entrada está acessível. Para obter mais informações, consulte a Classe basic_streambuf.

  • Se mode & ios_base::out é diferente de zero, o buffer de saída está acessível.

Construtores

Construtor Descrição
basic_stringbuf Constrói um objeto do tipo basic_stringbuf.

Typedefs

Nome do tipo Descrição
allocator_type O tipo é um sinônimo do parâmetro de modelo Alloc.
char_type Associa um nome de tipo ao parâmetro do modelo Elem.
int_type Faz com que esse tipo no escopo de basic_filebuf seja equivalente ao tipo com o mesmo nome no escopo Tr.
off_type Faz com que esse tipo no escopo de basic_filebuf seja equivalente ao tipo com o mesmo nome no escopo Tr.
pos_type Faz com que esse tipo no escopo de basic_filebuf seja equivalente ao tipo com o mesmo nome no escopo Tr.
traits_type Associa um nome de tipo ao parâmetro de modelo Tr.

Funções de membro

Função de membro Descrição
overflow Uma função protegida e virtual que pode ser chamada quando um novo caractere é inserido em um buffer cheio.
pbackfail A função membro virtual protegida tenta colocar um elemento de volta no buffer de entrada, em seguida, faz com que ele se torne o elemento atual (apontado pelo próximo ponteiro).
seekoff A função membro virtual protegida tenta alterar as posições atuais para os fluxos controlados.
seekpos A função membro virtual protegida tenta alterar as posições atuais para os fluxos controlados.
str Define ou obtém o texto em um buffer de cadeia de caracteres sem alterar a posição de gravação.
troca
underflow A função membro virtual protegida para extrair o elemento atual do fluxo de entrada.

Requisitos

Cabeçalho:<sstream>

Namespace: std

basic_stringbuf::allocator_type

O tipo é um sinônimo do parâmetro de modelo Alloc.

typedef Alloc allocator_type;

basic_stringbuf::basic_stringbuf

Constrói um objeto do 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
Uma das enumerações em ios_base::openmode.

str
Um objeto do tipo basic_string.

Comentários

O primeiro construtor armazena um ponteiro nulo em todos os ponteiros que controlam o buffer de entrada e o buffer de saída. Para obter mais informações, consulte a seção Comentários da Classe basic_streambuf. Ele também armazena _Mode como o modo de stringbuf. Para obter mais informações, consulte a seção Comentários da Classe basic_stringbuf.

O segundo construtor aloca uma cópia da sequência controlada pelo objeto de cadeia de caracteres str. Se _Mode & ios_base::in é diferente de zero, ele define o buffer de entrada para começar a ler no início da sequência. Se _Mode & ios_base::out é diferente de zero, ele define o buffer de saída para começar a escrever no início da sequência. Ele também armazena _Mode como o modo de stringbuf. Para obter mais informações, consulte a seção Comentários da Classe basic_stringbuf.

basic_stringbuf::char_type

Associa um nome de tipo ao parâmetro do modelo Elem.

typedef Elem char_type;

basic_stringbuf::int_type

Torna esse tipo no escopo de basic_filebuf equivalente ao tipo de mesmo nome no escopo de Tr.

typedef typename traits_type::int_type int_type;

basic_stringbuf::off_type

Torna esse tipo no escopo de basic_filebuf equivalente ao tipo de mesmo nome no escopo de Tr.

typedef typename traits_type::off_type off_type;

basic_stringbuf::estouro

Uma função virtual protegida que pode ser chamada quando um novo caractere é inserido em um buffer cheio.

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

Parâmetros

_Meta
O caractere a ser inserido no buffer ou traits_type::eof.

Valor de retorno

Se a função não tiver êxito, ela retornará traits_type::eof. Caso contrário, retornará traits_type::not_eof(_ Meta).

Comentários

Se _Meta não comparar como igual a traits_type::eof, a função membro virtual protegida tentará inserir o elemento traits_type::to_char_type(_Meta) no buffer de saída. Isso pode ser feito de várias maneiras:

  • Se houver uma posição de gravação disponível, ela poderá armazenar o elemento na posição de gravação e incrementar o próximo ponteiro para o buffer de saída.

  • Ele pode disponibilizar uma posição de gravação alocando armazenamento novo ou adicional ao buffer de saída. Estender o buffer de saída dessa forma também estende qualquer buffer de entrada associado.

basic_stringbuf::p backfail

A função membro virtual protegida tenta colocar um elemento de volta no buffer de entrada e, em seguida, faz com que ele seja o elemento atual (apontado pelo próximo ponteiro).

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

Parâmetros

_Meta
O caractere a ser inserido no buffer ou traits_type::eof.

Valor de retorno

Se a função não tiver êxito, ela retornará traits_type::eof. Caso contrário, retornará traits_type::not_eof(_ Meta).

Comentários

Se _Meta for comparável a traits_type::eofeof, o elemento a ser retornado por push será efetivamente aquele que já estava no fluxo antes do elemento atual. Caso contrário, esse elemento será substituído por byte = traits_type::to_char_type(_ Meta). A função pode colocar um elemento de volta de várias maneiras:

  • Se uma posição para colocar de volta estiver disponível e o elemento armazenado lá for comparado como igual a byte, ela poderá decrementar o próximo ponteiro para o buffer de entrada.

  • Se uma posição para colocar de volta estiver disponível e se o modo de stringbuf permitir que a sequência seja alterada (mode & ios_base::out é diferente de zero), ela poderá armazenar byte na posição para colocar de volta e decrementar o próximo ponteiro para o buffer de entrada.

basic_stringbuf::p os_type

Torna esse tipo no escopo de basic_filebuf equivalente ao tipo de mesmo nome no escopo de Tr.

typedef typename traits_type::pos_type pos_type;

basic_stringbuf::Seekoff

A função membro virtual protegida tenta alterar as posições atuais para os fluxos controlados.

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

Parâmetros

_Off
A posição a ser buscada para o relativo a _Way. Para obter mais informações, consulte basic_stringbuf::off_type.

_Way
O ponto de partida para operações de deslocamento. Consulte ios_base::seekdir para obter os valores possíveis.

_Mode
Especifica o modo para a posição do ponteiro. O padrão é permitir que você modifique as posições de leitura e gravação. Para obter mais informações, consulte ios_base::openmode.

Valor de retorno

Retorna a nova posição ou uma posição de fluxo inválida.

Comentários

Para um objeto da classe basic_stringbuf<Elem, Tr, Alloc>, uma posição de fluxo consiste exclusivamente em um deslocamento de fluxo. O deslocamento zero designa o primeiro elemento da sequência controlada.

A nova posição é determinada da seguinte forma:

  • Se _Way == ios_base::beg, a nova posição será o início do fluxo mais _Off.

  • Se _Way == ios_base::cur, a nova posição será a posição atual do fluxo mais _ Off.

  • Se _Way == ios_base::end, a nova posição será o final do fluxo mais _Off.

Se _Mode & ios_base::in é diferente de zero, a função altera a próxima posição a ser lida no buffer de entrada. Se _Mode & ios_base::out é diferente de zero, a função altera a próxima posição a ser gravada no buffer de saída. Para que um fluxo seja afetado, o buffer deve existir. Para que uma operação de posicionamento seja bem-sucedida, a posição do fluxo resultante deve estar dentro da sequência controlada. Se a função afetar as duas posições de fluxo, _Way deverá ser ios_base::beg ou ios_base::end e ambos os fluxos serão posicionados no mesmo elemento. Caso contrário (ou se nenhuma posição for afetada), a operação de posicionamento falhará.

Se a função tiver êxito na alteração de uma ou de ambas as posições de fluxo, ela retornará a posição de fluxo resultante. Caso contrário, ela falhará e retornará uma posição de fluxo inválida.

basic_stringbuf::seekpos

A função membro virtual protegida tenta alterar as posições atuais para os fluxos controlados.

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

Parâmetros

_Sp
A posição pela qual buscar.

_Mode
Especifica o modo para a posição do ponteiro. O padrão é permitir que você modifique as posições de leitura e gravação.

Valor de retorno

Se a função tiver êxito na alteração de uma ou de ambas as posições de fluxo, ela retornará a posição de fluxo resultante. Caso contrário, ela falhará e retornará uma posição de fluxo inválida. Para determinar se a posição de fluxo é inválida, compare o valor retornado com pos_type(off_type(-1)).

Comentários

Para um objeto da classe basic_stringbuf<Elem, Tr, Alloc>, uma posição de fluxo consiste exclusivamente em um deslocamento de fluxo. O deslocamento zero designa o primeiro elemento da sequência controlada. A nova posição é determinada por _ Sp.

Se mode & ios_base::in é diferente de zero, a função altera a próxima posição a ser lida no buffer de entrada. Se mode & ios_base::out é diferente de zero, a função altera a próxima posição a ser gravada no buffer de saída. Para que um fluxo seja afetado, o buffer deve existir. Para que uma operação de posicionamento seja bem-sucedida, a posição do fluxo resultante deve estar dentro da sequência controlada. Caso contrário (ou se nenhuma posição for afetada), a operação de posicionamento falhará.

basic_stringbuf::str

Define ou obtém o texto em um buffer de cadeia de caracteres sem alterar a posição de gravação.

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

Parâmetros

_Newstr
A nova cadeia de caracteres.

Valor de retorno

Retorna um objeto da classe basic_string<Elem, Tr, Alloc >,, cuja sequência controlada é uma cópia da sequência controlada por *this.

Comentários

A primeira função membro retorna um objeto da classe basic_string<Elem, Tr, Alloc>, cuja sequência controlada é uma cópia da sequência controlada por *this. A sequência copiada depende do modo de stringbuf armazenado:

  • Se mode & ios_base::out é diferente de zero e existe um buffer de saída, a sequência é o buffer de saída inteiro (elementos epptr - pbase que começam com pbase).

  • Se mode & ios_base::in é diferente de zero e existe um buffer de entrada, a sequência é todo o buffer de entrada (elementos egptr - eback que começam com eback).

  • Caso contrário, a sequência copiada fica vazia.

A segunda função membro desaloca qualquer sequência controlada atualmente por *this. Em seguida, aloca uma cópia da sequência controlada por _Newstr. Se mode & ios_base::in é diferente de zero, ela define o buffer de entrada para começar a ler no início da sequência. Se mode & ios_base::out é diferente de zero, ela define o buffer de saída para começar a gravar no início da sequência.

Exemplo

// 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

Associa um nome de tipo ao parâmetro de modelo Tr.

typedef Tr traits_type;

Comentários

O tipo é um sinônimo do parâmetro de modelo Tr.

basic_stringbuf::underflow

Função virtual protegida para extrair o elemento atual do fluxo de entrada.

virtual int_type underflow();

Valor de retorno

Se a função não obtiver êxito, ela retornará traits_type::eof. Caso contrário, ela retornará o elemento atual no fluxo de entrada, que é convertido.

Comentários

A função membro virtual protegida tenta extrair o elemento atual byte do buffer de entrada, avança a posição de fluxo atual e retorna o elemento como traits_type::to_int_type( byte). A única maneira possível de fazer isso: se houver uma posição de leitura estiver disponível, ela usará byte como o elemento armazenado na posição leitura e avançará o próximo ponteiro para o buffer de entrada.

basic_streambuf::swap

Troca o conteúdo desse buffer de cadeia de caracteres com outro buffer de cadeia de caracteres.

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

Parâmetros

other
O basic_stringbuf cujo conteúdo será trocado com este basic_stringbuf.

Comentários

basic_stringbuf::operador=

Atribui o conteúdo do basic_stringbuf no lado direito do operador para o basic_stringbuf no lado esquerdo.

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

Parâmetros

other
Um basic_stringbuf cujo conteúdo, incluindo as características de localidade, será atribuído a stringbuf no lado esquerdo do operador.

Comentários

Confira também

Acesso Thread-Safe na Biblioteca Padrão C++
Programação de iostream
Convenções de iostreams