comparison runtime/internal/util/ctype.d @ 443:44f08170f4ef

Removed tango from the repository and instead added a runtime dir with the files needed to patch and build tango from svn. Reworked the LLVMDC specific pragmas.
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Fri, 01 Aug 2008 00:32:06 +0200
parents
children
comparison
equal deleted inserted replaced
442:76078c8ab5b9 443:44f08170f4ef
1
2 /*
3 * Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com
4 * Written by Walter Bright
5 *
6 * This software is provided 'as-is', without any express or implied
7 * warranty. In no event will the authors be held liable for any damages
8 * arising from the use of this software.
9 *
10 * Permission is granted to anyone to use this software for any purpose,
11 * including commercial applications, and to alter it and redistribute it
12 * freely, in both source and binary form, subject to the following
13 * restrictions:
14 *
15 * o The origin of this software must not be misrepresented; you must not
16 * claim that you wrote the original software. If you use this software
17 * in a product, an acknowledgment in the product documentation would be
18 * appreciated but is not required.
19 * o Altered source versions must be plainly marked as such, and must not
20 * be misrepresented as being the original software.
21 * o This notice may not be removed or altered from any source
22 * distribution.
23 */
24
25 // Simple ASCII char classification functions
26
27 module util.ctype;
28
29 int isalnum(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_ALP|_DIG) : 0; }
30 int isalpha(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_ALP) : 0; }
31 int iscntrl(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_CTL) : 0; }
32 int isdigit(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_DIG) : 0; }
33 int islower(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_LC) : 0; }
34 int ispunct(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_PNC) : 0; }
35 int isspace(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_SPC) : 0; }
36 int isupper(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_UC) : 0; }
37 int isxdigit(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_HEX) : 0; }
38 int isgraph(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_ALP|_DIG|_PNC) : 0; }
39 int isprint(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_ALP|_DIG|_PNC|_BLK) : 0; }
40 int isascii(dchar c) { return c <= 0x7F; }
41
42 dchar tolower(dchar c)
43 out (result)
44 {
45 assert(!isupper(result));
46 }
47 body
48 {
49 return isupper(c) ? c + (cast(dchar)'a' - 'A') : c;
50 }
51
52 dchar toupper(dchar c)
53 out (result)
54 {
55 assert(!islower(result));
56 }
57 body
58 {
59 return islower(c) ? c - (cast(dchar)'a' - 'A') : c;
60 }
61
62 private:
63
64 enum
65 {
66 _SPC = 8,
67 _CTL = 0x20,
68 _BLK = 0x40,
69 _HEX = 0x80,
70 _UC = 1,
71 _LC = 2,
72 _PNC = 0x10,
73 _DIG = 4,
74 _ALP = _UC|_LC,
75 }
76
77 ubyte _ctype[128] =
78 [
79 _CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL,
80 _CTL,_CTL|_SPC,_CTL|_SPC,_CTL|_SPC,_CTL|_SPC,_CTL|_SPC,_CTL,_CTL,
81 _CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL,
82 _CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL,
83 _SPC|_BLK,_PNC,_PNC,_PNC,_PNC,_PNC,_PNC,_PNC,
84 _PNC,_PNC,_PNC,_PNC,_PNC,_PNC,_PNC,_PNC,
85 _DIG|_HEX,_DIG|_HEX,_DIG|_HEX,_DIG|_HEX,_DIG|_HEX,
86 _DIG|_HEX,_DIG|_HEX,_DIG|_HEX,_DIG|_HEX,_DIG|_HEX,
87 _PNC,_PNC,_PNC,_PNC,_PNC,_PNC,
88 _PNC,_UC|_HEX,_UC|_HEX,_UC|_HEX,_UC|_HEX,_UC|_HEX,_UC|_HEX,_UC,
89 _UC,_UC,_UC,_UC,_UC,_UC,_UC,_UC,
90 _UC,_UC,_UC,_UC,_UC,_UC,_UC,_UC,
91 _UC,_UC,_UC,_PNC,_PNC,_PNC,_PNC,_PNC,
92 _PNC,_LC|_HEX,_LC|_HEX,_LC|_HEX,_LC|_HEX,_LC|_HEX,_LC|_HEX,_LC,
93 _LC,_LC,_LC,_LC,_LC,_LC,_LC,_LC,
94 _LC,_LC,_LC,_LC,_LC,_LC,_LC,_LC,
95 _LC,_LC,_LC,_PNC,_PNC,_PNC,_PNC,_CTL
96 ];
97
98
99 unittest
100 {
101 assert(isspace(' '));
102 assert(!isspace('z'));
103 assert(toupper('a') == 'A');
104 assert(tolower('Q') == 'q');
105 assert(!isxdigit('G'));
106 }