Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 strstreambuf bir 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 EOF
dö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 EOF
dö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)_Meta
değ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::cur
bir 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 strstreambuf
bir 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 olur
strlen((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)ch
dö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ı