Root/
Source at commit 1322 created 12 years 8 months ago. By meklort, Add doxygen to utils folder | |
---|---|
1 | /******************************************************************************␊ |
2 | *␊ |
3 | * $Id: cppvalue.cpp,v 1.6 2001/03/19 19:27:40 root Exp $␊ |
4 | *␊ |
5 | *␊ |
6 | * Copyright (C) 1997-2011 by Dimitri van Heesch.␊ |
7 | *␊ |
8 | * Permission to use, copy, modify, and distribute this software and its␊ |
9 | * documentation under the terms of the GNU General Public License is hereby ␊ |
10 | * granted. No representations are made about the suitability of this software ␊ |
11 | * for any purpose. It is provided "as is" without express or implied warranty.␊ |
12 | * See the GNU General Public License for more details.␊ |
13 | *␊ |
14 | * Documents produced by Doxygen are derivative works derived from the␊ |
15 | * input used in their production; they are not affected by this license.␊ |
16 | *␊ |
17 | */␊ |
18 | ␊ |
19 | #include <stdlib.h>␊ |
20 | ␊ |
21 | #include "cppvalue.h"␊ |
22 | #include "constexp.h"␊ |
23 | ␊ |
24 | CPPValue parseOctal()␊ |
25 | {␊ |
26 | long val = 0;␊ |
27 | for (const char *p = g_strToken.data(); *p != 0; p++)␊ |
28 | {␊ |
29 | if (*p >= '0' && *p <= '7') val = val * 8 + *p - '0';␊ |
30 | }␊ |
31 | return CPPValue(val);␊ |
32 | }␊ |
33 | ␊ |
34 | CPPValue parseDecimal()␊ |
35 | {␊ |
36 | long val = 0;␊ |
37 | for (const char *p = g_strToken.data(); *p != 0; p++)␊ |
38 | {␊ |
39 | if (*p >= '0' && *p <= '9') val = val * 10 + *p - '0';␊ |
40 | }␊ |
41 | return CPPValue(val);␊ |
42 | }␊ |
43 | ␊ |
44 | CPPValue parseHexadecimal()␊ |
45 | {␊ |
46 | long val = 0;␊ |
47 | for (const char *p = g_strToken.data(); *p != 0; p++)␊ |
48 | {␊ |
49 | if (*p >= '0' && *p <= '9') val = val * 16 + *p - '0';␊ |
50 | else if (*p >= 'a' && *p <= 'f') val = val * 16 + *p - 'a' + 10;␊ |
51 | else if (*p >= 'A' && *p <= 'F') val = val * 16 + *p - 'A' + 10;␊ |
52 | }␊ |
53 | //printf("parseHexadecimal %s->%x\n",g_strToken.data(),val);␊ |
54 | return CPPValue(val);␊ |
55 | }␊ |
56 | ␊ |
57 | CPPValue parseCharacter() // does not work for '\n' and the alike ␊ |
58 | {␊ |
59 | if (g_strToken[1]=='\\')␊ |
60 | {␊ |
61 | switch(g_strToken[2])␊ |
62 | {␊ |
63 | case 'n': return CPPValue((long)'\n');␊ |
64 | case 't': return CPPValue((long)'\t');␊ |
65 | case 'v': return CPPValue((long)'\v');␊ |
66 | case 'b': return CPPValue((long)'\b');␊ |
67 | case 'r': return CPPValue((long)'\r');␊ |
68 | case 'f': return CPPValue((long)'\f');␊ |
69 | case 'a': return CPPValue((long)'\a');␊ |
70 | case '\\': return CPPValue((long)'\\');␊ |
71 | case '?': return CPPValue((long)'\?');␊ |
72 | case '\'': return CPPValue((long)'\'');␊ |
73 | case '"': return CPPValue((long)'"');␊ |
74 | case '0': // fall through␊ |
75 | case '1': // fall through␊ |
76 | case '2': // fall through␊ |
77 | case '3': // fall through␊ |
78 | case '4': // fall through␊ |
79 | case '5': // fall through␊ |
80 | case '6': // fall through␊ |
81 | case '7': // fall through␊ |
82 | return parseOctal();␊ |
83 | case 'x': ␊ |
84 | case 'X': return parseHexadecimal();␊ |
85 | default: printf("Invalid escape sequence %s found!\n",g_strToken.data()); ␊ |
86 | return CPPValue(0L); ␊ |
87 | }␊ |
88 | }␊ |
89 | return CPPValue((long)g_strToken[1]);␊ |
90 | }␊ |
91 | ␊ |
92 | CPPValue parseFloat()␊ |
93 | {␊ |
94 | return CPPValue(atof(g_strToken));␊ |
95 | }␊ |
96 |