Commit 74843551 by Paolo Carlini Committed by Paolo Carlini

sstream.tcc (overflow): Instead of calling str()...

2003-05-01  Paolo Carlini  <pcarlini@unitus.it>

	* include/bits/sstream.tcc (overflow): Instead of calling
	str(), then _M_string.reserve, thus copying the contents
	of the current buffer two times, just copy the latter in
	a temporary, then use the 'swap trick'.

From-SVN: r66358
parent e70b1b77
2003-05-01 Paolo Carlini <pcarlini@unitus.it>
* include/bits/sstream.tcc (overflow): Instead of calling
str(), then _M_string.reserve, thus copying the contents
of the current buffer two times, just copy the latter in
a temporary, then use the 'swap trick'.
2003-05-01 Paolo Carlini <pcarlini@unitus.it>
* include/std/std_sstream.h (str()): Revert the best of the
previous 'improvement', incorrect due to the COW nature of
v3 basic_string; simplify.
......
......@@ -100,11 +100,15 @@ namespace std
// Order these tests done in is unspecified by the standard.
if (!__testput)
{
// Force-allocate, re-sync.
_M_string = this->str();
// In virtue of DR 169 (TC) we are allowed to grow more than
// one char. That's easy to implement thanks to the exponential
// growth policy builtin into basic_string.
__string_type __tmp;
__tmp.reserve(__len);
__tmp.assign(_M_string.data(),
this->_M_out_end - this->_M_out_beg);
_M_string.swap(__tmp);
// Just to be sure...
_M_string.reserve(__len);
_M_really_sync(const_cast<char_type*>(_M_string.data()),
this->_M_in_cur - this->_M_in_beg,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment