Commit 4c526d09 by Paolo Carlini Committed by Paolo Carlini

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
parent c1b74c21
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> 2003-06-18 Nathan C. Myers <ncm-nospam@cantrip.org>
Paolo Carlini <pcarlini@unitus.it> Paolo Carlini <pcarlini@unitus.it>
......
...@@ -157,7 +157,7 @@ namespace std ...@@ -157,7 +157,7 @@ namespace std
&& __newoffo + __off >= 0 && __newoffo + __off >= 0
&& this->_M_out_lim - __beg >= __newoffo + __off) && 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); __ret = pos_type(__newoffo);
} }
} }
...@@ -174,34 +174,25 @@ namespace std ...@@ -174,34 +174,25 @@ namespace std
if (_M_string.capacity()) if (_M_string.capacity())
{ {
off_type __pos = __sp; // Use streamoff operator to do conversion. 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 __testin = (ios_base::in & this->_M_mode & __mode) != 0;
const bool __testout = (ios_base::out & 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. // NB: Ordered.
bool __testposi = false; bool __testposi = false;
bool __testposo = false; bool __testposo = false;
if (__testin) if (__testin && 0 <= __pos
{ && __pos <= this->_M_in_end - __beg)
__beg = this->_M_in_beg; __testposi = true;
__end = this->_M_in_end; if (__testout && 0 <= __pos
if (0 <= __pos && __pos <= __end - __beg) && __pos <= this->_M_out_lim - __beg)
__testposi = true; __testposo = true;
}
if (__testout)
{
__beg = this->_M_out_beg;
__end = this->_M_out_lim;
if (0 <= __pos && __pos <= __end - __beg)
__testposo = true;
}
if (__testposi || __testposo) if (__testposi || __testposo)
{ {
if (__testposi) if (__testposi)
this->_M_in_cur = this->_M_in_beg + __pos; this->_M_in_cur = __beg + __pos;
if (__testposo) if (__testposo)
_M_move_out_cur((__pos) - (this->_M_out_cur - __beg)); this->_M_out_cur = __beg + __pos;
__ret = pos_type(off_type(__pos)); __ret = pos_type(off_type(__pos));
} }
} }
......
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