]> gcc.gnu.org Git - gcc.git/commitdiff
ostream_manip.cc (test02): Add tests.
authorBenjamin Kosnik <bkoz@purist.soma.redhat.com>
Fri, 30 Jun 2000 00:38:09 +0000 (00:38 +0000)
committerBenjamin Kosnik <bkoz@gcc.gnu.org>
Fri, 30 Jun 2000 00:38:09 +0000 (00:38 +0000)
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

libstdc++-v3/ChangeLog
libstdc++-v3/bits/char_traits.h
libstdc++-v3/bits/ostream.tcc
libstdc++-v3/bits/sstream.tcc
libstdc++-v3/bits/std_fstream.h
libstdc++-v3/bits/std_ostream.h
libstdc++-v3/bits/std_sstream.h
libstdc++-v3/bits/std_streambuf.h
libstdc++-v3/testsuite/27_io/ostream_manip.cc

index 4e2454cf89083e9976217a475fefb1f285e95500..6f1b2277ad87b608536c93b750890ddcf932fa33 100644 (file)
@@ -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.
index a8c606a8961ba3b315d35d4f1a496a3d2c80a498..7b9516667eb3e96fea35b6e490c0a5f419b97352 100644 (file)
@@ -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)
index ca6813b97c3f92069cab3c911b36467924d5d598..ce683ef51ad7c3972d9539ff97adbcd2c84384ea 100644 (file)
@@ -40,7 +40,7 @@ namespace std {
     {
       // XXX MT 
       if (_M_ok && __os.tie())
-         __os.tie()->flush();  
+       __os.tie()->flush();  
     }
   
   template<typename _CharT, typename _Traits>
index 6596c4b6d08a127804a67a37a30bc2491c8f8d06..4e8a640d870930c3ef0271cb8b0d1ea143767f7f 100644 (file)
@@ -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)
index f372100efc97f9ca13d9a3b036be0185bfe76dcb..3efb70e9646acc1fee4e6922fe995f293152c37a 100644 (file)
@@ -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; 
       }
index eff25b90625bc7984b09986abf0a7e33ed62e77b..eca9d6b5d454d1d0077b61025c8139a57c641d3b 100644 (file)
@@ -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>& 
index 126d86d1d360fadbd8add0fb89c9fbdeddb7ef0c..939d6c0b87fd636e4416e3107144b1bc5b73b49f 100644 (file)
@@ -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); 
index 84699bfb0ab4f1072441f54edf5b4b6ba2c8c648..5798ba1f6a6a7afe2a77e546400097478ee752c6 100644 (file)
@@ -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;
index c8b9f941a44f5a4567a03d688bca362cdfa63931..e9b30c13f2f3c32d441d12feed09fa2ba77e9a99 100644 (file)
@@ -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();
This page took 0.071592 seconds and 5 git commands to generate.