basic_streambuf – třída
Popisuje abstraktní základní třídu pro odvození vyrovnávací paměti datového proudu, která řídí přenos prvků do a z konkrétní reprezentace datového proudu.
Syntaxe
template <class Elem, class Tr = char_traits<Elem>>
class basic_streambuf;
Parametry
Tr
Znak traits_type.
Poznámky
Šablona třídy popisuje abstraktní základní třídu pro odvození vyrovnávací paměti datového proudu, která řídí přenos prvků do a z konkrétní reprezentace datového proudu. Objekt třídy basic_streambuf
pomáhá řídit datový proud s prvky typu Tr, označované také jako char_type, jejichž znakové vlastnosti jsou určeny třídou char_traits, označované také jako traits_type.
Každá vyrovnávací paměť datového proudu koncepčně řídí dva nezávislé datové proudy: jeden pro extrakci (vstup) a druhý pro vložení (výstup). Konkrétní reprezentace však může být buď z těchto datových proudů, nebo obě tyto datové proudy nepřístupné. Obvykle udržuje nějaký vztah mezi těmito dvěma datovými proudy. To, co vložíte do výstupního datového proudu basic_stringbuf<Elem
, Tr
> objektu, například, je to, co později extrahujete ze vstupního datového proudu. Když umístíte jeden proud basic_filebufElem
<, Tr
> objekt umístíte druhý proud společně.
Veřejné rozhraní šablony basic_streambuf
tříd poskytuje operace, které jsou společné pro všechny vyrovnávací paměti datového proudu, ale specializované. Chráněné rozhraní poskytuje operace potřebné pro konkrétní reprezentaci datového proudu, aby fungovalo. Chráněné virtuální členské funkce umožňují přizpůsobit chování odvozené vyrovnávací paměti datového proudu pro konkrétní reprezentaci datového proudu. Každá odvozená vyrovnávací paměť datového proudu v této knihovně popisuje, jak se specializuje na chování svých chráněných virtuálních členských funkcí. Výchozí chování základní třídy, což je často dělat nic, je popsáno v tomto článku.
Zbývající chráněné členské funkce řídí kopírování do a z jakéhokoli úložiště dodaného pro přenosy do vyrovnávací paměti a z datových proudů. Vstupní vyrovnávací paměť je například charakterizována:
eback, ukazatel na začátek vyrovnávací paměti.
gptr, ukazatel na další prvek ke čtení.
egptr, ukazatel za koncem vyrovnávací paměti.
Podobně se výstupní vyrovnávací paměť vyznačuje:
pbase, ukazatel na začátek vyrovnávací paměti.
pptr, ukazatel na další prvek pro zápis.
epptr, ukazatel na konci vyrovnávací paměti.
Pro libovolnou vyrovnávací paměť se používá následující protokol:
Pokud je další ukazatel null, neexistuje žádná vyrovnávací paměť. Jinak všechny tři ukazatele ukazují na stejnou sekvenci. Je možné je bezpečně porovnat s pořadím.
Pro výstupní vyrovnávací paměť, pokud další ukazatel porovnává menší než koncový ukazatel, můžete uložit prvek na pozici zápisu určené dalším ukazatelem.
Pokud další ukazatel porovnává menší než koncový ukazatel vstupní vyrovnávací paměti, můžete přečíst prvek na pozici čtení určené dalším ukazatelem.
Pokud počáteční ukazatel porovnává menší než další ukazatel vstupní vyrovnávací paměti, můžete vrátit prvek na pozici zpětného umístění určené dekrementovaným dalším ukazatelem.
Všechny chráněné virtuální členské funkce, které píšete pro třídu odvozenou z basic_streambuf
<Elem
, Tr
> musí spolupracovat při údržbě tohoto protokolu.
Objekt třídy basic_streambuf
<Elem
ukládá Tr
> šest dříve popsaných ukazatelů. Uloží také objekt národního prostředí do objektu národního prostředí typu pro potenciální použití odvozenou vyrovnávací pamětí datového proudu.
Konstruktory
Konstruktor | Popis |
---|---|
basic_streambuf | Vytvoří objekt typu basic_streambuf . |
Typedefs
Název typu | Popis |
---|---|
char_type | Přidruží název typu k parametru Elem šablony. |
int_type | Přidruží název typu v oboru basic_streambuf k parametru Elem šablony. |
off_type | Přidruží název typu v oboru basic_streambuf k parametru Elem šablony. |
pos_type | Přidruží název typu v oboru basic_streambuf k parametru Elem šablony. |
traits_type | Přidruží název typu k parametru Tr šablony. |
Členské funkce
Členová funkce | Popis |
---|---|
eback | Chráněná funkce, která vrací ukazatel na začátek vstupní vyrovnávací paměti. |
egptr | Chráněná funkce, která vrací ukazatel na konec vstupní vyrovnávací paměti. |
epptr | Chráněná funkce, která vrací ukazatel na konec výstupní vyrovnávací paměti. |
gbump | Chráněná funkce, která se přidá count k dalšímu ukazateli vstupní vyrovnávací paměti. |
getloc | Získá národní prostředí objektu basic_streambuf . |
gptr | Chráněná funkce, která vrací ukazatel na další prvek vstupní vyrovnávací paměti. |
naplnit | Chráněná virtuální funkce volat pubimbue. |
in_avail | Vrátí počet prvků, které jsou připravené ke čtení z vyrovnávací paměti. |
přetečení | Chráněná virtuální funkce, kterou lze volat při vložení nového znaku do plné vyrovnávací paměti. |
pbackfail | Chráněná virtuální členová funkce, která se pokusí vložit prvek zpět do vstupního datového proudu a pak ho nastavit jako aktuální prvek (na který odkazuje další ukazatel). |
pbase | Chráněná funkce, která vrací ukazatel na začátek výstupní vyrovnávací paměti. |
pbump | Chráněná funkce, která se přidá count k dalšímu ukazateli výstupní vyrovnávací paměti. |
pptr | Chráněná funkce, která vrací ukazatel na další prvek výstupní vyrovnávací paměti. |
pubimbue | basic_streambuf Nastaví národní prostředí objektu. |
pubseekoff | Volá hledání, chráněnou virtuální funkci, která je přepsána v odvozené třídě. |
pubseekpos | Volá funkce seekpos, chráněnou virtuální funkci, která je přepsána v odvozené třídě a resetuje aktuální pozici ukazatele. |
pubsetbuf | Volá setbuf, chráněnou virtuální funkci, která je přepsána v odvozené třídě. |
pubsync | Volá synchronizaci, chráněnou virtuální funkci, která je přepsána v odvozené třídě a aktualizuje externí datový proud přidružený k této vyrovnávací paměti. |
sbumpc | Přečte a vrátí aktuální prvek a přesune ukazatel datového proudu. |
hledání | Chráněná virtuální členová funkce se pokusí změnit aktuální pozice pro řízené datové proudy. |
hledání | Chráněná virtuální členová funkce se pokusí změnit aktuální pozice pro řízené datové proudy. |
setbuf | Chráněná virtuální členová funkce provádí operaci určitou pro každou odvozenou vyrovnávací paměť datového proudu. |
setg | Chráněná funkce, která se ukládá _Gbeg do počátečního ukazatele, _Gnext v dalším ukazateli a _Gend na konci ukazatele pro vstupní vyrovnávací paměť. |
setp | Chráněná funkce, která ukládá _Pbeg počáteční ukazatel a _Pend koncový ukazatel pro výstupní vyrovnávací paměť. |
sgetc | Vrátí aktuální prvek bez změny pozice ve streamu. |
sgetn | Vrátí počet přečtených prvků. |
showmanyc | Chráněná virtuální členová funkce, která vrací počet znaků, které lze extrahovat ze vstupního datového proudu. Zajišťuje také, že program nebude podléhat neomezenému čekání. |
snextc | Přečte aktuální prvek a vrátí následující prvek. |
sputbackc | char_type Vloží do datového proudu. |
sputc | Vloží znak do datového proudu. |
sputn | Vloží řetězec znaků do datového proudu. |
stossc | Přesunutí za aktuální prvek v datovém proudu |
sungetc | Získá znak ze streamu. |
vyměnit | Vymění hodnoty v tomto objektu pro hodnoty v zadaném basic_streambuf parametru objektu. |
synchronizovat | Chráněná virtuální funkce, která se pokusí synchronizovat řízené streamy s libovolnými přidruženými externími streamy. |
uflow | Chráněná virtuální funkce, která extrahuje aktuální prvek ze vstupního datového proudu. |
podtečení | Chráněná virtuální funkce, která extrahuje aktuální prvek ze vstupního datového proudu. |
xsgetn | Chráněná virtuální funkce, která extrahuje prvky ze vstupního datového proudu. |
xsputn | Chráněná virtuální funkce, která vloží prvky do výstupního datového proudu. |
Operátory
Operátor | Popis |
---|---|
operator= | Přiřadí hodnoty tohoto objektu z jiného basic_streambuf objektu. |
Požadavky
Header:<streambuf>
Obor názvů: std
basic_streambuf::basic_streambuf
Vytvoří objekt typu basic_streambuf
.
basic_streambuf();
basic_streambuf(const basic_streambuf& right);
Parametry
Vpravo
Lvalue odkaz na basic_streambuf
objekt, který slouží k nastavení hodnot pro tento basic_streambuf
objekt.
Poznámky
První chráněný konstruktor ukládá ukazatel null ve všech ukazatelích, které řídí vstupní vyrovnávací paměť a výstupní vyrovnávací paměť. Ukládá se také locale::classic
v objektu národního prostředí. Další informace najdete v tématu národní prostředí::classic.
Druhý chráněný konstruktor zkopíruje ukazatele a národní prostředí zprava.
basic_streambuf::char_type
Přidruží název typu k parametru šablony Elem .
typedef Elem char_type;
basic_streambuf::eback
Chráněná funkce, která vrací ukazatel na začátek vstupní vyrovnávací paměti.
char_type *eback() const;
Návratová hodnota
Ukazatel na začátek vstupní vyrovnávací paměti.
basic_streambuf::egptr
Chráněná funkce, která vrací ukazatel na konec vstupní vyrovnávací paměti.
char_type *egptr() const;
Návratová hodnota
Ukazatel na konci vstupní vyrovnávací paměti.
basic_streambuf::epptr
Chráněná funkce, která vrací ukazatel na konec výstupní vyrovnávací paměti.
char_type *epptr() const;
Návratová hodnota
Ukazatel nad koncem výstupní vyrovnávací paměti.
basic_streambuf::gbump
Chráněná funkce, která přidá počet k dalšímu ukazateli vstupní vyrovnávací paměti.
void gbump(int count);
Parametry
count
Množství, o které se má ukazatel posunout.
basic_streambuf::getloc
Získá národní prostředí basic_streambuf objektu.
locale getloc() const;
Návratová hodnota
Uložený objekt národního prostředí.
Poznámky
Související informace najdete v tématu ios_base::getloc.
Příklad
// 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
Chráněná funkce, která vrací ukazatel na další prvek vstupní vyrovnávací paměti.
char_type *gptr() const;
Návratová hodnota
Ukazatel na další prvek vstupní vyrovnávací paměti.
basic_streambuf::imbue
Chráněná virtuální funkce volat pubimbue.
virtual void imbue(const locale& _Loc);
Parametry
_Loc
Odkaz na národní prostředí.
Poznámky
Výchozí chování spočívá v tom, že nic neuděláte.
basic_streambuf::in_avail
Vrátí počet prvků, které jsou připravené ke čtení z vyrovnávací paměti.
streamsize in_avail();
Návratová hodnota
Počet prvků, které jsou připravené ke čtení z vyrovnávací paměti.
Poznámky
Pokud je k dispozici pozice čtení, vrátí členová funkce egptr - gptr. V opačném případě vrátí showmanyc.
Příklad
// 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
Přidruží název typu v rámci basic_streambuf oboru k jednomu z typů v parametru šablony.
typedef typename traits_type::int_type int_type;
basic_streambuf::off_type
Přidruží název typu v rámci basic_streambuf oboru k jednomu z typů v parametru šablony.
typedef typename traits_type::off_type off_type;
basic_streambuf::operator=
Přiřadí hodnoty tohoto objektu z jiného basic_streambuf
objektu.
basic_streambuf& operator=(const basic_streambuf& right);
Parametry
Vpravo
Lvalue odkaz na basic_streambuf
objekt, který slouží k přiřazení hodnot k tomuto objektu.
Poznámky
Operátor chráněného člena kopíruje zprava ukazatele, které řídí vstupní vyrovnávací paměť a výstupní vyrovnávací paměť. Ukládá také right.
getloc() v locale object
souboru . *this
Vrátí .
basic_streambuf::overflow
Chráněná virtuální funkce, kterou lze volat při vložení nového znaku do plné vyrovnávací paměti.
virtual int_type overflow(int_type _Meta = traits_type::eof());
Parametry
_Meta
Znak, který se má vložit do vyrovnávací paměti, nebo traits_type::eof.
Návratová hodnota
Pokud funkce nemůže být úspěšná, vrátí traits_type::eof nebo vyvolá výjimku. V opačném případě vrátí traits_type::not_eof(_ Meta). Výchozí chování je vrátit traits_type::eof.
Poznámky
Pokud se _Meta nerovná traits_type::eof, chráněná virtuální členová funkce se snaží vložit prvek traits_type::to_char_type(_Meta) do výstupního datového proudu. Může to udělat různými způsoby:
write position
Pokud je k dispozici, může prvek uložit do pozice zápisu a zvýšit další ukazatel pro výstupní vyrovnávací paměť.Může zpřístupnit pozici zápisu přidělením nového nebo dalšího úložiště pro výstupní vyrovnávací paměť.
Může zpřístupnit pozici zápisu tak, že zapíše do nějakého externího cíle, některé nebo všechny prvky mezi začátkem a dalšími ukazateli pro výstupní vyrovnávací paměť.
Funkce virtuálního přetečení společně s funkcemi synchronizace a podtečení definuje charakteristiky odvozené třídy streambuf. Každá odvozená třída může implementovat přetečení odlišně, ale rozhraní s volající stream třídy je stejné.
Funkce overflow
je nejčastěji volána veřejnými streambuf
funkcemi, jako sputc
je a sputn
kdy je oblast vložení plná, ale jiné třídy, včetně tříd datových proudů, mohou volat overflow
kdykoli.
Funkce využívá znaky v oblasti vložení mezi pbase
ukazateli a pptr
potom znovu inicializuje oblast vložení. Funkce overflow
musí také využívat nCh
(pokud nCh
není EOF
) nebo se může rozhodnout, že tento znak umístí do nové oblasti put, aby se spotřeboval při dalším volání.
Definice využívání se liší mezi odvozené třídy. Třída například filebuf
zapisuje své znaky do souboru, zatímco strstreambuf
třída je uchovává ve své vyrovnávací paměti a (pokud je vyrovnávací paměť označena jako dynamická) rozšiřuje vyrovnávací paměť v reakci na volání přetečení. Toto rozšíření se dosahuje uvolněním staré vyrovnávací paměti a nahrazením novou, větší. Ukazatele jsou podle potřeby upraveny.
basic_streambuf::p backfail
Chráněná virtuální členová funkce, která se pokusí vložit prvek zpět do vstupního datového proudu a pak ho nastavit jako aktuální prvek (na který odkazuje další ukazatel).
virtual int_type pbackfail(int_type _Meta = traits_type::eof());
Parametry
_Meta
Znak, který se má vložit do vyrovnávací paměti, nebo traits_type::eof.
Návratová hodnota
Pokud funkce nemůže být úspěšná, vrátí traits_type::eof nebo vyvolá výjimku. V opačném případě vrátí jinou hodnotu. Výchozí chování je vrátit traits_type::eof.
Poznámky
Pokud _Meta porovnává rovna traits_type::eof, prvek, který se má nasdílit zpět, je účinně ten, který je již ve streamu před aktuálním prvkem. Jinak se tento prvek nahradí traits_type::to_char_type(_Meta). Funkce může vrátit prvek různými způsoby:
Pokud je k dispozici pozice putbacku, může prvek uložit do pozice putback a dekrementovat další ukazatel vstupní vyrovnávací paměti.
Může zpřístupnit pozici zpětného uložení přidělením nového nebo dalšího úložiště pro vstupní vyrovnávací paměť.
Pro vyrovnávací paměť datového proudu s běžnými vstupními a výstupními datovými proudy může být k dispozici umístění zpětného umístění zápisem, do některého externího cíle, některých nebo všech prvků mezi začátkem a dalšími ukazateli pro výstupní vyrovnávací paměť.
basic_streambuf::p báze
Chráněná funkce, která vrací ukazatel na začátek výstupní vyrovnávací paměti.
char_type *pbase() const;
Návratová hodnota
Ukazatel na začátek výstupní vyrovnávací paměti.
basic_streambuf::p bump
Chráněná funkce, která přidá počet k dalšímu ukazateli výstupní vyrovnávací paměti.
void pbump(int count);
Parametry
count
Početznakůch
basic_streambuf::p os_type
Přidruží název typu v rámci basic_streambuf oboru k jednomu z typů v parametru šablony.
typedef typename traits_type::pos_type pos_type;
basic_streambuf::p ptr
Chráněná funkce, která vrací ukazatel na další prvek výstupní vyrovnávací paměti.
char_type *pptr() const;
Návratová hodnota
Ukazatel na další prvek výstupní vyrovnávací paměti.
basic_streambuf::p ubimbue
Nastaví národní prostředí objektu basic_streambuf.
locale pubimbue(const locale& _Loc);
Parametry
_Loc
Odkaz na národní prostředí.
Návratová hodnota
Předchozí hodnota uložená v objektu národního prostředí.
Poznámky
Členské funkce ukládá _ Loc v objektu národního prostředí a volá imbue.
Příklad
Podívejte se na basic_ios::imbue příkladu, který používá pubimbue
.
basic_streambuf::p ubseekoff
Volá hledání, chráněnou virtuální funkci, která je přepsána v odvozené třídě.
pos_type pubseekoff(off_type _Off,
ios_base::seekdir _Way,
ios_base::openmode _Which = ios_base::in | ios_base::out);
Parametry
_Pryč
Pozice, která se má hledat vzhledem k _Way.
_Cesta
Výchozí bod pro operace posunu. Informace o možných hodnotách najdete v nástroji seekdir .
_Který
Určuje režim pozice ukazatele. Výchozí nastavení je umožnit úpravu pozic čtení a zápisu.
Návratová hodnota
Vrátí novou pozici nebo neplatnou pozici datového proudu (seekoff(_ Off, _Way
, _Which
)).
Poznámky
Přesune ukazatel vzhledem k _Way.
basic_streambuf::p ubseekpos
Volá funkce seekpos, chráněnou virtuální funkci, která je přepsána v odvozené třídě, a resetuje aktuální pozici ukazatele.
pos_type pubseekpos(pos_type _Sp, ios_base::openmode _Which = ios_base::in | ios_base::out);
Parametry
_Sp
Pozice, na které se má hledat.
_Který
Určuje režim pozice ukazatele. Výchozí nastavení je umožnit úpravu pozic čtení a zápisu.
Návratová hodnota
Nová pozice nebo neplatná pozice datového proudu. Chcete-li zjistit, zda je pozice datového proudu neplatná, porovnejte návratovou hodnotu s pos_type(off_type(-1))
.
Poznámky
Členová funkce vrátí funkce seekpos(_ Sp; _Which
).
basic_streambuf::p ubsetbuf
Volá setbuf, chráněnou virtuální funkci, která je přepsána v odvozené třídě.
basic_streambuf<Elem, Tr> *pubsetbuf(
char_type* _Buffer,
streamsize count);
Parametry
_Vyrovnávací paměť
Ukazatel na char_type
tuto instanci.
count
Velikost vyrovnávací paměti.
Návratová hodnota
Vrátí setbuf( _Buffer
, count
).
basic_streambuf::p ubsync
Volá synchronizaci, chráněnou virtuální funkci, která je přepsána v odvozené třídě, a aktualizuje externí datový proud přidružený k této vyrovnávací paměti.
int pubsync();
Návratová hodnota
Vrátí synchronizaci nebo -1, pokud dojde k chybě.
basic_streambuf::sbumpc
Přečte a vrátí aktuální prvek a přesune ukazatel datového proudu.
int_type sbumpc();
Návratová hodnota
Aktuální prvek.
Poznámky
Pokud je k dispozici pozice čtení, vrátí členová funkce traits_type::to_int_type(*gptr) a zvýší další ukazatel vstupní vyrovnávací paměti. V opačném případě vrátí uflow.
Příklad
// 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
Chráněná virtuální členová funkce, která se pokouší změnit aktuální pozice pro řízené datové proudy.
virtual pos_type seekoff(
off_type _Off,
ios_base::seekdir _Way,
ios_base::openmode _Which = ios_base::in | ios_base::out);
Parametry
_Pryč
Pozice, která se má hledat vzhledem k _Way.
_Cesta
Výchozí bod pro operace posunu. Informace o možných hodnotách najdete v nástroji seekdir .
_Který
Určuje režim pozice ukazatele. Výchozí nastavení je umožnit úpravu pozic čtení a zápisu.
Návratová hodnota
Vrátí novou pozici nebo neplatnou pozici datového proudu (seekoff
_ Vypnuto, _Way
, _Which
)).
Poznámky
Nové umístění je určeno takto:
Pokud
_Way
==ios_base::beg
je nová pozice začátek streamu plus _ Vypnuto.Pokud
_Way
==ios_base::cur
je nová pozice aktuální pozice datového proudu plus _ Vypnuto.Pokud
_Way
==ios_base::end
, nová pozice je konec streamu plus _ Vypnuto.
Obvykle platí, že pokud je hodnota &ios_base::in nenulová, vstupní datový proud je ovlivněn a pokud je hodnota &ios_base::out nenulová, výstupní datový proud je ovlivněn. Skutečné použití tohoto parametru se však u odvozených vyrovnávacích pamětí streamu liší.
Pokud je funkce úspěšná při změně pozice nebo pozic toku, vrátí výslednou pozici datového proudu nebo jednu z výsledných pozic datového proudu. V opačném případě vrátí neplatnou pozici datového proudu. Výchozí chování je vrátit neplatnou pozici datového proudu.
basic_streambuf::seekpos
Chráněná virtuální členová funkce, která se pokouší změnit aktuální pozice pro řízené datové proudy.
virtual pos_type seekpos(pos_type _Sp, ios_base::openmode _Which = ios_base::in | ios_base::out);
Parametry
_Sp
Pozice, na které se má hledat.
_Který
Určuje režim pozice ukazatele. Výchozí nastavení je umožnit úpravu pozic čtení a zápisu.
Návratová hodnota
Nová pozice nebo neplatná pozice datového proudu. Chcete-li zjistit, zda je pozice datového proudu neplatná, porovnejte návratovou hodnotu s pos_type(off_type(-1))
.
Poznámky
Nová pozice je _ Sp.
Obvykle platí, že pokud je hodnota &ios_base::in nenulová, vstupní datový proud je ovlivněn a pokud je hodnota &ios_base::out nenulová, výstupní datový proud je ovlivněn. Skutečné použití tohoto parametru se však u odvozených vyrovnávacích pamětí streamu liší.
Pokud je funkce úspěšná při změně pozice nebo pozic toku, vrátí výslednou pozici datového proudu nebo jednu z výsledných pozic datového proudu. V opačném případě vrátí neplatnou pozici datového proudu (-1). Výchozí chování je vrátit neplatnou pozici datového proudu.
basic_streambuf::setbuf
Chráněná virtuální členová funkce, která provádí operaci určitou pro každou odvozenou vyrovnávací paměť datového proudu.
virtual basic_streambuf<Elem, Tr> *setbuf(
char_type* _Buffer,
streamsize count);
Parametry
_Vyrovnávací paměť
Ukazatel na vyrovnávací paměť.
count
Velikost vyrovnávací paměti.
Návratová hodnota
Výchozí chování je vrátit this
.
Poznámky
Viz basic_filebuf. setbuf
poskytuje oblast paměti pro streambuf
objekt, který se má použít. Způsob použití vyrovnávací paměti v definovaných v odvozených třídách.
basic_streambuf::setg
Chráněná funkce, která ukládá _ Gbeg na počáteční ukazatel, _Gnext
v dalším ukazateli a _Gend
na konci ukazatele pro vstupní vyrovnávací paměť.
void setg(char_type* _Gbeg,
char_type* _Gnext,
char_type* _Gend);
Parametry
_Gbeg
Ukazatel na začátek vyrovnávací paměti.
_Gnext
Ukazatel na místo uprostřed vyrovnávací paměti.
_Gend
Ukazatel na konec vyrovnávací paměti.
basic_streambuf::setp
Chráněná funkce, která ukládá _Pbeg na počáteční ukazatel a _Pend na koncovém ukazateli pro výstupní vyrovnávací paměť.
void setp(char_type* _Pbeg, char_type* _Pend);
Parametry
_Pbeg
Ukazatel na začátek vyrovnávací paměti.
_Odložit rozhodnutí
Ukazatel na konec vyrovnávací paměti.
basic_streambuf::sgetc
Vrátí aktuální prvek bez změny pozice ve streamu.
int_type sgetc();
Návratová hodnota
Aktuální prvek.
Poznámky
Pokud je k dispozici pozice čtení, vrátí členová funkce traits_type::to_int_type( *
gptr). V opačném případě vrátí podtečení.
Příklad
// 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
Extrahuje až počet znaků ze vstupní vyrovnávací paměti a uloží je do zadaného ptru vyrovnávací paměti.
Tato metoda je potenciálně nebezpečná, protože volající spoléhá na kontrolu správnosti předaných hodnot.
streamsize sgetn(
char_type* ptr,
streamsize count);
Parametry
ptr
Vyrovnávací paměť obsahující extrahované znaky.
count
Počet prvků, které se mají přečíst.
Návratová hodnota
Počet přečtených prvků. Další informace najdete v tématu streamsize další informace.
Poznámky
Členská funkce vrátí xsgetn( ptr
, count
).
Příklad
// 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
Chráněná virtuální členová funkce, která vrací počet znaků, které je možné extrahovat ze vstupního datového proudu, a zajistit, aby program nebyl předmětem neomezeného čekání.
virtual streamsize showmanyc();
Návratová hodnota
Výchozí chování je vrátit nulu.
basic_streambuf::snextc
Přečte aktuální prvek a vrátí následující prvek.
int_type snextc();
Návratová hodnota
Další prvek v datovém proudu.
Poznámky
Členská funkce volá sbumpc a pokud tato funkce vrátí traits_type::eof, vrátí traits_type::eof. V opačném případě vrátí sgetc.
Příklad
// 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
Vloží do datového proudu char_type.
int_type sputbackc(char_type _Ch);
Parametry
_Ch
Znak.
Návratová hodnota
Vrátí znak nebo chybu.
Poznámky
Pokud je k dispozici pozice pro vložení a _Ch porovnává rovna znaku uloženému v této pozici, členová funkce sníží další ukazatel vstupní vyrovnávací paměti a vrátí traits_type::to_int_type( _Ch
). V opačném případě vrátí chybu pbackfail( _Ch
).
Příklad
// 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
Vloží znak do datového proudu.
int_type sputc(char_type _Ch);
Parametry
_Ch
Znak.
Návratová hodnota
Vrátí znak, pokud je úspěšný.
Poznámky
write position
Pokud je k dispozici, členová funkce ukládá _Ch na pozici zápisu, zvýší další ukazatel výstupní vyrovnávací paměti a vrátí traits_type::to_int_type( _Ch
). V opačném případě vrátí přetečení( _Ch
).
Příklad
// 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
Vloží řetězec znaků do datového proudu.
streamsize sputn(const char_type* ptr, streamsize count);
Parametry
ptr
Řetězec znaků.
count
Počet znaků.
Návratová hodnota
Počet znaků vložených do datového proudu
Poznámky
Členská funkce vrátí hodnotu xsputn( ptr
, count
). Další informace naleznete v části Poznámky tohoto člena.
Příklad
// 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
Přesunutí za aktuální prvek v datovém proudu
void stossc();
Poznámky
Členská funkce volá sbumpc. K zadání této členské funkce není nutná implementace.
Příklad
// 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
Získá znak ze streamu.
int_type sungetc();
Návratová hodnota
Vrátí znak nebo chybu.
Poznámky
Pokud je k dispozici pozice putbacku, členová funkce dekrementuje další ukazatel vstupní vyrovnávací paměti a vrátí traits_type::
to_int_type( *
gptr). Není však vždy možné určit poslední přečtený znak, aby se mohl zachytit ve stavu aktuální vyrovnávací paměti. Pokud je to pravda, vrátí funkce pbackfail. Chcete-li se této situaci vyhnout, sledujte znak, který se má vrátit zpět a volat sputbackc(ch)
, což nebude neúspěšné za předpokladu, že ho nezavoláte na začátku datového proudu a nepokoušíte se vrátit více než jeden znak.
Příklad
// 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
Vymění hodnoty v tomto objektu pro hodnoty v zadaném basic_streambuf
objektu.
void swap(basic_streambuf& right);
Parametry
Vpravo
Lvalue odkaz na basic_streambuf
objekt, který se používá k výměně hodnot.
Poznámky
Chráněná členová funkce se vyměňuje se správnými ukazateli , které řídí a input buffer
output buffer
. Také vyměňuje right.
getloc() s objektem locale
.
basic_streambuf::sync
Chráněná virtuální funkce, která se pokusí synchronizovat řízené streamy s libovolnými přidruženými externími streamy.
virtual int sync();
Návratová hodnota
Pokud funkce nemůže být úspěšná, vrátí hodnotu -1. Výchozí chování je vrátit nulu.
Poznámky
sync
zahrnuje zápis všech prvků mezi začátkem a dalšími ukazateli pro výstupní vyrovnávací paměť. Nezahrnuje vložení žádných prvků mezi dalšími a koncovými ukazateli vstupní vyrovnávací paměti.
basic_streambuf::traits_type
Přidruží název typu k parametru šablony Tr .
typedef Tr traits_type;
basic_streambuf::uflow
Chráněná virtuální funkce, která extrahuje aktuální prvek ze vstupního datového proudu.
virtual int_type uflow();
Návratová hodnota
Aktuální prvek.
Poznámky
Chráněná virtuální členová funkce se pokusí extrahovat aktuální prvek ch ze vstupního datového proudu, pak přejít na aktuální pozici datového proudu a vrátit prvek jako traits_type::to_int_type( ch). Může to udělat různými způsoby:
Pokud je pozice čtení k dispozici, přebírá funkci ch jako prvek uložený v pozici čtení a posune další ukazatel pro vstupní vyrovnávací paměť.
Může číst prvek přímo z nějakého externího zdroje a doručit ho jako hodnotu ch.
Pro vyrovnávací paměť datového proudu s běžnými vstupními a výstupními datovými proudy může zpřístupnit pozici čtení tím, že zapíše do nějakého externího cíle, některé nebo všechny prvky mezi začátkem a dalšími ukazateli pro výstupní vyrovnávací paměť. Nebo může přidělit nové nebo další úložiště pro vstupní vyrovnávací paměť. Funkce se pak přečte z některého externího zdroje, jednoho nebo více prvků.
Pokud funkce nemůže být úspěšná, vrátí traits_type::eof nebo vyvolá výjimku. V opačném případě vrátí aktuální prvek ch
ve vstupním datovém proudu, převedený podle popisu výše a přejde na další ukazatel vstupní vyrovnávací paměti. Výchozí chování je volat podtečení a pokud tato funkce vrátí traits_type::eof, vrátí traits_type::eof. V opačném případě funkce vrátí aktuální prvek ch ve vstupním datovém proudu, převedený podle předchozího popisu a přejde na další ukazatel vstupní vyrovnávací paměti.
basic_streambuf::underflow
Chráněná virtuální funkce pro extrahování aktuálního prvku ze vstupního datového proudu
virtual int_type underflow();
Návratová hodnota
Aktuální prvek.
Poznámky
Chráněná virtuální členová funkce usiluje o extrakci aktuálního prvku ch ze vstupního proudu, aniž by se posunovala aktuální pozice proudu, a vrací ji jakotraits_type::
to_int_type( ch). Může to udělat různými způsoby:
Pokud je k dispozici pozice čtení, ch je prvek uložený v pozici čtení. Další informace naleznete v části Poznámky třídy basic_streambuf.
Může zpřístupnit pozici čtení přidělením nového nebo dalšího úložiště pro vstupní vyrovnávací paměť a následným čtením z některého externího zdroje, jednoho nebo více prvků. Další informace naleznete v části Poznámky třídy basic_streambuf.
Pokud funkce nemůže být úspěšná, vrátí traits_type::
hodnotu eof()
nebo vyvolá výjimku. V opačném případě vrátí aktuální prvek ve vstupním datovém proudu převedený podle předchozího popisu. Výchozí chování je vrátit traits_type::eof()
.
Virtuální underflow
funkce, s funkcí synchronizace a přetečení , definuje charakteristiky streambuf
-odvozené třídy. Každá odvozená třída může implementovat underflow
odlišně, ale rozhraní s volající stream třídy je stejné.
Funkce underflow
je nejčastěji volána veřejnými streambuf
funkcemi, jako jsou sgetc a sgetn , když je oblast get prázdná, ale jiné třídy, včetně tříd datových proudů, mohou volat underflow
kdykoli.
Funkce underflow
poskytuje oblast get se znaky ze vstupního zdroje. Pokud oblast get obsahuje znaky, underflow
vrátí první znak. Pokud je oblast get prázdná, vyplní oblast get a vrátí další znak (který opustí v oblasti get). Pokud nejsou k dispozici žádné další znaky, underflow
vrátí a EOF
ponechá oblast get prázdnou.
strstreambuf
Ve třídě upraví ukazatel egptr pro přístup k úložišti, underflow
který byl dynamicky přidělen voláním overflow
.
basic_streambuf::xsgetn
Chráněná virtuální funkce pro extrakci prvků ze vstupního datového proudu
Tato metoda je potenciálně nebezpečná, protože volající spoléhá na kontrolu správnosti předaných hodnot.
virtual streamsize xsgetn(
char_type* ptr,
streamsize count);
Parametry
ptr
Vyrovnávací paměť obsahující extrahované znaky.
count
Počet prvků, které se mají extrahovat.
Návratová hodnota
Počet extrahovaných prvků.
Poznámky
Chráněná virtuální členská funkce extrahuje z vstupního datového proudu prvky, jako by opakovaným voláním sbumpc a ukládá je do pole začínajícím na ptr. Vrátí počet extrahovaných prvků.
basic_streambuf::xsputn
Chráněná virtuální funkce pro vložení prvků do výstupního datového proudu
virtual streamsize xsputn(const char_type* ptr, streamsize count);
Parametry
ptr
Ukazatel na prvky, které chcete vložit.
count
Počet prvků, které se mají vložit
Návratová hodnota
Počet prvků vložených do datového proudu
Poznámky
Chráněná virtuální členská funkce vloží do výstupního datového proudu až počet prvků, jako by opakovanými voláními sputc, od pole začínajícího na ptr. Vložení znaků do výstupního datového proudu se zastaví, jakmile budou zapsány všechny znaky počtu , nebo pokud by volání sputc( count)
vrátilo traits::eof()
. Vrátí počet vložených prvků.
Viz také
Bezpečný přístup z více vláken ve standardní knihovně C++
iostream – programování
iostreams – konvence