~peter-pearse/ubuntu/natty/diffutils/prop001

« back to all changes in this revision

Viewing changes to lib/c-ctype.h

  • Committer: Bazaar Package Importer
  • Author(s): Santiago Vila
  • Date: 2010-05-04 20:38:00 UTC
  • mfrom: (2.1.7 sid)
  • Revision ID: james.westby@ubuntu.com-20100504203800-f67xd9rsa9xl9qqj
Tags: 1:3.0-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* -*- buffer-read-only: t -*- vi: set ro: */
 
2
/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
 
3
/* Character handling in C locale.
 
4
 
 
5
   These functions work like the corresponding functions in <ctype.h>,
 
6
   except that they have the C (POSIX) locale hardwired, whereas the
 
7
   <ctype.h> functions' behaviour depends on the current locale set via
 
8
   setlocale.
 
9
 
 
10
   Copyright (C) 2000-2003, 2006, 2008-2010 Free Software Foundation, Inc.
 
11
 
 
12
This program is free software; you can redistribute it and/or modify
 
13
it under the terms of the GNU General Public License as published by
 
14
the Free Software Foundation; either version 3 of the License, or
 
15
(at your option) any later version.
 
16
 
 
17
This program is distributed in the hope that it will be useful,
 
18
but WITHOUT ANY WARRANTY; without even the implied warranty of
 
19
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
20
GNU General Public License for more details.
 
21
 
 
22
You should have received a copy of the GNU General Public License
 
23
along with this program; if not, write to the Free Software Foundation,
 
24
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
25
 
 
26
#ifndef C_CTYPE_H
 
27
#define C_CTYPE_H
 
28
 
 
29
#include <stdbool.h>
 
30
 
 
31
 
 
32
#ifdef __cplusplus
 
33
extern "C" {
 
34
#endif
 
35
 
 
36
 
 
37
/* The functions defined in this file assume the "C" locale and a character
 
38
   set without diacritics (ASCII-US or EBCDIC-US or something like that).
 
39
   Even if the "C" locale on a particular system is an extension of the ASCII
 
40
   character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it
 
41
   is ISO-8859-1), the functions in this file recognize only the ASCII
 
42
   characters.  */
 
43
 
 
44
 
 
45
/* Check whether the ASCII optimizations apply. */
 
46
 
 
47
/* ANSI C89 (and ISO C99 5.2.1.3 too) already guarantees that
 
48
   '0', '1', ..., '9' have consecutive integer values.  */
 
49
#define C_CTYPE_CONSECUTIVE_DIGITS 1
 
50
 
 
51
#if ('A' <= 'Z') \
 
52
    && ('A' + 1 == 'B') && ('B' + 1 == 'C') && ('C' + 1 == 'D') \
 
53
    && ('D' + 1 == 'E') && ('E' + 1 == 'F') && ('F' + 1 == 'G') \
 
54
    && ('G' + 1 == 'H') && ('H' + 1 == 'I') && ('I' + 1 == 'J') \
 
55
    && ('J' + 1 == 'K') && ('K' + 1 == 'L') && ('L' + 1 == 'M') \
 
56
    && ('M' + 1 == 'N') && ('N' + 1 == 'O') && ('O' + 1 == 'P') \
 
57
    && ('P' + 1 == 'Q') && ('Q' + 1 == 'R') && ('R' + 1 == 'S') \
 
58
    && ('S' + 1 == 'T') && ('T' + 1 == 'U') && ('U' + 1 == 'V') \
 
59
    && ('V' + 1 == 'W') && ('W' + 1 == 'X') && ('X' + 1 == 'Y') \
 
60
    && ('Y' + 1 == 'Z')
 
61
#define C_CTYPE_CONSECUTIVE_UPPERCASE 1
 
62
#endif
 
63
 
 
64
#if ('a' <= 'z') \
 
65
    && ('a' + 1 == 'b') && ('b' + 1 == 'c') && ('c' + 1 == 'd') \
 
66
    && ('d' + 1 == 'e') && ('e' + 1 == 'f') && ('f' + 1 == 'g') \
 
67
    && ('g' + 1 == 'h') && ('h' + 1 == 'i') && ('i' + 1 == 'j') \
 
68
    && ('j' + 1 == 'k') && ('k' + 1 == 'l') && ('l' + 1 == 'm') \
 
69
    && ('m' + 1 == 'n') && ('n' + 1 == 'o') && ('o' + 1 == 'p') \
 
70
    && ('p' + 1 == 'q') && ('q' + 1 == 'r') && ('r' + 1 == 's') \
 
71
    && ('s' + 1 == 't') && ('t' + 1 == 'u') && ('u' + 1 == 'v') \
 
72
    && ('v' + 1 == 'w') && ('w' + 1 == 'x') && ('x' + 1 == 'y') \
 
73
    && ('y' + 1 == 'z')
 
74
#define C_CTYPE_CONSECUTIVE_LOWERCASE 1
 
75
#endif
 
76
 
 
77
#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
 
78
    && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
 
79
    && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
 
80
    && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
 
81
    && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
 
82
    && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
 
83
    && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
 
84
    && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
 
85
    && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
 
86
    && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
 
87
    && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
 
88
    && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
 
89
    && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
 
90
    && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
 
91
    && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
 
92
    && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
 
93
    && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
 
94
    && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
 
95
    && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
 
96
    && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
 
97
    && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
 
98
    && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
 
99
    && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)
 
100
/* The character set is ASCII or one of its variants or extensions, not EBCDIC.
 
101
   Testing the value of '\n' and '\r' is not relevant.  */
 
102
#define C_CTYPE_ASCII 1
 
103
#endif
 
104
 
 
105
 
 
106
/* Function declarations. */
 
107
 
 
108
/* Unlike the functions in <ctype.h>, which require an argument in the range
 
109
   of the 'unsigned char' type, the functions here operate on values that are
 
110
   in the 'unsigned char' range or in the 'char' range.  In other words,
 
111
   when you have a 'char' value, you need to cast it before using it as
 
112
   argument to a <ctype.h> function:
 
113
 
 
114
         const char *s = ...;
 
115
         if (isalpha ((unsigned char) *s)) ...
 
116
 
 
117
   but you don't need to cast it for the functions defined in this file:
 
118
 
 
119
         const char *s = ...;
 
120
         if (c_isalpha (*s)) ...
 
121
 */
 
122
 
 
123
extern bool c_isascii (int c); /* not locale dependent */
 
124
 
 
125
extern bool c_isalnum (int c);
 
126
extern bool c_isalpha (int c);
 
127
extern bool c_isblank (int c);
 
128
extern bool c_iscntrl (int c);
 
129
extern bool c_isdigit (int c);
 
130
extern bool c_islower (int c);
 
131
extern bool c_isgraph (int c);
 
132
extern bool c_isprint (int c);
 
133
extern bool c_ispunct (int c);
 
134
extern bool c_isspace (int c);
 
135
extern bool c_isupper (int c);
 
136
extern bool c_isxdigit (int c);
 
137
 
 
138
extern int c_tolower (int c);
 
139
extern int c_toupper (int c);
 
140
 
 
141
 
 
142
#if defined __GNUC__ && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ && !defined NO_C_CTYPE_MACROS
 
143
 
 
144
/* ASCII optimizations. */
 
145
 
 
146
#undef c_isascii
 
147
#define c_isascii(c) \
 
148
  ({ int __c = (c); \
 
149
     (__c >= 0x00 && __c <= 0x7f); \
 
150
   })
 
151
 
 
152
#if C_CTYPE_CONSECUTIVE_DIGITS \
 
153
    && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
 
154
#if C_CTYPE_ASCII
 
155
#undef c_isalnum
 
156
#define c_isalnum(c) \
 
157
  ({ int __c = (c); \
 
158
     ((__c >= '0' && __c <= '9') \
 
159
      || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z')); \
 
160
   })
 
161
#else
 
162
#undef c_isalnum
 
163
#define c_isalnum(c) \
 
164
  ({ int __c = (c); \
 
165
     ((__c >= '0' && __c <= '9') \
 
166
      || (__c >= 'A' && __c <= 'Z') \
 
167
      || (__c >= 'a' && __c <= 'z')); \
 
168
   })
 
169
#endif
 
170
#endif
 
171
 
 
172
#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
 
173
#if C_CTYPE_ASCII
 
174
#undef c_isalpha
 
175
#define c_isalpha(c) \
 
176
  ({ int __c = (c); \
 
177
     ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z'); \
 
178
   })
 
179
#else
 
180
#undef c_isalpha
 
181
#define c_isalpha(c) \
 
182
  ({ int __c = (c); \
 
183
     ((__c >= 'A' && __c <= 'Z') || (__c >= 'a' && __c <= 'z')); \
 
184
   })
 
185
#endif
 
186
#endif
 
187
 
 
188
#undef c_isblank
 
189
#define c_isblank(c) \
 
190
  ({ int __c = (c); \
 
191
     (__c == ' ' || __c == '\t'); \
 
192
   })
 
193
 
 
194
#if C_CTYPE_ASCII
 
195
#undef c_iscntrl
 
196
#define c_iscntrl(c) \
 
197
  ({ int __c = (c); \
 
198
     ((__c & ~0x1f) == 0 || __c == 0x7f); \
 
199
   })
 
200
#endif
 
201
 
 
202
#if C_CTYPE_CONSECUTIVE_DIGITS
 
203
#undef c_isdigit
 
204
#define c_isdigit(c) \
 
205
  ({ int __c = (c); \
 
206
     (__c >= '0' && __c <= '9'); \
 
207
   })
 
208
#endif
 
209
 
 
210
#if C_CTYPE_CONSECUTIVE_LOWERCASE
 
211
#undef c_islower
 
212
#define c_islower(c) \
 
213
  ({ int __c = (c); \
 
214
     (__c >= 'a' && __c <= 'z'); \
 
215
   })
 
216
#endif
 
217
 
 
218
#if C_CTYPE_ASCII
 
219
#undef c_isgraph
 
220
#define c_isgraph(c) \
 
221
  ({ int __c = (c); \
 
222
     (__c >= '!' && __c <= '~'); \
 
223
   })
 
224
#endif
 
225
 
 
226
#if C_CTYPE_ASCII
 
227
#undef c_isprint
 
228
#define c_isprint(c) \
 
229
  ({ int __c = (c); \
 
230
     (__c >= ' ' && __c <= '~'); \
 
231
   })
 
232
#endif
 
233
 
 
234
#if C_CTYPE_ASCII
 
235
#undef c_ispunct
 
236
#define c_ispunct(c) \
 
237
  ({ int _c = (c); \
 
238
     (c_isgraph (_c) && ! c_isalnum (_c)); \
 
239
   })
 
240
#endif
 
241
 
 
242
#undef c_isspace
 
243
#define c_isspace(c) \
 
244
  ({ int __c = (c); \
 
245
     (__c == ' ' || __c == '\t' \
 
246
      || __c == '\n' || __c == '\v' || __c == '\f' || __c == '\r'); \
 
247
   })
 
248
 
 
249
#if C_CTYPE_CONSECUTIVE_UPPERCASE
 
250
#undef c_isupper
 
251
#define c_isupper(c) \
 
252
  ({ int __c = (c); \
 
253
     (__c >= 'A' && __c <= 'Z'); \
 
254
   })
 
255
#endif
 
256
 
 
257
#if C_CTYPE_CONSECUTIVE_DIGITS \
 
258
    && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
 
259
#if C_CTYPE_ASCII
 
260
#undef c_isxdigit
 
261
#define c_isxdigit(c) \
 
262
  ({ int __c = (c); \
 
263
     ((__c >= '0' && __c <= '9') \
 
264
      || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'F')); \
 
265
   })
 
266
#else
 
267
#undef c_isxdigit
 
268
#define c_isxdigit(c) \
 
269
  ({ int __c = (c); \
 
270
     ((__c >= '0' && __c <= '9') \
 
271
      || (__c >= 'A' && __c <= 'F') \
 
272
      || (__c >= 'a' && __c <= 'f')); \
 
273
   })
 
274
#endif
 
275
#endif
 
276
 
 
277
#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
 
278
#undef c_tolower
 
279
#define c_tolower(c) \
 
280
  ({ int __c = (c); \
 
281
     (__c >= 'A' && __c <= 'Z' ? __c - 'A' + 'a' : __c); \
 
282
   })
 
283
#undef c_toupper
 
284
#define c_toupper(c) \
 
285
  ({ int __c = (c); \
 
286
     (__c >= 'a' && __c <= 'z' ? __c - 'a' + 'A' : __c); \
 
287
   })
 
288
#endif
 
289
 
 
290
#endif /* optimizing for speed */
 
291
 
 
292
 
 
293
#ifdef __cplusplus
 
294
}
 
295
#endif
 
296
 
 
297
#endif /* C_CTYPE_H */