Spec-Zone.ru › C++

std::basic_streambuf

Определён в заголовочном файле <streambuf>
template< 
    class CharT, 
    class Traits = std::char_traits<CharT>
> class basic_streambuf;

Класс basic_streambuf управляет вводом и выводом символьной последовательности. Он включает в себя и предоставляет доступ к

  1. управляемой символьной последовательности, также называемой буфером, которая может содержать входную последовательность (также называемую областью чтения) для буферизации операций ввода и/или выходную последовательность (также называемую областью записи) для буферизации операций вывода.
  2. связанной символьной последовательности, также называемой источником (для ввода) или приёмником (для вывода). Это может быть сущность, доступ к которой осуществляется через API ОС (файл, TCP-сокет, последовательный порт или другое символьное устройство), либо объект (std::vector, массив, строковый литерал), который можно интерпретировать как источник или приёмник символов.

Объекты потоков ввода-вывода std::basic_istream и std::basic_ostream, а также все производные от них объекты (std::ofstream, std::stringstream и т. д.), реализованы полностью на основе std::basic_streambuf.

Управляемая символьная последовательность представляет собой массив из CharT, который постоянно отображает подпоследовательность или «окно» в связанную символьную последовательность. Его состояние описывается тремя указателями:

  1. Указатель на начало всегда указывает на наименьший элемент буфера.
  2. Следующий указатель указывает на элемент, который будет следующим кандидатом для чтения или записи.
  3. Указатель на конец указывает на позицию сразу за концом буфера.

Объект basic_streambuf может поддерживать ввод (в этом случае буфер, описываемый указателями на начало, следующий и на конец, называется областью чтения), вывод (областью записи) или одновременный ввод и вывод. В последнем случае отслеживаются шесть указателей, которые могут указывать на элементы одного и того же символьного массива или двух отдельных массивов.

Если следующий указатель в области записи меньше указателя на конец, доступна позиция записи. По следующему указателю можно разыменовывать и присваивать значение.

Если следующий указатель в области чтения меньше указателя на конец, доступна позиция чтения. По следующему указателю можно разыменовывать и считывать значение.

Если следующий указатель в области чтения больше указателя на начало, доступна позиция возврата; следующий указатель можно уменьшить, разыменовать и присвоить ему значение, чтобы вернуть символ в область чтения.

Представление и кодировка символов в управляемой последовательности могут отличаться от представления символов в связанной последовательности. В этом случае для преобразования обычно используется фасет локали std::codecvt. Типичный пример — файлы UTF-8 (или файлы с другой многобайтовой кодировкой), доступ к которым осуществляется через объекты std::wfstream: управляемая последовательность состоит из символов wchar_t, а связанная последовательность — из байтов.

Типичная реализация базового класса std::basic_streambuf содержит в качестве полей данных только шесть указателей CharT* и копию std::locale. Кроме того, реализации могут хранить кэшированные копии фасетов локали, которые становятся недействительными при каждом вызове imbue(). Конкретные буферы, такие как std::basic_filebuf или std::basic_stringbuf, являются производными от std::basic_streambuf.

Предусмотрено несколько псевдонимов типов для распространённых символьных типов:

Определён в заголовочном файле <streambuf>
Тип Определение
std::streambuf std::basic_streambuf<char>
std::wstreambuf std::basic_streambuf<wchar_t>

Типы-члены

Тип-член Определение
char_type CharT
traits_type Traits; программа некорректна, если Traits::char_type не является CharT.
int_type Traits::int_type
pos_type Traits::pos_type
off_type Traits::off_type

Функции-члены

(деструктор)
[виртуальная]
уничтожает объект basic_streambuf
(виртуальная открытая функция-член)
Локали
pubimbue
изменяет связанную локаль и вызывает imbue()
(открытая функция-член)
getloc
получает копию связанной локали
(открытая функция-член)
Позиционирование
pubsetbuf
вызывает setbuf()
(открытая функция-член)
pubseekoff
вызывает seekoff()
(открытая функция-член)
pubseekpos
вызывает seekpos()
(открытая функция-член)
pubsync
вызывает sync()
(открытая функция-член)
Область чтения
in_avail
получает количество символов, непосредственно доступных в области чтения
(открытая функция-член)
snextc
продвигает входную последовательность, а затем считывает один символ, не продвигая её повторно
(открытая функция-член)
sbumpcstossc
(удалена в C++17)
считывает один символ из входной последовательности и продвигает последовательность
(открытая функция-член)
sgetc
считывает один символ из входной последовательности, не продвигая её
(открытая функция-член)
sgetn
вызывает xsgetn()
(открытая функция-член)
Область записи
sputc
записывает один символ в область записи и продвигает следующий указатель
(открытая функция-член)
sputn
вызывает xsputn()
(открытая функция-член)
Возврат символа
sputbackc
возвращает один символ во входную последовательность
(открытая функция-член)
sungetc
сдвигает следующий указатель во входной последовательности на одну позицию назад
(открытая функция-член)

Защищённые функции-члены

(конструктор)
создаёт объект basic_streambuf
(защищённая функция-член)
operator=
(C++11)
заменяет объект basic_streambuf
(защищённая функция-член)
swap
(C++11)
обменивает местами два объекта basic_streambuf
(защищённая функция-член)
Локали
imbue
[виртуальная]
реагирует на изменение связанной локали
(виртуальная защищённая функция-член)
Позиционирование
setbuf
[виртуальная]
заменяет буфер пользовательским массивом, если это разрешено
(виртуальная защищённая функция-член)
seekoff
[виртуальная]
перемещает следующий указатель во входной последовательности, выходной последовательности или обеих, используя относительную адресацию
(виртуальная защищённая функция-член)
seekpos
[виртуальная]
перемещает следующий указатель во входной последовательности, выходной последовательности или обеих, используя абсолютную адресацию
(виртуальная защищённая функция-член)
sync
[виртуальная]
синхронизирует буферы со связанной символьной последовательностью
(виртуальная защищённая функция-член)
Область чтения
showmanyc
[виртуальная]
получает, если известно, количество символов, доступных для ввода в связанной входной последовательности
(виртуальная защищённая функция-член)
underflow
[виртуальная]
считывает символы из связанной входной последовательности в область чтения
(виртуальная защищённая функция-член)
uflow
[виртуальная]
считывает символы из связанной входной последовательности в область чтения и продвигает следующий указатель
(виртуальная защищённая функция-член)
xsgetn
[виртуальная]
считывает несколько символов из входной последовательности
(виртуальная защищённая функция-член)
ebackgptregptr
возвращает указатели на начало, текущий символ и конец области чтения
(защищённая функция-член)
gbump
продвигает следующий указатель во входной последовательности
(защищённая функция-член)
setg
перемещает указатели на начало, следующий элемент и конец входной последовательности
(защищённая функция-член)
Область записи
xsputn
[виртуальная]
записывает несколько символов в выходную последовательность
(виртуальная защищённая функция-член)
overflow
[виртуальная]
записывает символы из области записи в связанную выходную последовательность
(виртуальная защищённая функция-член)
pbasepptrepptr
возвращает указатели на начало, текущий символ и конец области записи
(защищённая функция-член)
pbump
продвигает следующий указатель выходной последовательности
(защищённая функция-член)
setp
перемещает указатели на начало, следующий элемент и конец выходной последовательности
(защищённая функция-член)
Возврат символа
pbackfail
[виртуальная]
возвращает символ во входную последовательность, при необходимости изменяя её
(виртуальная защищённая функция-член)

См. также

FILE
тип объекта, способного хранить всю информацию, необходимую для управления потоком ввода-вывода C
(псевдоним типа)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_streambuf

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API