OSDN Git Service

Add NIOS2 support. Code from SourceyG++.
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / config / os / mingw32 / ctype_noninline.h
1 // Locale support -*- C++ -*-
2
3 // Copyright (C) 1997, 1998, 1999, 2000, 2002, 2007, 2009
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.
11
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.
16
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.
20
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/>.
25
26 /** @file ctype_noninline.h
27  *  This is an internal header file, included by other library headers.
28  *  You should not attempt to use it directly.
29  */
30
31 //
32 // ISO C++ 14882: 22.1  Locales
33 //
34   
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.
38
39   const ctype_base::mask*
40   ctype<char>::classic_table() throw()
41   {
42     static const ctype_base::mask _S_classic_table[256] = 
43     {
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
181     };
182     return _S_classic_table;
183   }
184
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())  
190   { 
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;
195   }
196
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()) 
201   { 
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;
206   }
207
208   char
209   ctype<char>::do_toupper(char __c) const
210   { return (this->is(ctype_base::lower, __c) ? (__c - 'a' + 'A') : __c); }
211
212   const char*
213   ctype<char>::do_toupper(char* __low, const char* __high) const
214   {
215     while (__low < __high)
216       {
217         *__low = this->do_toupper(*__low);
218         ++__low;
219       }
220     return __high;
221   }
222
223   char
224   ctype<char>::do_tolower(char __c) const
225   { return (this->is(ctype_base::upper, __c) ? (__c - 'A' + 'a') : __c); }
226
227   const char* 
228   ctype<char>::do_tolower(char* __low, const char* __high) const
229   {
230     while (__low < __high)
231       {
232         *__low = this->do_tolower(*__low);
233         ++__low;
234       }
235     return __high;
236   }
237
238
239
240