Difference between revisions of "cpp/io/basic osyncstream"
Andreas Krug (Talk | contribs) m (fmt) |
|||
(7 intermediate revisions by 6 users not shown) | |||
Line 2: | Line 2: | ||
{{cpp/io/basic_osyncstream/navbar}} | {{cpp/io/basic_osyncstream/navbar}} | ||
{{dcl begin}} | {{dcl begin}} | ||
− | {{dcl header | syncstream}} | + | {{dcl header|syncstream}} |
− | {{dcl | since=c++20 | 1= | + | {{dcl|since=c++20|1= |
− | template< | + | template< |
− | class CharT, | + | class CharT, |
class Traits = std::char_traits<CharT>, | class Traits = std::char_traits<CharT>, | ||
class Allocator = std::allocator<CharT> | class Allocator = std::allocator<CharT> | ||
− | > class basic_osyncstream: public std::basic_ostream<CharT, Traits> | + | > class basic_osyncstream : public std::basic_ostream<CharT, Traits> |
}} | }} | ||
{{dcl end}} | {{dcl end}} | ||
Line 15: | Line 15: | ||
It can be used with a named variable: | It can be used with a named variable: | ||
− | |||
{{source|1= | {{source|1= | ||
{ | { | ||
− | + | std::osyncstream synced_out(std::cout); // synchronized wrapper for std::cout | |
− | + | synced_out << "Hello, "; | |
− | + | synced_out << "World!"; | |
− | + | synced_out << std::endl; // flush is noted, but not yet performed | |
− | + | synced_out << "and more!\n"; | |
} // characters are transferred and std::cout is flushed | } // characters are transferred and std::cout is flushed | ||
}} | }} | ||
as well as with a temporary: | as well as with a temporary: | ||
− | |||
{{source|1= | {{source|1= | ||
std::osyncstream(std::cout) << "Hello, " << "World!" << '\n'; | std::osyncstream(std::cout) << "Hello, " << "World!" << '\n'; | ||
}} | }} | ||
− | It provides the guarantee that all output made to the same final destination buffer (std::cout in the examples above) will be free of data races and will not be interleaved or garbled in any way, as long as every write to | + | It provides the guarantee that all output made to the same final destination buffer ({{lc|std::cout}} in the examples above) will be free of data races and will not be interleaved or garbled in any way, as long as every write to that final destination buffer is made through (possibly different) instances of {{tt|std::basic_osyncstream}}. |
− | Typical implementation of {{tt|std::basic_osyncstream}} holds only one member: the wrapped {{lc|std::basic_syncbuf}} | + | Typical implementation of {{tt|std::basic_osyncstream}} holds only one member: the wrapped {{lc|std::basic_syncbuf}}. |
− | + | {{inheritance diagram/std-basic_osyncstream}} | |
− | {{ | + | {{cpp/basic char typedefs|osyncstream|syncstream}} |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
===Member types=== | ===Member types=== | ||
{{dsc begin}} | {{dsc begin}} | ||
− | {{dsc hitem | Member type | Definition}} | + | {{dsc hitem|Member type|Definition}} |
− | {{dsc inc | cpp/io/dsc char_type}} | + | {{dsc inc|cpp/io/dsc char_type}} |
− | {{dsc inc | cpp/io/dsc traits_type}} | + | {{dsc inc|cpp/io/dsc traits_type}} |
− | {{dsc inc | cpp/io/dsc int_type}} | + | {{dsc inc|cpp/io/dsc int_type}} |
− | {{dsc inc | cpp/io/dsc pos_type}} | + | {{dsc inc|cpp/io/dsc pos_type}} |
− | {{dsc inc | cpp/io/dsc off_type}} | + | {{dsc inc|cpp/io/dsc off_type}} |
− | {{dsc | {{tt|allocator_type}} | {{ | + | {{dsc|{{tt|allocator_type}}|{{tt|Allocator}}}} |
− | {{dsc | {{tt|streambuf_type }} | {{c|std::basic_streambuf<CharT, Traits>}}}} | + | {{dsc|{{tt|streambuf_type }}|{{c/core|std::basic_streambuf<CharT, Traits>}}}} |
− | {{dsc | {{tt|syncbuf_type }} | {{c|std::basic_syncbuf<CharT, Traits, Allocator>}}}} | + | {{dsc|{{tt|syncbuf_type }}|{{c/core|std::basic_syncbuf<CharT, Traits, Allocator>}}}} |
{{dsc end}} | {{dsc end}} | ||
===Member functions=== | ===Member functions=== | ||
{{dsc begin}} | {{dsc begin}} | ||
− | {{dsc inc | cpp/io/basic_osyncstream/dsc constructor}} | + | {{dsc inc|cpp/io/basic_osyncstream/dsc constructor}} |
− | {{dsc inc | cpp/io/basic_osyncstream/dsc operator | + | {{dsc inc|1=cpp/io/basic_osyncstream/dsc operator=}} |
− | {{dsc inc | cpp/io/basic_osyncstream/dsc destructor}} | + | {{dsc inc|cpp/io/basic_osyncstream/dsc destructor}} |
− | {{dsc inc | cpp/io/basic_osyncstream/dsc rdbuf}} | + | {{dsc inc|cpp/io/basic_osyncstream/dsc rdbuf}} |
− | {{dsc inc | cpp/io/basic_osyncstream/dsc get_wrapped}} | + | {{dsc inc|cpp/io/basic_osyncstream/dsc get_wrapped}} |
− | {{dsc inc | cpp/io/basic_osyncstream/dsc emit}} | + | {{dsc inc|cpp/io/basic_osyncstream/dsc emit}} |
{{dsc end}} | {{dsc end}} | ||
Line 71: | Line 64: | ||
{{cpp/io/basic_ios/inherit}} | {{cpp/io/basic_ios/inherit}} | ||
{{cpp/io/ios_base/inherit}} | {{cpp/io/ios_base/inherit}} | ||
+ | |||
+ | ===Notes=== | ||
+ | {{feature test macro|__cpp_lib_syncbuf|std=C++20|value=201803L|Synchronized buffered ostream ([[#Top|{{tt|std::osyncstream}}]], {{lc|std::syncbuf}}) and manipulators}} | ||
{{langlinks|de|es|fr|it|ja|pt|ru|zh}} | {{langlinks|de|es|fr|it|ja|pt|ru|zh}} |
Latest revision as of 03:48, 7 December 2023
Defined in header <syncstream>
|
||
template< class CharT, |
(since C++20) | |
The class template std::basic_osyncstream
is a convenience wrapper for std::basic_syncbuf. It provides a mechanism to synchronize threads writing to the same stream.
It can be used with a named variable:
as well as with a temporary:
std::osyncstream(std::cout) << "Hello, " << "World!" << '\n';
It provides the guarantee that all output made to the same final destination buffer (std::cout in the examples above) will be free of data races and will not be interleaved or garbled in any way, as long as every write to that final destination buffer is made through (possibly different) instances of std::basic_osyncstream
.
Typical implementation of std::basic_osyncstream
holds only one member: the wrapped std::basic_syncbuf.
Inheritance diagram
Several typedefs for common character types are provided:
Defined in header
<syncstream> | |
Type | Definition |
std::osyncstream
|
std::basic_osyncstream<char> |
std::wosyncstream
|
std::basic_osyncstream<wchar_t> |
Contents |
[edit] Member types
Member type | Definition |
char_type
|
CharT
|
traits_type
|
Traits ; the program is ill-formed if Traits::char_type is not 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> |
syncbuf_type
|
std::basic_syncbuf<CharT, Traits, Allocator> |
[edit] Member functions
constructs a basic_osyncstream object (public member function) | |
assigns a basic_osyncstream object (public member function) | |
destroys the basic_osyncstream and emits its internal buffer (public member function) | |
obtains a pointer to the underlying basic_syncbuf (public member function) | |
obtains a pointer to the final destination stream buffer (public member function) | |
calls emit() on the underlying basic_syncbuf to transmit its internal data to the final destination (public member function) |
Inherited from std::basic_ostream
Member functions
Formatted output | |
inserts formatted data (public member function of std::basic_ostream<CharT,Traits> )
| |
Unformatted output | |
inserts a character (public member function of std::basic_ostream<CharT,Traits> )
| |
inserts blocks of characters (public member function of std::basic_ostream<CharT,Traits> )
| |
Positioning | |
returns the output position indicator (public member function of std::basic_ostream<CharT,Traits> )
| |
sets the output position indicator (public member function of std::basic_ostream<CharT,Traits> )
| |
Miscellaneous | |
synchronizes with the underlying storage device (public member function of std::basic_ostream<CharT,Traits> )
|
Member classes
implements basic logic for preparation of the stream for output operations (public member class of std::basic_ostream<CharT,Traits> )
|
Inherited from std::basic_ios
Member types
Member type | Definition |
char_type
|
CharT
|
traits_type
|
Traits
|
int_type
|
Traits::int_type
|
pos_type
|
Traits::pos_type
|
off_type
|
Traits::off_type
|
Member functions
State functions | |
checks if no error has occurred i.e. I/O operations are available (public member function of std::basic_ios<CharT,Traits> )
| |
checks if end-of-file has been reached (public member function of std::basic_ios<CharT,Traits> )
| |
checks if an error has occurred (public member function of std::basic_ios<CharT,Traits> )
| |
checks if a non-recoverable error has occurred (public member function of std::basic_ios<CharT,Traits> )
| |
checks if an error has occurred (synonym of fail()) (public member function of std::basic_ios<CharT,Traits> )
| |
checks if no error has occurred (synonym of ! fail()) (public member function of std::basic_ios<CharT,Traits> )
| |
returns state flags (public member function of std::basic_ios<CharT,Traits> )
| |
sets state flags (public member function of std::basic_ios<CharT,Traits> )
| |
modifies state flags (public member function of std::basic_ios<CharT,Traits> )
| |
Formatting | |
copies formatting information (public member function of std::basic_ios<CharT,Traits> )
| |
manages the fill character (public member function of std::basic_ios<CharT,Traits> )
| |
Miscellaneous | |
manages exception mask (public member function of std::basic_ios<CharT,Traits> )
| |
sets the locale (public member function of std::basic_ios<CharT,Traits> )
| |
manages associated stream buffer (public member function of std::basic_ios<CharT,Traits> )
| |
manages tied stream (public member function of std::basic_ios<CharT,Traits> )
| |
narrows characters (public member function of std::basic_ios<CharT,Traits> )
| |
widens characters (public member function of std::basic_ios<CharT,Traits> )
|
Inherited from std::ios_base
Member functions
Formatting | |
manages format flags (public member function of std::ios_base )
| |
sets specific format flag (public member function of std::ios_base )
| |
clears specific format flag (public member function of std::ios_base )
| |
manages decimal precision of floating point operations (public member function of std::ios_base )
| |
manages field width (public member function of std::ios_base )
| |
Locales | |
sets locale (public member function of std::ios_base )
| |
returns current locale (public member function of std::ios_base )
| |
Internal extensible array | |
[static] |
returns a program-wide unique integer that is safe to use as index to pword() and iword() (public static member function of std::ios_base )
|
resizes the private storage if necessary and access to the long element at the given index (public member function of std::ios_base )
| |
resizes the private storage if necessary and access to the void* element at the given index (public member function of std::ios_base )
| |
Miscellaneous | |
registers event callback function (public member function of std::ios_base )
| |
[static] |
sets whether C++ and C I/O libraries are interoperable (public static member function of std::ios_base )
|
Member classes | |
stream exception (public member class of std::ios_base )
| |
initializes standard stream objects (public member class of std::ios_base )
|
Member types and constants | |||||||||||||||||||||||||||||||||||||||
Type | Explanation | ||||||||||||||||||||||||||||||||||||||
stream open mode type
The following constants are also defined:
(typedef) | |||||||||||||||||||||||||||||||||||||||
formatting flags type
The following constants are also defined:
(typedef) | |||||||||||||||||||||||||||||||||||||||
state of the stream type
The following constants are also defined:
(typedef) | |||||||||||||||||||||||||||||||||||||||
seeking direction type
The following constants are also defined:
(typedef) | |||||||||||||||||||||||||||||||||||||||
specifies event type (enum) | |||||||||||||||||||||||||||||||||||||||
callback function type (typedef) |
[edit] Notes
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_syncbuf |
201803L | (C++20) | Synchronized buffered ostream (std::osyncstream , std::syncbuf) and manipulators
|