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 и выводит его внутренний буфер (открытая функция-член) |
|
| атомарно передаёт весь внутренний буфер обёрнутому буферу потока (открытая функция-член) |
|
| получает указатель на обёрнутый буфер потока (открытая функция-член) |
|
получает распределитель памяти, используемый этим 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 |
Функции-члены
|
[виртуальная] | уничтожает объект 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/cpp/io/basic_syncbuf