Aracılığıyla paylaş


strstreambuf Sınıfı

Bir dizi nesnesinde depolanan öğelerin dizisine ve dizisinden öğelerin iletimini denetleen bir char akış arabelleği açıklar.

Sözdizimi

class strstreambuf : public streambuf

Açıklamalar

Nesnenin nasıl yapılandırıldığına bağlı olarak, dizideki değişikliklere uyum sağlamak için gerektiğinde ayrılabilir, genişletilebilir ve serbest kalabilir.

Sınıfın strstreambuf bir nesnesi, modu olarak birkaç bit mod bilgisi depolar strstreambuf . Bu bitler denetlenen sıranın olup olmadığını gösterir:

  • ayrılmıştır ve sonunda serbest bırakılmış olması gerekir.

  • Değiştirilebilir.

  • Depolama alanı yeniden taşınarak genişletilebilir.

  • Donduruldu ve bu nedenle nesne yok edilmeden önce çözülmeli veya nesne dışındaki bir kuruluş tarafından serbest bırakıldı (ayrılırsa).

Dondurulan denetimli bir dizi, bu ayrı mod bitlerinin durumundan bağımsız olarak değiştirilemez veya genişletilemez.

Nesnesi ayrıca ayırmayı denetleen strstreambuf iki işlevin işaretçilerini de depolar. Bunlar null işaretçilerse, nesne, denetlenen dizi için depolama ayırma ve boşaltma için kendi yöntemini kullanır.

Not

Bu sınıf kullanım dışıdır. Bunun yerine stringbuf veya wstringbuf kullanmayı göz önünde bulundurun.

Oluşturucular

Oluşturucu Açıklama
strstreambuf türünde strstreambufbir nesnesi oluşturur.

Üye işlevleri

Üye işlevi Açıklama
dondurmak Akış arabelleği işlemleri aracılığıyla bir akış arabelleğinin kullanılamaz duruma geçmesine neden olur.
taşma Tam arabelleğe yeni bir karakter eklendiğinde çağrılabilen korumalı bir sanal işlev.
pbackfail Bir öğeyi giriş akışına geri yerleştirmeye çalışan ve ardından geçerli öğe (sonraki işaretçinin işaret ettiği) haline getirmeye çalışan korumalı bir sanal üye işlevi.
sayım Denetlenen diziye yazılan öğe sayısının sayısını döndürür.
ara Denetlenen akışlar için geçerli konumları değiştirmeye çalışan korumalı bir sanal üye işlevi.
seekpos Denetlenen akışlar için geçerli konumları değiştirmeye çalışan korumalı bir sanal üye işlevi.
str Çağrılar donar ve ardından denetimli sıranın başına bir işaretçi döndürür.
yetersiz akış Giriş akışından geçerli öğeyi ayıklamak için korumalı bir sanal işlev.

Gereksinimler

Üst bilgi:<strstream>

Ad alanı: std

strstreambuf::freeze

Akış arabelleği işlemleri aracılığıyla bir akış arabelleğinin kullanılamaz duruma geçmesine neden olur.

void freeze(bool _Freezeit = true);

Parametreler

_Freezeit
bool Akışın dondurulmasını isteyip istemediğinizi gösteren bir.

Açıklamalar

_Freezeit doğruysa, işlev denetimli sırayı donduracak şekilde depolanmış strstreambuf modu değiştirir. Aksi takdirde, kontrollü dizi dondurulmaması sağlar.

str , anlamına gelir freeze.

Not

Donmuş arabellek yok etme sırasında strstreambuf serbest olmayacaktır. Bellek sızıntısını önlemek için arabellek serbest bırakmadan önce arabelleği çözmeniz gerekir.

Örnek

// strstreambuf_freeze.cpp
// compile with: /EHsc

#include <iostream>
#include <strstream>

using namespace std;

void report(strstream &x)
{
    if (!x.good())
        cout << "stream bad" << endl;
    else
        cout << "stream good" << endl;
}

int main()
{
    strstream x;

    x << "test1";
    cout << "before freeze: ";
    report(x);

    // Calling str freezes stream.
    cout.write(x.rdbuf()->str(), 5) << endl;
    cout << "after freeze: ";
    report(x);

    // Stream is bad now, wrote on frozen stream
    x << "test1.5";
    cout << "after write to frozen stream: ";
    report(x);

    // Unfreeze stream, but it is still bad
    x.rdbuf()->freeze(false);
    cout << "after unfreezing stream: ";
    report(x);

    // Clear stream
    x.clear();
    cout << "after clearing stream: ";
    report(x);

    x << "test3";
    cout.write(x.rdbuf()->str(), 10) << endl;

    // Clean up.  Failure to unfreeze stream will cause a
    // memory leak.
    x.rdbuf()->freeze(false);
}
before freeze: stream good
test1
after freeze: stream good
after write to frozen stream: stream bad
after unfreezing stream: stream bad
after clearing stream: stream good
test1test3

strstreambuf::overflow

Tam arabelleğe yeni bir karakter eklendiğinde çağrılabilen korumalı bir sanal işlev.

virtual int overflow(int _Meta = EOF);

Parametreler

_Meta
Arabelleğe eklenecek karakter veya EOF.

Dönüş Değeri

İşlev başarılı olamazsa döndürür EOF. Aksi takdirde, _MetaEOF == dışında bir değer EOFdöndürür. Aksi takdirde, _Meta döndürür.

Açıklamalar

!= EOF_Meta korumalı sanal üye işlevi, öğesini (char)_Meta çıkış arabelleğine eklemeyi dener. Bunu çeşitli yollarla yapabilir:

  • Bir yazma konumu varsa, öğeyi yazma konumuna depolayabilir ve çıkış arabelleği için sonraki işaretçiyi artırabilir.

  • Depolanan strstreambuf modu denetlenen sıranın değiştirilebilir, genişletilebilir ve dondurulmadığını söylüyorsa, işlev çıkış arabelleği için yeni ayırarak yazma konumunu kullanılabilir hale getirebilir. Çıkış arabelleğinin bu şekilde genişletilmesi, ilişkili tüm giriş arabelleklerini de genişletir.

strstreambuf::p backfail

Bir öğeyi giriş akışına geri yerleştirmeye çalışan ve ardından bunu geçerli öğe yapan (sonraki işaretçinin işaret ettiği) korumalı bir sanal üye işlevi.

virtual int pbackfail(int _Meta = EOF);

Parametreler

_Meta
Arabelleğe eklenecek karakter veya EOF.

Dönüş Değeri

İşlev başarılı olamazsa döndürür EOF. Aksi takdirde, _MetaEOF == dışında bir değer EOFdöndürür. Aksi takdirde, _Meta döndürür.

Açıklamalar

Korumalı sanal üye işlevi, bir öğeyi giriş arabelleğine geri yerleştirmeye çalışır ve sonra bunu geçerli öğe yapar (sonraki işaretçi tarafından işaret edilir).

_Meta == EOF, geri itme öğesi geçerli öğeden önceki akışta zaten olan öğedir. Aksi takdirde, bu öğe ile ch = (char)_Metadeğiştirilir. işlevi bir öğeyi çeşitli yollarla geri koyabilir:

  • Bir geri koyma konumu varsa ve orada depolanan öğe ile eşitse ch, giriş arabelleği için sonraki işaretçiyi azaltabilir.

  • Bir geri koyma konumu varsa ve strstreambuf modu denetlenen dizinin değiştirilebilir olduğunu söylüyorsa, işlev geri koyma konumuna depolanabilir ch ve giriş arabelleği için sonraki işaretçiyi azaltabilir.

strstreambuf::p count

Denetlenen diziye yazılan öğe sayısının sayısını döndürür.

streamsize pcount() const;

Dönüş Değeri

Denetlenen diziye yazılan öğe sayısının sayısı.

Açıklamalar

Özel olarak, pptr null bir işaretçiyse işlev sıfır döndürür. Aksi takdirde pbase döndürürpptr - .

Örnek

// strstreambuf_pcount.cpp
// compile with: /EHsc
#include <iostream>
#include <strstream>
using namespace std;

int main( )
{
   strstream x;
   x << "test1";
   cout << x.rdbuf( )->pcount( ) << endl;
   x << "test2";
   cout << x.rdbuf( )->pcount( ) << endl;
}

strstreambuf::seekoff

Denetlenen akışlar için geçerli konumları değiştirmeye çalışan korumalı bir sanal üye işlevi.

virtual streampos seekoff(streamoff _Off,
    ios_base::seekdir _Way,
    ios_base::openmode _Which = ios_base::in | ios_base::out);

Parametreler

_Kapalı
_Way göre aranacak konum.

_Yol
Uzaklık işlemleri için başlangıç noktası. Olası değerler için bkz . seekdir .

_Hangi
İşaretçi konumunun modunu belirtir. Varsayılan ayar, okuma ve yazma konumlarını değiştirmenize izin vermektir.

Dönüş Değeri

İşlev, akış konumlarından birini veya her ikisini de değiştirmeyi başarırsa, sonuçta elde edilen akış konumunu döndürür. Aksi takdirde başarısız olur ve geçersiz bir akış konumu döndürür.

Açıklamalar

Korumalı sanal üye işlevi, denetlenen akışlar için geçerli konumları değiştirmeye çalışır. strstreambuf sınıfının bir nesnesi için bir akış konumu yalnızca bir akış uzaklığından oluşur. Uzaklık sıfır, denetlenen sıranın ilk öğesini belirtir.

Yeni konum aşağıdaki gibi belirlenir:

  • ise _Way == ios_base::beg, yeni konum akışın başlangıcı artı _Off.

  • ise _Way == ios_base::cur, yeni konum geçerli akış konumu artı _Off.

  • ise _Way == ios_base::end, yeni konum akışın sonu artı _Off.

_Which & ios_base::in sıfır değilse ve giriş arabelleği varsa, işlev giriş arabelleğinde okumak için sonraki konumu değiştirir. Sıfır olmayan _Way != ios_base::curbir değerse _Which & ios_base::out ve çıkış arabelleği varsa, işlev ayrıca yazacak sonraki konumu okunacak bir sonraki konumla eşleşecek şekilde ayarlar.

Aksi takdirde sıfır _Which & ios_base::out değilse ve çıkış arabelleği varsa, işlev çıkış arabelleğine yazmak için sonraki konumu değiştirir. Aksi takdirde, konumlandırma işlemi başarısız olur. Bir konumlandırma işleminin başarılı olması için, sonuçta elde edilen akış konumunun denetlenen dizi içinde yer alması gerekir.

strstreambuf::seekpos

Denetlenen akışlar için geçerli konumları değiştirmeye çalışan korumalı bir sanal üye işlevi.

virtual streampos seekpos(streampos _Sp, ios_base::openmode _Which = ios_base::in | ios_base::out);

Parametreler

_Sp
Aranacak konum.

_Hangi
İşaretçi konumunun modunu belirtir. Varsayılan ayar, okuma ve yazma konumlarını değiştirmenize izin vermektir.

Dönüş Değeri

İşlev, akış konumlarından birini veya her ikisini de değiştirmeyi başarırsa, sonuçta elde edilen akış konumunu döndürür. Aksi takdirde başarısız olur ve geçersiz bir akış konumu döndürür. Akış konumunun geçersiz olup olmadığını belirlemek için dönüş değerini ile pos_type(off_type(-1))karşılaştırın.

Açıklamalar

Korumalı sanal üye işlevi, denetlenen akışlar için geçerli konumları değiştirmeye çalışır. strstreambuf sınıfının bir nesnesi için bir akış konumu yalnızca bir akış uzaklığından oluşur. Uzaklık sıfır, denetlenen sıranın ilk öğesini belirtir. Yeni konum _Sp tarafından belirlenir.

& ios_base::in sıfır değilse ve giriş arabelleği mevcutsa _Which , işlev giriş arabelleğindeki bir sonraki konumu okuyacak şekilde değiştirir. _Which & ios_base::out sıfır değilse ve çıkış arabelleği varsa, işlev ayrıca yazacak sonraki konumu okunacak bir sonraki konumla eşleşecek şekilde ayarlar. Aksi takdirde, _Which & ios_base::out sıfır değilse ve çıkış arabelleği varsa, işlev çıkış arabelleğine yazmak için sonraki konumu değiştirir. Aksi takdirde, konumlandırma işlemi başarısız olur. Bir konumlandırma işleminin başarılı olması için, sonuçta elde edilen akış konumunun denetlenen dizi içinde yer alması gerekir.

strstreambuf::str

Çağrılar donar ve ardından denetimli sıranın başına bir işaretçi döndürür.

char *str();

Dönüş Değeri

Denetlenen sıranın başlangıcına işaret eden bir işaretçi.

Açıklamalar

Açıkça eklemediğiniz sürece, sonlandırıcı null öğe yoktur.

Örnek

Str kullanan bir örnek için bkz. strstreambuf::freeze.

strstreambuf::strstreambuf

türünde strstreambufbir nesnesi oluşturur.

explicit strstreambuf(streamsize count = 0);

strstreambuf(void (* alloc_func)(size_t),
    void (* free_func)(void*));

strstreambuf(char* getptr,
    streamsize count,
    char* putptr = 0);

strstreambuf(signed char* getptr,
    streamsize count,
    signed char* putptr = 0);

strstreambuf(unsigned char* getptr,
    streamsize count,
    unsigned char* putptr = 0);

strstreambuf(const char* getptr,
    streamsize count);

strstreambuf(const signed char* getptr,
    streamsize count);

strstreambuf(const unsigned char* getptr,
    streamsize count);

Parametreler

alloc_func
Arabellek belleği ayırmak için kullanılan işlev.

count
getptr tarafından işaret edilen arabelleğin uzunluğunu belirler. Getptr bir bağımsız değişken değilse (ilk oluşturucu formu), arabellekler için önerilen ayırma boyutu.

_Freefunc
Arabellek belleğini boşaltmak için kullanılan işlev.

getptr
Giriş için kullanılan arabellek.

putptr
Çıkış için kullanılan arabellek.

Açıklamalar

İlk oluşturucu, giriş arabelleği, çıkış arabelleği ve strstreambuf ayırmasını denetleen tüm işaretçilerde null işaretçi depolar. Denetlenen sırayı değiştirilebilir ve genişletilebilir hale getirmek için depolanan strstreambuf modunu ayarlar. Ayrıca sayıyı önerilen ilk ayırma boyutu olarak kabul eder.

İkinci oluşturucu ilk gibi davranır, ancak depolamayı ayırmak için çağrılan işlevin işaretçisi olarak alloc_func depolar ve bu depolamayı boşaltmak için çağıracak işlevin işaretçisi olarak free_func.

Üç oluşturucu:

strstreambuf(char *getptr,
    streamsize count,
    char *putptr = 0);

strstreambuf(signed char *getptr,
    streamsize count,
    signed char *putptr = 0);

strstreambuf(unsigned char *getptr,
    streamsize count,
    unsigned char *putptr = 0);

ayrıca ilk gibi davranır, ancak getptr denetimli diziyi tutmak için kullanılan dizi nesnesini belirtir. (Bu nedenle, null işaretçisi olmamalıdır.) Dizideki N öğelerinin sayısı aşağıdaki gibi belirlenir:

  • (sayı> 0) ise, N sayıdır.

  • (sayı == 0) ise, N olurstrlen((const char *) getptr ).

  • (sayı< 0) ise, N INT_MAX.

putptr null bir işaretçiyse, işlev yürüterek yalnızca bir giriş arabelleği oluşturur:

setg(getptr,
    getptr,
    getptr + N);

Aksi takdirde, yürüterek hem giriş hem de çıkış arabellekleri oluşturur:

setg(getptr,
    getptr,
    putptr);

setp(putptr,
    getptr + N);

Bu durumda putptr [ getptr, getptr + N] aralığında olmalıdır.

Son olarak üç oluşturucu:

strstreambuf(const char *getptr,
    streamsize count);

strstreambuf(const signed char *getptr,
    streamsize count);

strstreambuf(const unsigned char *getptr,
    streamsize count);

tümü aşağıdaki gibi davranır:

streambuf((char *)getptr, count);

saklı modun denetimli sırayı ne değiştirilebilir ne de genişletilebilir hale getirmesi dışında.

strstreambuf::underflow

Giriş akışından geçerli öğeyi ayıklamak için korumalı bir sanal işlev.

virtual int underflow();

Dönüş Değeri

İşlev başarılı olamazsa döndürür EOF. Aksi takdirde, giriş akışındaki geçerli öğeyi döndürür ve yukarıda açıklandığı gibi dönüştürülür.

Açıklamalar

Korumalı sanal üye işlevi, giriş arabelleğinden geçerli öğeyi ch ayıklamaya, ardından geçerli akış konumunu ilerletmeye ve öğesini olarak (int)(unsigned char)chdöndürmeye çalışır. Bunu tek bir yolla yapabilir: okuma konumu varsa, okuma konumunda depolanan öğe olarak alır ch ve giriş arabelleği için sonraki işaretçiyi ilerletir.

Ayrıca bkz.

streambuf
C++ Standart Kitaplığında İş Parçacığı Güvenliği
iostream Programlaması
iostreams Kuralları