diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2020-11-11 00:19:40 +0000 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2020-11-11 00:19:40 +0000 |
commit | ecba8547dd398ad4b627756013dbd22be417d4da (patch) | |
tree | 65a7f03392ebd8f552b663b03889f30f6b491a60 /gcc | |
parent | bb6226419f566bb9f68d9f2dc7d3aca501efaa98 (diff) | |
download | gcc-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