Classe basic_streambuf
Descreve uma classe base abstrata para derivar um buffer de fluxo, que controla a transmissão de elementos de e para uma representação específica de um fluxo.
Sintaxe
template <class Elem, class Tr = char_traits<Elem>>
class basic_streambuf;
Parâmetros
Elem
Um char_type.
Tr
O caractere traits_type.
Comentários
O modelo de classe descreve uma classe base abstrata para derivar um buffer de fluxo, que controla a transmissão de elementos de e para uma representação específica de um fluxo. Um objeto da classe basic_streambuf
ajuda a controlar um fluxo com elementos do tipo Tr, também conhecido como char_type, cujas características de caractere são determinadas pela classe char_traits, também conhecida como traits_type.
Todo buffer de fluxo controla conceitualmente dois fluxos independentes: um para extrações (entrada) e outro para inserções (saída). Uma representação específica pode, no entanto, tornar um ou ambos esses fluxos inacessíveis. Normalmente, mantém alguma relação entre os dois fluxos. O que você insere no fluxo de saída de um objeto basic_stringbuf<Elem
, Tr
>, por exemplo, é o que você mais tarde extrai do fluxo de entrada. Ao posicionar um fluxo de um objeto basic_filebuf<Elem
, Tr
>, você posiciona o outro fluxo em tandem.
A interface pública para o modelo de classe basic_streambuf
fornece as operações que são comuns a todos os buffers de fluxo, por mais especializados que sejam. A interface protegida fornece as operações necessárias para uma representação específica de um fluxo para fazer seu trabalho. As funções membro virtuais protegidas permitem personalizar o comportamento de um buffer de fluxo derivado para uma representação específica de um fluxo. Cada buffer de fluxo derivado nesta biblioteca descreve como especializa o comportamento de suas funções membro virtual protegidas. O comportamento padrão para a classe base, que costuma não fazer nada, é descrito neste artigo.
As funções membro protegidas restantes controla a cópia para e de qualquer armazenamento fornecido para transmissões de buffer para e de fluxos. Um buffer de entrada, por exemplo, é caracterizado por:
eback, um ponteiro para o início do buffer.
gptr, um ponteiro para o próximo elemento a ler.
egptr, um ponteiro logo após o término do buffer.
Da mesma forma, um buffer de saída é caracterizado por:
pbase, um ponteiro para o início do buffer.
pptr, um ponteiro para o próximo elemento a gravar.
epptr, um ponteiro logo após o término do buffer.
Para qualquer buffer, o seguinte protocolo é usado:
Se o próximo ponteiro for nulo, nenhum buffer existirá. Caso contrário, todos os três ponteiros apontam para a mesma sequência. Eles podem ser comparados com segurança para ordem.
Para um buffer de saída, se o ponteiro seguinte comparar menos que o ponteiro final, você poderá armazenar um elemento na posição de gravação designada pelo ponteiro seguinte.
Para um buffer de entrada, se o ponteiro seguinte comparar menos que o ponteiro final, você poderá ler um elemento na posição de leitura designada pelo ponteiro seguinte.
Para um buffer de entrada, se o ponteiro inicial comparar menos que o ponteiro seguinte, você pode colocar um elemento de volta na posição putback designada pelo próximo ponteiro decrementado.
Quaisquer funções membro virtuais protegidas que você escreve para uma classe derivada de basic_streambuf
<Elem
, Tr
> precisa cooperar para manter esse protocolo.
Um objeto da classe basic_streambuf
<Elem
, Tr
> armazena os seis ponteiros descritos anteriormente. Ele também armazena um objeto de localidade em um objeto do tipo localidade para uso potencial por um buffer de fluxo derivado.
Construtores
Construtor | Descrição |
---|---|
basic_streambuf | Constrói um objeto do tipo basic_streambuf . |
Typedefs
Nome do tipo | Descrição |
---|---|
char_type | Associa um nome de tipo ao parâmetro de modelo Elem . |
int_type | Associa um nome de tipo dentro do escopo de basic_streambuf ao parâmetro do modelo Elem . |
off_type | Associa um nome de tipo dentro do escopo de basic_streambuf ao parâmetro do modelo Elem . |
pos_type | Associa um nome de tipo dentro do escopo de basic_streambuf ao parâmetro do modelo Elem . |
traits_type | Associa um nome de tipo ao parâmetro de modelo Tr . |
Funções de membro
Função de membro | Descrição |
---|---|
eback | Uma função protegida que retorna um ponteiro para o início do buffer de entrada. |
egptr | Uma função protegida que retorna um ponteiro logo após o final do buffer de entrada. |
epptr | Uma função protegida que retorna um ponteiro logo após o final do buffer de saída. |
gbump | Uma função protegida que adiciona count ao próximo ponteiro para o buffer de entrada. |
getloc | Obtém a localidade do objeto basic_streambuf . |
gptr | Uma função protegida que retorna um ponteiro para o próximo elemento do buffer de entrada. |
imbue | Uma função virtual protegida chamada por pubimbue. |
in_avail | Retorna o número de elementos que estão prontos para serem lidos do buffer. |
overflow | Uma função virtual protegida que pode ser chamada quando um novo caractere é inserido em um buffer cheio. |
pbackfail | Uma função membro virtual protegida que tenta colocar um elemento de volta no fluxo de entrada, então torná-lo elemento atual (apontando para o ponteiro seguinte). |
pbase | Uma função protegida que retorna um ponteiro para o início do buffer de saída. |
pbump | Uma função protegida que adiciona count ao próximo ponteiro para o buffer de saída. |
pptr | Uma função protegida que retorna um ponteiro para o próximo elemento do buffer de saída. |
pubimbue | Define a localidade do objeto basic_streambuf . |
pubseekoff | Chama seekoff, uma função virtual protegida que é substituída em uma classe derivada. |
pubseekpos | Chama seekpos, uma função virtual protegida que é substituída em uma classe derivada e redefine a posição atual do ponteiro. |
pubsetbuf | Chama setbuf, uma função virtual protegida que é substituída em uma classe derivada. |
pubsync | Chama sync, uma função virtual protegida que é substituída em uma classe derivada e atualiza o fluxo externo associado a esse buffer. |
sbumpc | Lê e retorna o elemento atual, movendo o ponteiro de fluxo. |
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. |
setbuf | A função membro virtual protegida executa uma operação que específica para cada buffer de fluxo derivado. |
setg | Uma função protegida que armazena _Gbeg no ponteiro de início, _Gnext no próximo ponteiro e _Gend no ponteiro final para o buffer de entrada. |
setp | Uma função protegida que armazena _Pbeg no ponteiro inicial e _Pend no ponteiro final para o buffer de saída. |
sgetc | Retorna o elemento atual sem alterar a posição no fluxo. |
sgetn | Retorna o número de elementos lidos. |
showmanyc | Função membro virtual protegida que retorna uma contagem do número de caracteres que pode ser extraído do fluxo de entrada. Ela também garante que o programa não estará sujeito a uma espera indefinida. |
snextc | Lê o elemento atual e retorna o elemento seguinte. |
sputbackc | Coloca um char_type no fluxo. |
sputc | Coloca um caractere no fluxo. |
sputn | Coloca uma cadeia de caracteres no fluxo. |
stossc | Move-se além do elemento atual no fluxo. |
sungetc | Obtém um caractere do fluxo. |
troca | Troca os valores nesse objeto pelos valores do parâmetro do objeto basic_streambuf fornecido. |
sync | Uma função virtual protegida que tenta sincronizar os fluxos controlados com quaisquer fluxos externos associados. |
uflow | Função virtual protegida que extrai o elemento atual do fluxo de entrada. |
underflow | Função virtual protegida que extrai o elemento atual do fluxo de entrada. |
xsgetn | Uma função virtual protegida que extrai elementos de fluxo de entrada. |
xsputn | Uma função virtual protegida que insere elementos no fluxo de saída. |
Operadores
Operador | Descrição |
---|---|
operator= | Atribui os valores deste objeto de outro objeto basic_streambuf . |
Requisitos
Cabeçalho:<streambuf>
Namespace: std
basic_streambuf::basic_streambuf
Constrói um objeto do tipo basic_streambuf
.
basic_streambuf();
basic_streambuf(const basic_streambuf& right);
Parâmetros
direita
Uma referência lvalue para o objeto basic_streambuf
usada para definir os valores a esse objeto basic_streambuf
.
Comentários
O primeiro construtor protegido armazena um ponteiro nulo em todos os ponteiros controlando o buffer de entrada e o buffer de saída. Ele também armazena locale::classic
no objeto de localidade. Para obter mais informações, consulte Locale::classic.
O segundo construtor protegido copia os ponteiros e a localidade de right.
basic_streambuf::char_type
Associa um nome de tipo ao parâmetro do modelo Elem.
typedef Elem char_type;
basic_streambuf::eback
Uma função protegida que retorna um ponteiro para o início do buffer de entrada.
char_type *eback() const;
Valor de retorno
Um ponteiro para o início do buffer de entrada.
basic_streambuf::egptr
Uma função protegida que retorna um ponteiro logo após o final do buffer de entrada.
char_type *egptr() const;
Valor de retorno
Um ponteiro logo após o final do buffer de entrada.
basic_streambuf::epptr
Uma função protegida que retorna um ponteiro logo após o final do buffer de saída.
char_type *epptr() const;
Valor de retorno
Um ponteiro após o final do buffer de saída.
basic_streambuf::gbump
Uma função protegida que adiciona count ao próximo ponteiro para o buffer de entrada.
void gbump(int count);
Parâmetros
count
O valor pelo qual avançar o ponteiro.
basic_streambuf::getloc
Obtém a localidade do objeto basic_streambuf.
locale getloc() const;
Valor de retorno
O objeto de localidade armazenado.
Comentários
Para obter informações relacionadas, consulte ios_base::getloc.
Exemplo
// basic_streambuf_getloc.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
using namespace std;
cout << cout.rdbuf( )->getloc( ).name( ).c_str( ) << endl;
}
C
basic_streambuf::gptr
Uma função protegida que retorna um ponteiro para o próximo elemento do buffer de entrada.
char_type *gptr() const;
Valor de retorno
Um ponteiro para o próximo elemento do buffer de entrada.
basic_streambuf::imbuir
Uma função virtual protegida chamada por pubimbue.
virtual void imbue(const locale& _Loc);
Parâmetros
_Loc
Uma referência a uma localidade.
Comentários
O comportamento padrão é não fazer nada.
basic_streambuf::in_avail
Retorna o número de elementos que estão prontos para serem lidos do buffer.
streamsize in_avail();
Valor de retorno
O número de elementos que estão prontos para serem lidos do buffer.
Comentários
Se uma posição de leitura estiver disponível, a função membro retornará egptr - gptr. Caso contrário, retorna showmanyc.
Exemplo
// basic_streambuf_in_avail.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
using namespace std;
char c;
// cin's buffer is empty, in_avail will return 0
cout << cin.rdbuf( )->in_avail( ) << endl;
cin >> c;
cout << cin.rdbuf( )->in_avail( ) << endl;
}
basic_streambuf::int_type
Associa um nome de tipo dentro do escopo de basic_streambuf a um dos tipos em um parâmetro de modelo.
typedef typename traits_type::int_type int_type;
basic_streambuf::off_type
Associa um nome de tipo dentro do escopo de basic_streambuf a um dos tipos em um parâmetro de modelo.
typedef typename traits_type::off_type off_type;
basic_streambuf::operador=
Atribui os valores deste objeto de outro objeto basic_streambuf
.
basic_streambuf& operator=(const basic_streambuf& right);
Parâmetros
direita
Uma referência lvalue para o objeto basic_streambuf
usada para atribuir valores a esse objeto.
Comentários
O operador membro protegido copia de right os ponteiros que controlam o buffer de entrada e o buffer de saída. Também armazena right.
getloc() no locale object
. Ele retorna *this
.
basic_streambuf::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 conseguir obter sucesso, ela retornará traits_type::eof ou gerará uma exceção. Caso contrário, retornará traits_type::not_eof(_ Meta). O comportamento padrão é retornar traits_type::eof.
Comentários
Se _Meta não for equivalente a traits_type::eof, a função membro virtual protegida buscará inserir o elemento traits_type::to_char_type(Meta) no fluxo de saída. Isso pode ser feito de várias maneiras:
Se
write position
estiver 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.
Ele pode disponibilizar uma posição de gravação gravando, em algum destino externo, alguns ou todos os elementos entre os ponteiros inicial e seguinte para o buffer de saída.
A função de estouro virtual, junto com as funções sync e underflow, definem as características da classe derivada streambuf. Cada classe derivada pode implementar o estouro de forma diferente, mas a interface com a classe de fluxo de chamada é a mesma.
A função overflow
frequentemente é chamada por funções streambuf
públicas como sputc
e sputn
quando a área put está cheia, mas outras classes, incluindo as classes de fluxo, podem chamar overflow
a qualquer momento.
A função consome os caracteres na área de put entre os ponteiros pbase
e pptr
e, em seguida, reinicializa a área put. A função overflow
também deve consumir nCh
(se nCh
não for EOF
) ou pode optar por colocar o caractere na nova área de put para que ele seja consumido na próxima chamada.
A definição de consumir varia entre as classes derivadas. Por exemplo, a classe filebuf
grava seus caracteres em um arquivo, enquanto a classe strstreambuf
os mantém em seu buffer e, se o buffer for designado como dinâmico, expande o buffer em resposta a uma chamada para estouro. Essa expansão é obtida liberando o buffer antigo e substituindo-o por um novo maior. Os ponteiros são ajustados conforme necessário.
basic_streambuf::p backfail
Uma função membro virtual protegida que tenta colocar um elemento de volta no fluxo de entrada, então torná-lo elemento atual (apontando para o ponteiro seguinte).
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 conseguir obter sucesso, ela retornará traits_type::eof ou gerará uma exceção. Caso contrário, retorna algum outro valor. O comportamento padrão é retornar traits_type::eof.
Comentários
Se _Meta for comparável a traits_type::eof, o elemento a ser recuado será efetivamente aquele que já estava no fluxo antes do elemento atual. Caso contrário, esse elemento será substituído por traits_type::to_char_type(_Meta). A função pode colocar um elemento de volta de várias maneiras:
Se uma posição putback estiver disponível, ela poderá armazenar o elemento na posição putback e diminuir o ponteiro seguinte para o buffer de entrada.
Pode disponibilizar uma posição de putback alocando armazenamento novo ou adicional para o buffer de entrada.
Para um buffer de fluxo com fluxos de entrada e saída comuns, ele pode disponibilizar uma posição de putback gravando, em algum destino externo, alguns ou todos os elementos entre os ponteiros inicial e seguintes para o buffer de saída.
basic_streambuf::p base
Uma função protegida que retorna um ponteiro para o início do buffer de saída.
char_type *pbase() const;
Valor de retorno
Um ponteiro para o início do buffer de saída.
basic_streambuf::p colisão
Uma função protegida que adiciona count ao próximo ponteiro para o buffer de saída.
void pbump(int count);
Parâmetros
count
O número de caracteres pelo qual mover a posição de gravação para frente.
basic_streambuf::p os_type
Associa um nome de tipo dentro do escopo de basic_streambuf a um dos tipos em um parâmetro de modelo.
typedef typename traits_type::pos_type pos_type;
basic_streambuf::p ptr
Uma função protegida que retorna um ponteiro para o próximo elemento do buffer de saída.
char_type *pptr() const;
Valor de retorno
Um ponteiro para o próximo elemento do buffer de saída.
basic_streambuf::p ubimbue
Define a localidade do objeto basic_streambuf.
locale pubimbue(const locale& _Loc);
Parâmetros
_Loc
Uma referência a uma localidade.
Valor de retorno
O valor anterior armazenado no objeto de localidade.
Comentários
A função membro armazena _ Loc no objeto de localidade e chama imbue.
Exemplo
Consulte basic_ios::imbue para obter um exemplo que usa pubimbue
.
basic_streambuf::p ubseekoff
Chama seekoff, uma função virtual protegida que é substituída em uma classe derivada.
pos_type pubseekoff(off_type _Off,
ios_base::seekdir _Way,
ios_base::openmode _Which = ios_base::in | ios_base::out);
Parâmetros
_Off
A posição a ser buscada para o relativo a _Way.
_Way
O ponto de partida para operações de deslocamento. Consulte seekdir para valores possíveis.
_Which
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
Retorna a nova posição ou uma posição de fluxo inválida (seekoff(_ Off, _Way
, _Which
)).
Comentários
Move o ponteiro relativo a _Way.
basic_streambuf::p ubseekpos
Chama seekpos, uma função virtual protegida que é substituída em uma classe derivada e redefine a posição atual do ponteiro.
pos_type pubseekpos(pos_type _Sp, ios_base::openmode _Which = ios_base::in | ios_base::out);
Parâmetros
_Sp
A posição pela qual buscar.
_Which
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
A nova posição ou 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
A função membro retorna seekpos(_ Sp, _Which
).
basic_streambuf::p ubsetbuf
Chama setbuf, uma função virtual protegida que é substituída em uma classe derivada.
basic_streambuf<Elem, Tr> *pubsetbuf(
char_type* _Buffer,
streamsize count);
Parâmetros
_Buffer
Um ponteiro para char_type
para essa instanciação.
count
O tamanho do buffer.
Valor de retorno
Retorna setbuf( _Buffer
, count
).
basic_streambuf::p ubsync
Chama sync, uma função virtual protegida que é substituída em uma classe derivada e atualiza o fluxo externo associado a esse buffer.
int pubsync();
Valor de retorno
Retorna sync ou -1 em caso de falha.
basic_streambuf::sbumpc
Lê e retorna o elemento atual, movendo o ponteiro de fluxo.
int_type sbumpc();
Valor de retorno
O elemento atual.
Comentários
Se uma posição de leitura estiver disponível, a função membro retornará traits_type::to_int_type(*gptr) e incrementará o ponteiro seguinte para o buffer de entrada. Caso contrário, retorna uflow.
Exemplo
// basic_streambuf_sbumpc.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
using namespace std;
int i = 0;
i = cin.rdbuf( )->sbumpc( );
cout << i << endl;
}
3
33
51
basic_streambuf::Seekoff
Uma função de membro virtual protegida que tenta alterar as posições atuais para os fluxos controlados.
virtual pos_type seekoff(
off_type _Off,
ios_base::seekdir _Way,
ios_base::openmode _Which = ios_base::in | ios_base::out);
Parâmetros
_Off
A posição a ser buscada para o relativo a _Way.
_Way
O ponto de partida para operações de deslocamento. Consulte seekdir para valores possíveis.
_Which
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
Retorna a nova posição ou uma posição de fluxo inválida (seekoff
(_ Off, _Way
, _Which
)).
Comentários
A nova posição é determinada da seguinte forma:
Se
_Way
==ios_base::beg
, a nova posição é o início do fluxo mais _ Off.Se
_Way
==ios_base::cur
, a nova posição é a posição atual do fluxo mais _ Off.Se
_Way
==ios_base::end
, a nova posição é o final do fluxo mais _ Off.
Normalmente, se which & ios_base::in for diferente de zero, o fluxo de entrada será afetado; se which & ios_base::out for diferente de zero, o fluxo de saída será afetado. No entanto, o uso real desse parâmetro varia entre os buffers de fluxo derivados.
Se a função tiver êxito em alterar a posição ou as posições do fluxo, ela retornará a posição do fluxo resultante ou uma das posições do fluxo resultantes. Caso contrário, retorna uma posição de fluxo inválida. O comportamento padrão é retornar uma posição de fluxo inválida.
basic_streambuf::seekpos
Uma função de membro virtual protegida que tenta alterar as posições atuais para os fluxos controlados.
virtual pos_type seekpos(pos_type _Sp, ios_base::openmode _Which = ios_base::in | ios_base::out);
Parâmetros
_Sp
A posição pela qual buscar.
_Which
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
A nova posição ou 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
A nova posição é _ Sp.
Normalmente, se which & ios_base::in for diferente de zero, o fluxo de entrada será afetado; se which & ios_base::out for diferente de zero, o fluxo de saída será afetado. No entanto, o uso real desse parâmetro varia entre os buffers de fluxo derivados.
Se a função tiver êxito em alterar a posição ou as posições do fluxo, ela retornará a posição do fluxo resultante ou uma das posições do fluxo resultantes. Caso contrário, retorna uma posição de fluxo inválida (-1). O comportamento padrão é retornar uma posição de fluxo inválida.
basic_streambuf::setbuf
A função membro virtual protegida que executa uma operação específica para cada buffer de fluxo derivado.
virtual basic_streambuf<Elem, Tr> *setbuf(
char_type* _Buffer,
streamsize count);
Parâmetros
_Buffer
Ponteiro para um buffer.
count
O tamanho do buffer .
Valor de retorno
O comportamento padrão é retornar this
.
Comentários
Consulte basic_filebuf. setbuf
fornece uma área de memória para o objeto streambuf
usar. Como o buffer é usado é definido nas classes derivadas.
basic_streambuf::setg
Uma função protegida que armazena _ Gbeg no ponteiro de início, _Gnext
no próximo ponteiro e _Gend
no ponteiro final para o buffer de entrada.
void setg(char_type* _Gbeg,
char_type* _Gnext,
char_type* _Gend);
Parâmetros
_Gbeg
Um ponteiro para o início do buffer.
_Gnext
Um ponteiro para algum lugar no meio do buffer.
_Gend
Um ponteiro para o fim do buffer.
basic_streambuf::setp
Uma função protegida que armazena _Pbeg no ponteiro inicial e _Pend no ponteiro final para o buffer de saída.
void setp(char_type* _Pbeg, char_type* _Pend);
Parâmetros
_Pbeg
Um ponteiro para o início do buffer.
_Pend
Um ponteiro para o fim do buffer.
basic_streambuf::sgetc
Retorna o elemento atual sem alterar a posição no fluxo.
int_type sgetc();
Valor de retorno
O elemento atual.
Comentários
Se uma posição de leitura estiver disponível, a função membro retornará traits_type::to_int_type( *
gptr). Caso contrário, retorna underflow.
Exemplo
// basic_streambuf_sgetc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>
int main( )
{
using namespace std;
ifstream myfile( "basic_streambuf_sgetc.txt", ios::in );
char i = myfile.rdbuf( )->sgetc( );
cout << i << endl;
i = myfile.rdbuf( )->sgetc( );
cout << i << endl;
}
basic_streambuf::sgetn
Extrai até count caracteres do buffer de entrada e armazena-os no buffer ptr fornecido.
Esse método pode não ser seguro, pois depende do chamador para verificar se os valores passados estão corretos.
streamsize sgetn(
char_type* ptr,
streamsize count);
Parâmetros
ptr
O buffer que deve conter os caracteres extraídos.
count
O número de elementos a serem lidos.
Valor de retorno
O número de elementos lidos. Para obter mais informações, confira streamsize.
Comentários
A função membro retorna xsgetn( ptr
, count
).
Exemplo
// basic_streambuf_sgetn.cpp
// compile with: /EHsc /W3
#include <iostream>
#include <fstream>
int main()
{
using namespace std;
ifstream myfile("basic_streambuf_sgetn.txt", ios::in);
char a[10];
// Extract 3 characters from myfile and store them in a.
streamsize i = myfile.rdbuf()->sgetn(&a[0], 3); // C4996
a[i] = myfile.widen('\0');
// Display the size and contents of the buffer passed to sgetn.
cout << i << " " << a << endl;
// Display the contents of the original input buffer.
cout << myfile.rdbuf() << endl;
}
basic_streambuf::showmanyc
Uma função membro virtual protegida que retorna uma contagem do número de caracteres que pode ser extraído do fluxo de entrada e garante que o programa não esteja sujeito a uma espera indefinida.
virtual streamsize showmanyc();
Valor de retorno
O comportamento padrão é retornar zero.
basic_streambuf::snextc
Lê o elemento atual e retorna o elemento seguinte.
int_type snextc();
Valor de retorno
O próximo elemento no fluxo.
Comentários
A função membro chama sbumpc e, se essa função retornar traits_type::eof, retornará traits_type::eof. Caso contrário, retorna sgetc.
Exemplo
// basic_streambuf_snextc.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
using namespace std;
int i = 0;
i = cin.rdbuf( )->snextc( );
// cout << ( int )char_traits<char>::eof << endl;
cout << i << endl;
}
aa
aa97
basic_streambuf::sputbackc
Coloca um char_type no fluxo.
int_type sputbackc(char_type _Ch);
Parâmetros
_Ch
O caractere
Valor de retorno
Retorna o caractere ou a falha.
Comentários
Se houver uma posição putback estiver disponível e _Ch for comparável ao caractere armazenado nessa posição, a função membro diminuirá o ponteiro seguinte para o buffer de entrada e retornará traits_type::to_int_type( _Ch
). Caso contrário, retorna pbackfail( _Ch
).
Exemplo
// basic_streambuf_sputbackc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>
int main( )
{
using namespace std;
ifstream myfile("basic_streambuf_sputbackc.txt",
ios::in);
int i = myfile.rdbuf()->sbumpc();
cout << (char)i << endl;
int j = myfile.rdbuf()->sputbackc('z');
if (j == 'z')
{
cout << "it worked" << endl;
}
i = myfile.rdbuf()->sgetc();
cout << (char)i << endl;
}
basic_streambuf::sputc
Coloca um caractere no fluxo.
int_type sputc(char_type _Ch);
Parâmetros
_Ch
O caractere
Valor de retorno
Retorna o caractere, se for bem-sucedido.
Comentários
Se um write position
estiver disponível, a função membro armazenará _Ch na posição de gravação, incrementará o ponteiro seguinte para o buffer de saída e retornará traits_type::to_int_type( _Ch
). Caso contrário, retorna overflow( _Ch
).
Exemplo
// basic_streambuf_sputc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>
int main( )
{
using namespace std;
int i = cout.rdbuf( )->sputc( 'a' );
cout << endl << ( char )i << endl;
}
a
a
basic_streambuf::sputn
Coloca uma cadeia de caracteres no fluxo.
streamsize sputn(const char_type* ptr, streamsize count);
Parâmetros
ptr
A cadeia de caracteres.
count
A contagem de caracteres.
Valor de retorno
O número de caracteres inseridos no fluxo.
Comentários
A função membro retorna xsputn( ptr
, count
). Para obter mais informações, confira a seção Comentários desse membro.
Exemplo
// basic_streambuf_sputn.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>
int main()
{
using namespace std;
streamsize i = cout.rdbuf()->sputn("test", 4);
cout << endl << i << endl;
}
test
4
basic_streambuf::stossc
Move-se além do elemento atual no fluxo.
void stossc();
Comentários
A função membro chama sbumpc. Para fornecer essa função membro, nenhuma implementação é exigida.
Exemplo
// basic_streambuf_stossc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>
int main( )
{
using namespace std;
ifstream myfile( "basic_streambuf_stossc.txt", ios::in );
myfile.rdbuf( )->stossc( );
char i = myfile.rdbuf( )->sgetc( );
cout << i << endl;
}
basic_streambuf::sungetc
Obtém um caractere do fluxo.
int_type sungetc();
Valor de retorno
Retorna o caractere ou a falha.
Comentários
Se uma posição de putback estiver disponível, a função membro diminuirá o ponteiro seguinte para o buffer de entrada e retornará traits_type::
to_int_type( *
gptr). No entanto, nem sempre é possível determinar o último caractere lido para que ele pode ser capturado no estado do buffer atual. Se isso for true, a função retornará pbackfail. Para evitar essa situação, acompanhe o caractere a ser colocado de volta e chame sputbackc(ch)
, que não falhará, desde que você não o chame no início do fluxo e não tente colocar mais de um caractere de volta.
Exemplo
// basic_streambuf_sungetc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>
int main( )
{
using namespace std;
ifstream myfile( "basic_streambuf_sungetc.txt", ios::in );
// Read and increment
int i = myfile.rdbuf( )->sbumpc( );
cout << ( char )i << endl;
// Read and increment
i = myfile.rdbuf( )->sbumpc( );
cout << ( char )i << endl;
// Decrement, read, and do not increment
i = myfile.rdbuf( )->sungetc( );
cout << ( char )i << endl;
i = myfile.rdbuf( )->sungetc( );
cout << ( char )i << endl;
i = myfile.rdbuf( )->sbumpc( );
cout << ( char )i << endl;
}
basic_streambuf::swap
Troca os valores nesse objeto pelos valores do objeto basic_streambuf
fornecido.
void swap(basic_streambuf& right);
Parâmetros
direita
Uma referência lvalue para o objeto basic_streambuf
usada para trocar valores.
Comentários
A função membro protegida troca com right todos os ponteiros controlando o input buffer
e o output buffer
. Também troca right.
getloc() com o objeto locale
.
basic_streambuf::sincronização
Uma função virtual protegida que tenta sincronizar os fluxos controlados com quaisquer fluxos externos associados.
virtual int sync();
Valor de retorno
Se a função não puder ser bem-sucedida, ela retornará -1. O comportamento padrão é retornar zero.
Comentários
sync
envolve gravar quaisquer elementos entre os ponteiros inicial e seguinte para o buffer de saída. Ele não envolve colocar de volta nenhum elemento entre o próximo ponteiro e o ponteiro final para o buffer de entrada.
basic_streambuf::traits_type
Associa um nome de tipo ao parâmetro de modelo Tr.
typedef Tr traits_type;
basic_streambuf::uflow
Função virtual protegida que extrai o elemento atual do fluxo de entrada.
virtual int_type uflow();
Valor de retorno
O elemento atual.
Comentários
A função membro virtual protegida tenta extrair o elemento atual ch do fluxo de entrada, então avança a posição atual do fluxo e retorna o elemento como traits_type::to_int_type( ch). Isso pode ser feito de várias maneiras:
Se houver uma posição de leitura estiver disponível, ela pegará ch como o elemento armazenado na posição leitura e avançará o próximo ponteiro para o buffer de entrada.
Ele pode ler um elemento diretamente, de alguma fonte externa e entregá-lo como o valor ch.
Para um buffer de fluxo com fluxos de entrada e saída comuns, ele pode disponibilizar uma posição de leitura gravando, em algum destino externo, alguns ou todos os elementos entre os ponteiros inicial e seguintes para o buffer de saída. Ou pode alocar armazenamento novo ou adicional para o buffer de entrada. A função então lê, de alguma fonte externa, um ou mais elementos.
Se a função não conseguir obter sucesso, ela retornará traits_type::eof ou gerará uma exceção. Caso contrário, retornará o elemento ch
atual no fluxo de entrada, convertido conforme descrito acima e avançará o ponteiro seguinte para o buffer de entrada. O comportamento padrão é chamar underflow e, se essa função retornar traits_type::eof, retornar traits_type::eof. Caso contrário, a função retorna o elemento atual ch no fluxo de entrada, convertido conforme descrito anteriormente e avança o ponteiro seguinte para o buffer de entrada.
basic_streambuf::underflow
Função virtual protegida para extrair o elemento atual do fluxo de entrada.
virtual int_type underflow();
Valor de retorno
O elemento atual.
Comentários
A função membro virtual protegida busca extrair o elemento atual ch do fluxo de entrada, sem avançar a posição de fluxo atual e retorná-la como traits_type::
to_int_type( ch). Isso pode ser feito de várias maneiras:
Se uma posição de leitura estiver disponível, ch será o elemento armazenado na posição de leitura. Para obter mais informações, consulte a seção Comentários da Classe basic_streambuf.
Pode disponibilizar uma posição de leitura alocando armazenamento novo ou adicional para o buffer de entrada, então lendo, de alguma fonte externa, um ou mais elementos. Para obter mais informações, consulte a seção Comentários da Classe basic_streambuf.
Se a função não conseguir obter sucesso, ela retornará traits_type::
eof()
ou gerará uma exceção. Caso contrário, retornará o elemento atual no fluxo de entrada, convertido conforme descrito anteriormente. O comportamento padrão é retornar traits_type::eof()
.
A função underflow
virtual, com as funções sync e overflow, define as características da classe derivada de streambuf
. Cada classe derivada pode implementar underflow
de forma diferente, mas a interface com a classe de fluxo de chamada é a mesma.
A função underflow
frequentemente é chamada por funções streambuf
públicas como sgetc e sgetn quando a área get está vazia, mas outras classes, incluindo as classes de fluxo, podem chamar underflow
a qualquer momento.
A função underflow
fornece a área de get caracteres da fonte de entrada. Se a área get contiver caracteres, underflow
retornará o primeiro caractere. Se a área get estiver vazia, ela preencherá a área get e retornará o caractere seguinte (que deixa na área get). Não se houver mais nenhum caractere disponível, underflow
retornará EOF
e deixará a área get vazia.
Na classe strstreambuf
, underflow
ajusta o ponteiro egptr para acessar o armazenamento alocado dinamicamente por uma chamada para overflow
.
basic_streambuf::xsgetn
Função virtual protegida para extrair elementos do fluxo de entrada.
Esse método pode não ser seguro, pois depende do chamador para verificar se os valores passados estão corretos.
virtual streamsize xsgetn(
char_type* ptr,
streamsize count);
Parâmetros
ptr
O buffer que deve conter os caracteres extraídos.
count
O número de elementos a extrair.
Valor de retorno
O número de elementos extraídos.
Comentários
A função membro virtual protegida extrai até count elementos do fluxo de entrada, como por chamadas repetidas a sbumpc e armazena-os na matriz que começa em ptr. Ela retorna o número de elementos extraídos.
basic_streambuf::xsputn
Função virtual protegida para inserir elementos no fluxo de saída.
virtual streamsize xsputn(const char_type* ptr, streamsize count);
Parâmetros
ptr
Ponteiro para elementos a inserir.
count
Número de elementos a inserir.
Valor de retorno
O número de elementos inseridos no fluxo.
Comentários
A função membro virtual protegida insere até count elementos no fluxo de saída, como se por chamadas repetidas a sputc, da matriz que começa em ptr. A inserção de caracteres no fluxo de saída para quando todos os caracteres count tiverem sido gravados ou se chamar sputc( count)
retornaria traits::eof()
. Retorna o número de elementos inseridos.
Confira também
Acesso Thread-Safe na Biblioteca Padrão C++
Programação de iostream
Convenções de iostreams