gcc/libstdc++-v3/testsuite/testsuite_character.cc
Benjamin Kosnik 821503dbd6 pod_char_traits.h (__gnu_cxx::character): Add char_type.
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.

From-SVN: r98165
2005-04-15 02:06:26 +00:00

190 lines
5.3 KiB
C++

// -*- C++ -*-
// Utility subroutines for the C++ library testsuite.
//
// 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
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
//
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
// templates or use macros or inline functions from this file, or you compile
// this file and link it with other files to produce an executable, this
// file does not by itself cause the resulting executable to be covered by
// the GNU General Public License. This exception does not however
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
#include <testsuite_character.h>
namespace std
{
locale::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::pod_ushort;
typedef pod_ushort::value_type value_type;
template<>
bool
ctype<pod_ushort>::
do_is(mask, char_type) const { return true; }
template<>
const pod_ushort*
ctype<pod_ushort>::
do_is(const char_type* __lo, const char_type*, mask*) const
{ return __lo; }
template<>
const pod_ushort*
ctype<pod_ushort>::
do_scan_is(mask, const char_type* __lo, const char_type*) const
{ return __lo; }
template<>
const pod_ushort*
ctype<pod_ushort>::
do_scan_not(mask, const char_type* __lo, const char_type*) const
{ return __lo; }
template<>
pod_ushort
ctype<pod_ushort>::
do_toupper(char_type __c) const
{ return __c; }
template<>
const pod_ushort*
ctype<pod_ushort>::
do_toupper(char_type*, const char_type* __hi) const
{ return __hi; }
template<>
pod_ushort
ctype<pod_ushort>::
do_tolower(char_type __c) const
{ return __c; }
template<>
const pod_ushort*
ctype<pod_ushort>::
do_tolower(char_type*, const char_type* __hi) const
{ return __hi; }
template<>
pod_ushort
ctype<pod_ushort>::
do_widen(char __c) const
{
char_type ret = { value_type(__c) };
return ret;
}
template<>
const char*
ctype<pod_ushort>::
do_widen(const char* __lo, const char* __hi, char_type* __dest) const
{
while (__lo < __hi)
{
*__dest = this->do_widen(*__lo);
++__lo;
++__dest;
}
return __hi;
}
template<>
char
ctype<pod_ushort>::
do_narrow(char_type __wc, char) const
{ return static_cast<char>(__wc.value); }
template<>
const pod_ushort*
ctype<pod_ushort>::
do_narrow(const pod_ushort* __lo, const pod_ushort* __hi,
char, char* __dest) const
{
while (__lo < __hi)
{
*__dest = this->do_narrow(*__lo, char());
++__lo;
++__dest;
}
return __hi;
}
template<>
ctype<pod_ushort>::~ctype() { }
template<>
void
numpunct<pod_ushort>::_M_initialize_numpunct(__c_locale)
{
if (!_M_data)
_M_data = new __numpunct_cache<pod_ushort>;
_M_data->_M_grouping = "";
_M_data->_M_use_grouping = false;
_M_data->_M_decimal_point.value = value_type('.');
_M_data->_M_thousands_sep.value = value_type(',');
for (size_t i = 0; i < __num_base::_S_oend; ++i)
{
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_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_ushort();
// "true"
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_ushort();
_M_data->_M_truename = __truename;
// "false"
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_ushort();
_M_data->_M_falsename = __falsename;
}
template<>
numpunct<pod_ushort>::~numpunct()
{ delete _M_data; }
} // namespace std