]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/config/os/mingw32/ctype_configure_char.cc
840c47303121f6f979c15676d16b1458a1ba7741
[thirdparty/gcc.git] / libstdc++-v3 / config / os / mingw32 / ctype_configure_char.cc
1 // Locale support -*- C++ -*-
2
3 // Copyright (C) 2011-2017 Free Software Foundation, Inc.
4 //
5 // This file is part of the GNU ISO C++ Library. This library is free
6 // software; you can redistribute it and/or modify it under the
7 // terms of the GNU General Public License as published by the
8 // Free Software Foundation; either version 3, or (at your option)
9 // any later version.
10
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
15
16 // Under Section 7 of GPL version 3, you are granted additional
17 // permissions described in the GCC Runtime Library Exception, version
18 // 3.1, as published by the Free Software Foundation.
19
20 // You should have received a copy of the GNU General Public License and
21 // a copy of the GCC Runtime Library Exception along with this program;
22 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23 // <http://www.gnu.org/licenses/>.
24
25 /** @file ctype_configure_char.cc */
26
27 //
28 // ISO C++ 14882: 22.1 Locales
29 //
30
31 #include <locale>
32 #include <cstdlib>
33 #include <cstring>
34
35 namespace std _GLIBCXX_VISIBILITY(default)
36 {
37 _GLIBCXX_BEGIN_NAMESPACE_VERSION
38
39 // The classic table used in libstdc++ is *not* the C _ctype table
40 // used by mscvrt, but is based on the ctype masks defined for libstdc++
41 // in ctype_base.h.
42
43 const ctype_base::mask*
44 ctype<char>::classic_table() throw()
45 {
46 static const ctype_base::mask _S_classic_table[256] =
47 {
48 cntrl /* null */,
49 cntrl /* ^A */,
50 cntrl /* ^B */,
51 cntrl /* ^C */,
52 cntrl /* ^D */,
53 cntrl /* ^E */,
54 cntrl /* ^F */,
55 cntrl /* ^G */,
56 cntrl /* ^H */,
57 ctype_base::mask(space | cntrl | blank) /* tab */,
58 ctype_base::mask(space | cntrl) /* LF */,
59 ctype_base::mask(space | cntrl) /* ^K */,
60 ctype_base::mask(space | cntrl) /* FF */,
61 ctype_base::mask(space | cntrl) /* ^M */,
62 cntrl /* ^N */,
63 cntrl /* ^O */,
64 cntrl /* ^P */,
65 cntrl /* ^Q */,
66 cntrl /* ^R */,
67 cntrl /* ^S */,
68 cntrl /* ^T */,
69 cntrl /* ^U */,
70 cntrl /* ^V */,
71 cntrl /* ^W */,
72 cntrl /* ^X */,
73 cntrl /* ^Y */,
74 cntrl /* ^Z */,
75 cntrl /* esc */,
76 cntrl /* ^\ */,
77 cntrl /* ^] */,
78 cntrl /* ^^ */,
79 cntrl /* ^_ */,
80 ctype_base::mask(space | print | blank) /* */,
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(punct | print) /* , */,
93 ctype_base::mask(punct | print) /* - */,
94 ctype_base::mask(punct | print) /* . */,
95 ctype_base::mask(punct | print) /* / */,
96 ctype_base::mask(digit | xdigit | print) /* 0 */,
97 ctype_base::mask(digit | xdigit | print) /* 1 */,
98 ctype_base::mask(digit | xdigit | print) /* 2 */,
99 ctype_base::mask(digit | xdigit | print) /* 3 */,
100 ctype_base::mask(digit | xdigit | print) /* 4 */,
101 ctype_base::mask(digit | xdigit | print) /* 5 */,
102 ctype_base::mask(digit | xdigit | print) /* 6 */,
103 ctype_base::mask(digit | xdigit | print) /* 7 */,
104 ctype_base::mask(digit | xdigit | print) /* 8 */,
105 ctype_base::mask(digit | xdigit | print) /* 9 */,
106 ctype_base::mask(punct | print) /* : */,
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(alpha | upper | xdigit | print) /* A */,
114 ctype_base::mask(alpha | upper | xdigit | print) /* B */,
115 ctype_base::mask(alpha | upper | xdigit | print) /* C */,
116 ctype_base::mask(alpha | upper | xdigit | print) /* D */,
117 ctype_base::mask(alpha | upper | xdigit | print) /* E */,
118 ctype_base::mask(alpha | upper | xdigit | print) /* F */,
119 ctype_base::mask(alpha | upper | print) /* G */,
120 ctype_base::mask(alpha | upper | print) /* H */,
121 ctype_base::mask(alpha | upper | print) /* I */,
122 ctype_base::mask(alpha | upper | print) /* J */,
123 ctype_base::mask(alpha | upper | print) /* K */,
124 ctype_base::mask(alpha | upper | print) /* L */,
125 ctype_base::mask(alpha | upper | print) /* M */,
126 ctype_base::mask(alpha | upper | print) /* N */,
127 ctype_base::mask(alpha | upper | print) /* O */,
128 ctype_base::mask(alpha | upper | print) /* P */,
129 ctype_base::mask(alpha | upper | print) /* Q */,
130 ctype_base::mask(alpha | upper | print) /* R */,
131 ctype_base::mask(alpha | upper | print) /* S */,
132 ctype_base::mask(alpha | upper | print) /* T */,
133 ctype_base::mask(alpha | upper | print) /* U */,
134 ctype_base::mask(alpha | upper | print) /* V */,
135 ctype_base::mask(alpha | upper | print) /* W */,
136 ctype_base::mask(alpha | upper | print) /* X */,
137 ctype_base::mask(alpha | upper | print) /* Y */,
138 ctype_base::mask(alpha | upper | print) /* Z */,
139 ctype_base::mask(punct | print) /* [ */,
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(alpha | lower | xdigit | print) /* a */,
146 ctype_base::mask(alpha | lower | xdigit | print) /* b */,
147 ctype_base::mask(alpha | lower | xdigit | print) /* c */,
148 ctype_base::mask(alpha | lower | xdigit | print) /* d */,
149 ctype_base::mask(alpha | lower | xdigit | print) /* e */,
150 ctype_base::mask(alpha | lower | xdigit | print) /* f */,
151 ctype_base::mask(alpha | lower | print) /* g */,
152 ctype_base::mask(alpha | lower | print) /* h */,
153 ctype_base::mask(alpha | lower | print) /* i */,
154 ctype_base::mask(alpha | lower | print) /* j */,
155 ctype_base::mask(alpha | lower | print) /* k */,
156 ctype_base::mask(alpha | lower | print) /* l */,
157 ctype_base::mask(alpha | lower | print) /* m */,
158 ctype_base::mask(alpha | lower | print) /* n */,
159 ctype_base::mask(alpha | lower | print) /* o */,
160 ctype_base::mask(alpha | lower | print) /* p */,
161 ctype_base::mask(alpha | lower | print) /* q */,
162 ctype_base::mask(alpha | lower | print) /* r */,
163 ctype_base::mask(alpha | lower | print) /* s */,
164 ctype_base::mask(alpha | lower | print) /* t */,
165 ctype_base::mask(alpha | lower | print) /* u */,
166 ctype_base::mask(alpha | lower | print) /* v */,
167 ctype_base::mask(alpha | lower | print) /* w */,
168 ctype_base::mask(alpha | lower | print) /* x */,
169 ctype_base::mask(alpha | lower | print) /* y */,
170 ctype_base::mask(alpha | lower | print) /* x */,
171 ctype_base::mask(punct | print) /* { */,
172 ctype_base::mask(punct | print) /* | */,
173 ctype_base::mask(punct | print) /* } */,
174 ctype_base::mask(punct | print) /* ~ */,
175 cntrl /* del (0x7f)*/,
176 /* The next 128 entries are all 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,
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 };
186 return _S_classic_table;
187 }
188
189 ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
190 size_t __refs)
191 : facet(__refs), _M_del(__table != 0 && __del),
192 _M_toupper(NULL), _M_tolower(NULL),
193 _M_table(__table ? __table : classic_table())
194 {
195 memset(_M_widen, 0, sizeof(_M_widen));
196 _M_widen_ok = 0;
197 memset(_M_narrow, 0, sizeof(_M_narrow));
198 _M_narrow_ok = 0;
199 }
200
201 ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
202 : facet(__refs), _M_del(__table != 0 && __del),
203 _M_toupper(NULL), _M_tolower(NULL),
204 _M_table(__table ? __table : classic_table())
205 {
206 memset(_M_widen, 0, sizeof(_M_widen));
207 _M_widen_ok = 0;
208 memset(_M_narrow, 0, sizeof(_M_narrow));
209 _M_narrow_ok = 0;
210 }
211
212 char
213 ctype<char>::do_toupper(char __c) const
214 { return (this->is(ctype_base::lower, __c) ? (__c - 'a' + 'A') : __c); }
215
216 const char*
217 ctype<char>::do_toupper(char* __low, const char* __high) const
218 {
219 while (__low < __high)
220 {
221 *__low = this->do_toupper(*__low);
222 ++__low;
223 }
224 return __high;
225 }
226
227 char
228 ctype<char>::do_tolower(char __c) const
229 { return (this->is(ctype_base::upper, __c) ? (__c - 'A' + 'a') : __c); }
230
231 const char*
232 ctype<char>::do_tolower(char* __low, const char* __high) const
233 {
234 while (__low < __high)
235 {
236 *__low = this->do_tolower(*__low);
237 ++__low;
238 }
239 return __high;
240 }
241
242 _GLIBCXX_END_NAMESPACE_VERSION
243 } // namespace