Commit f67b6b7a by Paolo Carlini Committed by Paolo Carlini

sstream.tcc (seekpos): Minor rearrangement of two conditionals consistently with seekoff.

2004-10-01  Paolo Carlini  <pcarlini@suse.de>

	* include/bits/sstream.tcc (seekpos): Minor rearrangement of two
	conditionals consistently with seekoff.
	* include/std/std_sstream.h (setbuf): Avoid a string temporary.
	(_M_sync): Simplify a bit, clean-up comment.

From-SVN: r88389
parent e6845c23
2004-10-01 Paolo Carlini <pcarlini@suse.de>
* include/bits/sstream.tcc (seekpos): Minor rearrangement of two
conditionals consistently with seekoff.
* include/std/std_sstream.h (setbuf): Avoid a string temporary.
(_M_sync): Simplify a bit, clean-up comment.
2004-09-30 Paolo Carlini <pcarlini@suse.de> 2004-09-30 Paolo Carlini <pcarlini@suse.de>
PR libstdc++/10975 (DR 453) PR libstdc++/10975 (DR 453)
......
...@@ -187,14 +187,14 @@ namespace std ...@@ -187,14 +187,14 @@ namespace std
const bool __testout = (ios_base::out & this->_M_mode & __mode) != 0; const bool __testout = (ios_base::out & this->_M_mode & __mode) != 0;
const char_type* __beg = __testin ? this->eback() : this->pbase(); const char_type* __beg = __testin ? this->eback() : this->pbase();
if (__beg) if (__beg && (__testin || __testout))
{ {
_M_update_egptr(); _M_update_egptr();
off_type __pos(__sp); const off_type __pos(__sp);
const bool __testpos = 0 <= __pos const bool __testpos = 0 <= __pos
&& __pos <= this->egptr() - __beg; && __pos <= this->egptr() - __beg;
if ((__testin || __testout) && __testpos) if (__testpos)
{ {
if (__testin) if (__testin)
this->gbump((__beg + __pos) - this->gptr()); this->gbump((__beg + __pos) - this->gptr());
......
...@@ -219,7 +219,7 @@ namespace std ...@@ -219,7 +219,7 @@ namespace std
// things will quickly blow up. // things will quickly blow up.
// Step 1: Destroy the current internal array. // Step 1: Destroy the current internal array.
_M_string = __string_type(__s, __n); _M_string.assign(__s, __n);
// Step 2: Use the external array. // Step 2: Use the external array.
_M_sync(__s, 0, 0); _M_sync(__s, 0, 0);
...@@ -253,20 +253,19 @@ namespace std ...@@ -253,20 +253,19 @@ namespace std
{ {
const bool __testin = this->_M_mode & ios_base::in; const bool __testin = this->_M_mode & ios_base::in;
const bool __testout = this->_M_mode & ios_base::out; const bool __testout = this->_M_mode & ios_base::out;
const __size_type __len = _M_string.size(); char_type* __end = __base + _M_string.size();
if (__testin) if (__testin)
this->setg(__base, __base + __i, __base + __len); this->setg(__base, __base + __i, __end);
if (__testout) if (__testout)
{ {
this->setp(__base, __base + _M_string.capacity()); this->setp(__base, __base + _M_string.capacity());
this->pbump(__o); this->pbump(__o);
// We need a pointer to the string end anyway, even when // egptr() always tracks the string end. When !__testin,
// !__testin: in that case, however, for the correct // for the correct functioning of the streambuf inlines
// functioning of the streambuf inlines all the get area // the other get area pointers are identical.
// pointers must be identical.
if (!__testin) if (!__testin)
this->setg(__base + __len, __base + __len, __base + __len); this->setg(__end, __end, __end);
} }
} }
......
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