std::basic_syncbuf
Определено в заголовке <syncstream> | ||
|---|---|---|
template<
class CharT,
class Traits = std::char_traits<CharT>,
class Allocator = std::allocator<CharT>
> class basic_syncbuf : public std::basic_streambuf<CharT, Traits>
| (с C++20) |
std::basic_syncbuf является обёрткой для std::basic_streambuf (переданной при создании в виде указателя). Она накапливает вывод в собственном внутреннем буфере и атомарно передаёт всё содержимое в обернутый буфер при уничтожении и при явном запросе, чтобы они появлялись как непрерывная последовательность символов. Она гарантирует отсутствие гонок данных и переплетения символов, отправленных в обернутый буфер, пока все другие выводы, сделанные в тот же буфер, выполняются через, возможно, разные экземпляры std::basic_syncbuf.
Типичная реализация std::basic_syncbuf содержит указатель на обернутый std::basic_streambuf, булеву переменную, указывающую, будет ли буфер передавать своё содержимое обернутому буферу при синхронизации (очистке), булеву переменную, указывающую на ожидающую очистку, когда политика не предусматривает вывода при синхронизации, внутренний буфер, использующий Allocator (такой как std::string), и указатель на мьютекс, используемый для синхронизации вывода между несколькими потоками, обращающимися к одному и тому же обернутому буферу потока (эти мьютексы могут находиться в хэш-таблице с указателями на std::basic_streambuf объекты в качестве ключей).
Как и другие классы streambuf, std::basic_syncbuf обычно используется только через соответствующий поток, std::osyncstream, а не напрямую.
Предоставлены несколько определений типов для распространённых типов символов:
Определено в заголовке <syncstream> |
|
|---|---|
| Тип | Определение |
std::syncbuf | std::basic_syncbuf<char> |
std::wsyncbuf | std::basic_syncbuf<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 |
allocator_type | Allocator |
streambuf_type | std::basic_streambuf<CharT, Traits> |
Члены-функции
Публичные члены-функции |
|
создаёт объект basic_syncbuf (публичная функция-член) |
|
присваивает объект basic_syncbuf (публичная функция-член) |
|
меняет местами два объекта basic_syncbuf (публичная функция-член) |
|
уничтожает basic_syncbuf и выводит её внутренний буфер (публичная функция-член) |
|
| атомарно передаёт весь внутренний буфер в обернутый streambuf (публичная функция-член) |
|
| получает указатель на обернутый streambuf (публичная функция-член) |
|
получает аллокатор, используемый данным basic_syncbuf (публичная функция-член) |
|
| изменяет текущую политику вывода при синхронизации (публичная функция-член) |
|
Защищённые члены-функции |
|
| либо выводит, либо записывает ожидающую очистку, в зависимости от текущей политики вывода при синхронизации (публичная функция-член) |
|
Функции вне класса
|
(C++20) | специализация алгоритма std::swap (шаблон функции) |
Наследуется от std::basic_streambuf
Типы членов
| Тип члена | Определение |
|---|---|
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 |
Члены-функции
|
[virtual] | удаляет объект basic_streambuf (виртуальная публичная функция-член std::basic_streambuf<CharT,Traits>) |
Локали |
|
вызывает imbue() (публичная функция-член std::basic_streambuf<CharT,Traits>) |
|
| получает копию связанной локали (публичная функция-член std::basic_streambuf<CharT,Traits>) |
|
Позиционирование |
|
вызывает setbuf() (публичная функция-член std::basic_streambuf<CharT,Traits>) |
|
вызывает seekoff() (публичная функция-член std::basic_streambuf<CharT,Traits>) |
|
вызывает seekpos() (публичная функция-член std::basic_streambuf<CharT,Traits>) |
|
вызывает sync() (публичная функция-член std::basic_streambuf<CharT,Traits>) |
|
Область получения |
|
| получает количество символов, немедленно доступных в области получения (публичная функция-член std::basic_streambuf<CharT,Traits>) |
|
| перемещает входную последовательность, затем считывает один символ без повторного перемещения (публичная функция-член std::basic_streambuf<CharT,Traits>) |
|
|
(удалено в C++17) | считывает один символ из входной последовательности и перемещает последовательность (публичная функция-член std::basic_streambuf<CharT,Traits>) |
| считывает один символ из входной последовательности без перемещения последовательности (публичная функция-член std::basic_streambuf<CharT,Traits>) |
|
вызывает xsgetn() (публичная функция-член std::basic_streambuf<CharT,Traits>) |
|
Область вывода |
|
| записывает один символ в область вывода и перемещает указатель на следующий (публичная функция-член std::basic_streambuf<CharT,Traits>) |
|
вызывает xsputn() (публичная функция-член std::basic_streambuf<CharT,Traits>) |
|
Возврат |
|
| возвращает один символ в входную последовательность (публичная функция-член std::basic_streambuf<CharT,Traits>) |
|
| перемещает указатель на следующий символ в входной последовательности назад на один (публичная функция-член std::basic_streambuf<CharT,Traits>) |
|
Защищенные функции-члены
создает объект basic_streambuf (защищённый член-функция) |
|
|
(C++11) | заменяет объект basic_streambuf (защищённый член-функция) |
|
(C++11) | меняет местами два объекта basic_streambuf (защищённый член-функция) |
Локали |
|
|
[виртуальный] | изменяет связанную локаль (виртуальная защищённая член-функция std::basic_streambuf<CharT,Traits>) |
Позиционирование |
|
|
[виртуальный] | заменяет буфер на пользовательский массив, если разрешено (виртуальная защищённая член-функция std::basic_streambuf<CharT,Traits>) |
|
[виртуальный] | перепозиционирует указатель на следующий символ в последовательности ввода, вывода или обоих, используя относительный адрес (виртуальная защищённая член-функция std::basic_streambuf<CharT,Traits>) |
|
[виртуальный] | перепозиционирует указатель на следующий символ в последовательности ввода, вывода или обоих, используя абсолютный адрес (виртуальная защищённая член-функция std::basic_streambuf<CharT,Traits>) |
|
[виртуальный] | синхронизирует буферы со связанной последовательностью символов (виртуальная защищённая член-функция std::basic_streambuf<CharT,Traits>) |
Область получения |
|
|
[виртуальный] | получает количество символов, доступных для ввода в связанной последовательности ввода, если известно (виртуальная защищённая член-функция std::basic_streambuf<CharT,Traits>) |
|
[виртуальный] | считывает символы из связанной последовательности ввода в область получения (виртуальная защищённая член-функция std::basic_streambuf<CharT,Traits>) |
|
[виртуальный] | считывает символы из связанной последовательности ввода в область получения и перемещает указатель на следующий символ (виртуальная защищённая член-функция std::basic_streambuf<CharT,Traits>) |
|
[виртуальный] | считывает несколько символов из последовательности ввода (виртуальная защищённая член-функция std::basic_streambuf<CharT,Traits>) |
| возвращает указатель на начало, текущий символ и конец области получения (защищённый член-функция) |
|
| перемещает указатель на следующий символ в последовательности ввода (защищённый член-функция) |
|
| перепозиционирует указатели начала, текущего и конечного символов последовательности ввода (защищённый член-функция) |
|
Область записи |
|
|
[виртуальный] | записывает несколько символов в последовательность вывода (виртуальная защищённая член-функция std::basic_streambuf<CharT,Traits>) |
|
[виртуальный] | записывает символы из области записи в связанную последовательность вывода (виртуальная защищённая член-функция std::basic_streambuf<CharT,Traits>) |
| возвращает указатель на начало, текущий символ и конец области записи (защищённый член-функция) |
|
| перемещает указатель на следующий символ в последовательности вывода (защищённый член-функция) |
|
| перепозиционирует указатели начала, текущего и конечного символов последовательности вывода (защищённый член-функция) |
|
Возврат символа |
|
|
[виртуальный] | возвращает символ в последовательность ввода, возможно, изменяя последовательность ввода (виртуальная защищённая член-функция std::basic_streambuf<CharT,Traits>) |
Примечания
| Макросы проверки наличия функции | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_syncbuf | 201803L | (C++20) | Синхронизированный буферизованный ostream (std::syncbuf, std::osyncstream) и манипуляторы |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/basic_syncbuf