sstream.tcc (seekoff): We can't seek beyond _M_out_lim...

2003-06-18  Paolo Carlini  <pcarlini@unitus.it>

	* include/bits/sstream.tcc (seekoff): We can't seek beyond
	_M_out_lim, therefore _M_move_out_cur boils down to simply
	updating _M_out_cur.
	(seekpos): Likewise, clean up.

From-SVN: r68162
This commit is contained in:
Paolo Carlini 2003-06-18 20:34:09 +02:00 committed by Paolo Carlini
parent c1b74c211a
commit 4c526d0960
2 changed files with 17 additions and 19 deletions

View File

@ -1,3 +1,10 @@
2003-06-18 Paolo Carlini <pcarlini@unitus.it>
* include/bits/sstream.tcc (seekoff): We can't seek beyond
_M_out_lim, therefore _M_move_out_cur boils down to simply
updating _M_out_cur.
(seekpos): Likewise, clean up.
2003-06-18 Nathan C. Myers <ncm-nospam@cantrip.org>
Paolo Carlini <pcarlini@unitus.it>

View File

@ -157,7 +157,7 @@ namespace std
&& __newoffo + __off >= 0
&& this->_M_out_lim - __beg >= __newoffo + __off)
{
_M_move_out_cur(__newoffo + __off - (this->_M_out_cur - __beg));
this->_M_out_cur = __beg + __newoffo + __off;
__ret = pos_type(__newoffo);
}
}
@ -174,34 +174,25 @@ namespace std
if (_M_string.capacity())
{
off_type __pos = __sp; // Use streamoff operator to do conversion.
char_type* __beg = NULL;
char_type* __end = NULL;
const bool __testin = (ios_base::in & this->_M_mode & __mode) != 0;
const bool __testout = (ios_base::out & this->_M_mode & __mode) != 0;
char_type* __beg = __testin ? this->_M_in_beg : this->_M_out_beg;
// NB: Ordered.
bool __testposi = false;
bool __testposo = false;
if (__testin)
{
__beg = this->_M_in_beg;
__end = this->_M_in_end;
if (0 <= __pos && __pos <= __end - __beg)
__testposi = true;
}
if (__testout)
{
__beg = this->_M_out_beg;
__end = this->_M_out_lim;
if (0 <= __pos && __pos <= __end - __beg)
__testposo = true;
}
if (__testin && 0 <= __pos
&& __pos <= this->_M_in_end - __beg)
__testposi = true;
if (__testout && 0 <= __pos
&& __pos <= this->_M_out_lim - __beg)
__testposo = true;
if (__testposi || __testposo)
{
if (__testposi)
this->_M_in_cur = this->_M_in_beg + __pos;
this->_M_in_cur = __beg + __pos;
if (__testposo)
_M_move_out_cur((__pos) - (this->_M_out_cur - __beg));
this->_M_out_cur = __beg + __pos;
__ret = pos_type(off_type(__pos));
}
}