3 // Utility subroutines for the C++ library testsuite.
5 // Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
7 // This file is part of the GNU ISO C++ Library. This library is free
8 // software; you can redistribute it and/or modify it under the
9 // terms of the GNU General Public License as published by the
10 // Free Software Foundation; either version 2, or (at your option)
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // You should have received a copy of the GNU General Public License along
19 // with this library; see the file COPYING. If not, write to the Free
20 // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
23 // As a special exception, you may use this file as part of a free software
24 // library without restriction. Specifically, if other files instantiate
25 // templates or use macros or inline functions from this file, or you compile
26 // this file and link it with other files to produce an executable, this
27 // file does not by itself cause the resulting executable to be covered by
28 // the GNU General Public License. This exception does not however
29 // invalidate any other reasons why the executable file might be covered by
30 // the GNU General Public License.
32 #include <testsuite_character.h>
37 codecvt
<__gnu_test::pod_uchar
, char, __gnu_test::pod_state
>::id
;
40 ctype
<__gnu_test::pod_uchar
>::id
;
43 numpunct
<__gnu_test::pod_uint
>::id
;
46 moneypunct
<__gnu_test::pod_uint
>::id
;
48 // Member specializations for the existing facet classes.
49 // NB: This isn't especially portable. Perhaps a better way would be
50 // to just specialize all of numpunct and ctype.
51 using __gnu_test::pod_ushort
;
52 typedef pod_ushort::value_type value_type
;
57 do_is(mask
, char_type
) const { return true; }
62 do_is(const char_type
* __lo
, const char_type
*, mask
*) const
68 do_scan_is(mask
, const char_type
* __lo
, const char_type
*) const
74 do_scan_not(mask
, const char_type
* __lo
, const char_type
*) const
80 do_toupper(char_type __c
) const
86 do_toupper(char_type
*, const char_type
* __hi
) const
92 do_tolower(char_type __c
) const
98 do_tolower(char_type
*, const char_type
* __hi
) const
104 do_widen(char __c
) const
106 char_type ret
= { value_type(__c
) };
113 do_widen(const char* __lo
, const char* __hi
, char_type
* __dest
) const
117 *__dest
= this->do_widen(*__lo
);
127 do_narrow(char_type __wc
, char) const
128 { return static_cast<char>(__wc
.value
); }
133 do_narrow(const pod_ushort
* __lo
, const pod_ushort
* __hi
,
134 char, char* __dest
) const
138 *__dest
= this->do_narrow(*__lo
, char());
146 ctype
<pod_ushort
>::~ctype() { }
150 numpunct
<pod_ushort
>::_M_initialize_numpunct(__c_locale
)
153 _M_data
= new __numpunct_cache
<pod_ushort
>;
155 _M_data
->_M_grouping
= "";
156 _M_data
->_M_use_grouping
= false;
158 _M_data
->_M_decimal_point
.value
= value_type('.');
159 _M_data
->_M_thousands_sep
.value
= value_type(',');
161 for (size_t i
= 0; i
< __num_base::_S_oend
; ++i
)
163 value_type v
= __num_base::_S_atoms_out
[i
];
164 _M_data
->_M_atoms_out
[i
].value
= v
;
166 _M_data
->_M_atoms_out
[__num_base::_S_oend
] = pod_ushort();
168 for (size_t j
= 0; j
< __num_base::_S_iend
; ++j
)
169 _M_data
->_M_atoms_in
[j
].value
= value_type(__num_base::_S_atoms_in
[j
]);
170 _M_data
->_M_atoms_in
[__num_base::_S_iend
] = pod_ushort();
173 pod_ushort
* __truename
= new pod_ushort
[4 + 1];
174 __truename
[0].value
= value_type('t');
175 __truename
[1].value
= value_type('r');
176 __truename
[2].value
= value_type('u');
177 __truename
[3].value
= value_type('e');
178 __truename
[4] = pod_ushort();
179 _M_data
->_M_truename
= __truename
;
182 pod_ushort
* __falsename
= new pod_ushort
[5 + 1];
183 __falsename
[0].value
= value_type('f');
184 __falsename
[1].value
= value_type('a');
185 __falsename
[2].value
= value_type('l');
186 __falsename
[3].value
= value_type('s');
187 __falsename
[4].value
= value_type('e');
188 __falsename
[5] = pod_ushort();
189 _M_data
->_M_falsename
= __falsename
;
193 numpunct
<pod_ushort
>::~numpunct()