std_sstream.h: Remove trailing spaces.

2002-03-03  Phil Edwards  <pme@gcc.gnu.org>

	* include/std/std_sstream.h:  Remove trailing spaces.
	(basic_stringbuf::_M_stringbuf_init):  Also check for ios_base::app.
	* testsuite/27_io/stringbuf.cc (test05, test06):  New tests.

From-SVN: r50258
This commit is contained in:
Phil Edwards 2002-03-03 17:48:42 +00:00
parent e81dd3810b
commit 798355a229
3 changed files with 82 additions and 40 deletions

View File

@ -1,3 +1,9 @@
2002-03-03 Phil Edwards <pme@gcc.gnu.org>
* include/std/std_sstream.h: Remove trailing spaces.
(basic_stringbuf::_M_stringbuf_init): Also check for ios_base::app.
* testsuite/27_io/stringbuf.cc (test05, test06): New tests.
2002-03-02 Paolo Carlini <pcarlini@unitus.it>
* testsuite/22_locale/num_get_members_char.cc (test04):

View File

@ -69,23 +69,23 @@ namespace std
protected:
// Data Members:
__string_type _M_string;
public:
// Constructors:
explicit
explicit
basic_stringbuf(ios_base::openmode __mode = ios_base::in | ios_base::out)
: __streambuf_type(), _M_string()
{ _M_stringbuf_init(__mode); }
explicit
explicit
basic_stringbuf(const __string_type& __str,
ios_base::openmode __mode = ios_base::in | ios_base::out)
: __streambuf_type(), _M_string(__str.data(), __str.size())
{ _M_stringbuf_init(__mode); }
// Get and set:
__string_type
str() const
__string_type
str() const
{
if (_M_mode & ios_base::out)
{
@ -102,7 +102,7 @@ namespace std
return _M_string;
}
void
void
str(const __string_type& __s)
{
_M_string = __s;
@ -127,14 +127,14 @@ namespace std
// suite particular needs.
_M_buf_size_opt = 512;
_M_mode = __mode;
if (_M_mode & ios_base::ate)
_M_really_sync(0, _M_buf_size);
else
if (_M_mode & (ios_base::ate | ios_base::app))
_M_really_sync(0, _M_buf_size);
else
_M_really_sync(0, 0);
}
// Overridden virtual functions:
virtual int_type
virtual int_type
underflow()
{
if (_M_in_cur && _M_in_cur < _M_in_end)
@ -143,38 +143,38 @@ namespace std
return traits_type::eof();
}
virtual int_type
virtual int_type
pbackfail(int_type __c = traits_type::eof());
virtual int_type
virtual int_type
overflow(int_type __c = traits_type::eof());
virtual __streambuf_type*
virtual __streambuf_type*
setbuf(char_type* __s, streamsize __n)
{
if (__s && __n)
{
if (__s && __n)
{
_M_string = __string_type(__s, __n);
_M_really_sync(0, 0);
}
return this;
}
return this;
}
virtual pos_type
virtual pos_type
seekoff(off_type __off, ios_base::seekdir __way,
ios_base::openmode __mode = ios_base::in | ios_base::out);
virtual pos_type
seekpos(pos_type __sp,
virtual pos_type
seekpos(pos_type __sp,
ios_base::openmode __mode = ios_base::in | ios_base::out);
// Internal function for correctly updating the internal buffer
// for a particular _M_string, due to initialization or
// re-sizing of an existing _M_string.
// Assumes: contents of _M_string and internal buffer match exactly.
// __i == _M_in_cur - _M_in_beg
// __i == _M_in_cur - _M_in_beg
// __o == _M_out_cur - _M_out_beg
virtual int
virtual int
_M_really_sync(__size_type __i, __size_type __o)
{
char_type* __base = const_cast<char_type*>(_M_string.data());
@ -221,12 +221,12 @@ namespace std
public:
// Constructors:
explicit
explicit
basic_istringstream(ios_base::openmode __mode = ios_base::in)
: __istream_type(NULL), _M_stringbuf(__mode | ios_base::in)
{ this->init(&_M_stringbuf); }
explicit
explicit
basic_istringstream(const __string_type& __str,
ios_base::openmode __mode = ios_base::in)
: __istream_type(NULL), _M_stringbuf(__str, __mode | ios_base::in)
@ -236,15 +236,15 @@ namespace std
{ }
// Members:
__stringbuf_type*
__stringbuf_type*
rdbuf() const
{ return const_cast<__stringbuf_type*>(&_M_stringbuf); }
__string_type
str() const
{ return _M_stringbuf.str(); }
void
void
str(const __string_type& __s)
{ _M_stringbuf.str(__s); }
};
@ -276,12 +276,12 @@ namespace std
public:
// Constructors/destructor:
explicit
explicit
basic_ostringstream(ios_base::openmode __mode = ios_base::out)
: __ostream_type(NULL), _M_stringbuf(__mode | ios_base::out)
{ this->init(&_M_stringbuf); }
explicit
explicit
basic_ostringstream(const __string_type& __str,
ios_base::openmode __mode = ios_base::out)
: __ostream_type(NULL), _M_stringbuf(__str, __mode | ios_base::out)
@ -291,20 +291,20 @@ namespace std
{ }
// Members:
__stringbuf_type*
__stringbuf_type*
rdbuf() const
{ return const_cast<__stringbuf_type*>(&_M_stringbuf); }
__string_type
str() const
{ return _M_stringbuf.str(); }
void
void
str(const __string_type& __s)
{ _M_stringbuf.str(__s); }
};
// 27.7.4 Template class basic_stringstream
template <typename _CharT, typename _Traits, typename _Alloc>
class basic_stringstream : public basic_iostream<_CharT, _Traits>
@ -331,12 +331,12 @@ namespace std
public:
// Constructors/destructors
explicit
explicit
basic_stringstream(ios_base::openmode __m = ios_base::out | ios_base::in)
: __iostream_type(NULL), _M_stringbuf(__m)
{ this->init(&_M_stringbuf); }
explicit
explicit
basic_stringstream(const __string_type& __str,
ios_base::openmode __m = ios_base::out | ios_base::in)
: __iostream_type(NULL), _M_stringbuf(__str, __m)
@ -346,7 +346,7 @@ namespace std
{ }
// Members:
__stringbuf_type*
__stringbuf_type*
rdbuf() const
{ return const_cast<__stringbuf_type*>(&_M_stringbuf); }
@ -354,7 +354,7 @@ namespace std
str() const
{ return _M_stringbuf.str(); }
void
void
str(const __string_type& __s)
{ _M_stringbuf.str(__s); }
};

View File

@ -1,6 +1,7 @@
// 981208 bkoz test functionality of basic_stringbuf for char_type == char
// Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@ -439,12 +440,47 @@ bool test04() {
}
int main() {
// libstdc++/3955 -- ios_base::app overwrites from the beginning
bool test05()
{
bool test = true;
std::ostringstream os ("foo");
os << "bar";
test = os.str() == "bar";
#ifdef DEBUG_ASSERT
assert(test);
#endif
return test;
}
bool test06()
{
bool test = true;
std::ostringstream os ("foo", std::ios_base::app);
os << "bar";
test = os.str() == "foobar";
#ifdef DEBUG_ASSERT
assert(test);
#endif
return test;
}
int main()
{
test01();
test02();
test03();
test04();
test05();
test06();
return 0;
}