Udostępnij za pośrednictwem


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

Elem
Char_type.

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><ElemTr 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<Elemklasy , 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 EOFjest ), 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::begnowa 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::endnowa 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 thiswartoś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