aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2020-11-11 00:19:40 +0000
committerJonathan Wakely <jwakely@redhat.com>2020-11-11 00:19:40 +0000
commitecba8547dd398ad4b627756013dbd22be417d4da (patch)
tree65a7f03392ebd8f552b663b03889f30f6b491a60 /gcc
parentbb6226419f566bb9f68d9f2dc7d3aca501efaa98 (diff)
downloadgcc-ecba8547dd398ad4b627756013dbd22be417d4da.zip
gcc-ecba8547dd398ad4b627756013dbd22be417d4da.tar.gz
gcc-ecba8547dd398ad4b627756013dbd22be417d4da.tar.bz2
libstdc++: Implement std::emit_on_flush etc.
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.
Diffstat (limited to 'gcc')
0 files changed, 0 insertions, 0 deletions