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
This commit is contained in:
parent
ab76ca54bb
commit
4a2f4b128f
9 changed files with 68 additions and 15 deletions
|
@ -1,5 +1,13 @@
|
|||
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
|
||||
function, uglify to __eos. Return char_type().
|
||||
* bits/std_ostream.h: Change.
|
||||
|
|
|
@ -137,7 +137,7 @@ namespace std {
|
|||
eof() { return static_cast<int_type>(-1); }
|
||||
|
||||
static int_type
|
||||
eos() { return int_type(); }
|
||||
__eos() { return char_type(); }
|
||||
|
||||
static int_type
|
||||
not_eof(const int_type& __c)
|
||||
|
@ -211,7 +211,7 @@ namespace std {
|
|||
eof() { return static_cast<int_type>(EOF); }
|
||||
|
||||
static int_type
|
||||
eos() { return '\0'; }
|
||||
__eos() { return char_type(); }
|
||||
|
||||
static int_type
|
||||
not_eof(const int_type& __c)
|
||||
|
@ -282,7 +282,7 @@ namespace std {
|
|||
eof() { return static_cast<int_type>(WEOF); }
|
||||
|
||||
static int_type
|
||||
eos() { return int_type(); }
|
||||
__eos() { return char_type(); }
|
||||
|
||||
static int_type
|
||||
not_eof(const int_type& __c)
|
||||
|
|
|
@ -40,7 +40,7 @@ namespace std {
|
|||
{
|
||||
// XXX MT
|
||||
if (_M_ok && __os.tie())
|
||||
__os.tie()->flush();
|
||||
__os.tie()->flush();
|
||||
}
|
||||
|
||||
template<typename _CharT, typename _Traits>
|
||||
|
|
|
@ -85,11 +85,7 @@ namespace std {
|
|||
{
|
||||
if (!__testeof)
|
||||
{
|
||||
// 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.
|
||||
__size_type __len = max(_M_buf_size, static_cast<int_type>(512));
|
||||
__size_type __len = max(_M_buf_size, _M_buf_size_opt);
|
||||
__len *= 2;
|
||||
|
||||
if (__testwrite)
|
||||
|
|
|
@ -141,7 +141,10 @@ namespace std {
|
|||
setbuf(char_type* __s, streamsize __n)
|
||||
{
|
||||
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;
|
||||
return this;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// 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
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
|
@ -262,7 +262,7 @@ namespace std {
|
|||
template<typename _CharT, typename _Traits>
|
||||
basic_ostream<_CharT, _Traits>&
|
||||
ends(basic_ostream<_CharT, _Traits>& __os)
|
||||
{ return __os.put(_Traits::eos()); }
|
||||
{ return __os.put(_Traits::__eos()); }
|
||||
|
||||
template<typename _CharT, typename _Traits>
|
||||
basic_ostream<_CharT, _Traits>&
|
||||
|
|
|
@ -108,6 +108,12 @@ namespace std {
|
|||
// streambufs having control of the allocation and
|
||||
// re-allocation of the internal string object, _M_string.
|
||||
_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;
|
||||
if (_M_mode & ios_base::ate)
|
||||
_M_really_sync(0, _M_buf_size);
|
||||
|
|
|
@ -191,6 +191,7 @@ namespace std {
|
|||
{
|
||||
_M_buf_unified = false;
|
||||
_M_buf_size = 0;
|
||||
_M_buf_size_opt = 0;
|
||||
_M_mode = ios_base::openmode(0);
|
||||
_M_fctype_buf = NULL;
|
||||
_M_locale_set = false;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// 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
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
|
@ -20,7 +20,7 @@
|
|||
|
||||
// 27.6.2.7 standard basic_ostream manipulators
|
||||
|
||||
#include <istream>
|
||||
#include <ostream>
|
||||
#include <sstream>
|
||||
#include <stdexcept>
|
||||
#ifdef DEBUG_ASSERT
|
||||
|
@ -81,6 +81,45 @@ bool test01(void)
|
|||
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()
|
||||
{
|
||||
test01();
|
||||
|
|
Loading…
Add table
Reference in a new issue