Mercurial > projects > ldc
comparison druntime/src/compiler/dmd/util/ctype.d @ 1458:e0b2d67cfe7c
Added druntime (this should be removed once it works).
author | Robert Clipsham <robert@octarineparrot.com> |
---|---|
date | Tue, 02 Jun 2009 17:43:06 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1456:7b218ec1044f | 1458:e0b2d67cfe7c |
---|---|
1 /** | |
2 * Simple ASCII char classification functions. | |
3 * | |
4 * Copyright: Copyright Digital Mars 2004 - 2009. | |
5 * License: <a href="http://www.boost.org/LICENSE_1_0.txt>Boost License 1.0</a>. | |
6 * Authors: Walter Bright | |
7 * | |
8 * Copyright Digital Mars 2004 - 2009. | |
9 * Distributed under the Boost Software License, Version 1.0. | |
10 * (See accompanying file LICENSE_1_0.txt or copy at | |
11 * http://www.boost.org/LICENSE_1_0.txt) | |
12 */ | |
13 module rt.util.ctype; | |
14 | |
15 int isalnum(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_ALP|_DIG) : 0; } | |
16 int isalpha(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_ALP) : 0; } | |
17 int iscntrl(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_CTL) : 0; } | |
18 int isdigit(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_DIG) : 0; } | |
19 int islower(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_LC) : 0; } | |
20 int ispunct(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_PNC) : 0; } | |
21 int isspace(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_SPC) : 0; } | |
22 int isupper(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_UC) : 0; } | |
23 int isxdigit(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_HEX) : 0; } | |
24 int isgraph(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_ALP|_DIG|_PNC) : 0; } | |
25 int isprint(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_ALP|_DIG|_PNC|_BLK) : 0; } | |
26 int isascii(dchar c) { return c <= 0x7F; } | |
27 | |
28 dchar tolower(dchar c) | |
29 out (result) | |
30 { | |
31 assert(!isupper(result)); | |
32 } | |
33 body | |
34 { | |
35 return isupper(c) ? c + (cast(dchar)'a' - 'A') : c; | |
36 } | |
37 | |
38 dchar toupper(dchar c) | |
39 out (result) | |
40 { | |
41 assert(!islower(result)); | |
42 } | |
43 body | |
44 { | |
45 return islower(c) ? c - (cast(dchar)'a' - 'A') : c; | |
46 } | |
47 | |
48 private: | |
49 | |
50 enum | |
51 { | |
52 _SPC = 8, | |
53 _CTL = 0x20, | |
54 _BLK = 0x40, | |
55 _HEX = 0x80, | |
56 _UC = 1, | |
57 _LC = 2, | |
58 _PNC = 0x10, | |
59 _DIG = 4, | |
60 _ALP = _UC|_LC, | |
61 } | |
62 | |
63 immutable ubyte _ctype[128] = | |
64 [ | |
65 _CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL, | |
66 _CTL,_CTL|_SPC,_CTL|_SPC,_CTL|_SPC,_CTL|_SPC,_CTL|_SPC,_CTL,_CTL, | |
67 _CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL, | |
68 _CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL, | |
69 _SPC|_BLK,_PNC,_PNC,_PNC,_PNC,_PNC,_PNC,_PNC, | |
70 _PNC,_PNC,_PNC,_PNC,_PNC,_PNC,_PNC,_PNC, | |
71 _DIG|_HEX,_DIG|_HEX,_DIG|_HEX,_DIG|_HEX,_DIG|_HEX, | |
72 _DIG|_HEX,_DIG|_HEX,_DIG|_HEX,_DIG|_HEX,_DIG|_HEX, | |
73 _PNC,_PNC,_PNC,_PNC,_PNC,_PNC, | |
74 _PNC,_UC|_HEX,_UC|_HEX,_UC|_HEX,_UC|_HEX,_UC|_HEX,_UC|_HEX,_UC, | |
75 _UC,_UC,_UC,_UC,_UC,_UC,_UC,_UC, | |
76 _UC,_UC,_UC,_UC,_UC,_UC,_UC,_UC, | |
77 _UC,_UC,_UC,_PNC,_PNC,_PNC,_PNC,_PNC, | |
78 _PNC,_LC|_HEX,_LC|_HEX,_LC|_HEX,_LC|_HEX,_LC|_HEX,_LC|_HEX,_LC, | |
79 _LC,_LC,_LC,_LC,_LC,_LC,_LC,_LC, | |
80 _LC,_LC,_LC,_LC,_LC,_LC,_LC,_LC, | |
81 _LC,_LC,_LC,_PNC,_PNC,_PNC,_PNC,_CTL | |
82 ]; | |
83 | |
84 | |
85 unittest | |
86 { | |
87 assert(isspace(' ')); | |
88 assert(!isspace('z')); | |
89 assert(toupper('a') == 'A'); | |
90 assert(tolower('Q') == 'q'); | |
91 assert(!isxdigit('G')); | |
92 } |