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.

std-streambuf.svg

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

Определено в заголовке <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
[virtual]
записывает несколько символов в выходной последовательности
(виртуальная защищенная функция-член)
overflow
[virtual]
записывает символы в связанную выходную последовательность из области записи
(виртуальная защищенная функция-член)
pbasepptrepptr
возвращает указатель на начало, текущий символ и конец области записи
(защищенная функция-член)
pbump
перемещает указатель на следующий символ выходной последовательности
(защищенная функция-член)
setp
перепозиционирует указатели начала, следующего символа и конца выходной последовательности
(защищенная функция-член)
Возврат
pbackfail
[virtual]
возвращает символ обратно в входную последовательность, возможно, изменяя входную последовательность
(виртуальная защищенная функция-член)

См. также

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

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

Spec-Zone.ru

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