basic_streambuf — Klasa
Opisuje abstrakcyjną klasę bazową do wyprowadzania buforu strumienia, który kontroluje transmisję elementów do i z określonej reprezentacji strumienia.
Składnia
template <class Elem, class Tr = char_traits<Elem>>
class basic_streambuf;
Parametry
Tr
Znak traits_type.
Uwagi
Szablon klasy opisuje abstrakcyjną klasę bazową służącą do wyprowadzania buforu strumienia, który kontroluje transmisję elementów do i z określonej reprezentacji strumienia. Obiekt klasy basic_streambuf
ułatwia kontrolowanie strumienia za pomocą elementów typu Tr, znanych również jako char_type, których cechy znaków są określane przez char_traits klasy, znanej również jako traits_type.
Każdy bufor strumienia koncepcyjnie kontroluje dwa niezależne strumienie: jeden dla wyodrębniania (danych wejściowych) i jeden dla wstawiania (danych wyjściowych). Określona reprezentacja może jednak spowodować, że oba te strumienie będą niedostępne. Zazwyczaj utrzymuje pewną relację między dwoma strumieniami. To, co wstawiasz do strumienia wyjściowego basic_stringbuf<Elem
, Tr
> na przykład obiektu, jest to, co później wyodrębniasz ze strumienia wejściowego. Po ustawieniu jednego strumienia basic_filebuf><Elem
Tr
obiekt umieszcza drugi strumień w parze.
Interfejs publiczny do szablonu basic_streambuf
klasy dostarcza operacje wspólne dla wszystkich strumienia, jednak wyspecjalizowane. Chroniony interfejs dostarcza operacje potrzebne do wykonania określonej reprezentacji strumienia. Chronione funkcje wirtualnego elementu członkowskiego umożliwiają dostosowanie zachowania buforu strumienia pochodnego na potrzeby określonej reprezentacji strumienia. Każdy bufor strumienia pochodnego w tej bibliotece opisuje, w jaki sposób specjalizuje się w zachowaniu chronionych funkcji wirtualnych elementów członkowskich. Domyślne zachowanie klasy bazowej, która często nie ma nic wspólnego, jest opisane w tym artykule.
Pozostałe chronione funkcje członkowskie kontrolują kopiowanie do i z dowolnego magazynu dostarczonego do buforowania transmisji do i ze strumieni. Bufor wejściowy, na przykład, charakteryzuje się:
eback— wskaźnik na początek buforu.
gptr, wskaźnik do następnego elementu do odczytu.
egptr, wskaźnik obok końca buforu.
Podobnie bufor wyjściowy charakteryzuje się następującymi cechami:
pbase , wskaźnik na początek buforu.
pptr, wskaźnik do następnego elementu do zapisu.
epptr, wskaźnik obok końca buforu.
W przypadku dowolnego buforu używany jest następujący protokół:
Jeśli następny wskaźnik ma wartość null, żaden bufor nie istnieje. W przeciwnym razie wszystkie trzy wskaźniki wskazują tę samą sekwencję. Można je bezpiecznie porównać pod kątem kolejności.
W przypadku buforu wyjściowego, jeśli następny wskaźnik porównuje mniej niż wskaźnik końcowy, można przechowywać element w pozycji zapisu wyznaczonej przez następny wskaźnik.
W przypadku buforu wejściowego, jeśli następny wskaźnik porównuje mniej niż wskaźnik końcowy, można odczytać element w pozycji odczytu wyznaczonej przez następny wskaźnik.
W przypadku buforu wejściowego, jeśli wskaźnik początkowy porównuje mniej niż następny wskaźnik, można przywrócić element w pozycji odwróconej wyznaczonej przez dekrementowany następny wskaźnik.
Wszystkie chronione funkcje wirtualne składowe, które piszesz dla klasy pochodzącej z basic_streambuf
<Elem
klasy , Tr
> muszą współpracować w utrzymaniu tego protokołu.
Obiekt klasy basic_streambuf
<Elem
, Tr
> przechowuje sześć wskaźników wcześniej opisanych. Przechowuje również obiekt ustawień regionalnych w obiekcie typu ustawienia regionalne do potencjalnego użycia przez bufor strumienia pochodnego.
Konstruktory
Konstruktor | opis |
---|---|
basic_streambuf | Tworzy obiekt typu basic_streambuf . |
Typedefs
Nazwa typu | opis |
---|---|
char_type | Kojarzy nazwę typu z parametrem szablonu Elem . |
int_type | Kojarzy nazwę typu w basic_streambuf zakresie z parametrem szablonu Elem . |
off_type | Kojarzy nazwę typu w basic_streambuf zakresie z parametrem szablonu Elem . |
pos_type | Kojarzy nazwę typu w basic_streambuf zakresie z parametrem szablonu Elem . |
traits_type | Kojarzy nazwę typu z parametrem szablonu Tr . |
Funkcje składowe
Funkcja składowa | opis |
---|---|
powrót | Funkcja chroniona, która zwraca wskaźnik na początek buforu wejściowego. |
egptr | Chroniona funkcja zwracająca wskaźnik obok końca buforu wejściowego. |
epptr | Chroniona funkcja zwracająca wskaźnik obok końca buforu wyjściowego. |
gbump | Chroniona funkcja, która dodaje count do następnego wskaźnika dla buforu wejściowego. |
getloc | basic_streambuf Pobiera ustawienia regionalne obiektu. |
gptr | Funkcja chroniona, która zwraca wskaźnik do następnego elementu buforu wejściowego. |
Nasycić | Chroniona funkcja wirtualna wywoływana przez pubimbue. |
in_avail | Zwraca liczbę elementów gotowych do odczytu z buforu. |
przepełnienie | Chroniona funkcja wirtualna, którą można wywołać, gdy nowy znak zostanie wstawiony do pełnego buforu. |
pbackfail | Chroniona funkcja wirtualna elementu członkowskiego, która próbuje przywrócić element do strumienia wejściowego, a następnie ustawić go jako bieżący element (wskazywany przez następny wskaźnik). |
pbase | Chroniona funkcja, która zwraca wskaźnik na początek buforu wyjściowego. |
pbump | Chroniona funkcja, która dodaje count do następnego wskaźnika dla buforu wyjściowego. |
pptr | Funkcja chroniona, która zwraca wskaźnik do następnego elementu buforu wyjściowego. |
pubimbue | basic_streambuf Ustawia ustawienia regionalne obiektu. |
pubseekoff | Wywołuje funkcję seekoff, chronioną funkcję wirtualną, która jest zastępowana w klasie pochodnej. |
pubseekpos | Wywołuje funkcję seekpos, chronioną funkcję wirtualną, która jest zastępowana w klasie pochodnej i resetuje bieżącą pozycję wskaźnika. |
pubsetbuf | Wywołuje setbuf, chronioną funkcję wirtualną, która jest zastępowana w klasie pochodnej. |
pubsync | Wywołuje funkcję synchronizacji, chronioną funkcję wirtualną, która jest zastępowana w klasie pochodnej i aktualizuje strumień zewnętrzny skojarzony z tym buforem. |
sbumpc | Odczytuje i zwraca bieżący element, przenosząc wskaźnik strumienia. |
seekoff | Chroniona funkcja wirtualnego elementu członkowskiego próbuje zmienić bieżące pozycje dla kontrolowanych strumieni. |
seekpos | Chroniona funkcja wirtualnego elementu członkowskiego próbuje zmienić bieżące pozycje dla kontrolowanych strumieni. |
setbuf | Chroniona funkcja wirtualnego elementu członkowskiego wykonuje operację określoną dla każdego buforu strumienia pochodnego. |
setg | Chroniona funkcja, która przechowuje _Gbeg w wskaźniku początkowym, _Gnext w następnym wskaźniku i _Gend w wskaźniku końcowym dla buforu wejściowego. |
setp | Chroniona funkcja, która przechowuje _Pbeg w wskaźniku początkowym i _Pend w wskaźniku końcowym buforu wyjściowego. |
sgetc | Zwraca bieżący element bez zmiany pozycji w strumieniu. |
sgetn | Zwraca liczbę odczytanych elementów. |
showmanyc | Chroniona funkcja wirtualna elementu członkowskiego zwracająca liczbę znaków, które można wyodrębnić ze strumienia wejściowego. Gwarantuje również, że program nie będzie mógł czekać na czas nieokreślony. |
snextc | Odczytuje bieżący element i zwraca następujący element. |
sputbackc | Umieszcza element char_type w strumieniu. |
sputc | Umieszcza znak w strumieniu. |
sputn | Umieszcza ciąg znaków w strumieniu. |
stossc | Przenieś obok bieżącego elementu w strumieniu. |
sungetc | Pobiera znak ze strumienia. |
zamiana | Wymienia wartości w tym obiekcie dla wartości w podanym basic_streambuf parametrze obiektu. |
synchronizować | Chroniona funkcja wirtualna, która próbuje zsynchronizować kontrolowane strumienie z dowolnymi skojarzonymi strumieniami zewnętrznymi. |
przepływ uflow | Chroniona funkcja wirtualna, która wyodrębnia bieżący element ze strumienia wejściowego. |
Niedomiar | Chroniona funkcja wirtualna, która wyodrębnia bieżący element ze strumienia wejściowego. |
xsgetn | Chroniona funkcja wirtualna, która wyodrębnia elementy ze strumienia wejściowego. |
xsputn | Chroniona funkcja wirtualna, która wstawia elementy do strumienia wyjściowego. |
Operatory
Operator | opis |
---|---|
operator = | Przypisuje wartości tego obiektu z innego basic_streambuf obiektu. |
Wymagania
Nagłówek:<streambuf>
Przestrzeń nazw: std
basic_streambuf::basic_streambuf
Tworzy obiekt typu basic_streambuf
.
basic_streambuf();
basic_streambuf(const basic_streambuf& right);
Parametry
Prawy
Odwołanie lvalue do basic_streambuf
obiektu, który jest używany do ustawiania wartości dla tego basic_streambuf
obiektu.
Uwagi
Pierwszy chroniony konstruktor przechowuje wskaźnik o wartości null we wszystkich wskaźnikach kontrolujących bufor wejściowy i bufor wyjściowy. Przechowuje również locale::classic
w obiekcie ustawień regionalnych. Aby uzyskać więcej informacji, zobacz ustawienia regionalne::classic.
Drugi chroniony konstruktor kopiuje wskaźniki i ustawienia regionalne z prawej strony.
basic_streambuf::char_type
Kojarzy nazwę typu z parametrem szablonu Elem .
typedef Elem char_type;
basic_streambuf::eback
Funkcja chroniona, która zwraca wskaźnik na początek buforu wejściowego.
char_type *eback() const;
Wartość zwracana
Wskaźnik na początek buforu wejściowego.
basic_streambuf::egptr
Chroniona funkcja zwracająca wskaźnik obok końca buforu wejściowego.
char_type *egptr() const;
Wartość zwracana
Wskaźnik obok końca buforu wejściowego.
basic_streambuf::epptr
Chroniona funkcja zwracająca wskaźnik obok końca buforu wyjściowego.
char_type *epptr() const;
Wartość zwracana
Wskaźnik obok końca buforu wyjściowego.
basic_streambuf::gbump
Chroniona funkcja, która dodaje liczbę do następnego wskaźnika dla buforu wejściowego.
void gbump(int count);
Parametry
count
Kwota, o którą należy przejść wskaźnik.
basic_streambuf::getloc
Pobiera ustawienia regionalne obiektu basic_streambuf.
locale getloc() const;
Wartość zwracana
Przechowywany obiekt ustawień regionalnych.
Uwagi
Aby uzyskać powiązane informacje, zobacz ios_base::getloc.
Przykład
// 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
Funkcja chroniona, która zwraca wskaźnik do następnego elementu buforu wejściowego.
char_type *gptr() const;
Wartość zwracana
Wskaźnik do następnego elementu buforu wejściowego.
basic_streambuf::imbue
Chroniona funkcja wirtualna wywoływana przez pubimbue.
virtual void imbue(const locale& _Loc);
Parametry
_Loc
Odwołanie do ustawień regionalnych.
Uwagi
Domyślne zachowanie polega na tym, aby nic nie robić.
basic_streambuf::in_avail
Zwraca liczbę elementów gotowych do odczytu z buforu.
streamsize in_avail();
Wartość zwracana
Liczba elementów gotowych do odczytu z buforu.
Uwagi
Jeśli pozycja odczytu jest dostępna, funkcja składowa zwraca gptr egptr - . W przeciwnym razie zwraca showmanyc.
Przykład
// 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
Kojarzy nazwę typu w zakresie basic_streambuf z jednym z typów w parametrze szablonu.
typedef typename traits_type::int_type int_type;
basic_streambuf::off_type
Kojarzy nazwę typu w zakresie basic_streambuf z jednym z typów w parametrze szablonu.
typedef typename traits_type::off_type off_type;
basic_streambuf::operator=
Przypisuje wartości tego obiektu z innego basic_streambuf
obiektu.
basic_streambuf& operator=(const basic_streambuf& right);
Parametry
Prawy
Odwołanie lvalue do obiektu używanego basic_streambuf
do przypisywania wartości do tego obiektu.
Uwagi
Chroniony operator elementu członkowskiego kopiuje z prawej strony wskaźniki kontrolujące bufor wejściowy i bufor wyjściowy. Przechowuje również right.
polecenie getloc() w pliku locale object
. Zwraca wartość *this
.
basic_streambuf::overflow
Chroniona funkcja wirtualna, którą można wywołać, gdy nowy znak zostanie wstawiony do pełnego buforu.
virtual int_type overflow(int_type _Meta = traits_type::eof());
Parametry
_Meta
Znak do wstawienia do buforu lub traits_type::eof.
Wartość zwracana
Jeśli funkcja nie powiedzie się, zwraca traits_type::eof lub zgłasza wyjątek. W przeciwnym razie zwraca traits_type::not_eof(_ Meta). Domyślne zachowanie polega na zwracaniu traits_type::eof.
Uwagi
Jeśli _Meta nie porównuje się z traits_type::eof, chroniona funkcja wirtualna elementu członkowskiego podejmuje działania w celu wstawienia elementu traits_type::to_char_type(_Meta) do strumienia wyjściowego. Może to zrobić na różne sposoby:
Jeśli element
write position
jest dostępny, może przechowywać element w pozycji zapisu i zwiększać następny wskaźnik dla buforu wyjściowego.Może ona udostępnić pozycję zapisu, przydzielając nowy lub dodatkowy magazyn dla buforu wyjściowego.
Może ona udostępnić pozycję zapisu, zapisując w niektórych zewnętrznych miejscach docelowych, niektóre lub wszystkie elementy między początku a następnymi wskaźnikami dla buforu wyjściowego.
Funkcja wirtualnego przepełnienia wraz z funkcjami synchronizacji i podpełnienia definiuje cechy klasy pochodnej streambuf. Każda klasa pochodna może implementować przepełnienie inaczej, ale interfejs z klasą wywołującego strumienia jest taki sam.
Funkcja overflow
jest najczęściej wywoływana przez funkcje publiczne, streambuf
takie jak sputc
i sputn
gdy obszar umieszczania jest pełny, ale inne klasy, w tym klasy strumienia, mogą wywoływać overflow
w dowolnym momencie.
Funkcja używa znaków w obszarze umieszczania między pbase
wskaźnikami i pptr
, a następnie ponownie inicjuje obszar umieszczania. Funkcja overflow
musi również używać nCh
(jeśli nCh
nie EOF
jest ), lub może zdecydować się umieścić ten znak w nowym obszarze umieszczania, aby był używany podczas następnego wywołania.
Definicja zużycia różni się w zależności od klas pochodnych. Na przykład filebuf
klasa zapisuje swoje znaki w pliku, podczas gdy strstreambuf
klasa przechowuje je w buforze i (jeśli bufor jest wyznaczony jako dynamiczny) rozszerza bufor w odpowiedzi na wywołanie przepełnienia. To rozszerzenie jest osiągane przez uwolnienie starego buforu i zastąpienie go nowym, większym. Wskaźniki są dostosowywane zgodnie z potrzebami.
basic_streambuf::p backfail
Chroniona funkcja wirtualna elementu członkowskiego, która próbuje przywrócić element do strumienia wejściowego, a następnie ustawić go jako bieżący element (wskazywany przez następny wskaźnik).
virtual int_type pbackfail(int_type _Meta = traits_type::eof());
Parametry
_Meta
Znak do wstawienia do buforu lub traits_type::eof.
Wartość zwracana
Jeśli funkcja nie powiedzie się, zwraca traits_type::eof lub zgłasza wyjątek. W przeciwnym razie zwraca inną wartość. Domyślne zachowanie polega na zwracaniu traits_type::eof.
Uwagi
Jeśli _Meta porównuje wartość równą traits_type::eof, element do odepchnięcia jest skutecznie tym, który znajduje się już w strumieniu przed bieżącym elementem. W przeciwnym razie ten element jest zastępowany przez traits_type::to_char_type(_Meta). Funkcja może umieścić element na różne sposoby:
Jeśli jest dostępna pozycja putback, może przechowywać element w pozycji putback i dekrementować następny wskaźnik dla buforu wejściowego.
Może ona udostępnić pozycję sytuacyjną, przydzielając nowy lub dodatkowy magazyn dla buforu wejściowego.
W przypadku buforu strumienia ze wspólnymi strumieniami wejściowymi i wyjściowymi może ona udostępnić pozycję odłożonego, zapisując w miejscu docelowym zewnętrznym, niektóre lub wszystkie elementy między początkowym i następnym wskaźnikiem dla buforu wyjściowego.
basic_streambuf::p base
Chroniona funkcja, która zwraca wskaźnik na początek buforu wyjściowego.
char_type *pbase() const;
Wartość zwracana
Wskaźnik na początek buforu wyjściowego.
basic_streambuf::p bump
Chroniona funkcja, która dodaje liczbę do następnego wskaźnika dla buforu wyjściowego.
void pbump(int count);
Parametry
count
Liczba znaków, według których ma być przesuwana pozycja zapisu do przodu.
basic_streambuf::p os_type
Kojarzy nazwę typu w zakresie basic_streambuf z jednym z typów w parametrze szablonu.
typedef typename traits_type::pos_type pos_type;
basic_streambuf::p ptr
Funkcja chroniona, która zwraca wskaźnik do następnego elementu buforu wyjściowego.
char_type *pptr() const;
Wartość zwracana
Wskaźnik do następnego elementu buforu wyjściowego.
basic_streambuf::p ubimbue
Ustawia ustawienia regionalne obiektu basic_streambuf.
locale pubimbue(const locale& _Loc);
Parametry
_Loc
Odwołanie do ustawień regionalnych.
Wartość zwracana
Poprzednia wartość przechowywana w obiekcie ustawień regionalnych.
Uwagi
Funkcja składowa przechowuje _ Loc w obiekcie ustawień regionalnych i wywołuje imbue.
Przykład
Zobacz basic_ios::imbue , aby zapoznać się z przykładem, który używa elementu pubimbue
.
basic_streambuf::p ubseekoff
Wywołuje funkcję seekoff, chronioną funkcję wirtualną, która jest zastępowana w klasie pochodnej.
pos_type pubseekoff(off_type _Off,
ios_base::seekdir _Way,
ios_base::openmode _Which = ios_base::in | ios_base::out);
Parametry
_Od
Stanowisko do poszukiwania względem _Way.
_Droga
Punkt początkowy operacji przesunięcia. Zobacz wyszukiwanie możliwych wartości.
_Który
Określa tryb położenia wskaźnika. Ustawieniem domyślnym jest umożliwienie modyfikowania pozycji odczytu i zapisu.
Wartość zwracana
Zwraca nową pozycję lub nieprawidłową pozycję strumienia (seekoff(_ Off, _Way
, _Which
)).
Uwagi
Przenosi wskaźnik względem _Way.
basic_streambuf::p ubseekpos
Wywołuje funkcję seekpos, chronioną funkcję wirtualną, która jest zastępowana w klasie pochodnej i resetuje bieżącą pozycję wskaźnika.
pos_type pubseekpos(pos_type _Sp, ios_base::openmode _Which = ios_base::in | ios_base::out);
Parametry
_Sp
Stanowisko do poszukiwania.
_Który
Określa tryb położenia wskaźnika. Ustawieniem domyślnym jest umożliwienie modyfikowania pozycji odczytu i zapisu.
Wartość zwracana
Nowa pozycja lub nieprawidłowa pozycja strumienia. Aby określić, czy pozycja strumienia jest nieprawidłowa, porównaj wartość zwracaną z pos_type(off_type(-1))
.
Uwagi
Funkcja składowa zwraca funkcje seekpos(_ Sp, _Which
).
basic_streambuf::p ubsetbuf
Wywołuje setbuf, chronioną funkcję wirtualną, która jest zastępowana w klasie pochodnej.
basic_streambuf<Elem, Tr> *pubsetbuf(
char_type* _Buffer,
streamsize count);
Parametry
_Bufor
Wskaźnik dla char_type
tego wystąpienia.
count
Rozmiar buforu.
Wartość zwracana
Zwraca wartość setbuf( _Buffer
, count
).
basic_streambuf::p ubsync
Wywołuje synchronizację, chronioną funkcję wirtualną przesłoniętą w klasie pochodnej i aktualizuje strumień zewnętrzny skojarzony z tym buforem.
int pubsync();
Wartość zwracana
Zwraca synchronizację lub -1, jeśli niepowodzenie.
basic_streambuf::sbumpc
Odczytuje i zwraca bieżący element, przenosząc wskaźnik strumienia.
int_type sbumpc();
Wartość zwracana
Bieżący element.
Uwagi
Jeśli pozycja odczytu jest dostępna, funkcja składowa zwraca traits_type::to_int_type(*gptr) i zwiększa następny wskaźnik dla buforu wejściowego. W przeciwnym razie zwraca przepływ uflow.
Przykład
// 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
Chroniona funkcja wirtualna składowa, która próbuje zmienić bieżące pozycje dla kontrolowanych strumieni.
virtual pos_type seekoff(
off_type _Off,
ios_base::seekdir _Way,
ios_base::openmode _Which = ios_base::in | ios_base::out);
Parametry
_Od
Stanowisko do poszukiwania względem _Way.
_Droga
Punkt początkowy operacji przesunięcia. Zobacz wyszukiwanie możliwych wartości.
_Który
Określa tryb położenia wskaźnika. Ustawieniem domyślnym jest umożliwienie modyfikowania pozycji odczytu i zapisu.
Wartość zwracana
Zwraca nową pozycję lub nieprawidłową pozycję strumienia ( (seekoff
_ Off, _Way
, _Which
)).
Uwagi
Nowe stanowisko jest określane w następujący sposób:
Jeśli
_Way
==ios_base::beg
nowa pozycja to początek strumienia plus _ Off.Jeśli
_Way
==ios_base::cur
, nowe położenie jest bieżącym położeniem strumienia plus _ Wyłączone.Jeśli
_Way
==ios_base::end
nowa pozycja to koniec strumienia plus _ Off.
Zazwyczaj, jeśli element i ios_base::in nie sązerowe, ma to wpływ na strumień wejściowy, a jeśli to i ios_base::out nie ma wpływu na strumień wyjściowy. Rzeczywiste użycie tego parametru różni się jednak między strumieni pochodnych.
Jeśli funkcja zakończy się powodzeniem w zmianie położenia lub położenia strumienia, zwraca wynikową pozycję strumienia lub jedną z wynikowych pozycji strumienia. W przeciwnym razie zwraca nieprawidłową pozycję strumienia. Domyślne zachowanie polega na zwracaniu nieprawidłowej pozycji strumienia.
basic_streambuf::seekpos
Chroniona funkcja wirtualna składowa, która próbuje zmienić bieżące pozycje dla kontrolowanych strumieni.
virtual pos_type seekpos(pos_type _Sp, ios_base::openmode _Which = ios_base::in | ios_base::out);
Parametry
_Sp
Stanowisko do poszukiwania.
_Który
Określa tryb położenia wskaźnika. Ustawieniem domyślnym jest umożliwienie modyfikowania pozycji odczytu i zapisu.
Wartość zwracana
Nowa pozycja lub nieprawidłowa pozycja strumienia. Aby określić, czy pozycja strumienia jest nieprawidłowa, porównaj wartość zwracaną z pos_type(off_type(-1))
.
Uwagi
Nowe stanowisko to _ Sp.
Zazwyczaj, jeśli element i ios_base::in nie sązerowe, ma to wpływ na strumień wejściowy, a jeśli to i ios_base::out nie ma wpływu na strumień wyjściowy. Rzeczywiste użycie tego parametru różni się jednak między strumieni pochodnych.
Jeśli funkcja zakończy się powodzeniem w zmianie położenia lub położenia strumienia, zwraca wynikową pozycję strumienia lub jedną z wynikowych pozycji strumienia. W przeciwnym razie zwraca nieprawidłową pozycję strumienia (-1). Domyślne zachowanie polega na zwracaniu nieprawidłowej pozycji strumienia.
basic_streambuf::setbuf
Chroniona funkcja wirtualna elementu członkowskiego, która wykonuje operację określoną dla każdego buforu strumienia pochodnego.
virtual basic_streambuf<Elem, Tr> *setbuf(
char_type* _Buffer,
streamsize count);
Parametry
_Bufor
Wskaźnik do buforu.
count
Rozmiar buforu.
Wartość zwracana
Domyślnym zachowaniem jest zwrócenie this
wartości .
Uwagi
Zobacz basic_filebuf. setbuf
udostępnia obszar pamięci do użycia przez streambuf
obiekt. Sposób użycia buforu w zdefiniowanych w klasach pochodnych.
basic_streambuf::setg
Chroniona funkcja, która przechowuje _ Gbeg w wskaźniku początkowym, _Gnext
w następnym wskaźniku i _Gend
w wskaźniku końcowym dla buforu wejściowego.
void setg(char_type* _Gbeg,
char_type* _Gnext,
char_type* _Gend);
Parametry
_Gbeg
Wskaźnik na początek buforu.
_Gnext
Wskaźnik do gdzieś w środku buforu.
_Gend
Wskaźnik na końcu buforu.
basic_streambuf::setp
Chroniona funkcja, która przechowuje _Pbeg w wskaźniku początkowym i _Pend w wskaźniku końcowym dla buforu wyjściowego.
void setp(char_type* _Pbeg, char_type* _Pend);
Parametry
_Pbeg
Wskaźnik na początek buforu.
_Pend
Wskaźnik na końcu buforu.
basic_streambuf::sgetc
Zwraca bieżący element bez zmiany pozycji w strumieniu.
int_type sgetc();
Wartość zwracana
Bieżący element.
Uwagi
Jeśli pozycja odczytu jest dostępna, funkcja składowa zwraca traits_type::to_int_type( *
gptr). W przeciwnym razie zwraca niedopełnienie.
Przykład
// 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
Wyodrębnia maksymalnie liczbę znaków z buforu wejściowego i przechowuje je w podanym parametrze ptr buforu.
Ta metoda jest potencjalnie niebezpieczna, ponieważ opiera się na obiekcie wywołującym, aby sprawdzić, czy przekazane wartości są poprawne.
streamsize sgetn(
char_type* ptr,
streamsize count);
Parametry
ptr
Bufor zawierający wyodrębnione znaki.
count
Liczba elementów do odczytania.
Wartość zwracana
Liczba odczytanych elementów. Aby uzyskać więcej informacji, zobacz streamsize , aby uzyskać więcej informacji.
Uwagi
Funkcja składowa zwraca wartość xsgetn( ptr
, count
).
Przykład
// 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
Chroniona funkcja wirtualna elementu członkowskiego zwracająca liczbę znaków, które można wyodrębnić ze strumienia wejściowego i upewnij się, że program nie będzie mógł czekać bez ograniczeń.
virtual streamsize showmanyc();
Wartość zwracana
Domyślne zachowanie polega na zwracaniu zera.
basic_streambuf::snextc
Odczytuje bieżący element i zwraca następujący element.
int_type snextc();
Wartość zwracana
Następny element w strumieniu.
Uwagi
Funkcja składowa wywołuje element sbumpc , a jeśli ta funkcja zwraca wartość traits_type::eof, zwraca wartość traits_type::eof. W przeciwnym razie zwraca wartość sgetc.
Przykład
// 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
Umieszcza char_type w strumieniu.
int_type sputbackc(char_type _Ch);
Parametry
_Ch
Znak.
Wartość zwracana
Zwraca znak lub błąd.
Uwagi
Jeśli jest dostępna pozycja sytuacyjna i _Ch jest porównywana z znakiem przechowywanym w tej pozycji, funkcja składowa dekreuje następny wskaźnik dla buforu wejściowego i zwraca traits_type::to_int_type( _Ch
). W przeciwnym razie zwraca wartość pbackfail( _Ch
).
Przykład
// 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
Umieszcza znak w strumieniu.
int_type sputc(char_type _Ch);
Parametry
_Ch
Znak.
Wartość zwracana
Zwraca znak, jeśli się powiedzie.
Uwagi
Jeśli element write position
jest dostępny, funkcja składowa przechowuje _Ch w pozycji zapisu, zwiększa następny wskaźnik buforu wyjściowego i zwraca traits_type::to_int_type( _Ch
). W przeciwnym razie zwraca wartość overflow( _Ch
).
Przykład
// 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
Umieszcza ciąg znaków w strumieniu.
streamsize sputn(const char_type* ptr, streamsize count);
Parametry
ptr
Ciąg znaków.
count
Liczba znaków.
Wartość zwracana
Liczba znaków wstawionych do strumienia.
Uwagi
Funkcja składowa zwraca wartość xsputn( ptr
, count
). Aby uzyskać więcej informacji, zobacz sekcję Uwagi tego członka, aby uzyskać więcej informacji.
Przykład
// 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
Przenieś obok bieżącego elementu w strumieniu.
void stossc();
Uwagi
Funkcja składowa wywołuje element sbumpc. Implementacja nie jest wymagana do dostarczenia tej funkcji składowej.
Przykład
// 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
Pobiera znak ze strumienia.
int_type sungetc();
Wartość zwracana
Zwraca znak lub błąd.
Uwagi
Jeśli jest dostępna pozycja putback, funkcja składowa dekreuje następny wskaźnik dla buforu wejściowego i zwraca traits_type::
to_int_type( *
gptr). Jednak nie zawsze można określić ostatni odczyt znaku, aby można było go przechwycić w stanie bieżącego buforu. Jeśli jest to prawda, funkcja zwraca wartość pbackfail. Aby uniknąć takiej sytuacji, należy śledzić znak, aby przywrócić i wywołać sputbackc(ch)
metodę , co nie powiedzie się, pod warunkiem, że nie wywołasz go na początku strumienia i nie próbujesz odłożyć więcej niż jednego znaku.
Przykład
// 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
Wymienia wartości w tym obiekcie dla wartości w podanym basic_streambuf
obiekcie.
void swap(basic_streambuf& right);
Parametry
Prawy
Odwołanie lvalue do obiektu używanego basic_streambuf
do wymiany wartości.
Uwagi
Chroniona funkcja składowa wymienia się wszystkimi wskaźnikami sterującymi elementami input buffer
i output buffer
. Wymienia również right.
polecenie getloc() z obiektem locale
.
basic_streambuf::sync
Chroniona funkcja wirtualna, która próbuje zsynchronizować kontrolowane strumienie z dowolnymi skojarzonymi strumieniami zewnętrznymi.
virtual int sync();
Wartość zwracana
Jeśli funkcja nie może zakończyć się powodzeniem, zwraca wartość -1. Domyślne zachowanie polega na zwracaniu zera.
Uwagi
sync
Obejmuje zapisanie wszystkich elementów między początkowymi i następnymi wskaźnikami dla buforu wyjściowego. Nie obejmuje ponownego umieszczania żadnych elementów między kolejnymi i końcowymi wskaźnikami dla buforu wejściowego.
basic_streambuf::traits_type
Kojarzy nazwę typu z parametrem szablonu Tr .
typedef Tr traits_type;
basic_streambuf::uflow
Chroniona funkcja wirtualna, która wyodrębnia bieżący element ze strumienia wejściowego.
virtual int_type uflow();
Wartość zwracana
Bieżący element.
Uwagi
Chroniona funkcja wirtualnego elementu członkowskiego próbuje wyodrębnić bieżący element ch ze strumienia wejściowego, a następnie przejść bieżącą pozycję strumienia i zwrócić element jako traits_type::to_int_type( ch). Może to zrobić na różne sposoby:
Jeśli pozycja odczytu jest dostępna, przyjmuje wartość ch jako element przechowywany w pozycji odczytu i przechodzi następny wskaźnik dla buforu wejściowego.
Może odczytać element bezpośrednio z zewnętrznego źródła i dostarczyć go jako wartość ch.
W przypadku buforu strumienia ze wspólnymi strumieniami wejściowymi i wyjściowymi może on udostępnić pozycję odczytu, zapisując w miejscu docelowym zewnętrznym, niektóre lub wszystkie elementy między początkowym i następnym wskaźnikiem dla buforu wyjściowego. Może też przydzielić nowy lub dodatkowy magazyn dla buforu wejściowego. Następnie funkcja odczytuje element ze źródła zewnętrznego, co najmniej jeden element.
Jeśli funkcja nie powiedzie się, zwraca traits_type::eof lub zgłasza wyjątek. W przeciwnym razie zwraca bieżący element ch
w strumieniu wejściowym, przekonwertowany zgodnie z powyższym opisem i przechodzi następny wskaźnik dla buforu wejściowego. Domyślne zachowanie polega na wywołaniu underflow i, jeśli ta funkcja zwróci traits_type::eof, aby zwrócić traits_type::eof. W przeciwnym razie funkcja zwraca bieżący element ch w strumieniu wejściowym, przekonwertowany zgodnie z wcześniejszym opisem i przechodzi następny wskaźnik dla buforu wejściowego.
basic_streambuf::underflow
Chroniona funkcja wirtualna w celu wyodrębnienia bieżącego elementu ze strumienia wejściowego.
virtual int_type underflow();
Wartość zwracana
Bieżący element.
Uwagi
Chroniona funkcja wirtualna elementu członkowskiego podejmuje działania w celu wyodrębnienia bieżącego elementu ch ze strumienia wejściowego bez zwiększania bieżącego położenia strumienia i zwracania go jako traits_type::
to_int_type( ch). Może to zrobić na różne sposoby:
Jeśli pozycja odczytu jest dostępna, ch jest elementem przechowywanym w pozycji odczytu. Aby uzyskać więcej informacji, zobacz sekcję Uwagi klasy basic_streambuf.
Może ona udostępnić pozycję odczytu, przydzielając nowy lub dodatkowy magazyn dla buforu wejściowego, a następnie odczytując dane ze źródła zewnętrznego, co najmniej jeden element. Aby uzyskać więcej informacji, zobacz sekcję Uwagi klasy basic_streambuf.
Jeśli funkcja nie może zakończyć się powodzeniem, zwraca traits_type::
wartość eof()
lub zgłasza wyjątek. W przeciwnym razie zwraca bieżący element w strumieniu wejściowym, przekonwertowany zgodnie z wcześniejszym opisem. Domyślnym zachowaniem jest zwrócenie traits_type::eof()
wartości .
Funkcja wirtualna underflow
z funkcjami synchronizacji i przepełnienia definiuje cechy klasy pochodnej streambuf
. Każda klasa pochodna może implementować underflow
inaczej, ale interfejs z klasą wywołującego strumienia jest taki sam.
Funkcja underflow
jest najczęściej wywoływana przez funkcje publiczne, streambuf
takie jak sgetc i sgetn , gdy obszar get jest pusty, ale inne klasy, w tym klasy strumienia, mogą wywoływać underflow
w dowolnym momencie.
Funkcja underflow
dostarcza obszar get ze znakiem ze źródła wejściowego. Jeśli obszar pobierania zawiera znaki, underflow
zwraca pierwszy znak. Jeśli obszar pobierania jest pusty, wypełnia obszar pobierania i zwraca następny znak (który pozostawia w obszarze pobierania). Jeśli nie ma więcej dostępnych znaków, underflow
zwraca EOF
i pozostawia pusty obszar pobierania.
W klasie underflow
dopasowuje wskaźnik egptr, aby uzyskać dostęp do magazynu, który został dynamicznie przydzielony przez wywołanie metody overflow
.strstreambuf
basic_streambuf::xsgetn
Chroniona funkcja wirtualna umożliwiająca wyodrębnianie elementów ze strumienia wejściowego.
Ta metoda jest potencjalnie niebezpieczna, ponieważ opiera się na obiekcie wywołującym, aby sprawdzić, czy przekazane wartości są poprawne.
virtual streamsize xsgetn(
char_type* ptr,
streamsize count);
Parametry
ptr
Bufor zawierający wyodrębnione znaki.
count
Liczba elementów do wyodrębnienia.
Wartość zwracana
Liczba wyodrębnionych elementów.
Uwagi
Chroniona funkcja wirtualna elementu członkowskiego wyodrębnia elementy do zliczania elementów ze strumienia wejściowego, tak jakby przez powtarzające się wywołania funkcji sbumpc i przechowuje je w tablicy rozpoczynającej się od pktr. Zwraca liczbę wyodrębnionych elementów.
basic_streambuf::xsputn
Chroniona funkcja wirtualna umożliwiająca wstawianie elementów do strumienia wyjściowego.
virtual streamsize xsputn(const char_type* ptr, streamsize count);
Parametry
ptr
Wskaźnik do elementów do wstawienia.
count
Liczba elementów do wstawienia.
Wartość zwracana
Liczba elementów wstawionych do strumienia.
Uwagi
Chroniona funkcja wirtualnego elementu członkowskiego wstawia elementy do strumienia wyjściowego, tak jakby przez powtarzające się wywołania sputc, od tablicy rozpoczynającej się od ptr. Wstawianie znaków do strumienia wyjściowego zatrzymuje się po zapisaniu wszystkich znaków zliczania lub jeśli wywołanie sputc( count)
zwróci traits::eof()
wartość . Zwraca liczbę wstawionych elementów.
Zobacz też
Bezpieczeństwo wątku w standardowej bibliotece C++
iostream, programowanie
Konwencje iostream