+2003-04-28 Paolo Carlini <pcarlini@unitus.it>
+
+ * include/std/std_streambuf.h (_M_buf): is currently
+ used only for basic_filebuf, therefore move it there.
+ (basic_streambuf(), ~basic_streambuf()): Adjust.
+ * include/std/std_fstream.h (_M_buf): Moved here.
+ * include/std/std_sstream.h (setbuf): Don't set _M_buf,
+ is actually redundant for basic_stringbuf.
+ (_M_really_sync): Likewise.
+ * include/bits/fstream.tcc (basic_filebuf()): Adjust.
+ * include/bits/sstream.tcc (seekoff): Adjust.
+
2003-04-28 Benjamin Kosnik <bkoz@redhat.com>
* src/localename.cc: Standardize exception strings.
basic_filebuf<_CharT, _Traits>::
basic_filebuf() : __streambuf_type(), _M_file(&_M_lock),
_M_state_cur(__state_type()), _M_state_beg(__state_type()),
- _M_buf_size(BUFSIZ), _M_buf_allocated(false), _M_last_overflowed(false),
- _M_pback_cur_save(0), _M_pback_end_save(0), _M_pback_init(false)
+ _M_buf(NULL), _M_buf_size(BUFSIZ), _M_buf_allocated(false),
+ _M_last_overflowed(false), _M_pback_cur_save(0),
+ _M_pback_end_save(0), _M_pback_init(false)
{ this->_M_buf_unified = true; }
template<typename _CharT, typename _Traits>
if (_M_string.capacity() && (__testin || __testout || __testboth))
{
- char_type* __beg = this->_M_buf;
+ char_type* __beg = __testin ? this->_M_in_beg : this->_M_out_beg;
char_type* __curi = NULL;
char_type* __curo = NULL;
char_type* __endi = NULL;
__state_type _M_state_cur;
__state_type _M_state_beg;
+ /**
+ * @if maint
+ * Pointer to the beginning of internally-allocated space.
+ * @endif
+ */
+ char_type* _M_buf;
+
/**
* @if maint
* Actual size of internal buffer.
_M_string = __string_type(__s, __n);
// Step 2: Use the external array.
- this->_M_buf = __s;
_M_really_sync(__s, 0, 0);
}
return this;
const bool __testout = this->_M_mode & ios_base::out;
__size_type __len = _M_string.size();
- this->_M_buf = __base;
if (__testin)
- this->setg(__base, __base + __i, __base + __len);
+ this->setg(__base, __base + __i, __base + __len);
if (__testout)
{
this->setp(__base, __base + _M_string.capacity());
__streambuf_type* __sbin,__streambuf_type* __sbout);
protected:
- /**
- * @if maint
- * Pointer to the beginning of internally-allocated space. Filebuf
- * manually allocates/deallocates this, whereas stringstreams attempt
- * to use the built-in intelligence of the string class. If you are
- * managing memory, set this. If not, leave it NULL.
- * @endif
- */
- char_type* _M_buf;
-
/**
* @if maint
* True iff _M_in_* and _M_out_* buffers should always point to
// __n + _M_out_[cur, lim] <= _M_out_end
// Assuming all _M_out_[beg, cur, lim] pointers are operating on
// the same range:
- // _M_buf <= _M_*_ <= _M_out_end
+ // _M_out_beg <= _M_*_ <= _M_out_end
void
_M_move_out_cur(off_type __n) // argument needs to be +-
{
* - this is not an error
*/
basic_streambuf()
- : _M_buf(NULL), _M_buf_unified(false),
- _M_in_beg(0), _M_in_cur(0), _M_in_end(0), _M_out_beg(0),
- _M_out_cur(0), _M_out_end(0), _M_out_lim(0),
- _M_mode(ios_base::openmode(0)), _M_buf_locale(locale())
+ : _M_buf_unified(false), _M_in_beg(0), _M_in_cur(0),
+ _M_in_end(0), _M_out_beg(0), _M_out_cur(0), _M_out_end(0),
+ _M_out_lim(0), _M_mode(ios_base::openmode(0)),
+ _M_buf_locale(locale())
{ }
// [27.5.2.3.1] get area access