Bagikan melalui


Kelas strstreambuf

Menjelaskan buffer aliran yang mengontrol transmisi elemen ke dan dari urutan elemen yang char disimpan dalam objek array.

Sintaks

class strstreambuf : public streambuf

Keterangan

Tergantung pada bagaimana objek dibangun, objek dapat dialokasikan, diperluas, dan dibebaskan seperlunya untuk mengakomodasi perubahan dalam urutan.

Objek kelas strstreambuf menyimpan beberapa bit informasi mode sebagai modenya strstreambuf . Bit ini menunjukkan apakah urutan yang dikontrol:

  • Telah dialokasikan dan perlu dibebaskan pada akhirnya.

  • Dapat dimodifikasi.

  • Dapat diperluas dengan merealokasi penyimpanan.

  • Telah dibekukan dan karenanya perlu tidak dibekukan sebelum objek dihancurkan, atau dibebaskan (jika dialokasikan) oleh lembaga selain objek.

Urutan terkontrol yang dibekukan tidak dapat dimodifikasi atau diperluas, terlepas dari status bit mode terpisah ini.

Objek juga menyimpan pointer ke dua fungsi yang mengontrol strstreambuf alokasi. Jika ini adalah penunjuk null, objek merancang metodenya sendiri untuk mengalokasikan dan membebaskan penyimpanan untuk urutan yang dikontrol.

Catatan

Kelas ini tidak digunakan lagi. Pertimbangkan untuk menggunakan stringbuf atau wstringbuf sebagai gantinya.

Konstruktor

Konstruktor Deskripsi
strstreambuf Membuat objek jenis strstreambuf.

Fungsi anggota

Fungsi anggota Deskripsi
membeku Menyebabkan buffer aliran tidak tersedia melalui operasi buffer aliran.
tumpah Fungsi virtual terproteksi yang dapat dipanggil ketika karakter baru dimasukkan ke dalam buffer penuh.
pbackfail Fungsi anggota virtual yang dilindungi yang mencoba mengembalikan elemen ke dalam aliran input, lalu menjadikannya elemen saat ini (ditujukkan ke penunjuk berikutnya).
pcount Mengembalikan hitungan jumlah elemen yang ditulis ke urutan terkontrol.
seekoff Fungsi anggota virtual yang dilindungi yang mencoba mengubah posisi saat ini untuk aliran yang dikontrol.
seekpos Fungsi anggota virtual yang dilindungi yang mencoba mengubah posisi saat ini untuk aliran yang dikontrol.
Str Memanggil pembekuan, lalu mengembalikan penunjuk ke awal urutan yang dikontrol.
aliran bawah Fungsi virtual yang dilindungi untuk mengekstrak elemen saat ini dari aliran input.

Persyaratan

Header:<strstream>

Namespace: std

strstreambuf::freeze

Menyebabkan buffer aliran tidak tersedia melalui operasi buffer aliran.

void freeze(bool _Freezeit = true);

Parameter

_Freezeit
Menunjukkan bool apakah Anda ingin aliran dibekukan.

Keterangan

Jika _Freezeit benar, fungsi mengubah mode tersimpan strstreambuf untuk membuat urutan terkontrol membeku. Jika tidak, itu membuat urutan terkontrol tidak membeku.

str menyiratkan freeze.

Catatan

Buffer beku tidak akan dibebaskan selama strstreambuf penghancuran. Anda harus mencairkan buffer sebelum dibebaskan untuk menghindari kebocoran memori.

Contoh

// 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

Fungsi virtual terproteksi yang dapat dipanggil ketika karakter baru dimasukkan ke dalam buffer penuh.

virtual int overflow(int _Meta = EOF);

Parameter

_Meta
Karakter yang akan dimasukkan ke dalam buffer, atau EOF.

Tampilkan Nilai

Jika fungsi tidak berhasil, fungsi akan mengembalikan EOF. Jika tidak, jika _MetaEOF == , nilai tersebut mengembalikan beberapa nilai selain .EOF Jika tidak, ia mengembalikan _Meta.

Keterangan

Jika _Meta != EOF, fungsi anggota virtual yang dilindungi mencoba memasukkan elemen (char)_Meta ke dalam buffer output. Ini dapat melakukannya dengan berbagai cara:

  • Jika posisi tulis tersedia, ia dapat menyimpan elemen ke dalam posisi tulis dan menaikkan pointer berikutnya untuk buffer output.

  • Jika mode strstreambuf yang disimpan mengatakan urutan terkontrol dapat dimodifikasi, dapat diperluas, dan tidak dibekukan, fungsi dapat membuat posisi tulis tersedia dengan mengalokasikan baru untuk buffer output. Memperluas buffer output dengan cara ini juga memperluas buffer input terkait.

strstreambuf::p backfail

Fungsi anggota virtual yang dilindungi yang mencoba mengembalikan elemen ke dalam aliran input, lalu menjadikannya elemen saat ini (ditujukkan ke penunjuk berikutnya).

virtual int pbackfail(int _Meta = EOF);

Parameter

_Meta
Karakter yang akan dimasukkan ke dalam buffer, atau EOF.

Tampilkan Nilai

Jika fungsi tidak berhasil, fungsi akan mengembalikan EOF. Jika tidak, jika _MetaEOF == , nilai tersebut mengembalikan beberapa nilai selain .EOF Jika tidak, ia mengembalikan _Meta.

Keterangan

Fungsi anggota virtual yang dilindungi mencoba mengembalikan elemen ke dalam buffer input, lalu menjadikannya elemen saat ini (ditujukkan ke penunjuk berikutnya).

Jika _Meta == EOF, elemen untuk mendorong kembali secara efektif yang sudah ada di aliran sebelum elemen saat ini. Jika tidak, elemen tersebut digantikan oleh ch = (char)_Meta. Fungsi ini dapat mengembalikan elemen dengan berbagai cara:

  • Jika posisi putback tersedia, dan elemen yang disimpan di sana dibandingkan dengan ch, itu dapat mengurangi penunjuk berikutnya untuk buffer input.

  • Jika posisi putback tersedia, dan jika mode strstreambuf mengatakan urutan terkontrol dapat dimodifikasi, fungsi dapat disimpan ch ke posisi putback dan menurunkan pointer berikutnya untuk buffer input.

strstreambuf::p count

Mengembalikan hitungan jumlah elemen yang ditulis ke urutan terkontrol.

streamsize pcount() const;

Tampilkan Nilai

Hitungan jumlah elemen yang ditulis ke urutan terkontrol.

Keterangan

Secara khusus, jika pptr adalah pointer null, fungsi mengembalikan nol. Jika tidak, pbase akan pptr - dikembalikan.

Contoh

// 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

Fungsi anggota virtual yang dilindungi yang mencoba mengubah posisi saat ini untuk aliran yang dikontrol.

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

Parameter

_Off
Posisi yang dicari relatif terhadap _Way.

_Jalan
Titik awal untuk operasi offset. Lihat seekdir untuk kemungkinan nilai.

_Yang mana
Menentukan mode untuk posisi penunjuk. Defaultnya adalah memungkinkan Anda mengubah posisi baca dan tulis.

Tampilkan Nilai

Jika fungsi berhasil mengubah salah satu atau kedua posisi aliran, fungsi akan mengembalikan posisi aliran yang dihasilkan. Jika tidak, itu gagal dan mengembalikan posisi aliran yang tidak valid.

Keterangan

Fungsi anggota virtual yang dilindungi berusaha mengubah posisi saat ini untuk aliran yang dikontrol. Untuk objek strstreambuf kelas, posisi aliran terdiri dari offset aliran murni. Offset nol menunjuk elemen pertama dari urutan yang dikontrol.

Posisi baru ditentukan sebagai berikut:

  • Jika _Way == ios_base::beg, posisi baru adalah awal aliran ditambah _Off.

  • Jika _Way == ios_base::cur, posisi baru adalah posisi streaming saat ini ditambah _Off.

  • Jika _Way == ios_base::end, posisi baru adalah akhir dari streaming ditambah _Off.

Jika _Which & ios_base::in bukan nol dan buffer input ada, fungsi mengubah posisi berikutnya untuk dibaca dalam buffer input. Jika _Which & ios_base::out juga nonzero, _Way != ios_base::cur, dan buffer output ada, fungsi juga mengatur posisi berikutnya untuk menulis agar sesuai dengan posisi berikutnya untuk dibaca.

Jika tidak, jika _Which & ios_base::out bukan nol dan buffer output ada, fungsi mengubah posisi berikutnya untuk menulis dalam buffer output. Jika tidak, operasi penempatan gagal. Agar operasi penempatan berhasil, posisi aliran yang dihasilkan harus berada dalam urutan yang dikontrol.

strstreambuf::seekpos

Fungsi anggota virtual yang dilindungi yang mencoba mengubah posisi saat ini untuk aliran yang dikontrol.

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

Parameter

_Sp
Posisi yang dicari.

_Yang mana
Menentukan mode untuk posisi penunjuk. Defaultnya adalah memungkinkan Anda mengubah posisi baca dan tulis.

Tampilkan Nilai

Jika fungsi berhasil mengubah salah satu atau kedua posisi aliran, fungsi akan mengembalikan posisi aliran yang dihasilkan. Jika tidak, itu gagal dan mengembalikan posisi aliran yang tidak valid. Untuk menentukan apakah posisi aliran tidak valid, bandingkan nilai yang dikembalikan dengan pos_type(off_type(-1)).

Keterangan

Fungsi anggota virtual yang dilindungi berusaha mengubah posisi saat ini untuk aliran yang dikontrol. Untuk objek strstreambuf kelas, posisi aliran terdiri dari offset aliran murni. Offset nol menunjuk elemen pertama dari urutan yang dikontrol. Posisi baru ditentukan oleh _Sp.

Jika _Which & ios_base::in bukan nol dan buffer input ada, fungsi mengubah posisi berikutnya untuk dibaca di buffer input. Jika _Which & ios_base::out bukan nol dan buffer output ada, fungsi juga mengatur posisi berikutnya untuk menulis agar sesuai dengan posisi berikutnya untuk dibaca. Jika tidak, jika _Which & ios_base::out bukan nol dan buffer output ada, fungsi mengubah posisi berikutnya untuk menulis dalam buffer output. Jika tidak, operasi penempatan gagal. Agar operasi penempatan berhasil, posisi aliran yang dihasilkan harus berada dalam urutan yang dikontrol.

strstreambuf::str

Memanggil pembekuan, lalu mengembalikan penunjuk ke awal urutan yang dikontrol.

char *str();

Tampilkan Nilai

Penunjuk ke awal urutan yang dikontrol.

Keterangan

Tidak ada elemen null penghentian, kecuali Anda secara eksplisit menyisipkannya.

Contoh

Lihat strstreambuf::freeze untuk sampel yang menggunakan str.

strstreambuf::strstreambuf

Membuat objek jenis strstreambuf.

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);

Parameter

alloc_func
Fungsi yang digunakan untuk mengalokasikan memori buffer.

count
Menentukan panjang buffer yang diacu oleh getptr. Jika getptr bukan argumen (formulir konstruktor pertama), ukuran alokasi yang disarankan untuk buffer.

_Freefunc
Fungsi yang digunakan untuk membebaskan memori buffer.

getptr
Buffer yang digunakan untuk input.

putptr
Buffer yang digunakan untuk output.

Keterangan

Konstruktor pertama menyimpan pointer null di semua pointer yang mengontrol buffer input, buffer output, dan alokasi strstreambuf. Ini mengatur mode strstreambuf yang disimpan untuk membuat urutan terkontrol dapat dimodifikasi dan dapat diperluas. Ini juga menerima hitungan sebagai ukuran alokasi awal yang disarankan.

Konstruktor kedua berperilaku seperti yang pertama, kecuali bahwa konstruktor menyimpan alloc_func sebagai penunjuk ke fungsi untuk memanggil untuk mengalokasikan penyimpanan dan free_func sebagai penunjuk ke fungsi untuk memanggil untuk membebaskan penyimpanan tersebut.

Ketiga konstruktor:

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);

juga berulah seperti yang pertama, kecuali getptr menunjuk objek array yang digunakan untuk memegang urutan terkontrol. (Oleh karena itu, itu tidak boleh menjadi penunjuk null.) Jumlah elemen N dalam array ditentukan sebagai berikut:

  • Jika (hitungan> 0), maka N dihitung.

  • Jika (hitungan == 0), maka N adalah strlen((const char *) getptr ).

  • Jika (hitungan< 0), maka N INT_MAX.

Jika putptr adalah penunjuk null, fungsi hanya menetapkan buffer input dengan mengeksekusi:

setg(getptr,
    getptr,
    getptr + N);

Jika tidak, ia menetapkan buffer input dan output dengan mengeksekusi:

setg(getptr,
    getptr,
    putptr);

setp(putptr,
    getptr + N);

Dalam hal ini, putptr harus dalam interval [ getptr, getptr + N].

Akhirnya, ketiga konstruktor:

strstreambuf(const char *getptr,
    streamsize count);

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

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

semua berulah sama seperti:

streambuf((char *)getptr, count);

kecuali bahwa mode tersimpan membuat urutan terkontrol tidak dapat dimodifikasi atau diperluas.

strstreambuf::underflow

Fungsi virtual yang dilindungi untuk mengekstrak elemen saat ini dari aliran input.

virtual int underflow();

Tampilkan Nilai

Jika fungsi tidak berhasil, fungsi akan mengembalikan EOF. Jika tidak, ia mengembalikan elemen saat ini dalam aliran input, dikonversi seperti yang dijelaskan di atas.

Keterangan

Fungsi anggota virtual yang dilindungi berusaha mengekstrak elemen ch saat ini dari buffer input, lalu memajukan posisi aliran saat ini, dan mengembalikan elemen sebagai (int)(unsigned char)ch. Ini dapat melakukannya hanya dalam satu cara: jika posisi baca tersedia, dibutuhkan ch sebagai elemen yang disimpan dalam posisi baca dan memajukan pointer berikutnya untuk buffer input.

Lihat juga

streambuf
Keamanan utas di Pustaka Standar C++
Pemrograman iostream
Konvensi iostreams