ReactOS  0.4.13-dev-39-g8b6696f
_ctype.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 1999
3  * Silicon Graphics Computer Systems, Inc.
4  *
5  * Copyright (c) 1999
6  * Boris Fomitchev
7  *
8  * This material is provided "as is", with absolutely no warranty expressed
9  * or implied. Any use is at your own risk.
10  *
11  * Permission to use or copy this software for any purpose is hereby granted
12  * without fee, provided the above notices are retained on all copies.
13  * Permission to modify the code and to distribute modified code is granted,
14  * provided the above notices are retained, and a notice that the code was
15  * modified is included with the above copyright notice.
16  *
17  */
18 // WARNING: This is an internal header file, included by other C++
19 // standard library headers. You should not attempt to use this header
20 // file directly.
21 
22 #ifndef _STLP_INTERNAL_CTYPE_H
23 #define _STLP_INTERNAL_CTYPE_H
24 
25 #ifndef _STLP_C_LOCALE_H
26 # include <stl/c_locale.h>
27 #endif
28 
29 #ifndef _STLP_INTERNAL_LOCALE_H
30 # include <stl/_locale.h>
31 #endif
32 
33 #ifndef _STLP_INTERNAL_ALGOBASE_H
34 # include <stl/_algobase.h>
35 #endif
36 
38 
40 public:
41  enum mask {
44  cntrl = _Locale_CNTRL,
45  upper = _Locale_UPPER,
46  lower = _Locale_LOWER,
48  digit = _Locale_DIGIT,
49  punct = _Locale_PUNCT,
50  xdigit = _Locale_XDIGIT,
51  alnum = alpha | digit,
52  graph = alnum | punct
53  };
54 };
55 
56 // ctype<> template
57 
58 template <class charT> class ctype {};
59 template <class charT> class ctype_byname {};
60 
61 //ctype specializations
62 
65 #ifndef _STLP_NO_WCHAR_T
66 # ifdef _STLP_MSVC
67  typedef ctype<wchar_t> _Wctype;
68  friend _Wctype;
69 # else
70  friend class ctype<wchar_t>;
71 # endif
72 #endif
73 public:
74 
75  typedef char char_type;
76 
77  explicit ctype(const mask* __tab = 0, bool __del = false, size_t __refs = 0);
78  bool is(mask __m, char __c) const
79  { return ((*(_M_ctype_table+(unsigned char)__c)) & __m) != 0; }
80 
81  const char* is(const char* __low, const char* __high, mask* __vec) const {
82  for (const char* __p = __low;__p != __high; ++__p, ++__vec) {
83  *__vec = _M_ctype_table[(unsigned char)*__p];
84  }
85  return __high;
86  }
87 
88  const char* scan_is(mask __m, const char* __low, const char* __high) const;
89  const char* scan_not(mask __m, const char* __low, const char* __high) const;
90 
91  char (toupper)(char __c) const { return do_toupper(__c); }
92  const char* (toupper)(char* __low, const char* __high) const {
93  return do_toupper(__low, __high);
94  }
95 
96  char (tolower)(char __c) const { return do_tolower(__c); }
97  const char* (tolower)(char* __low, const char* __high) const {
98  return do_tolower(__low, __high);
99  }
100 
101  char widen(char __c) const { return do_widen(__c); }
102  const char* widen(const char* __low, const char* __high, char* __to) const {
103  return do_widen(__low, __high, __to);
104  }
105 
106  char narrow(char __c, char __dfault) const {
107  return do_narrow(__c, __dfault);
108  }
109  const char* narrow(const char* __low, const char* __high,
110  char __dfault, char* __to) const {
111  return do_narrow(__low, __high, __dfault, __to);
112  }
113 
115  _STLP_STATIC_CONSTANT(size_t, table_size = 256);
116 
117 protected:
118  const mask* table() const _STLP_NOTHROW { return _M_ctype_table; }
119  static const mask* _STLP_CALL classic_table() _STLP_NOTHROW;
120 
121  ~ctype();
122 
123  virtual char do_toupper(char __c) const;
124  virtual char do_tolower(char __c) const;
125  virtual const char* do_toupper(char* __low, const char* __high) const;
126  virtual const char* do_tolower(char* __low, const char* __high) const;
127  virtual char do_widen(char __c) const;
128  virtual const char* do_widen(const char* __low, const char* __high,
129  char* __to) const;
130  virtual char do_narrow(char __c, char /* dfault */ ) const;
131  virtual const char* do_narrow(const char* __low, const char* __high,
132  char /* dfault */, char* __to) const;
133 private:
134  struct _Is_mask {
136  _Is_mask(mask __x): __m(__x) {}
137  bool operator()(char __c) {return (__m & (unsigned char) __c) != 0;}
138  };
139 
140 protected:
142 private:
143  bool _M_delete;
144 };
145 
148  friend class _Locale_impl;
149 public:
150  explicit ctype_byname(const char*, size_t = 0);
151  ~ctype_byname();
152 
153  virtual char do_toupper(char __c) const;
154  virtual char do_tolower(char __c) const;
155 
156  virtual const char* do_toupper(char*, const char*) const;
157  virtual const char* do_tolower(char*, const char*) const;
158 
159 private:
161  : _M_ctype(__ctype)
162  { _M_init(); }
163 
164  void _M_init();
165 
166  //explicitely defined as private to avoid warnings:
168  ctype_byname(_Self const&);
169  _Self& operator = (_Self const&);
170 
171  mask _M_byname_table[table_size];
173 };
174 
175 # ifndef _STLP_NO_WCHAR_T
178 public:
179  typedef wchar_t char_type;
180 
181  explicit ctype(size_t __refs = 0) : locale::facet(__refs) {}
182 
183  bool is(mask __m, wchar_t __c) const
184  { return do_is(__m, __c); }
185 
186  const wchar_t* is(const wchar_t* __low, const wchar_t* __high,
187  mask* __vec) const
188  { return do_is(__low, __high, __vec); }
189 
190  const wchar_t* scan_is(mask __m,
191  const wchar_t* __low, const wchar_t* __high) const
192  { return do_scan_is(__m, __low, __high); }
193 
194  const wchar_t* scan_not (mask __m,
195  const wchar_t* __low, const wchar_t* __high) const
196  { return do_scan_not(__m, __low, __high); }
197 
198  wchar_t (toupper)(wchar_t __c) const { return do_toupper(__c); }
199  const wchar_t* (toupper)(wchar_t* __low, const wchar_t* __high) const
200  { return do_toupper(__low, __high); }
201 
202  wchar_t (tolower)(wchar_t __c) const { return do_tolower(__c); }
203  const wchar_t* (tolower)(wchar_t* __low, const wchar_t* __high) const
204  { return do_tolower(__low, __high); }
205 
206  wchar_t widen(char __c) const { return do_widen(__c); }
207  const char* widen(const char* __low, const char* __high,
208  wchar_t* __to) const
209  { return do_widen(__low, __high, __to); }
210 
211  char narrow(wchar_t __c, char __dfault) const
212  { return do_narrow(__c, __dfault); }
213  const wchar_t* narrow(const wchar_t* __low, const wchar_t* __high,
214  char __dfault, char* __to) const
215  { return do_narrow(__low, __high, __dfault, __to); }
216 
218 
219 protected:
220  ~ctype();
221 
222  virtual bool do_is(mask __m, wchar_t __c) const;
223  virtual const wchar_t* do_is(const wchar_t*, const wchar_t*, mask*) const;
224  virtual const wchar_t* do_scan_is(mask,
225  const wchar_t*, const wchar_t*) const;
226  virtual const wchar_t* do_scan_not(mask,
227  const wchar_t*, const wchar_t*) const;
228  virtual wchar_t do_toupper(wchar_t __c) const;
229  virtual const wchar_t* do_toupper(wchar_t*, const wchar_t*) const;
230  virtual wchar_t do_tolower(wchar_t c) const;
231  virtual const wchar_t* do_tolower(wchar_t*, const wchar_t*) const;
232  virtual wchar_t do_widen(char c) const;
233  virtual const char* do_widen(const char*, const char*, wchar_t*) const;
234  virtual char do_narrow(wchar_t __c, char __dfault) const;
235  virtual const wchar_t* do_narrow(const wchar_t*, const wchar_t*,
236  char, char*) const;
237 };
238 
241  friend class _Locale_impl;
242 public:
243  explicit ctype_byname(const char* __name, size_t __refs = 0);
244 
245 protected:
246  ~ctype_byname();
247 
248  virtual bool do_is(mask __m, wchar_t __c) const;
249  virtual const wchar_t* do_is(const wchar_t*, const wchar_t*, mask*) const;
250  virtual const wchar_t* do_scan_is(mask,
251  const wchar_t*, const wchar_t*) const;
252  virtual const wchar_t* do_scan_not(mask,
253  const wchar_t*, const wchar_t*) const;
254  virtual wchar_t do_toupper(wchar_t __c) const;
255  virtual const wchar_t* do_toupper(wchar_t*, const wchar_t*) const;
256  virtual wchar_t do_tolower(wchar_t c) const;
257  virtual const wchar_t* do_tolower(wchar_t*, const wchar_t*) const;
258 
259 private:
261  : _M_ctype(__ctype) {}
262 
263  //explicitely defined as private to avoid warnings:
265  ctype_byname(_Self const&);
266  _Self& operator = (_Self const&);
267 
269 };
270 
271 # endif /* WCHAR_T */
272 
274 
275 #endif /* _STLP_INTERNAL_CTYPE_H */
276 
277 // Local Variables:
278 // mode:C++
279 // End:
280 
#define _STLP_STATIC_CONSTANT(__type, __assignment)
Definition: features.h:805
bool operator()(char __c)
Definition: _ctype.h:137
bool _M_delete
Definition: _ctype.h:143
#define _Locale_ALPHA
Definition: c_locale.h:125
const char * widen(const char *__low, const char *__high, char *__to) const
Definition: _ctype.h:102
ctype_byname< char > _Self
Definition: _ctype.h:167
#define _Locale_XDIGIT
Definition: c_locale.h:128
char char_type
Definition: _ctype.h:75
const wchar_t * narrow(const wchar_t *__low, const wchar_t *__high, char __dfault, char *__to) const
Definition: _ctype.h:213
ctype_byname< wchar_t > _Self
Definition: _ctype.h:264
ctype_byname(_Locale_ctype *__ctype)
Definition: _ctype.h:260
bool is(mask __m, wchar_t __c) const
Definition: _ctype.h:183
void operator=(const _Locale_impl &)
static _STLP_STATIC_DECLSPEC locale::id id
Definition: _ctype.h:217
const wchar_t *() toupper(wchar_t *__low, const wchar_t *__high) const
Definition: _ctype.h:199
#define __c
Definition: schilyio.h:209
const mask * _M_ctype_table
Definition: _ctype.h:141
const char *() toupper(char *__low, const char *__high) const
Definition: _ctype.h:92
GLenum GLint GLuint mask
Definition: glext.h:6028
#define _Locale_PRINT
Definition: c_locale.h:121
Definition: _locale.h:75
char narrow(wchar_t __c, char __dfault) const
Definition: _ctype.h:211
unsigned char
Definition: typeof.h:29
#define _Locale_SPACE
Definition: c_locale.h:120
const wchar_t *() tolower(wchar_t *__low, const wchar_t *__high) const
Definition: _ctype.h:203
const wchar_t * is(const wchar_t *__low, const wchar_t *__high, mask *__vec) const
Definition: _ctype.h:186
static _STLP_STATIC_DECLSPEC locale::id id
Definition: _ctype.h:114
unsigned short wchar_t
Definition: crtdefs.h:324
#define _Locale_UPPER
Definition: c_locale.h:123
const wchar_t * scan_not(mask __m, const wchar_t *__low, const wchar_t *__high) const
Definition: _ctype.h:194
int toupper(int c)
Definition: utclib.c:881
Definition: _ctype.h:58
const char * is(const char *__low, const char *__high, mask *__vec) const
Definition: _ctype.h:81
_Is_mask(mask __x)
Definition: _ctype.h:136
const GLubyte * c
Definition: glext.h:8905
char narrow(char __c, char __dfault) const
Definition: _ctype.h:106
wchar_t char_type
Definition: _ctype.h:179
const char * widen(const char *__low, const char *__high, wchar_t *__to) const
Definition: _ctype.h:207
const wchar_t * scan_is(mask __m, const wchar_t *__low, const wchar_t *__high) const
Definition: _ctype.h:190
const mask * table() const _STLP_NOTHROW
Definition: _ctype.h:118
#define _STLP_CLASS_DECLSPEC
Definition: features.h:983
#define _STLP_TEMPLATE_NULL
Definition: features.h:652
char widen(char __c) const
Definition: _ctype.h:101
ctype_byname(_Locale_ctype *__ctype)
Definition: _ctype.h:160
#define _Locale_PUNCT
Definition: c_locale.h:127
static void print(LPPRINTDLGW pd, LPWSTR wszFileName)
Definition: print.c:440
#define _Locale_LOWER
Definition: c_locale.h:124
#define _STLP_END_NAMESPACE
Definition: features.h:503
_Locale_ctype * _M_ctype
Definition: _ctype.h:172
wchar_t widen(char __c) const
Definition: _ctype.h:206
bool is(mask __m, char __c) const
Definition: _ctype.h:78
GLclampf GLclampf GLclampf alpha
Definition: gl.h:1740
ctype(size_t __refs=0)
Definition: _ctype.h:181
#define const
Definition: zconf.h:230
#define wchar_t
Definition: wchar.h:102
const char *() tolower(char *__low, const char *__high) const
Definition: _ctype.h:97
#define _STLP_BEGIN_NAMESPACE
Definition: features.h:501
#define _STLP_STATIC_DECLSPEC
Definition: features.h:992
#define _STLP_NOTHROW
Definition: _intel.h:35
_Locale_ctype * _M_ctype
Definition: _ctype.h:268
int tolower(int c)
Definition: utclib.c:902
#define _STLP_CALL
Definition: _bc.h:131
#define _Locale_DIGIT
Definition: c_locale.h:126
const char * narrow(const char *__low, const char *__high, char __dfault, char *__to) const
Definition: _ctype.h:109
LOCAL int table_size
Definition: write.c:65
#define _Locale_CNTRL
Definition: c_locale.h:122