Commit 4a2f4b12 by Benjamin Kosnik Committed by Benjamin Kosnik

ostream_manip.cc (test02): Add tests.


2000-06-29  Benjamin Kosnik  <bkoz@purist.soma.redhat.com>

	* testsuite/27_io/ostream_manip.cc (test02): Add tests.
	* bits/ostream.tcc: Tweak.
	* bits/std_fstream.h (basic_filebuf::setbuf): Reset
	_M_buf_size_opt too.
	* bits/std_streambuf.h (basic_streambuf::~basic_streambuf): Zero
	out _M_buf_size_opt.
	* bits/std_sstream.h (basic_stringbuf::_M_init_stringbuf): Zero
	_M_buf_size_opt out here.
	* bits/char_traits.h (char_traits::eos): Non standard member
	function, uglify to __eos. Return char_type().
	* bits/std_ostream.h: Change.

From-SVN: r34797
parent ab76ca54
2000-06-29 <bkoz@purist.soma.redhat.com> 2000-06-29 Benjamin Kosnik <bkoz@purist.soma.redhat.com>
* testsuite/27_io/ostream_manip.cc (test02): Add tests.
* bits/ostream.tcc: Tweak.
* bits/std_fstream.h (basic_filebuf::setbuf): Reset
_M_buf_size_opt too.
* bits/std_streambuf.h (basic_streambuf::~basic_streambuf): Zero
out _M_buf_size_opt.
* bits/std_sstream.h (basic_stringbuf::_M_init_stringbuf): Zero
_M_buf_size_opt out here.
* bits/char_traits.h (char_traits::eos): Non standard member * bits/char_traits.h (char_traits::eos): Non standard member
function, uglify to __eos. Return char_type(). function, uglify to __eos. Return char_type().
* bits/std_ostream.h: Change. * bits/std_ostream.h: Change.
......
...@@ -137,7 +137,7 @@ namespace std { ...@@ -137,7 +137,7 @@ namespace std {
eof() { return static_cast<int_type>(-1); } eof() { return static_cast<int_type>(-1); }
static int_type static int_type
eos() { return int_type(); } __eos() { return char_type(); }
static int_type static int_type
not_eof(const int_type& __c) not_eof(const int_type& __c)
...@@ -211,7 +211,7 @@ namespace std { ...@@ -211,7 +211,7 @@ namespace std {
eof() { return static_cast<int_type>(EOF); } eof() { return static_cast<int_type>(EOF); }
static int_type static int_type
eos() { return '\0'; } __eos() { return char_type(); }
static int_type static int_type
not_eof(const int_type& __c) not_eof(const int_type& __c)
...@@ -282,7 +282,7 @@ namespace std { ...@@ -282,7 +282,7 @@ namespace std {
eof() { return static_cast<int_type>(WEOF); } eof() { return static_cast<int_type>(WEOF); }
static int_type static int_type
eos() { return int_type(); } __eos() { return char_type(); }
static int_type static int_type
not_eof(const int_type& __c) not_eof(const int_type& __c)
......
...@@ -40,7 +40,7 @@ namespace std { ...@@ -40,7 +40,7 @@ namespace std {
{ {
// XXX MT // XXX MT
if (_M_ok && __os.tie()) if (_M_ok && __os.tie())
__os.tie()->flush(); __os.tie()->flush();
} }
template<typename _CharT, typename _Traits> template<typename _CharT, typename _Traits>
......
...@@ -85,11 +85,7 @@ namespace std { ...@@ -85,11 +85,7 @@ namespace std {
{ {
if (!__testeof) if (!__testeof)
{ {
// NB: Start ostringstream buffers at 1024 bytes. This __size_type __len = max(_M_buf_size, _M_buf_size_opt);
// is an experimental value (pronounced "arbitrary" in
// some of the hipper english-speaking countries), and
// can be changed to suite particular needs.
__size_type __len = max(_M_buf_size, static_cast<int_type>(512));
__len *= 2; __len *= 2;
if (__testwrite) if (__testwrite)
......
...@@ -141,7 +141,10 @@ namespace std { ...@@ -141,7 +141,10 @@ namespace std {
setbuf(char_type* __s, streamsize __n) setbuf(char_type* __s, streamsize __n)
{ {
if (!this->is_open() && __s == 0 && __n == 0) if (!this->is_open() && __s == 0 && __n == 0)
_M_buf_size = 0; {
_M_buf_size = 0;
_M_buf_size_opt = 0;
}
_M_last_overflowed = false; _M_last_overflowed = false;
return this; return this;
} }
......
// Output streams -*- C++ -*- // Output streams -*- C++ -*-
// Copyright (C) 1997-1999 Free Software Foundation, Inc. // Copyright (C) 1997-1999, 2000 Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // 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 // software; you can redistribute it and/or modify it under the
...@@ -262,7 +262,7 @@ namespace std { ...@@ -262,7 +262,7 @@ namespace std {
template<typename _CharT, typename _Traits> template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>&
ends(basic_ostream<_CharT, _Traits>& __os) ends(basic_ostream<_CharT, _Traits>& __os)
{ return __os.put(_Traits::eos()); } { return __os.put(_Traits::__eos()); }
template<typename _CharT, typename _Traits> template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>&
......
...@@ -108,6 +108,12 @@ namespace std { ...@@ -108,6 +108,12 @@ namespace std {
// streambufs having control of the allocation and // streambufs having control of the allocation and
// re-allocation of the internal string object, _M_string. // re-allocation of the internal string object, _M_string.
_M_buf_size = _M_string.size(); _M_buf_size = _M_string.size();
// NB: Start ostringstream buffers at 1024 bytes. This is an
// experimental value (pronounced "arbitrary" in some of the
// hipper english-speaking countries), and can be changed to
// suite particular needs.
_M_buf_size_opt = 512;
_M_mode = __mode; _M_mode = __mode;
if (_M_mode & ios_base::ate) if (_M_mode & ios_base::ate)
_M_really_sync(0, _M_buf_size); _M_really_sync(0, _M_buf_size);
......
...@@ -191,6 +191,7 @@ namespace std { ...@@ -191,6 +191,7 @@ namespace std {
{ {
_M_buf_unified = false; _M_buf_unified = false;
_M_buf_size = 0; _M_buf_size = 0;
_M_buf_size_opt = 0;
_M_mode = ios_base::openmode(0); _M_mode = ios_base::openmode(0);
_M_fctype_buf = NULL; _M_fctype_buf = NULL;
_M_locale_set = false; _M_locale_set = false;
......
// 1999-07-22 bkoz // 1999-07-22 bkoz
// Copyright (C) 1994, 1999 Free Software Foundation, Inc. // Copyright (C) 1994, 1999, 2000 Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // 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 // software; you can redistribute it and/or modify it under the
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
// 27.6.2.7 standard basic_ostream manipulators // 27.6.2.7 standard basic_ostream manipulators
#include <istream> #include <ostream>
#include <sstream> #include <sstream>
#include <stdexcept> #include <stdexcept>
#ifdef DEBUG_ASSERT #ifdef DEBUG_ASSERT
...@@ -81,6 +81,45 @@ bool test01(void) ...@@ -81,6 +81,45 @@ bool test01(void)
return test; return test;
} }
// based vaguely on this:
// http://sourceware.cygnus.com/ml/libstdc++/2000-q2/msg00109.html
bool test02()
{
using namespace std;
typedef ostringstream::int_type int_type;
bool test = true;
ostringstream osst_01;
const string str_00("herbie_hancock");
int_type len1 = str_00.size();
osst_01 << str_00;
test &= osst_01.str().size() == len1;
osst_01 << ends;
const string str_01("speak like a child");
int_type len2 = str_01.size();
osst_01 << str_01;
int_type len3 = osst_01.str().size();
test &= len1 < len3;
test &= len3 == len1 + len2 + 1;
osst_01 << ends;
const string str_02("+ inventions and dimensions");
int_type len4 = str_02.size();
osst_01 << str_02;
int_type len5 = osst_01.str().size();
test &= len3 < len5;
test &= len5 == len3 + len4 + 1;
#ifdef DEBUG_ASSERT
assert(test);
#endif
return test;
}
int main() int main()
{ {
test01(); test01();
......
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