Update Copyright years for files modified in 2010.
[official-gcc.git] / libstdc++-v3 / config / os / mingw32 / ctype_noninline.h
blob10b1fbc490cde668a9065a3680529a5916c1f713
1 // Locale support -*- C++ -*-
3 // Copyright (C) 1997, 1998, 1999, 2000, 2002, 2007, 2009, 2010
4 // Free Software Foundation, Inc.
5 //
6 // This file is part of the GNU ISO C++ Library. This library is free
7 // software; you can redistribute it and/or modify it under the
8 // terms of the GNU General Public License as published by the
9 // Free Software Foundation; either version 3, or (at your option)
10 // any later version.
12 // This library is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
17 // Under Section 7 of GPL version 3, you are granted additional
18 // permissions described in the GCC Runtime Library Exception, version
19 // 3.1, as published by the Free Software Foundation.
21 // You should have received a copy of the GNU General Public License and
22 // a copy of the GCC Runtime Library Exception along with this program;
23 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
24 // <http://www.gnu.org/licenses/>.
26 /** @file bits/ctype_noninline.h
27 * This is an internal header file, included by other library headers.
28 * Do not attempt to use it directly. @headername{locale}
32 // ISO C++ 14882: 22.1 Locales
35 // The classic table used in libstdc++ is *not* the C _ctype table
36 // used by mscvrt, but is based on the ctype masks defined for libstdc++
37 // in ctype_base.h.
39 const ctype_base::mask*
40 ctype<char>::classic_table() throw()
42 static const ctype_base::mask _S_classic_table[256] =
44 cntrl /* null */,
45 cntrl /* ^A */,
46 cntrl /* ^B */,
47 cntrl /* ^C */,
48 cntrl /* ^D */,
49 cntrl /* ^E */,
50 cntrl /* ^F */,
51 cntrl /* ^G */,
52 cntrl /* ^H */,
53 ctype_base::mask(space | cntrl) /* tab */,
54 ctype_base::mask(space | cntrl) /* LF */,
55 ctype_base::mask(space | cntrl) /* ^K */,
56 ctype_base::mask(space | cntrl) /* FF */,
57 ctype_base::mask(space | cntrl) /* ^M */,
58 cntrl /* ^N */,
59 cntrl /* ^O */,
60 cntrl /* ^P */,
61 cntrl /* ^Q */,
62 cntrl /* ^R */,
63 cntrl /* ^S */,
64 cntrl /* ^T */,
65 cntrl /* ^U */,
66 cntrl /* ^V */,
67 cntrl /* ^W */,
68 cntrl /* ^X */,
69 cntrl /* ^Y */,
70 cntrl /* ^Z */,
71 cntrl /* esc */,
72 cntrl /* ^\ */,
73 cntrl /* ^] */,
74 cntrl /* ^^ */,
75 cntrl /* ^_ */,
76 ctype_base::mask(space | print) /* */,
77 ctype_base::mask(punct | print) /* ! */,
78 ctype_base::mask(punct | print) /* " */,
79 ctype_base::mask(punct | print) /* # */,
80 ctype_base::mask(punct | print) /* $ */,
81 ctype_base::mask(punct | print) /* % */,
82 ctype_base::mask(punct | print) /* & */,
83 ctype_base::mask(punct | print) /* ' */,
84 ctype_base::mask(punct | print) /* ( */,
85 ctype_base::mask(punct | print) /* ) */,
86 ctype_base::mask(punct | print) /* * */,
87 ctype_base::mask(punct | print) /* + */,
88 ctype_base::mask(punct | print) /* , */,
89 ctype_base::mask(punct | print) /* - */,
90 ctype_base::mask(punct | print) /* . */,
91 ctype_base::mask(punct | print) /* / */,
92 ctype_base::mask(digit | xdigit | print) /* 0 */,
93 ctype_base::mask(digit | xdigit | print) /* 1 */,
94 ctype_base::mask(digit | xdigit | print) /* 2 */,
95 ctype_base::mask(digit | xdigit | print) /* 3 */,
96 ctype_base::mask(digit | xdigit | print) /* 4 */,
97 ctype_base::mask(digit | xdigit | print) /* 5 */,
98 ctype_base::mask(digit | xdigit | print) /* 6 */,
99 ctype_base::mask(digit | xdigit | print) /* 7 */,
100 ctype_base::mask(digit | xdigit | print) /* 8 */,
101 ctype_base::mask(digit | xdigit | print) /* 9 */,
102 ctype_base::mask(punct | print) /* : */,
103 ctype_base::mask(punct | print) /* ; */,
104 ctype_base::mask(punct | print) /* < */,
105 ctype_base::mask(punct | print) /* = */,
106 ctype_base::mask(punct | print) /* > */,
107 ctype_base::mask(punct | print) /* ? */,
108 ctype_base::mask(punct | print) /* ! */,
109 ctype_base::mask(alpha | upper | xdigit | print) /* A */,
110 ctype_base::mask(alpha | upper | xdigit | print) /* B */,
111 ctype_base::mask(alpha | upper | xdigit | print) /* C */,
112 ctype_base::mask(alpha | upper | xdigit | print) /* D */,
113 ctype_base::mask(alpha | upper | xdigit | print) /* E */,
114 ctype_base::mask(alpha | upper | xdigit | print) /* F */,
115 ctype_base::mask(alpha | upper | print) /* G */,
116 ctype_base::mask(alpha | upper | print) /* H */,
117 ctype_base::mask(alpha | upper | print) /* I */,
118 ctype_base::mask(alpha | upper | print) /* J */,
119 ctype_base::mask(alpha | upper | print) /* K */,
120 ctype_base::mask(alpha | upper | print) /* L */,
121 ctype_base::mask(alpha | upper | print) /* M */,
122 ctype_base::mask(alpha | upper | print) /* N */,
123 ctype_base::mask(alpha | upper | print) /* O */,
124 ctype_base::mask(alpha | upper | print) /* P */,
125 ctype_base::mask(alpha | upper | print) /* Q */,
126 ctype_base::mask(alpha | upper | print) /* R */,
127 ctype_base::mask(alpha | upper | print) /* S */,
128 ctype_base::mask(alpha | upper | print) /* T */,
129 ctype_base::mask(alpha | upper | print) /* U */,
130 ctype_base::mask(alpha | upper | print) /* V */,
131 ctype_base::mask(alpha | upper | print) /* W */,
132 ctype_base::mask(alpha | upper | print) /* X */,
133 ctype_base::mask(alpha | upper | print) /* Y */,
134 ctype_base::mask(alpha | upper | print) /* Z */,
135 ctype_base::mask(punct | print) /* [ */,
136 ctype_base::mask(punct | print) /* \ */,
137 ctype_base::mask(punct | print) /* ] */,
138 ctype_base::mask(punct | print) /* ^ */,
139 ctype_base::mask(punct | print) /* _ */,
140 ctype_base::mask(punct | print) /* ` */,
141 ctype_base::mask(alpha | lower | xdigit | print) /* a */,
142 ctype_base::mask(alpha | lower | xdigit | print) /* b */,
143 ctype_base::mask(alpha | lower | xdigit | print) /* c */,
144 ctype_base::mask(alpha | lower | xdigit | print) /* d */,
145 ctype_base::mask(alpha | lower | xdigit | print) /* e */,
146 ctype_base::mask(alpha | lower | xdigit | print) /* f */,
147 ctype_base::mask(alpha | lower | print) /* g */,
148 ctype_base::mask(alpha | lower | print) /* h */,
149 ctype_base::mask(alpha | lower | print) /* i */,
150 ctype_base::mask(alpha | lower | print) /* j */,
151 ctype_base::mask(alpha | lower | print) /* k */,
152 ctype_base::mask(alpha | lower | print) /* l */,
153 ctype_base::mask(alpha | lower | print) /* m */,
154 ctype_base::mask(alpha | lower | print) /* n */,
155 ctype_base::mask(alpha | lower | print) /* o */,
156 ctype_base::mask(alpha | lower | print) /* p */,
157 ctype_base::mask(alpha | lower | print) /* q */,
158 ctype_base::mask(alpha | lower | print) /* r */,
159 ctype_base::mask(alpha | lower | print) /* s */,
160 ctype_base::mask(alpha | lower | print) /* t */,
161 ctype_base::mask(alpha | lower | print) /* u */,
162 ctype_base::mask(alpha | lower | print) /* v */,
163 ctype_base::mask(alpha | lower | print) /* w */,
164 ctype_base::mask(alpha | lower | print) /* x */,
165 ctype_base::mask(alpha | lower | print) /* y */,
166 ctype_base::mask(alpha | lower | print) /* x */,
167 ctype_base::mask(punct | print) /* { */,
168 ctype_base::mask(punct | print) /* | */,
169 ctype_base::mask(punct | print) /* } */,
170 ctype_base::mask(punct | print) /* ~ */,
171 cntrl /* del (0x7f)*/,
172 /* The next 128 entries are all 0. */
173 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
174 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
175 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
176 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
177 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
178 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
179 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
180 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
182 return _S_classic_table;
185 ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
186 size_t __refs)
187 : facet(__refs), _M_del(__table != 0 && __del),
188 _M_toupper(NULL), _M_tolower(NULL),
189 _M_table(__table ? __table : classic_table())
191 memset(_M_widen, 0, sizeof(_M_widen));
192 _M_widen_ok = 0;
193 memset(_M_narrow, 0, sizeof(_M_narrow));
194 _M_narrow_ok = 0;
197 ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
198 : facet(__refs), _M_del(__table != 0 && __del),
199 _M_toupper(NULL), _M_tolower(NULL),
200 _M_table(__table ? __table : classic_table())
202 memset(_M_widen, 0, sizeof(_M_widen));
203 _M_widen_ok = 0;
204 memset(_M_narrow, 0, sizeof(_M_narrow));
205 _M_narrow_ok = 0;
208 char
209 ctype<char>::do_toupper(char __c) const
210 { return (this->is(ctype_base::lower, __c) ? (__c - 'a' + 'A') : __c); }
212 const char*
213 ctype<char>::do_toupper(char* __low, const char* __high) const
215 while (__low < __high)
217 *__low = this->do_toupper(*__low);
218 ++__low;
220 return __high;
223 char
224 ctype<char>::do_tolower(char __c) const
225 { return (this->is(ctype_base::upper, __c) ? (__c - 'A' + 'a') : __c); }
227 const char*
228 ctype<char>::do_tolower(char* __low, const char* __high) const
230 while (__low < __high)
232 *__low = this->do_tolower(*__low);
233 ++__low;
235 return __high;