+2002-08-15 Danny Smith <dannysmith@users.sourceforge.net>
+ Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/bits/istream.tcc (basic_istream::ignore): Use sbumpc,
+ not snextc.
+ * testsuite/27_io/narrow_stream_objects.cc (test10): Add.
+
+2002-08-15 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * config/os/newlib/ctype_inline.h (is): Don't offset _M_table.
+ (scan_is): Use this->is.
+ (scan_not): Likewise.
+
+2002-08-15 Rick Danos <rdanos@hotmail.com>
+
+ PR libstdc++/7461
+ * config/os/newlib/ctype_noninline.h (classic_table): Add offset.
+ * config/os/newlib/ctype_inline.h (is): Use static_cast.
+
2002-08-14 Release Manager
* GCC 3.2 Released.
// Locale support -*- C++ -*-
-// Copyright (C) 2000 Free Software Foundation, Inc.
+// Copyright (C) 2000, 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
bool
ctype<char>::
is(mask __m, char __c) const
- { return (_M_table + 1)[(unsigned char)(__c)] & __m; }
+ { return _M_table[static_cast<unsigned char>(__c)] & __m; }
const char*
ctype<char>::
is(const char* __low, const char* __high, mask* __vec) const
{
while (__low < __high)
- *__vec++ = (_M_table + 1)[(unsigned char) (*__low++)];
+ *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
return __high;
}
ctype<char>::
scan_is(mask __m, const char* __low, const char* __high) const
{
- while (__low < __high && !((_M_table + 1)[(unsigned char)(*__low)] & __m))
+ while (__low < __high && !this->is(__m, *__low))
++__low;
return __low;
}
ctype<char>::
scan_not(mask __m, const char* __low, const char* __high) const
{
- while (__low < __high
- && ((_M_table + 1)[(unsigned char)(*__low)] & __m) != 0)
+ while (__low < __high && this->is(__m, *__low) != 0)
++__low;
return __low;
}
-
-
-
-
-
const ctype_base::mask*
ctype<char>::classic_table() throw()
- { return _ctype_; }
+ { return _ctype_ + 1; }
ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
size_t __refs)
{
const int_type __eof = traits_type::eof();
__streambuf_type* __sb = this->rdbuf();
- int_type __c = __sb->sgetc();
+ int_type __c;
__n = min(__n, numeric_limits<streamsize>::max());
while (_M_gcount < __n
- && !traits_type::eq_int_type(__c, __eof)
- && !traits_type::eq_int_type(__c, __delim))
+ && !traits_type::eq_int_type(__c = __sb->sbumpc(), __eof))
{
- __c = __sb->snextc();
++_M_gcount;
+ if (traits_type::eq_int_type(__c, __delim))
+ break;
}
if (traits_type::eq_int_type(__c, __eof))
this->setstate(ios_base::eofbit);
- else if (traits_type::eq_int_type(__c, __delim))
- {
- __sb->sbumpc();
- ++_M_gcount;
- }
}
catch(exception& __fail)
{
#include <cstdlib>
#include <cstring>
#include <ctime>
-#include <testsuite_hooks.h>
+//#include <testsuite_hooks.h>
+#define VERIFY(x) x
// Include iostream last, just to make is as difficult as possible to
// properly initialize the standard iostream objects.
// Interactive test, to be exercised as follows:
// assign stderr to stdout in shell command line,
// pipe stdout to cat process and/or redirect stdout to file.
-// "hello fine world\n" should be written to stdout in proper order.
-// This is a version of the scott snyder test taken from:
-// http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00108.html
+// a.out >& output
+// "hello fine world\n" should be written to stdout, and output, in
+// proper order. This is a version of the scott snyder test taken
+// from: http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00108.html
void test04()
{
using namespace std;
cout << "hello ";
- cout.flush ();
+ cout.flush();
cerr << "fine ";
- cerr.flush ();
+ cerr.flush();
cout << "world" << endl;
- cout.flush ();
+ cout.flush();
}
// Interactive test, to be exercised as follows:
// depending upon buffering mode enforced.
void test05()
{
- std::cout << "hello" << ' ' << "world" <<std::endl;
+ std::cout << "hello" << ' ' << "world" << std::endl;
std::cout << "Enter your name: ";
std::string s;
std::cin >> s;
void test07()
{
bool test = true;
- std::cout << "Please, enter 'test':";
+ std::cout << "Enter 'test':";
std::string s;
std::getline(std::cin, s, '\n');
VERIFY( s == "test" );
void test09()
{
bool test = true;
- std::cout << "Enter name: ";
+ std::cout << "Enter favorite beach: ";
std::cin.ignore(2048, '\n');
}
+// http://gcc.gnu.org/ml/libstdc++/2002-08/msg00060.html
+// Should only have to hit enter once.
+void
+test10()
+{
+ using namespace std;
+ cout << "Press ENTER once\n";
+ cin.ignore(1);
+ cout << "_M_gcount: "<< cin.gcount() << endl;
+}
+
int
main()
{
// test07();
// test08();
// test09();
+ // test10();
return 0;
}