ecba8547dd
This adds the manipulators for use with basic_osyncstream. In order to detect when an arbitrary basic_ostream<C,T> is the base class of a basic_syncbuf<C,T,A> object, introduce a new intermediate base class that stores the data members. The new base class stores a pointer and two bools, which wastes (sizeof(void*) - 2) bytes of padding. It would be possible to use the two least significant bits of the pointer for the two bools, at least for targets where alignof(basic_streambuf) > 2, but that's left as a possible change for a future date. Also define basic_syncbuf::overflow to override the virtual function in the base class, so that single characters can be inserted into the stream buffer. Previously the default basic_streambuf::overflow implementation was used, which drops the character on the floor. libstdc++-v3/ChangeLog: * include/std/ostream (__syncbuf_base): New class template. (emit_on_flush, noemit_on_flush, flush_emit): New manipulators. * include/std/syncstream (basic_syncbuf): Derive from __syncbuf_base instead of basic_streambuf. (basic_syncbuf::operator=): Remove self-assignment check. (basic_syncbuf::swap): Remove self-swap check. (basic_syncbuf::emit): Do not skip pubsync() call if sequence is empty. (basic_syncbuf::sync): Remove no-op pubsync on stringbuf. (basic_syncbuf::overflow): Define override. * testsuite/27_io/basic_syncstream/basic_ops/1.cc: Test basic_osyncstream::put(char_type). * testsuite/27_io/basic_ostream/emit/1.cc: New test. |
||
---|---|---|
.. | ||
basic_filebuf | ||
basic_fstream | ||
basic_ifstream | ||
basic_ios | ||
basic_iostream | ||
basic_istream | ||
basic_istringstream | ||
basic_ofstream | ||
basic_ostream | ||
basic_ostringstream | ||
basic_streambuf | ||
basic_stringbuf | ||
basic_stringstream | ||
basic_syncbuf | ||
basic_syncstream | ||
filesystem | ||
fpos | ||
headers | ||
ios_base | ||
manipulators | ||
objects | ||
types | ||
rvalue_streams-2.cc | ||
rvalue_streams.cc |