summaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>2005-04-15 02:06:26 +0000
committerbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>2005-04-15 02:06:26 +0000
commitc4ffdcdf45caadc3d0c905d22f326e89c4972eaa (patch)
treed277bbc9b90693315d38e9618610929caedcdec3 /libstdc++-v3
parent9ee94b75a1793d1fb6d3fa013d6f62413c8d7f78 (diff)
downloadgcc-c4ffdcdf45caadc3d0c905d22f326e89c4972eaa.tar.gz
2005-04-14 Benjamin Kosnik <bkoz@redhat.com>
* include/ext/pod_char_traits.h (__gnu_cxx::character): Add char_type. (character::to): New. (character::from): New. (operator==): Add state parameter. (operator<): Same. (char_traits::copy): Use std::copy. (char_traits::assign): Use std::fill_n. (char_traits::to_char_type): Use character::from. (char_traits::to_int_type): Use character::to. * testsuite/testsuite_character.h (__gnu_test::character): Remove. (__gnu_test::conversion_state): Remove. (__gnu_test::pod_char): Remove. (pod_char): New typedef. (pod_uchar): New typedef. (pod_ushort): New typedef. * testsuite/testsuite_character.cc: Fixups. * testsuite/21_strings/basic_string/inserters_extractors/pod/ 10081-in.cc: Same. * testsuite/21_strings/basic_string/inserters_extractors/pod/ 10081-out.cc: Same. * testsuite/22_locale/numpunct/members/pod/1.cc: Same. * testsuite/22_locale/numpunct/members/pod/2.cc: Same. * testsuite/27_io/basic_filebuf/close/12790-1.cc: Same. * testsuite/27_io/basic_filebuf/open/12790-1.cc: Same. * testsuite/27_io/basic_filebuf/seekoff/12790-1.cc: Same. * testsuite/27_io/basic_filebuf/seekoff/12790-2.cc: Same. * testsuite/27_io/basic_filebuf/seekoff/12790-3.cc: Same. * testsuite/27_io/basic_filebuf/seekoff/12790-4.cc: Same. * testsuite/27_io/basic_filebuf/seekpos/12790-1.cc: Same. * testsuite/27_io/basic_filebuf/seekpos/12790-2.cc: Same. * testsuite/27_io/basic_filebuf/seekpos/12790-3.cc: Same. * testsuite/27_io/basic_ios/imbue/14072.cc: Same. * testsuite/27_io/basic_istream/extractors_arithmetic/pod/ 3983-1.cc: Same. * testsuite/27_io/basic_istream/extractors_character/pod/ 3983-2.cc: Same. * testsuite/27_io/basic_istream/extractors_other/pod/3983-3.cc: Same. * testsuite/27_io/basic_istream/sentry/pod/1.cc: Same. * testsuite/27_io/basic_ostream/sentry/pod/1.cc: Same. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@98165 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog42
-rw-r--r--libstdc++-v3/include/ext/pod_char_traits.h76
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-in.cc18
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-out.cc18
-rw-r--r--libstdc++-v3/testsuite/22_locale/numpunct/members/pod/1.cc30
-rw-r--r--libstdc++-v3/testsuite/22_locale/numpunct/members/pod/2.cc12
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/close/12790-1.cc20
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/open/12790-1.cc12
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-1.cc26
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-2.cc26
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-3.cc24
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-4.cc22
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-1.cc18
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-2.cc24
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-3.cc28
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ios/imbue/14072.cc136
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/pod/3983-1.cc15
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/pod/3983-2.cc18
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/pod/3983-3.cc15
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/sentry/pod/1.cc18
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/sentry/pod/1.cc18
-rw-r--r--libstdc++-v3/testsuite/testsuite_character.cc74
-rw-r--r--libstdc++-v3/testsuite/testsuite_character.h416
23 files changed, 444 insertions, 662 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 341ef0b2cba..535faf5cc69 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,45 @@
+2005-04-14 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/ext/pod_char_traits.h (__gnu_cxx::character): Add char_type.
+ (character::to): New.
+ (character::from): New.
+ (operator==): Add state parameter.
+ (operator<): Same.
+ (char_traits::copy): Use std::copy.
+ (char_traits::assign): Use std::fill_n.
+ (char_traits::to_char_type): Use character::from.
+ (char_traits::to_int_type): Use character::to.
+ * testsuite/testsuite_character.h (__gnu_test::character): Remove.
+ (__gnu_test::conversion_state): Remove.
+ (__gnu_test::pod_char): Remove.
+ (pod_char): New typedef.
+ (pod_uchar): New typedef.
+ (pod_ushort): New typedef.
+ * testsuite/testsuite_character.cc: Fixups.
+ * testsuite/21_strings/basic_string/inserters_extractors/pod/
+ 10081-in.cc: Same.
+ * testsuite/21_strings/basic_string/inserters_extractors/pod/
+ 10081-out.cc: Same.
+ * testsuite/22_locale/numpunct/members/pod/1.cc: Same.
+ * testsuite/22_locale/numpunct/members/pod/2.cc: Same.
+ * testsuite/27_io/basic_filebuf/close/12790-1.cc: Same.
+ * testsuite/27_io/basic_filebuf/open/12790-1.cc: Same.
+ * testsuite/27_io/basic_filebuf/seekoff/12790-1.cc: Same.
+ * testsuite/27_io/basic_filebuf/seekoff/12790-2.cc: Same.
+ * testsuite/27_io/basic_filebuf/seekoff/12790-3.cc: Same.
+ * testsuite/27_io/basic_filebuf/seekoff/12790-4.cc: Same.
+ * testsuite/27_io/basic_filebuf/seekpos/12790-1.cc: Same.
+ * testsuite/27_io/basic_filebuf/seekpos/12790-2.cc: Same.
+ * testsuite/27_io/basic_filebuf/seekpos/12790-3.cc: Same.
+ * testsuite/27_io/basic_ios/imbue/14072.cc: Same.
+ * testsuite/27_io/basic_istream/extractors_arithmetic/pod/
+ 3983-1.cc: Same.
+ * testsuite/27_io/basic_istream/extractors_character/pod/
+ 3983-2.cc: Same.
+ * testsuite/27_io/basic_istream/extractors_other/pod/3983-3.cc: Same.
+ * testsuite/27_io/basic_istream/sentry/pod/1.cc: Same.
+ * testsuite/27_io/basic_ostream/sentry/pod/1.cc: Same.
+
2005-04-12 Mike Stump <mrs@apple.com>
* configure: Regenerate.
diff --git a/libstdc++-v3/include/ext/pod_char_traits.h b/libstdc++-v3/include/ext/pod_char_traits.h
index c2f5551247d..a27b4cb2372 100644
--- a/libstdc++-v3/include/ext/pod_char_traits.h
+++ b/libstdc++-v3/include/ext/pod_char_traits.h
@@ -1,6 +1,6 @@
// POD character, std::char_traits specialization -*- C++ -*-
-// Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2003, 2004, 2005 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
@@ -41,24 +41,47 @@
namespace __gnu_cxx
{
+ // POD character abstraction.
+ // NB: The char_type parameter is a subset of int_type, as to allow
+ // int_type to properly hold the full range of char_type values as
+ // well as EOF.
/// @brief A POD class that serves as a character abstraction class.
template<typename V, typename I, typename S = mbstate_t>
struct character
{
- typedef V value_type;
- typedef I int_type;
- typedef S state_type;
+ typedef V value_type;
+ typedef I int_type;
+ typedef S state_type;
+ typedef character<V, I, S> char_type;
+
value_type value;
+
+ template<typename V2>
+ static char_type
+ from(const V2& v)
+ {
+ char_type ret = { static_cast<value_type>(v) };
+ return ret;
+ }
+
+ template<typename V2>
+ static V2
+ to(const char_type& c)
+ {
+ V2 ret = { static_cast<V2>(c.value) };
+ return ret;
+ }
+
};
- template<typename V, typename I>
+ template<typename V, typename I, typename S>
inline bool
- operator==(const character<V, I>& lhs, const character<V, I>& rhs)
+ operator==(const character<V, I, S>& lhs, const character<V, I, S>& rhs)
{ return lhs.value == rhs.value; }
- template<typename V, typename I>
+ template<typename V, typename I, typename S>
inline bool
- operator<(const character<V, I>& lhs, const character<V, I>& rhs)
+ operator<(const character<V, I, S>& lhs, const character<V, I, S>& rhs)
{ return lhs.value < rhs.value; }
} // namespace __gnu_cxx
@@ -69,13 +92,6 @@ namespace std
struct char_traits<__gnu_cxx::character<V, I, S> >
{
typedef __gnu_cxx::character<V, I, S> char_type;
-
- // NB: This type should be bigger than char_type, so as to
- // properly hold EOF values in addition to the full range of
- // char_type values.
- // Also, assumes
- // int_type(value_type) is valid.
- // int_type(-1) is possible.
typedef typename char_type::int_type int_type;
typedef typename char_type::state_type state_type;
typedef fpos<state_type> pos_type;
@@ -122,41 +138,47 @@ namespace std
static char_type*
move(char_type* __s1, const char_type* __s2, size_t __n)
- { return (char_type*) memmove(__s1, __s2, __n * sizeof(char_type)); }
+ {
+ return static_cast<char_type*>(std::memmove(__s1, __s2,
+ __n * sizeof(char_type)));
+ }
static char_type*
copy(char_type* __s1, const char_type* __s2, size_t __n)
- { return (char_type*) memcpy(__s1, __s2, __n * sizeof(char_type)); }
+ {
+ std::copy(__s2, __s2 + __n, __s1);
+ return __s1;
+ }
static char_type*
assign(char_type* __s, size_t __n, char_type __a)
{
- for (char_type* __p = __s; __p < __s + __n; ++__p)
- assign(*__p, __a);
+ std::fill_n(__s, __n, __a);
return __s;
}
static char_type
- to_char_type(const int_type& __c)
- {
- char_type __r = { __c };
- return __r;
- }
+ to_char_type(const int_type& __i)
+ { return char_type::template from(__i); }
static int_type
to_int_type(const char_type& __c)
- { return int_type(__c.value); }
+ { return char_type::template to<int_type>(__c); }
static bool
eq_int_type(const int_type& __c1, const int_type& __c2)
{ return __c1 == __c2; }
static int_type
- eof() { return static_cast<int_type>(-1); }
+ eof()
+ {
+ int_type __r = { -1 };
+ return __r;
+ }
static int_type
not_eof(const int_type& __c)
- { return eq_int_type(__c, eof()) ? int_type(0) : __c; }
+ { return eq_int_type(__c, eof()) ? int_type() : __c; }
};
}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-in.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-in.cc
index 69ab1e9b462..9555362e576 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-in.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-in.cc
@@ -37,10 +37,10 @@
void test01()
{
using namespace std;
- using __gnu_test::pod_type;
- typedef basic_string<pod_type> string_type;
- typedef basic_stringbuf<pod_type> stringbuf_type;
- typedef basic_istream<pod_type> istream_type;
+ using __gnu_test::pod_ushort;
+ typedef basic_string<pod_ushort> string_type;
+ typedef basic_stringbuf<pod_ushort> stringbuf_type;
+ typedef basic_istream<pod_ushort> istream_type;
bool test __attribute__((unused)) = true;
@@ -61,7 +61,7 @@ void test01()
VERIFY( false );
}
- const std::locale loc(std::locale::classic(), new std::ctype<pod_type>);
+ const std::locale loc(std::locale::classic(), new std::ctype<pod_ushort>);
stream.imbue(loc);
try
{
@@ -76,12 +76,12 @@ void test01()
#if !__GXX_WEAK__
// Explicitly instantiate for systems with no COMDAT or weak support.
template
- std::basic_string<__gnu_test::pod_type>::size_type
- std::basic_string<__gnu_test::pod_type>::_Rep::_S_max_size;
+ std::basic_string<__gnu_test::pod_ushort>::size_type
+ std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_max_size;
template
- __gnu_test::pod_type
- std::basic_string<__gnu_test::pod_type>::_Rep::_S_terminal;
+ __gnu_test::pod_ushort
+ std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_terminal;
#endif
int main()
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-out.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-out.cc
index 35ee3609e6a..c192730362a 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-out.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/pod/10081-out.cc
@@ -37,10 +37,10 @@
void test01()
{
using namespace std;
- using __gnu_test::pod_type;
- typedef basic_string<pod_type> string_type;
- typedef basic_stringbuf<pod_type> stringbuf_type;
- typedef basic_ostream<pod_type> ostream_type;
+ using __gnu_test::pod_ushort;
+ typedef basic_string<pod_ushort> string_type;
+ typedef basic_stringbuf<pod_ushort> stringbuf_type;
+ typedef basic_ostream<pod_ushort> ostream_type;
bool test __attribute__((unused)) = true;
@@ -61,7 +61,7 @@ void test01()
VERIFY( false );
}
- const std::locale loc(std::locale::classic(), new std::ctype<pod_type>);
+ const std::locale loc(std::locale::classic(), new std::ctype<pod_ushort>);
stream.imbue(loc);
try
{
@@ -76,12 +76,12 @@ void test01()
#if !__GXX_WEAK__
// Explicitly instantiate for systems with no COMDAT or weak support.
template
- std::basic_string<__gnu_test::pod_type>::size_type
- std::basic_string<__gnu_test::pod_type>::_Rep::_S_max_size;
+ std::basic_string<__gnu_test::pod_ushort>::size_type
+ std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_max_size;
template
- __gnu_test::pod_type
- std::basic_string<__gnu_test::pod_type>::_Rep::_S_terminal;
+ __gnu_test::pod_ushort
+ std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_terminal;
#endif
int main()
diff --git a/libstdc++-v3/testsuite/22_locale/numpunct/members/pod/1.cc b/libstdc++-v3/testsuite/22_locale/numpunct/members/pod/1.cc
index 1410b959fe9..a4d88bc0e44 100644
--- a/libstdc++-v3/testsuite/22_locale/numpunct/members/pod/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/numpunct/members/pod/1.cc
@@ -30,42 +30,42 @@
void test01()
{
using namespace std;
- using __gnu_test::pod_type;
- using __gnu_test::value_type;
- typedef numpunct<pod_type>::string_type string_type;
- typedef basic_stringbuf<pod_type> stringbuf_type;
- typedef basic_ostream<pod_type> ostream_type;
+ using __gnu_test::pod_ushort;
+ typedef pod_ushort::value_type value_type;
+ typedef numpunct<pod_ushort>::string_type string_type;
+ typedef basic_stringbuf<pod_ushort> stringbuf_type;
+ typedef basic_ostream<pod_ushort> ostream_type;
bool test __attribute__((unused)) = true;
// Pre-cache sanity check.
- const locale loc(locale::classic(), new numpunct<pod_type>);
- const numpunct<pod_type>& np = use_facet<numpunct<pod_type> >(loc);
+ const locale loc(locale::classic(), new numpunct<pod_ushort>);
+ const numpunct<pod_ushort>& np = use_facet<numpunct<pod_ushort> >(loc);
- pod_type dp = np.decimal_point();
- pod_type ts = np.thousands_sep();
+ pod_ushort dp = np.decimal_point();
+ pod_ushort ts = np.thousands_sep();
string g = np.grouping();
string_type strue = np.truename();
string_type sfalse = np.falsename();
- pod_type basedp = { value_type('.') };
- pod_type basets = { value_type(',') };
+ pod_ushort basedp = { value_type('.') };
+ pod_ushort basets = { value_type(',') };
- string_type basetrue(4, pod_type());
+ string_type basetrue(4, pod_ushort());
basetrue[0].value = value_type('t');
basetrue[1].value = value_type('r');
basetrue[2].value = value_type('u');
basetrue[3].value = value_type('e');
- string_type basefalse(5, pod_type());
+ string_type basefalse(5, pod_ushort());
basefalse[0].value = value_type('f');
basefalse[1].value = value_type('a');
basefalse[2].value = value_type('l');
basefalse[3].value = value_type('s');
basefalse[4].value = value_type('e');
- VERIFY( char_traits<pod_type>::eq(dp, basedp) );
- VERIFY( char_traits<pod_type>::eq(ts, basets) );
+ VERIFY( char_traits<pod_ushort>::eq(dp, basedp) );
+ VERIFY( char_traits<pod_ushort>::eq(ts, basets) );
VERIFY( g == "" );
VERIFY( strue == basetrue );
VERIFY( sfalse == basefalse );
diff --git a/libstdc++-v3/testsuite/22_locale/numpunct/members/pod/2.cc b/libstdc++-v3/testsuite/22_locale/numpunct/members/pod/2.cc
index d0d380cd2d4..a6c6d3fcae0 100644
--- a/libstdc++-v3/testsuite/22_locale/numpunct/members/pod/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/numpunct/members/pod/2.cc
@@ -30,10 +30,10 @@
void test01()
{
using namespace std;
- using __gnu_test::pod_type;
+ using __gnu_test::pod_ushort;
- typedef numpunct<pod_type>::string_type string_type;
- typedef basic_ostringstream<pod_type> ostream_type;
+ typedef numpunct<pod_ushort>::string_type string_type;
+ typedef basic_ostringstream<pod_ushort> ostream_type;
bool test = true;
@@ -58,7 +58,7 @@ void test01()
VERIFY( test );
// 2: fail, no ctype
- const locale loc2(loc, new num_put<pod_type>);
+ const locale loc2(loc, new num_put<pod_ushort>);
os.clear();
os.imbue(loc2);
try
@@ -74,7 +74,7 @@ void test01()
VERIFY( test );
// 3: fail, no numpunct
- const locale loc3(loc2, new ctype<pod_type>);
+ const locale loc3(loc2, new ctype<pod_ushort>);
os.clear();
os.imbue(loc3);
try
@@ -90,7 +90,7 @@ void test01()
VERIFY( test );
// 4: works.
- const locale loc4(loc3, new numpunct<pod_type>);
+ const locale loc4(loc3, new numpunct<pod_ushort>);
os.clear();
os.imbue(loc4);
try
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/12790-1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/12790-1.cc
index a6c27000833..e94b17ff141 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/12790-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/12790-1.cc
@@ -27,8 +27,8 @@
void test01()
{
using namespace std;
- using __gnu_test::character;
- typedef basic_filebuf<character>::traits_type traits_type;
+ using __gnu_test::pod_uchar;
+ typedef basic_filebuf<pod_uchar>::traits_type traits_type;
bool test __attribute__((unused)) = true;
const char* name = "tmp_close_12790";
@@ -37,23 +37,23 @@ void test01()
new codecvt<traits_type::char_type, char,
traits_type::state_type>);
- basic_filebuf<character> fb;
+ basic_filebuf<pod_uchar> fb;
fb.pubsetbuf(0, 0);
fb.pubimbue(loc);
fb.open(name, ios_base::out | ios_base::trunc);
- fb.sputc(character::from_char('b'));
- fb.sputc(character::from_char(0xff));
- fb.sputc(character::from_char(0));
+ fb.sputc(pod_uchar::from<char>('b'));
+ fb.sputc(pod_uchar::from<char>(0xff));
+ fb.sputc(pod_uchar::from<char>(0));
// Check that close() writes unshift sequence
fb.close();
fb.open(name, ios_base::in | ios_base::out | ios_base::ate);
- fb.sputc(character::from_char('a'));
- fb.sputc(character::from_char(0xff));
- fb.sputc(character::from_char(0));
+ fb.sputc(pod_uchar::from<char>('a'));
+ fb.sputc(pod_uchar::from<char>(0xff));
+ fb.sputc(pod_uchar::from<char>(0));
fb.close();
@@ -66,7 +66,7 @@ void test01()
traits_type::int_type c = fb.sbumpc();
VERIFY( c != traits_type::eof() );
VERIFY( traits_type::eq(traits_type::to_char_type(c),
- character::from_char('a')) );
+ pod_uchar::from<char>('a')) );
fb.close();
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/open/12790-1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/open/12790-1.cc
index d37972b6e3e..4ddd2efb028 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/open/12790-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/open/12790-1.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2005 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
@@ -27,8 +27,8 @@
void test01()
{
using namespace std;
- using __gnu_test::character;
- typedef basic_filebuf<character>::traits_type traits_type;
+ using __gnu_test::pod_uchar;
+ typedef basic_filebuf<pod_uchar>::traits_type traits_type;
bool test __attribute__((unused)) = true;
const char* name = "tmp_open_12790";
@@ -37,11 +37,11 @@ void test01()
new codecvt<traits_type::char_type, char,
traits_type::state_type>);
- basic_filebuf<character> fb;
+ basic_filebuf<pod_uchar> fb;
fb.pubimbue(loc);
fb.open(name, ios_base::out);
- fb.sputc(character::from_char('b'));
+ fb.sputc(pod_uchar::from<char>('b'));
fb.close();
// Check that reopened basic_filebuf begins in the initial state.
@@ -49,7 +49,7 @@ void test01()
traits_type::int_type c = fb.sbumpc();
VERIFY( c != traits_type::eof() );
VERIFY( traits_type::eq(traits_type::to_char_type(c),
- character::from_char('b')) );
+ pod_uchar::from<char>('b')) );
fb.close();
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-1.cc
index 79a625169eb..7fef808f494 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-1.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2005 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
@@ -27,8 +27,8 @@
void test01()
{
using namespace std;
- using __gnu_test::character;
- typedef basic_filebuf<character>::traits_type traits_type;
+ using __gnu_test::pod_uchar;
+ typedef basic_filebuf<pod_uchar>::traits_type traits_type;
bool test __attribute__((unused)) = true;
const char* name = "tmp_seekoff_12790";
@@ -37,17 +37,17 @@ void test01()
new codecvt<traits_type::char_type, char,
traits_type::state_type>);
- basic_filebuf<character> fb;
+ basic_filebuf<pod_uchar> fb;
fb.pubimbue(loc);
fb.open(name, ios_base::out);
- fb.sputc(character::from_char(0xff));
- fb.sputc(character::from_char(0));
- fb.sputc(character::from_char(0));
- fb.sputc(character::from_char('a'));
- fb.sputc(character::from_char('a'));
- fb.sputc(character::from_char('a'));
- fb.sputc(character::from_char('a'));
+ fb.sputc(pod_uchar::from<char>(0xff));
+ fb.sputc(pod_uchar::from<char>(0));
+ fb.sputc(pod_uchar::from<char>(0));
+ fb.sputc(pod_uchar::from<char>('a'));
+ fb.sputc(pod_uchar::from<char>('a'));
+ fb.sputc(pod_uchar::from<char>('a'));
+ fb.sputc(pod_uchar::from<char>('a'));
fb.close();
fb.open(name, ios_base::in);
@@ -62,13 +62,13 @@ void test01()
traits_type::int_type c = fb.sbumpc();
VERIFY( c != traits_type::eof() );
VERIFY( traits_type::eq(traits_type::to_char_type(c),
- character::from_char('a')) );
+ pod_uchar::from<char>('a')) );
fb.sbumpc();
fb.sbumpc();
c = fb.sbumpc();
VERIFY( c != traits_type::eof() );
VERIFY( traits_type::eq(traits_type::to_char_type(c),
- character::from_char('a')) );
+ pod_uchar::from<char>('a')) );
c = fb.sbumpc();
VERIFY( c == traits_type::eof() );
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-2.cc
index 5966e1721b8..748d3a5c84c 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-2.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2005 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
@@ -27,8 +27,8 @@
void test01()
{
using namespace std;
- using __gnu_test::character;
- typedef basic_filebuf<character>::traits_type traits_type;
+ using __gnu_test::pod_uchar;
+ typedef basic_filebuf<pod_uchar>::traits_type traits_type;
bool test __attribute__((unused)) = true;
const char* name = "tmp_seekoff_12790";
@@ -37,17 +37,17 @@ void test01()
new codecvt<traits_type::char_type, char,
traits_type::state_type>);
- basic_filebuf<character> fb;
+ basic_filebuf<pod_uchar> fb;
fb.pubimbue(loc);
fb.open(name, ios_base::out);
- fb.sputc(character::from_char(0xff));
- fb.sputc(character::from_char(0));
- fb.sputc(character::from_char(0));
- fb.sputc(character::from_char('a'));
- fb.sputc(character::from_char('a'));
- fb.sputc(character::from_char('a'));
- fb.sputc(character::from_char('a'));
+ fb.sputc(pod_uchar::from<char>(0xff));
+ fb.sputc(pod_uchar::from<char>(0));
+ fb.sputc(pod_uchar::from<char>(0));
+ fb.sputc(pod_uchar::from<char>('a'));
+ fb.sputc(pod_uchar::from<char>('a'));
+ fb.sputc(pod_uchar::from<char>('a'));
+ fb.sputc(pod_uchar::from<char>('a'));
fb.close();
fb.open(name, ios_base::in);
@@ -62,7 +62,7 @@ void test01()
traits_type::int_type c = fb.sbumpc();
VERIFY( c != traits_type::eof() );
VERIFY( traits_type::eq(traits_type::to_char_type(c),
- character::from_char(0xff)) );
+ pod_uchar::from<char>(0xff)) );
fb.sbumpc();
fb.sbumpc();
fb.sbumpc();
@@ -71,7 +71,7 @@ void test01()
c = fb.sbumpc();
VERIFY( c != traits_type::eof() );
VERIFY( traits_type::eq(traits_type::to_char_type(c),
- character::from_char('a')) );
+ pod_uchar::from<char>('a')) );
c = fb.sbumpc();
VERIFY( c == traits_type::eof() );
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-3.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-3.cc
index 42a17955582..5dba37cdda4 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-3.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2005 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
@@ -27,8 +27,8 @@
void test01()
{
using namespace std;
- using __gnu_test::character;
- typedef basic_filebuf<character>::traits_type traits_type;
+ using __gnu_test::pod_uchar;
+ typedef basic_filebuf<pod_uchar>::traits_type traits_type;
bool test __attribute__((unused)) = true;
const char* name = "tmp_seekoff_12790";
@@ -37,16 +37,16 @@ void test01()
new codecvt<traits_type::char_type, char,
traits_type::state_type>);
- basic_filebuf<character> fb;
+ basic_filebuf<pod_uchar> fb;
fb.pubimbue(loc);
fb.open(name, ios_base::out | ios_base::trunc);
- fb.sputc(character::from_char('b'));
- fb.sputc(character::from_char(0xff));
- fb.sputc(character::from_char('a'));
- fb.sputc(character::from_char(0xfc));
- fb.sputc(character::from_char(0));
- fb.sputc(character::from_char(0));
+ fb.sputc(pod_uchar::from<char>('b'));
+ fb.sputc(pod_uchar::from<char>(0xff));
+ fb.sputc(pod_uchar::from<char>('a'));
+ fb.sputc(pod_uchar::from<char>(0xfc));
+ fb.sputc(pod_uchar::from<char>(0));
+ fb.sputc(pod_uchar::from<char>(0));
fb.close();
fb.open(name, ios_base::in);
@@ -60,7 +60,7 @@ void test01()
traits_type::int_type c = fb.sbumpc();
VERIFY( c != traits_type::eof() );
VERIFY( traits_type::eq(traits_type::to_char_type(c),
- character::from_char('a')) );
+ pod_uchar::from<char>('a')) );
fb.sbumpc();
fb.pubseekpos(pos);
@@ -68,7 +68,7 @@ void test01()
c = fb.sbumpc();
VERIFY( c != traits_type::eof() );
VERIFY( traits_type::eq(traits_type::to_char_type(c),
- character::from_char('a')) );
+ pod_uchar::from<char>('a')) );
fb.close();
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-4.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-4.cc
index d246657d1e7..5f31b58c3d3 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-4.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/12790-4.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2005 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
@@ -27,8 +27,8 @@
void test01()
{
using namespace std;
- using __gnu_test::character;
- typedef basic_filebuf<character>::traits_type traits_type;
+ using __gnu_test::pod_uchar;
+ typedef basic_filebuf<pod_uchar>::traits_type traits_type;
bool test __attribute__((unused)) = true;
const char* name = "tmp_seekoff_12790";
@@ -37,20 +37,20 @@ void test01()
new codecvt<traits_type::char_type, char,
traits_type::state_type>);
- basic_filebuf<character> fb;
+ basic_filebuf<pod_uchar> fb;
fb.pubsetbuf(0, 0);
fb.pubimbue(loc);
fb.open(name, ios_base::in | ios_base::out | ios_base::trunc);
- fb.sputc(character::from_char('b'));
- fb.sputc(character::from_char(0xff));
+ fb.sputc(pod_uchar::from<char>('b'));
+ fb.sputc(pod_uchar::from<char>(0xff));
// Check that seekoff sets the current state during output
traits_type::pos_type pos = fb.pubseekoff(0, ios_base::cur);
- fb.sputc(character::from_char('a'));
- fb.sputc(character::from_char(0xff));
- fb.sputc(character::from_char(0));
- fb.sputc(character::from_char(0));
+ fb.sputc(pod_uchar::from<char>('a'));
+ fb.sputc(pod_uchar::from<char>(0xff));
+ fb.sputc(pod_uchar::from<char>(0));
+ fb.sputc(pod_uchar::from<char>(0));
fb.pubseekoff(0, ios_base::beg);
fb.sbumpc();
@@ -59,7 +59,7 @@ void test01()
traits_type::int_type c = fb.sbumpc();
VERIFY( c != traits_type::eof() );
VERIFY( traits_type::eq(traits_type::to_char_type(c),
- character::from_char('a')) );
+ pod_uchar::from<char>('a')) );
fb.close();
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-1.cc
index 3201da8478c..ffb22f934db 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-1.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2005 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
@@ -27,8 +27,8 @@
void test01()
{
using namespace std;
- using __gnu_test::character;
- typedef basic_filebuf<character>::traits_type traits_type;
+ using __gnu_test::pod_uchar;
+ typedef basic_filebuf<pod_uchar>::traits_type traits_type;
bool test __attribute__((unused)) = true;
const char* name = "tmp_seekpos_12790";
@@ -37,16 +37,16 @@ void test01()
new codecvt<traits_type::char_type, char,
traits_type::state_type>);
- basic_filebuf<character> fb;
+ basic_filebuf<pod_uchar> fb;
fb.pubsetbuf(0, 0);
fb.pubimbue(loc);
fb.open(name, ios_base::in | ios_base::out | ios_base::trunc);
traits_type::pos_type pos = fb.pubseekoff(0, ios_base::cur);
- fb.sputc(character::from_char('a'));
- fb.sputc(character::from_char(0xff));
- fb.sputc(character::from_char(0));
- fb.sputc(character::from_char(0));
+ fb.sputc(pod_uchar::from<char>('a'));
+ fb.sputc(pod_uchar::from<char>(0xff));
+ fb.sputc(pod_uchar::from<char>(0));
+ fb.sputc(pod_uchar::from<char>(0));
// Check that seekpos restores the state correctly
fb.pubseekpos(pos);
@@ -54,7 +54,7 @@ void test01()
traits_type::int_type c = fb.sbumpc();
VERIFY( c != traits_type::eof() );
VERIFY( traits_type::eq(traits_type::to_char_type(c),
- character::from_char('a')) );
+ pod_uchar::from<char>('a')) );
fb.close();
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-2.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-2.cc
index b5198e53b90..98ee1d37f2a 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-2.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2005 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
@@ -27,8 +27,8 @@
void test01()
{
using namespace std;
- using __gnu_test::character;
- typedef basic_filebuf<character>::traits_type traits_type;
+ using __gnu_test::pod_uchar;
+ typedef basic_filebuf<pod_uchar>::traits_type traits_type;
bool test __attribute__((unused)) = true;
const char* name = "tmp_seekpos_12790";
@@ -37,16 +37,16 @@ void test01()
new codecvt<traits_type::char_type, char,
traits_type::state_type>);
- basic_filebuf<character> fb;
+ basic_filebuf<pod_uchar> fb;
fb.pubimbue(loc);
fb.open(name, ios_base::out | ios_base::trunc);
- fb.sputc(character::from_char('b'));
- fb.sputc(character::from_char(0xff));
- fb.sputc(character::from_char('a'));
- fb.sputc(character::from_char(0xfc));
- fb.sputc(character::from_char(0));
- fb.sputc(character::from_char(0));
+ fb.sputc(pod_uchar::from<char>('b'));
+ fb.sputc(pod_uchar::from<char>(0xff));
+ fb.sputc(pod_uchar::from<char>('a'));
+ fb.sputc(pod_uchar::from<char>(0xfc));
+ fb.sputc(pod_uchar::from<char>(0));
+ fb.sputc(pod_uchar::from<char>(0));
fb.close();
fb.open(name, ios_base::in);
@@ -62,14 +62,14 @@ void test01()
traits_type::int_type c = fb.sbumpc();
VERIFY( c != traits_type::eof() );
VERIFY( traits_type::eq(traits_type::to_char_type(c),
- character::from_char('a')) );
+ pod_uchar::from<char>('a')) );
fb.sbumpc();
fb.pubseekpos(pos2);
c = fb.sbumpc();
VERIFY( c != traits_type::eof() );
VERIFY( traits_type::eq(traits_type::to_char_type(c),
- character::from_char('a')) );
+ pod_uchar::from<char>('a')) );
fb.close();
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-3.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-3.cc
index 1d0535c72c5..89ed992a9e7 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/12790-3.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2003 Free Software Foundation, Inc.
+// Copyright (C) 2003, 2005 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
@@ -27,8 +27,8 @@
void test01()
{
using namespace std;
- using __gnu_test::character;
- typedef basic_filebuf<character>::traits_type traits_type;
+ using __gnu_test::pod_uchar;
+ typedef basic_filebuf<pod_uchar>::traits_type traits_type;
bool test __attribute__((unused)) = true;
const char* name = "tmp_seekpos_12790";
@@ -37,14 +37,14 @@ void test01()
new codecvt<traits_type::char_type, char,
traits_type::state_type>);
- basic_filebuf<character> fb;
+ basic_filebuf<pod_uchar> fb;
fb.pubimbue(loc);
fb.open(name, ios_base::in | ios_base::out | ios_base::trunc);
- fb.sputc(character::from_char('b'));
- fb.sputc(character::from_char(0xff));
- fb.sputc(character::from_char('c'));
- fb.sputc(character::from_char(0xff));
+ fb.sputc(pod_uchar::from<char>('b'));
+ fb.sputc(pod_uchar::from<char>(0xff));
+ fb.sputc(pod_uchar::from<char>('c'));
+ fb.sputc(pod_uchar::from<char>(0xff));
fb.pubseekoff(0, ios_base::beg);
fb.sbumpc();
@@ -56,18 +56,18 @@ void test01()
// Check that seekoff sets the current state for output
fb.pubseekpos(pos);
- fb.sputc(character::from_char('a'));
- fb.sputc(character::from_char(0));
- fb.sputc(character::from_char(0));
- fb.sputc(character::from_char(0));
- fb.sputc(character::from_char(0));
+ fb.sputc(pod_uchar::from<char>('a'));
+ fb.sputc(pod_uchar::from<char>(0));
+ fb.sputc(pod_uchar::from<char>(0));
+ fb.sputc(pod_uchar::from<char>(0));
+ fb.sputc(pod_uchar::from<char>(0));
fb.pubseekpos(pos);
traits_type::int_type c = fb.sbumpc();
VERIFY( c != traits_type::eof() );
VERIFY( traits_type::eq(traits_type::to_char_type(c),
- character::from_char('a')) );
+ pod_uchar::from<char>('a')) );
fb.close();
}
diff --git a/libstdc++-v3/testsuite/27_io/basic_ios/imbue/14072.cc b/libstdc++-v3/testsuite/27_io/basic_ios/imbue/14072.cc
index 77fafc7a233..4b5d5307c2c 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ios/imbue/14072.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ios/imbue/14072.cc
@@ -35,134 +35,6 @@
#include <testsuite_hooks.h>
#include <testsuite_character.h>
-namespace std
-{
- template<>
- class ctype<__gnu_test::character>
- : public locale::facet, public ctype_base
- {
- public:
- typedef __gnu_test::character char_type;
- explicit ctype(size_t refs = 0)
- : locale::facet(refs) { }
-
- bool
- is(mask m, char_type c) const
- { return this->do_is(m, c); }
-
- const char_type*
- is(const char_type* low, const char_type* high, mask* vec) const
- { return this->do_is(low, high, vec); }
-
- const char_type*
- scan_is(mask m, const char_type* low, const char_type* high) const
- { return this->do_scan_is(m, low, high); }
-
- const char_type*
- scan_not(mask m, const char_type* low, const char_type* high) const
- { return this->do_scan_not(m, low, high); }
-
- char_type
- toupper(char_type c) const
- { return this->do_toupper(c); }
-
- const char_type*
- toupper(char_type* low, const char_type* high) const
- { return this->do_toupper(low, high); }
-
- char_type
- tolower(char_type c) const
- { return this->do_tolower(c); }
-
- const char_type*
- tolower(char_type* low, const char_type* high) const
- { return this->do_tolower(low, high); }
-
- char_type
- widen(char c) const
- { return this->do_widen(c); }
-
- const char*
- widen(const char* low, const char* high, char_type* to) const
- { return this->do_widen(low, high, to); }
-
- char
- narrow(char_type c, char dfault) const
- { return this->do_narrow(c, dfault); }
-
- const char_type*
- narrow(const char_type* low, const char_type* high,
- char dfault, char* to) const
- { return this->do_narrow(low, high, dfault, to); }
-
- static locale::id id;
-
- protected:
- ~ctype()
- { }
-
- virtual bool
- do_is(mask m, char_type c) const
- { return false; }
-
- virtual const char_type*
- do_is(const char_type* low, const char_type* high, mask* vec) const
- {
- fill_n(vec, high - low, mask());
- return high;
- }
-
- virtual const char_type*
- do_scan_is(mask m, const char_type* low, const char_type* high) const
- { return high; }
-
- virtual const char_type*
- do_scan_not(mask m, const char_type* low, const char_type* high) const
- { return low; }
-
- virtual char_type
- do_toupper(char_type c) const
- { return c; }
-
- virtual const char_type*
- do_toupper(char_type* low, const char_type* high) const
- { return high; }
-
- virtual char_type
- do_tolower(char_type c) const
- { return c; }
-
- virtual const char_type*
- do_tolower(char_type* low, const char_type* high) const
- { return high; }
-
- virtual char_type
- do_widen(char c) const
- { return __gnu_test::character::from_char(c); }
-
- virtual const char*
- do_widen(const char* low, const char* high, char_type* dest) const
- {
- transform(low, high, dest, &__gnu_test::character::from_char);
- return high;
- }
-
- virtual char
- do_narrow(char_type, char dfault) const
- { return dfault; }
-
- virtual const char_type*
- do_narrow(const char_type* low, const char_type* high,
- char dfault, char* dest) const
- {
- fill_n(dest, high - low, dfault);
- return high;
- }
- };
-
- locale::id ctype<__gnu_test::character>::id;
-} // namespace std
-
// libstdc++/14072
void test01()
{
@@ -170,12 +42,12 @@ void test01()
using namespace std;
locale loc;
- loc = locale(loc, new ctype<__gnu_test::character>());
- loc = locale(loc, new num_get<__gnu_test::character>());
- loc = locale(loc, new num_put<__gnu_test::character>());
+ loc = locale(loc, new ctype<__gnu_test::pod_uchar>());
+ loc = locale(loc, new num_get<__gnu_test::pod_uchar>());
+ loc = locale(loc, new num_put<__gnu_test::pod_uchar>());
locale::global(loc);
- basic_stringstream<__gnu_test::character> s;
+ basic_stringstream<__gnu_test::pod_uchar> s;
s << "10\n";
s.seekg(0, ios_base::beg);
s.imbue(locale::classic());
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/pod/3983-1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/pod/3983-1.cc
index b0a34028a92..5968a9664d8 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/pod/3983-1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/pod/3983-1.cc
@@ -39,10 +39,9 @@
void test03()
{
using namespace std;
- using __gnu_test::pod_type;
- using __gnu_test::value_type;
- typedef basic_stringbuf<pod_type> stringbuf_type;
- typedef basic_istream<pod_type> istream_type;
+ using __gnu_test::pod_ushort;
+ typedef basic_stringbuf<pod_ushort> stringbuf_type;
+ typedef basic_istream<pod_ushort> istream_type;
stringbuf_type strbuf01;
istream_type iss(&strbuf01);
@@ -63,12 +62,12 @@ void test03()
#if !__GXX_WEAK__
// Explicitly instantiate for systems with no COMDAT or weak support.
template
- std::basic_string<__gnu_test::pod_type>::size_type
- std::basic_string<__gnu_test::pod_type>::_Rep::_S_max_size;
+ std::basic_string<__gnu_test::pod_ushort>::size_type
+ std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_max_size;
template
- __gnu_test::pod_type
- std::basic_string<__gnu_test::pod_type>::_Rep::_S_terminal;
+ __gnu_test::pod_ushort
+ std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_terminal;
#endif
int main()
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/pod/3983-2.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/pod/3983-2.cc
index 749cba8bd81..d3653c86d49 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/pod/3983-2.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_character/pod/3983-2.cc
@@ -39,10 +39,10 @@
void test03()
{
using namespace std;
- using __gnu_test::pod_type;
- using __gnu_test::value_type;
- typedef basic_stringbuf<pod_type> stringbuf_type;
- typedef basic_istream<pod_type> istream_type;
+ using __gnu_test::pod_ushort;
+ typedef pod_ushort::value_type value_type;
+ typedef basic_stringbuf<pod_ushort> stringbuf_type;
+ typedef basic_istream<pod_ushort> istream_type;
stringbuf_type strbuf01;
istream_type iss(&strbuf01);
@@ -50,7 +50,7 @@ void test03()
bool test __attribute__((unused)) = true;
// input streams
- pod_type arr[6] = { value_type('a'), value_type('b'),
+ pod_ushort arr[6] = { value_type('a'), value_type('b'),
value_type('c'), value_type('d'), value_type('e') };
try
@@ -66,12 +66,12 @@ void test03()
#if !__GXX_WEAK__
// Explicitly instantiate for systems with no COMDAT or weak support.
template
- std::basic_string<__gnu_test::pod_type>::size_type
- std::basic_string<__gnu_test::pod_type>::_Rep::_S_max_size;
+ std::basic_string<__gnu_test::pod_ushort>::size_type
+ std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_max_size;
template
- __gnu_test::pod_type
- std::basic_string<__gnu_test::pod_type>::_Rep::_S_terminal;
+ __gnu_test::pod_ushort
+ std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_terminal;
#endif
int main()
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/pod/3983-3.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/pod/3983-3.cc
index 0f23cf16a23..ee271f4c546 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/pod/3983-3.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_other/pod/3983-3.cc
@@ -39,10 +39,9 @@
void test03()
{
using namespace std;
- using __gnu_test::pod_type;
- using __gnu_test::value_type;
- typedef basic_stringbuf<pod_type> stringbuf_type;
- typedef basic_istream<pod_type> istream_type;
+ using __gnu_test::pod_ushort;
+ typedef basic_stringbuf<pod_ushort> stringbuf_type;
+ typedef basic_istream<pod_ushort> istream_type;
stringbuf_type strbuf01;
istream_type iss(&strbuf01);
@@ -62,12 +61,12 @@ void test03()
#if !__GXX_WEAK__
// Explicitly instantiate for systems with no COMDAT or weak support.
template
- std::basic_string<__gnu_test::pod_type>::size_type
- std::basic_string<__gnu_test::pod_type>::_Rep::_S_max_size;
+ std::basic_string<__gnu_test::pod_ushort>::size_type
+ std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_max_size;
template
- __gnu_test::pod_type
- std::basic_string<__gnu_test::pod_type>::_Rep::_S_terminal;
+ __gnu_test::pod_ushort
+ std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_terminal;
#endif
int main()
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/sentry/pod/1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/sentry/pod/1.cc
index 603d61d635b..71442362489 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/sentry/pod/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/sentry/pod/1.cc
@@ -38,10 +38,10 @@
void test01()
{
using namespace std;
- using __gnu_test::pod_type;
- typedef basic_string<pod_type> string_type;
- typedef basic_stringbuf<pod_type> stringbuf_type;
- typedef basic_istream<pod_type> istream_type;
+ using __gnu_test::pod_ushort;
+ typedef basic_string<pod_ushort> string_type;
+ typedef basic_stringbuf<pod_ushort> stringbuf_type;
+ typedef basic_istream<pod_ushort> istream_type;
bool test __attribute__((unused)) = true;
@@ -80,7 +80,7 @@ void test01()
}
// imbued.
- const std::locale loc(std::locale::classic(), new std::ctype<pod_type>);
+ const std::locale loc(std::locale::classic(), new std::ctype<pod_ushort>);
istr01.imbue(loc);
try
{
@@ -158,12 +158,12 @@ void test01()
#if !__GXX_WEAK__
// Explicitly instantiate for systems with no COMDAT or weak support.
template
- std::basic_string<__gnu_test::pod_type>::size_type
- std::basic_string<__gnu_test::pod_type>::_Rep::_S_max_size;
+ std::basic_string<__gnu_test::pod_ushort>::size_type
+ std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_max_size;
template
- __gnu_test::pod_type
- std::basic_string<__gnu_test::pod_type>::_Rep::_S_terminal;
+ __gnu_test::pod_ushort
+ std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_terminal;
#endif
int main()
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/sentry/pod/1.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/sentry/pod/1.cc
index d83293fe966..555c7369d1d 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/sentry/pod/1.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/sentry/pod/1.cc
@@ -38,10 +38,10 @@
void test01()
{
using namespace std;
- using __gnu_test::pod_type;
- typedef basic_string<pod_type> string_type;
- typedef basic_stringbuf<pod_type> stringbuf_type;
- typedef basic_ostream<pod_type> ostream_type;
+ using __gnu_test::pod_ushort;
+ typedef basic_string<pod_ushort> string_type;
+ typedef basic_stringbuf<pod_ushort> stringbuf_type;
+ typedef basic_ostream<pod_ushort> ostream_type;
bool test __attribute__((unused)) = true;
@@ -69,7 +69,7 @@ void test01()
}
// imbued.
- const std::locale loc(std::locale::classic(), new std::ctype<pod_type>);
+ const std::locale loc(std::locale::classic(), new std::ctype<pod_ushort>);
ostr01.imbue(loc);
try
{
@@ -114,12 +114,12 @@ void test01()
#if !__GXX_WEAK__
// Explicitly instantiate for systems with no COMDAT or weak support.
template
- std::basic_string<__gnu_test::pod_type>::size_type
- std::basic_string<__gnu_test::pod_type>::_Rep::_S_max_size;
+ std::basic_string<__gnu_test::pod_ushort>::size_type
+ std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_max_size;
template
- __gnu_test::pod_type
- std::basic_string<__gnu_test::pod_type>::_Rep::_S_terminal;
+ __gnu_test::pod_ushort
+ std::basic_string<__gnu_test::pod_ushort>::_Rep::_S_terminal;
#endif
int main()
diff --git a/libstdc++-v3/testsuite/testsuite_character.cc b/libstdc++-v3/testsuite/testsuite_character.cc
index 76f24cb038b..b5bd4122e14 100644
--- a/libstdc++-v3/testsuite/testsuite_character.cc
+++ b/libstdc++-v3/testsuite/testsuite_character.cc
@@ -34,65 +34,67 @@
namespace std
{
locale::id
- codecvt<__gnu_test::character, char, __gnu_test::conversion_state>::id;
+ codecvt<__gnu_test::pod_uchar, char, __gnu_test::pod_state>::id;
+
+ locale::id
+ ctype<__gnu_test::pod_uchar>::id;
// Member specializations for the existing facet classes.
// NB: This isn't especially portable. Perhaps a better way would be
// to just specialize all of numpunct and ctype.
- using __gnu_test::int_type;
- using __gnu_test::value_type;
- using __gnu_test::pod_type;
+ using __gnu_test::pod_ushort;
+ typedef pod_ushort::value_type value_type;
template<>
bool
- ctype<pod_type>::
+ ctype<pod_ushort>::
do_is(mask, char_type) const { return true; }
template<>
- const pod_type*
- ctype<pod_type>::
+ const pod_ushort*
+ ctype<pod_ushort>::
do_is(const char_type* __lo, const char_type*, mask*) const
{ return __lo; }
template<>
- const pod_type*
- ctype<pod_type>::
+ const pod_ushort*
+ ctype<pod_ushort>::
do_scan_is(mask, const char_type* __lo, const char_type*) const
{ return __lo; }
template<>
- const pod_type*
- ctype<pod_type>::
+ const pod_ushort*
+ ctype<pod_ushort>::
do_scan_not(mask, const char_type* __lo, const char_type*) const
{ return __lo; }
template<>
- pod_type
- ctype<pod_type>::
+ pod_ushort
+ ctype<pod_ushort>::
do_toupper(char_type __c) const
{ return __c; }
template<>
- const pod_type*
- ctype<pod_type>::
+ const pod_ushort*
+ ctype<pod_ushort>::
do_toupper(char_type*, const char_type* __hi) const
{ return __hi; }
template<>
- pod_type
- ctype<pod_type>::
+ pod_ushort
+ ctype<pod_ushort>::
do_tolower(char_type __c) const
{ return __c; }
template<>
- const pod_type*
- ctype<pod_type>::
+ const pod_ushort*
+ ctype<pod_ushort>::
do_tolower(char_type*, const char_type* __hi) const
{ return __hi; }
template<>
- pod_type
- ctype<pod_type>::
+ pod_ushort
+ ctype<pod_ushort>::
do_widen(char __c) const
{
char_type ret = { value_type(__c) };
@@ -101,7 +103,7 @@ namespace std
template<>
const char*
- ctype<pod_type>::
+ ctype<pod_ushort>::
do_widen(const char* __lo, const char* __hi, char_type* __dest) const
{
while (__lo < __hi)
@@ -115,14 +117,14 @@ namespace std
template<>
char
- ctype<pod_type>::
+ ctype<pod_ushort>::
do_narrow(char_type __wc, char) const
{ return static_cast<char>(__wc.value); }
template<>
- const pod_type*
- ctype<pod_type>::
- do_narrow(const pod_type* __lo, const pod_type* __hi,
+ const pod_ushort*
+ ctype<pod_ushort>::
+ do_narrow(const pod_ushort* __lo, const pod_ushort* __hi,
char, char* __dest) const
{
while (__lo < __hi)
@@ -135,14 +137,14 @@ namespace std
}
template<>
- ctype<pod_type>::~ctype() { }
+ ctype<pod_ushort>::~ctype() { }
template<>
void
- numpunct<pod_type>::_M_initialize_numpunct(__c_locale)
+ numpunct<pod_ushort>::_M_initialize_numpunct(__c_locale)
{
if (!_M_data)
- _M_data = new __numpunct_cache<pod_type>;
+ _M_data = new __numpunct_cache<pod_ushort>;
_M_data->_M_grouping = "";
_M_data->_M_use_grouping = false;
@@ -155,33 +157,33 @@ namespace std
value_type v = __num_base::_S_atoms_out[i];
_M_data->_M_atoms_out[i].value = v;
}
- _M_data->_M_atoms_out[__num_base::_S_oend] = pod_type();
+ _M_data->_M_atoms_out[__num_base::_S_oend] = pod_ushort();
for (size_t j = 0; j < __num_base::_S_iend; ++j)
_M_data->_M_atoms_in[j].value = value_type(__num_base::_S_atoms_in[j]);
- _M_data->_M_atoms_in[__num_base::_S_iend] = pod_type();
+ _M_data->_M_atoms_in[__num_base::_S_iend] = pod_ushort();
// "true"
- pod_type* __truename = new pod_type[4 + 1];
+ pod_ushort* __truename = new pod_ushort[4 + 1];
__truename[0].value = value_type('t');
__truename[1].value = value_type('r');
__truename[2].value = value_type('u');
__truename[3].value = value_type('e');
- __truename[4] = pod_type();
+ __truename[4] = pod_ushort();
_M_data->_M_truename = __truename;
// "false"
- pod_type* __falsename = new pod_type[5 + 1];
+ pod_ushort* __falsename = new pod_ushort[5 + 1];
__falsename[0].value = value_type('f');
__falsename[1].value = value_type('a');
__falsename[2].value = value_type('l');
__falsename[3].value = value_type('s');
__falsename[4].value = value_type('e');
- __falsename[5] = pod_type();
+ __falsename[5] = pod_ushort();
_M_data->_M_falsename = __falsename;
}
template<>
- numpunct<pod_type>::~numpunct()
+ numpunct<pod_ushort>::~numpunct()
{ delete _M_data; }
} // namespace std
diff --git a/libstdc++-v3/testsuite/testsuite_character.h b/libstdc++-v3/testsuite/testsuite_character.h
index dff10989e5e..2e1e433d910 100644
--- a/libstdc++-v3/testsuite/testsuite_character.h
+++ b/libstdc++-v3/testsuite/testsuite_character.h
@@ -40,176 +40,78 @@
namespace __gnu_test
{
- // Character type
- struct character
+ struct pod_int
{
- unsigned char val;
-
- static character from_char(char c)
- {
- character ret;
- ret.val = c;
- return ret;
- }
+ int value;
};
-
+
+ inline bool
+ operator==(const pod_int& lhs, const pod_int& rhs)
+ { return lhs.value == rhs.value; }
+
inline bool
- operator==(const character& lhs, const character& rhs)
- { return lhs.val == rhs.val; }
+ operator<(const pod_int& lhs, const pod_int& rhs)
+ { return lhs.value < rhs.value; }
- // State type.
- struct conversion_state
+ struct pod_state
{
- unsigned int state;
+ unsigned long value;
};
- // Test data types.
- struct pod_char
- {
- unsigned char c;
- };
+ inline bool
+ operator==(const pod_state& lhs, const pod_state& rhs)
+ { return lhs.value == rhs.value; }
inline bool
- operator==(const pod_char& lhs, const pod_char& rhs)
- { return lhs.c == rhs.c; }
-
- struct pod_int
- {
- int i;
- };
-
- struct state
- {
- unsigned long l;
- unsigned long l2;
- };
+ operator<(const pod_state& lhs, const pod_state& rhs)
+ { return lhs.value < rhs.value; }
- typedef unsigned short value_type;
- typedef unsigned int int_type;
- typedef __gnu_cxx::character<value_type, int_type> pod_type;
-}; // namespace __gnu_test
+ // Alternate character types.
+ using __gnu_cxx::character;
+ typedef character<unsigned char, pod_int, pod_state> pod_char;
+ typedef character<unsigned char, unsigned int, pod_state> pod_uchar;
+ typedef character<unsigned short, unsigned int> pod_ushort;
-namespace std
-{
- // A std::char_traits specialization. Meets the additional
- // requirements for basic_filebuf.
+ // Specializations.
+ // pod_char
template<>
- struct char_traits<__gnu_test::character>
- {
- typedef __gnu_test::character char_type;
- typedef unsigned int int_type;
- typedef __gnu_test::conversion_state state_type;
- typedef streamoff off_type;
- typedef fpos<state_type> pos_type;
-
- static void
- assign(char_type& c1, const char_type& c2)
- { c1 = c2; }
-
- static bool
- eq(const char_type& c1, const char_type& c2)
- { return c1.val == c2.val; }
-
- static bool
- lt(const char_type& c1, const char_type& c2)
- { return c1.val < c2.val; }
-
- static int
- compare(const char_type* s1, const char_type* s2, size_t n)
+ template<typename V2>
+ inline pod_char::char_type
+ pod_char::char_type::from(const V2& v)
{
- for (size_t i = 0; i < n; ++i)
- {
- if (lt(s1[i], s2[i]))
- return -1;
- else if (lt(s2[i], s1[i]))
- return 1;
- }
- return 0;
- }
-
- static size_t
- length(const char_type* s)
- {
- size_t n = 0;
- while (!eq(s[n], char_type()))
- ++n;
- return n;
- }
-
- static const char_type*
- find(const char_type* s, size_t n, const char_type& a)
- {
- for (size_t i = 0; i < n; ++i)
- {
- if (eq(s[i], a))
- return s + i;
- }
- return NULL;
- }
-
- static char_type*
- move(char_type* s1, const char_type* s2, size_t n)
- {
- if (s1 > s2)
- {
- for (size_t i = 0; i < n; ++i)
- assign(s1[n - i - 1], s2[n - i - 1]);
- }
- else
- {
- for (size_t i = 0; i < n; ++i)
- assign(s1[i], s2[i]);
- }
- return s1;
- }
-
- static char_type*
- copy(char_type* s1, const char_type* s2, size_t n)
- {
- for (size_t i = 0; i < n; ++i)
- assign(s1[i], s2[i]);
- return s1;
- }
-
- static char_type*
- assign(char_type* s, size_t n, char_type a)
- {
- for (size_t i = 0; i < n; ++i)
- assign(s[i], a);
- return s;
+ char_type ret = { static_cast<value_type>(v.value) };
+ return ret;
}
- static int_type
- not_eof(const int_type& c)
+ template<>
+ template<typename V2>
+ inline V2
+ pod_char::char_type::to(const char_type& c)
{
- if (eq_int_type(c, eof()))
- return 0;
- return c;
+ V2 ret = { c.value };
+ return ret;
}
-
- // Note non-trivial conversion to maximize chance of catching bugs
- static char_type
- to_char_type(const int_type& c)
+
+ // pod_uchar
+ template<>
+ template<typename V2>
+ inline pod_uchar::char_type
+ pod_uchar::char_type::from(const V2& v)
{
char_type ret;
- ret.val = (c >> 5);
+ ret.value = (v >> 5);
return ret;
}
- static int_type
- to_int_type(const char_type& c)
- {
- return c.val << 5;
- }
-
- static bool
- eq_int_type(const int_type& c1, const int_type& c2)
- { return c1 == c2; }
-
- static int_type eof()
- { return 0xf; }
- };
+ template<>
+ template<typename V2>
+ inline V2
+ pod_uchar::char_type::to(const char_type& c)
+ { return static_cast<V2>(c.value << 5); }
+}; // namespace __gnu_test
+namespace std
+{
// codecvt specialization
//
// The conversion performed by the specialization is not supposed to
@@ -227,58 +129,21 @@ namespace std
// state. Output those bytes.
// 3. tmp becomes the new value of state.
template<>
- class codecvt<__gnu_test::character, char, __gnu_test::conversion_state>
- : public locale::facet, public codecvt_base
+ class codecvt<__gnu_test::pod_uchar, char, __gnu_test::pod_state>
+ : public __codecvt_abstract_base<__gnu_test::pod_uchar, char,
+ __gnu_test::pod_state>
{
public:
- typedef __gnu_test::character intern_type;
- typedef char extern_type;
- typedef __gnu_test::conversion_state state_type;
-
- explicit codecvt(size_t refs = 0)
- : locale::facet(refs)
+ typedef codecvt_base::result result;
+ typedef __gnu_test::pod_uchar intern_type;
+ typedef char extern_type;
+ typedef __gnu_test::pod_state state_type;
+ typedef __codecvt_abstract_base<intern_type, extern_type, state_type>
+ base_type;
+
+ explicit codecvt(size_t refs = 0) : base_type(refs)
{ }
- result
- out(state_type& state, const intern_type* from,
- const intern_type* from_end, const intern_type*& from_next,
- extern_type* to, extern_type* to_limit, extern_type*& to_next) const
- {
- return do_out(state, from, from_end, from_next,
- to, to_limit, to_next);
- }
-
- result
- unshift(state_type& state, extern_type* to, extern_type* to_limit,
- extern_type*& to_next) const
- { return do_unshift(state, to, to_limit, to_next); }
-
- result
- in(state_type& state, const extern_type* from,
- const extern_type* from_end, const extern_type*& from_next,
- intern_type* to, intern_type* to_limit, intern_type*& to_next) const
- {
- return do_in(state, from, from_end, from_next,
- to, to_limit, to_next);
- }
-
- int
- encoding() const throw()
- { return do_encoding(); }
-
- bool
- always_noconv() const throw()
- { return do_always_noconv(); }
-
- int
- length(state_type& state, const extern_type* from,
- const extern_type* end, size_t max) const
- { return do_length(state, from, end, max); }
-
- int
- max_length() const throw()
- { return do_max_length(); }
-
static locale::id id;
protected:
@@ -293,8 +158,8 @@ namespace std
{
while (from < from_end && to < to_limit)
{
- unsigned char tmp = (state.state ^ from->val);
- if (state.state & 0x8)
+ unsigned char tmp = (state.value ^ from->value);
+ if (state.value & 0x8)
{
if (to >= to_limit - 2)
break;
@@ -309,7 +174,7 @@ namespace std
*to++ = (tmp & 0xf);
*to++ = ((tmp >> 4) & 0xf);
}
- state.state = tmp;
+ state.value = tmp;
++from;
}
@@ -330,13 +195,13 @@ namespace std
if (c & 0xc0)
{
// Unshift sequence
- state.state &= c;
+ state.value &= c;
++from;
continue;
}
unsigned char tmp;
- if (state.state & 0x8)
+ if (state.value & 0x8)
{
if (from >= from_end - 2)
break;
@@ -351,8 +216,8 @@ namespace std
tmp = (*from++ & 0xf);
tmp |= ((*from++ << 4) & 0xf0);
}
- to->val = (tmp ^ state.state);
- state.state = tmp;
+ to->value = (tmp ^ state.value);
+ state.value = tmp;
++to;
}
@@ -368,7 +233,7 @@ namespace std
for (unsigned int i = 0; i < CHAR_BIT; ++i)
{
unsigned int mask = (1 << i);
- if (state.state & mask)
+ if (state.value & mask)
{
if (to == to_limit)
{
@@ -376,13 +241,13 @@ namespace std
return partial;
}
- state.state &= ~mask;
+ state.value &= ~mask;
*to++ = static_cast<unsigned char>(~mask);
}
}
to_next = to;
- return state.state == 0 ? ok : error;
+ return state.value == 0 ? ok : error;
}
virtual int
@@ -404,13 +269,13 @@ namespace std
if (c & 0xc0)
{
// Unshift sequence
- state.state &= c;
+ state.value &= c;
++from;
continue;
}
unsigned char tmp;
- if (state.state & 0x8)
+ if (state.value & 0x8)
{
if (from >= end - 2)
break;
@@ -425,7 +290,7 @@ namespace std
tmp = (*from++ & 0xf);
tmp |= ((*from++ << 4) & 0xf0);
}
- state.state = tmp;
+ state.value = tmp;
--max;
}
return from - beg;
@@ -438,97 +303,78 @@ namespace std
{ return 11; }
};
-
- // A std::char_traits specialization with POD types for char_type,
- // int_type, and state_type.
template<>
- struct char_traits<__gnu_test::pod_char>
+ class ctype<__gnu_test::pod_uchar>
+ : public __ctype_abstract_base<__gnu_test::pod_uchar>
{
- typedef __gnu_test::pod_char char_type;
- typedef __gnu_test::pod_int int_type;
- typedef __gnu_test::state state_type;
- typedef fpos<state_type> pos_type;
- typedef streamoff off_type;
-
- static void
- assign(char_type& c1, const char_type& c2)
- { c1.c = c2.c; }
-
- static bool
- eq(const char_type& c1, const char_type& c2)
- { return c1.c == c2.c; }
-
- static bool
- lt(const char_type& c1, const char_type& c2)
- { return c1.c < c2.c; }
-
- static int
- compare(const char_type* s1, const char_type* s2, size_t n)
- { return memcmp(s1, s2, n); }
-
- static size_t
- length(const char_type* s)
- { return strlen(reinterpret_cast<const char*>(s)); }
-
- static const char_type*
- find(const char_type* s, size_t n, const char_type& a)
- { return static_cast<const char_type*>(memchr(s, a.c, n)); }
-
- static char_type*
- move(char_type* s1, const char_type* s2, size_t n)
- {
- memmove(s1, s2, n);
- return s1;
- }
+ public:
+ typedef __gnu_test::pod_uchar char_type;
- static char_type*
- copy(char_type* s1, const char_type* s2, size_t n)
- {
- memcpy(s1, s2, n);
- return s1;
- }
+ explicit ctype(size_t refs = 0)
+ : __ctype_abstract_base<__gnu_test::pod_uchar>(refs) { }
- static char_type*
- assign(char_type* s, size_t n, char_type a)
- {
- memset(s, a.c, n);
- return s;
- }
+ static locale::id id;
- static char_type
- to_char_type(const int_type& c)
- {
- char_type ret;
- ret.c = static_cast<unsigned char>(c.i);
- return ret;
- }
+ protected:
+ ~ctype()
+ { }
- static int_type
- to_int_type(const char_type& c)
+ virtual bool
+ do_is(mask m, char_type c) const
+ { return false; }
+
+ virtual const char_type*
+ do_is(const char_type* low, const char_type* high, mask* vec) const
{
- int_type ret;
- ret.i = c.c;
- return ret;
+ fill_n(vec, high - low, mask());
+ return high;
}
- static bool
- eq_int_type(const int_type& c1, const int_type& c2)
- { return c1.i == c2.i; }
+ virtual const char_type*
+ do_scan_is(mask m, const char_type* low, const char_type* high) const
+ { return high; }
+
+ virtual const char_type*
+ do_scan_not(mask m, const char_type* low, const char_type* high) const
+ { return low; }
+
+ virtual char_type
+ do_toupper(char_type c) const
+ { return c; }
- static int_type
- eof()
+ virtual const char_type*
+ do_toupper(char_type* low, const char_type* high) const
+ { return high; }
+
+ virtual char_type
+ do_tolower(char_type c) const
+ { return c; }
+
+ virtual const char_type*
+ do_tolower(char_type* low, const char_type* high) const
+ { return high; }
+
+ virtual char_type
+ do_widen(char c) const
+ { return __gnu_test::pod_uchar::from<char>(c); }
+
+ virtual const char*
+ do_widen(const char* low, const char* high, char_type* dest) const
{
- int_type n;
- n.i = -10;
- return n;
+ transform(low, high, dest, &__gnu_test::pod_uchar::from<char>);
+ return high;
}
- static int_type
- not_eof(const int_type& c)
+ virtual char
+ do_narrow(char_type, char dfault) const
+ { return dfault; }
+
+ virtual const char_type*
+ do_narrow(const char_type* low, const char_type* high,
+ char dfault, char* dest) const
{
- if (eq_int_type(c, eof()))
- return int_type();
- return c;
+ fill_n(dest, high - low, dfault);
+ return high;
}
};
} // namespace std