Install gcc-4.4.0-tdm-1-core-2.tar.gz
[msysgit.git] / mingw / lib / gcc / mingw32 / 4.3.3 / include / c++ / mingw32 / bits / ctype_noninline.h
blobb7b0c2969b153205ca02b66ead40e8ca7b6cc451
1 // Locale support -*- C++ -*-
3 // Copyright (C) 1997, 1998, 1999, 2000, 2002, 2007
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 2, 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 // You should have received a copy of the GNU General Public License along
18 // with this library; see the file COPYING. If not, write to the Free
19 // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
20 // USA.
22 // As a special exception, you may use this file as part of a free software
23 // library without restriction. Specifically, if other files instantiate
24 // templates or use macros or inline functions from this file, or you compile
25 // this file and link it with other files to produce an executable, this
26 // file does not by itself cause the resulting executable to be covered by
27 // the GNU General Public License. This exception does not however
28 // invalidate any other reasons why the executable file might be covered by
29 // the GNU General Public License.
31 /** @file ctype_noninline.h
32 * This is an internal header file, included by other library headers.
33 * You should not attempt to use it directly.
37 // ISO C++ 14882: 22.1 Locales
40 // The classic table used in libstdc++ is *not* the C _ctype table
41 // used by mscvrt, but is based on the ctype masks defined for libstdc++
42 // in ctype_base.h.
44 const ctype_base::mask*
45 ctype<char>::classic_table() throw()
47 static const ctype_base::mask _S_classic_table[256] =
49 cntrl /* null */,
50 cntrl /* ^A */,
51 cntrl /* ^B */,
52 cntrl /* ^C */,
53 cntrl /* ^D */,
54 cntrl /* ^E */,
55 cntrl /* ^F */,
56 cntrl /* ^G */,
57 cntrl /* ^H */,
58 ctype_base::mask(space | cntrl) /* tab */,
59 ctype_base::mask(space | cntrl) /* LF */,
60 ctype_base::mask(space | cntrl) /* ^K */,
61 ctype_base::mask(space | cntrl) /* FF */,
62 ctype_base::mask(space | cntrl) /* ^M */,
63 cntrl /* ^N */,
64 cntrl /* ^O */,
65 cntrl /* ^P */,
66 cntrl /* ^Q */,
67 cntrl /* ^R */,
68 cntrl /* ^S */,
69 cntrl /* ^T */,
70 cntrl /* ^U */,
71 cntrl /* ^V */,
72 cntrl /* ^W */,
73 cntrl /* ^X */,
74 cntrl /* ^Y */,
75 cntrl /* ^Z */,
76 cntrl /* esc */,
77 cntrl /* ^\ */,
78 cntrl /* ^] */,
79 cntrl /* ^^ */,
80 cntrl /* ^_ */,
81 ctype_base::mask(space | 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(punct | print) /* + */,
93 ctype_base::mask(punct | print) /* , */,
94 ctype_base::mask(punct | print) /* - */,
95 ctype_base::mask(punct | print) /* . */,
96 ctype_base::mask(punct | print) /* / */,
97 ctype_base::mask(digit | xdigit | print) /* 0 */,
98 ctype_base::mask(digit | xdigit | print) /* 1 */,
99 ctype_base::mask(digit | xdigit | print) /* 2 */,
100 ctype_base::mask(digit | xdigit | print) /* 3 */,
101 ctype_base::mask(digit | xdigit | print) /* 4 */,
102 ctype_base::mask(digit | xdigit | print) /* 5 */,
103 ctype_base::mask(digit | xdigit | print) /* 6 */,
104 ctype_base::mask(digit | xdigit | print) /* 7 */,
105 ctype_base::mask(digit | xdigit | print) /* 8 */,
106 ctype_base::mask(digit | xdigit | print) /* 9 */,
107 ctype_base::mask(punct | print) /* : */,
108 ctype_base::mask(punct | print) /* ; */,
109 ctype_base::mask(punct | print) /* < */,
110 ctype_base::mask(punct | print) /* = */,
111 ctype_base::mask(punct | print) /* > */,
112 ctype_base::mask(punct | print) /* ? */,
113 ctype_base::mask(punct | print) /* ! */,
114 ctype_base::mask(alpha | upper | xdigit | print) /* A */,
115 ctype_base::mask(alpha | upper | xdigit | print) /* B */,
116 ctype_base::mask(alpha | upper | xdigit | print) /* C */,
117 ctype_base::mask(alpha | upper | xdigit | print) /* D */,
118 ctype_base::mask(alpha | upper | xdigit | print) /* E */,
119 ctype_base::mask(alpha | upper | xdigit | print) /* F */,
120 ctype_base::mask(alpha | upper | print) /* G */,
121 ctype_base::mask(alpha | upper | print) /* H */,
122 ctype_base::mask(alpha | upper | print) /* I */,
123 ctype_base::mask(alpha | upper | print) /* J */,
124 ctype_base::mask(alpha | upper | print) /* K */,
125 ctype_base::mask(alpha | upper | print) /* L */,
126 ctype_base::mask(alpha | upper | print) /* M */,
127 ctype_base::mask(alpha | upper | print) /* N */,
128 ctype_base::mask(alpha | upper | print) /* O */,
129 ctype_base::mask(alpha | upper | print) /* P */,
130 ctype_base::mask(alpha | upper | print) /* Q */,
131 ctype_base::mask(alpha | upper | print) /* R */,
132 ctype_base::mask(alpha | upper | print) /* S */,
133 ctype_base::mask(alpha | upper | print) /* T */,
134 ctype_base::mask(alpha | upper | print) /* U */,
135 ctype_base::mask(alpha | upper | print) /* V */,
136 ctype_base::mask(alpha | upper | print) /* W */,
137 ctype_base::mask(alpha | upper | print) /* X */,
138 ctype_base::mask(alpha | upper | print) /* Y */,
139 ctype_base::mask(alpha | upper | print) /* Z */,
140 ctype_base::mask(punct | print) /* [ */,
141 ctype_base::mask(punct | print) /* \ */,
142 ctype_base::mask(punct | print) /* ] */,
143 ctype_base::mask(punct | print) /* ^ */,
144 ctype_base::mask(punct | print) /* _ */,
145 ctype_base::mask(punct | print) /* ` */,
146 ctype_base::mask(alpha | lower | xdigit | print) /* a */,
147 ctype_base::mask(alpha | lower | xdigit | print) /* b */,
148 ctype_base::mask(alpha | lower | xdigit | print) /* c */,
149 ctype_base::mask(alpha | lower | xdigit | print) /* d */,
150 ctype_base::mask(alpha | lower | xdigit | print) /* e */,
151 ctype_base::mask(alpha | lower | xdigit | print) /* f */,
152 ctype_base::mask(alpha | lower | print) /* g */,
153 ctype_base::mask(alpha | lower | print) /* h */,
154 ctype_base::mask(alpha | lower | print) /* i */,
155 ctype_base::mask(alpha | lower | print) /* j */,
156 ctype_base::mask(alpha | lower | print) /* k */,
157 ctype_base::mask(alpha | lower | print) /* l */,
158 ctype_base::mask(alpha | lower | print) /* m */,
159 ctype_base::mask(alpha | lower | print) /* n */,
160 ctype_base::mask(alpha | lower | print) /* o */,
161 ctype_base::mask(alpha | lower | print) /* p */,
162 ctype_base::mask(alpha | lower | print) /* q */,
163 ctype_base::mask(alpha | lower | print) /* r */,
164 ctype_base::mask(alpha | lower | print) /* s */,
165 ctype_base::mask(alpha | lower | print) /* t */,
166 ctype_base::mask(alpha | lower | print) /* u */,
167 ctype_base::mask(alpha | lower | print) /* v */,
168 ctype_base::mask(alpha | lower | print) /* w */,
169 ctype_base::mask(alpha | lower | print) /* x */,
170 ctype_base::mask(alpha | lower | print) /* y */,
171 ctype_base::mask(alpha | lower | print) /* x */,
172 ctype_base::mask(punct | print) /* { */,
173 ctype_base::mask(punct | print) /* | */,
174 ctype_base::mask(punct | print) /* } */,
175 ctype_base::mask(punct | print) /* ~ */,
176 cntrl /* del (0x7f)*/,
177 /* The next 128 entries are all 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,
181 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
182 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
183 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
184 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
185 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
187 return _S_classic_table;
190 ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
191 size_t __refs)
192 : facet(__refs), _M_del(__table != 0 && __del),
193 _M_toupper(NULL), _M_tolower(NULL),
194 _M_table(__table ? __table : classic_table())
196 memset(_M_widen, 0, sizeof(_M_widen));
197 _M_widen_ok = 0;
198 memset(_M_narrow, 0, sizeof(_M_narrow));
199 _M_narrow_ok = 0;
202 ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
203 : facet(__refs), _M_del(__table != 0 && __del),
204 _M_toupper(NULL), _M_tolower(NULL),
205 _M_table(__table ? __table : classic_table())
207 memset(_M_widen, 0, sizeof(_M_widen));
208 _M_widen_ok = 0;
209 memset(_M_narrow, 0, sizeof(_M_narrow));
210 _M_narrow_ok = 0;
213 char
214 ctype<char>::do_toupper(char __c) const
215 { return (this->is(ctype_base::lower, __c) ? (__c - 'a' + 'A') : __c); }
217 const char*
218 ctype<char>::do_toupper(char* __low, const char* __high) const
220 while (__low < __high)
222 *__low = this->do_toupper(*__low);
223 ++__low;
225 return __high;
228 char
229 ctype<char>::do_tolower(char __c) const
230 { return (this->is(ctype_base::upper, __c) ? (__c - 'A' + 'a') : __c); }
232 const char*
233 ctype<char>::do_tolower(char* __low, const char* __high) const
235 while (__low < __high)
237 *__low = this->do_tolower(*__low);
238 ++__low;
240 return __high;