1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Copyright (c) 1999
3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Silicon Graphics Computer Systems, Inc.
4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *
5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Copyright (c) 1999
6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Boris Fomitchev
7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *
8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * This material is provided "as is", with absolutely no warranty expressed
9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * or implied. Any use is at your own risk.
10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *
11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Permission to use or copy this software for any purpose is hereby granted
12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * without fee, provided the above notices are retained on all copies.
13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Permission to modify the code and to distribute modified code is granted,
14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * provided the above notices are retained, and a notice that the code was
15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * modified is included with the above copyright notice.
16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *
17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */
18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "stlport_prefix.h"
20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <algorithm>
22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <locale>
23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <functional>
24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "c_locale.h"
26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_BEGIN_NAMESPACE
28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//----------------------------------------------------------------------
30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// ctype<char>
31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// The classic table: static data members.
33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_STATIC_CONST_INIT_BUG) && !defined (_STLP_NO_STATIC_CONST_DEFINITION)
35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//*TY 02/25/2000 - added workaround for MPW compilers; they confuse on in-class static const
36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst size_t ctype<char>::table_size;
37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// This macro is specifically for platforms where isprint() relies
40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// on separate flag
41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst ctype_base::mask*
43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype<char>::classic_table() _STLP_NOTHROW {
44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  /* Ctype table for the ASCII character set. */
45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  static const ctype_base::mask _S_classic_table[table_size] = {
46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* null */,
47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^A */,
48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^B */,
49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^C */,
50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^D */,
51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^E */,
52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^F */,
53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^G */,
54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^H */,
55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(space | cntrl) /* tab */,
56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(space | cntrl) /* LF */,
57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(space | cntrl) /* ^K */,
58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(space | cntrl) /* FF */,
59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(space | cntrl) /* ^M */,
60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^N */,
61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^O */,
62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^P */,
63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^Q */,
64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^R */,
65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^S */,
66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^T */,
67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^U */,
68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^V */,
69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^W */,
70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^X */,
71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^Y */,
72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^Z */,
73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* esc */,
74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^\ */,
75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^] */,
76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^^ */,
77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* ^_ */,
78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(space | print) /*  */,
79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* ! */,
80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* " */,
81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* # */,
82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* $ */,
83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* % */,
84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* & */,
85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* ' */,
86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* ( */,
87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* ) */,
88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* * */,
89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* + */,
90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* , */,
91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* - */,
92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* . */,
93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* / */,
94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(digit | print | xdigit) /* 0 */,
95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(digit | print | xdigit) /* 1 */,
96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(digit | print | xdigit) /* 2 */,
97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(digit | print | xdigit) /* 3 */,
98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(digit | print | xdigit) /* 4 */,
99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(digit | print | xdigit) /* 5 */,
100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(digit | print | xdigit) /* 6 */,
101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(digit | print | xdigit) /* 7 */,
102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(digit | print | xdigit) /* 8 */,
103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(digit | print | xdigit) /* 9 */,
104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* : */,
105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* ; */,
106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* < */,
107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* = */,
108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* > */,
109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* ? */,
110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* ! */,
111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper | xdigit) /* A */,
112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper | xdigit) /* B */,
113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper | xdigit) /* C */,
114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper | xdigit) /* D */,
115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper | xdigit) /* E */,
116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper | xdigit) /* F */,
117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* G */,
118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* H */,
119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* I */,
120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* J */,
121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* K */,
122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* L */,
123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* M */,
124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* N */,
125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* O */,
126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* P */,
127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* Q */,
128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* R */,
129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* S */,
130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* T */,
131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* U */,
132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* V */,
133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* W */,
134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* X */,
135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* Y */,
136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | upper) /* Z */,
137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* [ */,
138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* \ */,
139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* ] */,
140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* ^ */,
141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* _ */,
142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* ` */,
143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower | xdigit) /* a */,
144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower | xdigit) /* b */,
145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower | xdigit) /* c */,
146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower | xdigit) /* d */,
147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower | xdigit) /* e */,
148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower | xdigit) /* f */,
149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* g */,
150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* h */,
151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* i */,
152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* j */,
153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* k */,
154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* l */,
155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* m */,
156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* n */,
157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* o */,
158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* p */,
159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* q */,
160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* r */,
161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* s */,
162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* t */,
163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* u */,
164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* v */,
165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* w */,
166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* x */,
167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* y */,
168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(alpha | print | lower) /* z */,
169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* { */,
170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* | */,
171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* } */,
172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(punct | print) /* ~ */,
173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    cntrl /* del (0x7f)*/,
174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    /* ASCII is a 7-bit code, so everything else is non-ASCII */
175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0),  ctype_base::mask(0),
176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0),  ctype_base::mask(0),
177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0),  ctype_base::mask(0),
178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0),  ctype_base::mask(0),
179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0),  ctype_base::mask(0),
180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0),  ctype_base::mask(0),
181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0),  ctype_base::mask(0),
182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0),  ctype_base::mask(0),
183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0),  ctype_base::mask(0),
184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0),  ctype_base::mask(0),
185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0),  ctype_base::mask(0),
186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0),  ctype_base::mask(0),
187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0),  ctype_base::mask(0),
188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0),  ctype_base::mask(0),
189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0),  ctype_base::mask(0),
190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0), ctype_base::mask(0),  ctype_base::mask(0)
191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  };
192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return _S_classic_table;
193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// For every c in the range 0 <= c < 256, _S_upper[c] is the
196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// uppercased version of c and _S_lower[c] is the lowercased
197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// version.  As before, these two tables assume the ASCII character
198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// set.
199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst unsigned char _S_upper[ctype<char>::table_size] =
201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst unsigned char _S_lower[ctype<char>::table_size] =
237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
251e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
252e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
253e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
254e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
255e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
256e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
257e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
259e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
261e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
263e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
264e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
265e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
266e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
267e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
268e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
269e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
270e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
271e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
272e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//An helper struct to check wchar_t index without generating warnings
273e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//under some compilers (gcc) because of a limited range of value
274e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//(when wchar_t is unsigned)
275e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <bool _IsSigned>
276e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _WCharIndexT;
277e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
278e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !(defined (__BORLANDC__) && !defined(__linux__)) && \
279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    !(defined (__GNUC__) && (defined (__MINGW32__) || defined (__CYGWIN__))) && \
280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    !defined (__ICL)
281e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_TEMPLATE_NULL
282e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _WCharIndexT<true> {
283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  static bool in_range(wchar_t c, size_t upperBound) {
284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    return c >= 0 && size_t(c) < upperBound;
285e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
286e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
287e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
288e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
289e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_TEMPLATE_NULL
290e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _WCharIndexT<false> {
291e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  static bool in_range(wchar_t c, size_t upperBound) {
292e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    return size_t(c) < upperBound;
293e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
294e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
295e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
296e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttypedef _WCharIndexT<wchar_t(-1) < 0> _WCharIndex;
297e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
298e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// Some helper functions used in ctype<>::scan_is and scan_is_not.
299e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
300e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Ctype_is_mask : public unary_function<char, bool> {
301e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ctype_base::mask _Mask;
302e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const ctype_base::mask* _M_table;
303e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
304e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _Ctype_is_mask(ctype_base::mask __m, const ctype_base::mask* __t) : _Mask(__m), _M_table(__t) {}
305e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  bool operator()(char __c) const { return (_M_table[(unsigned char) __c] & _Mask) != 0; }
306e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
307e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
308e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Ctype_not_mask : public unary_function<char, bool> {
309e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ctype_base::mask _Mask;
310e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const ctype_base::mask* _M_table;
311e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
312e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _Ctype_not_mask(ctype_base::mask __m, const ctype_base::mask* __t) : _Mask(__m), _M_table(__t) {}
313e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  bool operator()(char __c) const { return (_M_table[(unsigned char) __c] & _Mask) == 0; }
314e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
315e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
316e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype<char>::ctype(const ctype_base::mask * __tab, bool __del, size_t __refs) :
317e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  locale::facet(__refs),
318e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _M_ctype_table(__tab ? __tab : classic_table()),
319e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _M_delete(__tab && __del)
320e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{}
321e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
322e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype<char>::~ctype() {
323e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  if (_M_delete)
324e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    delete[] __CONST_CAST(ctype_base::mask *, _M_ctype_table);
325e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
326e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
327e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char*
328e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__DMC__)
329e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC
330e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
331e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype<char>::scan_is(ctype_base::mask  __m, const char* __low, const char* __high) const
332e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _STLP_STD::find_if(__low, __high, _Ctype_is_mask(__m, _M_ctype_table)); }
333e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
334e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char*
335e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__DMC__)
336e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLSPEC
337e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
338e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype<char>::scan_not(ctype_base::mask  __m, const char* __low, const char* __high) const
339e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _STLP_STD::find_if(__low, __high, _Ctype_not_mask(__m, _M_ctype_table)); }
340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar ctype<char>::do_toupper(char __c) const
342e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return (char) _S_upper[(unsigned char) __c]; }
343e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar ctype<char>::do_tolower(char __c) const
344e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return (char) _S_lower[(unsigned char) __c]; }
345e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
346e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char* ctype<char>::do_toupper(char* __low, const char* __high) const {
347e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  for ( ; __low < __high; ++__low)
348e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    *__low = (char) _S_upper[(unsigned char) *__low];
349e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return __high;
350e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
351e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char* ctype<char>::do_tolower(char* __low, const char* __high) const {
352e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  for ( ; __low < __high; ++__low)
353e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    *__low = (char) _S_lower[(unsigned char) *__low];
354e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return __high;
355e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
356e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
357e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar
358e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype<char>::do_widen(char __c) const { return __c; }
359e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
360e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char*
361e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype<char>::do_widen(const char* __low, const char* __high,
362e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                      char* __to) const {
363e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _STLP_PRIV __copy_trivial(__low, __high, __to);
364e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return __high;
365e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
366e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar
367e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype<char>::do_narrow(char __c, char /* dfault */ ) const { return __c; }
368e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char*
369e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype<char>::do_narrow(const char* __low, const char* __high,
370e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                       char /* dfault */, char* __to) const {
371e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _STLP_PRIV __copy_trivial(__low, __high, __to);
372e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return __high;
373e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
374e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
375e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
376e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_WCHAR_T)
377e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
378e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Ctype_w_is_mask : public unary_function<wchar_t, bool> {
379e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ctype_base::mask M;
380e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const ctype_base::mask* table;
381e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
382e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _Ctype_w_is_mask(ctype_base::mask m, const ctype_base::mask* t)
383e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    : M(m), table(t) {}
384e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  bool operator()(wchar_t c) const
385e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  { return _WCharIndex::in_range(c, ctype<char>::table_size) && (table[c] & M); }
386e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
387e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
388e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//----------------------------------------------------------------------
389e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// ctype<wchar_t>
390e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
391e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype<wchar_t>::~ctype() {}
392e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
393e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
394e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottbool ctype<wchar_t>::do_is(ctype_base::mask  m, wchar_t c) const {
395e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const ctype_base::mask * table = ctype<char>::classic_table();
396e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return _WCharIndex::in_range(c, ctype<char>::table_size) && (m & table[c]);
397e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
398e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
399e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t* ctype<wchar_t>::do_is(const wchar_t* low, const wchar_t* high,
400e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                     ctype_base::mask * vec) const {
401e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // boris : not clear if this is the right thing to do...
402e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const ctype_base::mask * table = ctype<char>::classic_table();
403e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  wchar_t c;
404e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  for ( ; low < high; ++low, ++vec) {
405e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    c = *low;
406e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    *vec = _WCharIndex::in_range(c, ctype<char>::table_size) ? table[c] : ctype_base::mask(0);
407e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
408e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return high;
409e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
410e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
411e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t*
412e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype<wchar_t>::do_scan_is(ctype_base::mask  m,
413e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                           const wchar_t* low, const wchar_t* high) const {
414e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return find_if(low, high, _Ctype_w_is_mask(m, ctype<char>::classic_table()));
415e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
416e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
417e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
418e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t*
419e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype<wchar_t>::do_scan_not(ctype_base::mask  m,
420e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                            const wchar_t* low, const wchar_t* high) const {
421e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return find_if(low, high, not1(_Ctype_w_is_mask(m, ctype<char>::classic_table())));
422e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
423e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
424e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwchar_t ctype<wchar_t>::do_toupper(wchar_t c) const {
425e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return _WCharIndex::in_range(c, ctype<char>::table_size) ? (wchar_t)_S_upper[c]
426e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                                           : c;
427e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
428e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
429e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t*
430e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype<wchar_t>::do_toupper(wchar_t* low, const wchar_t* high) const {
431e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  for ( ; low < high; ++low) {
432e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    wchar_t c = *low;
433e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    *low = _WCharIndex::in_range(c, ctype<char>::table_size) ? (wchar_t)_S_upper[c]
434e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                                             : c;
435e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
436e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return high;
437e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
438e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
439e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwchar_t ctype<wchar_t>::do_tolower(wchar_t c) const {
440e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return _WCharIndex::in_range(c, ctype<char>::table_size) ? (wchar_t)_S_lower[c]
441e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                                           : c;
442e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
443e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
444e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t*
445e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype<wchar_t>::do_tolower(wchar_t* low, const wchar_t* high) const {
446e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  for ( ; low < high; ++low) {
447e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    wchar_t c = *low;
448e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    *low = _WCharIndex::in_range(c, ctype<char>::table_size) ? (wchar_t)_S_lower[c]
449e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                                             : c;
450e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
451e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return high;
452e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
453e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
454e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwchar_t ctype<wchar_t>::do_widen(char c) const {
455e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return (wchar_t)(unsigned char)c;
456e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
457e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
458e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char*
459e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottctype<wchar_t>::do_widen(const char* low, const char* high,
460e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                         wchar_t* dest) const {
461e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  while (low != high)
462e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    *dest++ = (wchar_t)(unsigned char)*low++;
463e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return high;
464e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
465e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
466e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar ctype<wchar_t>::do_narrow(wchar_t c, char dfault) const
467e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return (unsigned char)c == c ? (char)c : dfault; }
468e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
469e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t* ctype<wchar_t>::do_narrow(const wchar_t* low,
470e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                         const wchar_t* high,
471e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                                         char dfault, char* dest) const {
472e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  while (low != high) {
473e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    wchar_t c = *low++;
474e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    *dest++ = (unsigned char)c == c ? (char)c : dfault;
475e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
476e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
477e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return high;
478e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
479e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
480e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif
481e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_END_NAMESPACE
482e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
483e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// Local Variables:
484e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// mode:C++
485e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// End:
486e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
487