std_fstream.h (_M_is_indeterminate): Remove.

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

	* include/std/std_fstream.h (_M_is_indeterminate): Remove.
	* src/fstream.cc
	(basic_filebuf<char/wchar_t>::_M_underflow): Simplify: either
	there is no buffer or __testget == !__testinit.

	* src/fstream.cc
	(basic_filebuf<char/wchar_t>::_M_underflow): _M_set_determinate()
	automatically sets, if appropriate, _M_out_cur == _M_in_cur.

	* include/std/std_fstream.h (_M_destroy_pback): Don't set
	unnecessarily _M_pback_cur_save and _M_pback_end_save.

	* include/std/std_fstream.h (_M_set_determinate): Minor tweak.

	* include/std/std_sstream.h (_M_sync): Minor tweak.

	* include/bits/fstream.tcc (close): No need to call
	_M_destroy_pback, setting _M_pback_init to false suffices
	to clean up.

From-SVN: r66557
This commit is contained in:
Paolo Carlini 2003-05-07 14:48:58 +02:00 committed by Paolo Carlini
parent da635858a5
commit cd96b185c5
5 changed files with 28 additions and 38 deletions

View File

@ -1,3 +1,25 @@
2003-05-07 Paolo Carlini <pcarlini@unitus.it>
* include/std/std_fstream.h (_M_is_indeterminate): Remove.
* src/fstream.cc
(basic_filebuf<char/wchar_t>::_M_underflow): Simplify: either
there is no buffer or __testget == !__testinit.
* src/fstream.cc
(basic_filebuf<char/wchar_t>::_M_underflow): _M_set_determinate()
automatically sets, if appropriate, _M_out_cur == _M_in_cur.
* include/std/std_fstream.h (_M_destroy_pback): Don't set
unnecessarily _M_pback_cur_save and _M_pback_end_save.
* include/std/std_fstream.h (_M_set_determinate): Minor tweak.
* include/std/std_sstream.h (_M_sync): Minor tweak.
* include/bits/fstream.tcc (close): No need to call
_M_destroy_pback, setting _M_pback_init to false suffices
to clean up.
2003-05-06 Benjamin Kosnik <bkoz@redhat.com> 2003-05-06 Benjamin Kosnik <bkoz@redhat.com>
* include/bits/stl_algo.h: Enums as _S_. * include/bits/stl_algo.h: Enums as _S_.

View File

@ -143,8 +143,8 @@ namespace std
// NB: Do this here so that re-opened filebufs will be cool... // NB: Do this here so that re-opened filebufs will be cool...
this->_M_mode = ios_base::openmode(0); this->_M_mode = ios_base::openmode(0);
this->_M_pback_init = false;
_M_destroy_internal_buffer(); _M_destroy_internal_buffer();
_M_destroy_pback();
if (!_M_file.close()) if (!_M_file.close())
__testfail = true; __testfail = true;

View File

@ -201,8 +201,6 @@ namespace std
this->setg(this->_M_buf, _M_pback_cur_save + __off_cur, this->setg(this->_M_buf, _M_pback_cur_save + __off_cur,
_M_pback_end_save + __off_end); _M_pback_end_save + __off_end);
_M_pback_cur_save = NULL;
_M_pback_end_save = NULL;
_M_pback_init = false; _M_pback_init = false;
} }
} }
@ -452,7 +450,7 @@ namespace std
void void
_M_output_unshift(); _M_output_unshift();
// These three functions are used to clarify internal buffer // These two functions are used to clarify internal buffer
// maintenance. After an overflow, or after a seekoff call that // maintenance. After an overflow, or after a seekoff call that
// started at beg or end, or possibly when the stream becomes // started at beg or end, or possibly when the stream becomes
// unbuffered, and a myrid other obscure corner cases, the // unbuffered, and a myrid other obscure corner cases, the
@ -483,34 +481,10 @@ namespace std
if (__testout) if (__testout)
{ {
this->setp(this->_M_buf, this->_M_buf + this->_M_buf_size); this->setp(this->_M_buf, this->_M_buf + this->_M_buf_size);
this->_M_out_lim = this->_M_buf + __off; this->_M_out_lim += __off;
} }
_M_filepos = this->_M_buf + __off; _M_filepos = this->_M_buf + __off;
} }
/**
* @if maint
* @doctodo
* @endif
*/
bool
_M_is_indeterminate(void)
{
const bool __testin = this->_M_mode & ios_base::in;
const bool __testout = this->_M_mode & ios_base::out;
bool __ret = false;
// Don't return true if unbuffered.
if (this->_M_buf)
{
if (__testin)
__ret = this->_M_in_beg == this->_M_in_cur
&& this->_M_in_cur == this->_M_in_end;
if (__testout)
__ret = this->_M_out_beg == this->_M_out_cur
&& this->_M_out_cur == this->_M_out_lim;
}
return __ret;
}
}; };
// Explicit specialization declarations, defined in src/fstream.cc. // Explicit specialization declarations, defined in src/fstream.cc.

View File

@ -258,7 +258,7 @@ namespace std
{ {
this->setp(__base, __base + _M_string.capacity()); this->setp(__base, __base + _M_string.capacity());
// _M_out_lim points to the string end. // _M_out_lim points to the string end.
this->_M_out_lim = __base + __len; this->_M_out_lim += __len;
this->_M_out_cur += __o; this->_M_out_cur += __o;
} }
} }

View File

@ -64,7 +64,6 @@ namespace std
// Sync internal and external buffers. // Sync internal and external buffers.
// NB: __testget -> __testput as _M_buf_unified here. // NB: __testget -> __testput as _M_buf_unified here.
const bool __testget = _M_in_beg < _M_in_cur; const bool __testget = _M_in_beg < _M_in_cur;
const bool __testinit = _M_is_indeterminate();
if (__testget) if (__testget)
{ {
if (__testout) if (__testout)
@ -74,7 +73,7 @@ namespace std
ios_base::cur, __testsync, ios_base::in); ios_base::cur, __testsync, ios_base::in);
} }
if (__testinit || __testget) if (_M_buf_size)
{ {
streamsize __elen = 0; streamsize __elen = 0;
streamsize __ilen = 0; streamsize __ilen = 0;
@ -86,8 +85,6 @@ namespace std
if (0 < __ilen) if (0 < __ilen)
{ {
_M_set_determinate(__ilen); _M_set_determinate(__ilen);
if (__testout)
_M_out_cur = _M_in_cur;
__ret = traits_type::to_int_type(*_M_in_cur); __ret = traits_type::to_int_type(*_M_in_cur);
if (__bump) if (__bump)
_M_move_in_cur(1); _M_move_in_cur(1);
@ -145,7 +142,6 @@ namespace std
// Sync internal and external buffers. // Sync internal and external buffers.
// NB: __testget -> __testput as _M_buf_unified here. // NB: __testget -> __testput as _M_buf_unified here.
const bool __testget = _M_in_beg < _M_in_cur; const bool __testget = _M_in_beg < _M_in_cur;
const bool __testinit = _M_is_indeterminate();
if (__testget) if (__testget)
{ {
if (__testout) if (__testout)
@ -155,7 +151,7 @@ namespace std
ios_base::cur, __testsync, ios_base::in); ios_base::cur, __testsync, ios_base::in);
} }
if (__testinit || __testget) if (_M_buf_size)
{ {
streamsize __elen = 0; streamsize __elen = 0;
streamsize __ilen = 0; streamsize __ilen = 0;
@ -191,8 +187,6 @@ namespace std
if (0 < __ilen) if (0 < __ilen)
{ {
_M_set_determinate(__ilen); _M_set_determinate(__ilen);
if (__testout)
_M_out_cur = _M_in_cur;
__ret = traits_type::to_int_type(*_M_in_cur); __ret = traits_type::to_int_type(*_M_in_cur);
if (__bump) if (__bump)
_M_move_in_cur(1); _M_move_in_cur(1);