]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/libstdc++-v3/contrib/libstdc++-v3-4.3.3/config/os/mingw32/ctype_noninline.h
update
[l4.git] / l4 / pkg / libstdc++-v3 / contrib / libstdc++-v3-4.3.3 / config / os / mingw32 / ctype_noninline.h
1 // Locale support -*- C++ -*-
2
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.
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 // 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.
21
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.
30
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.
34  */
35
36 //
37 // ISO C++ 14882: 22.1  Locales
38 //
39   
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.
43
44   const ctype_base::mask*
45   ctype<char>::classic_table() throw()
46   {
47     static const ctype_base::mask _S_classic_table[256] = 
48     {
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
186     };
187     return _S_classic_table;
188   }
189
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())  
195   { 
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;
200   }
201
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()) 
206   { 
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;
211   }
212
213   char
214   ctype<char>::do_toupper(char __c) const
215   { return (this->is(ctype_base::lower, __c) ? (__c - 'a' + 'A') : __c); }
216
217   const char*
218   ctype<char>::do_toupper(char* __low, const char* __high) const
219   {
220     while (__low < __high)
221       {
222         *__low = this->do_toupper(*__low);
223         ++__low;
224       }
225     return __high;
226   }
227
228   char
229   ctype<char>::do_tolower(char __c) const
230   { return (this->is(ctype_base::upper, __c) ? (__c - 'A' + 'a') : __c); }
231
232   const char* 
233   ctype<char>::do_tolower(char* __low, const char* __high) const
234   {
235     while (__low < __high)
236       {
237         *__low = this->do_tolower(*__low);
238         ++__low;
239       }
240     return __high;
241   }
242
243
244
245