-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMexprcppEnums.h
More file actions
146 lines (116 loc) · 2.92 KB
/
MexprcppEnums.h
File metadata and controls
146 lines (116 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#ifndef __MEXPRCPPENUMS__
#define __MEXPRCPPENUMS__
#include <assert.h>
#include <stdbool.h>
#define MEXPR_OPR 1
#define MEXPR_OPND -1
#define MEXPR_INVALID_CODE 0
typedef enum {
/* Mathematical Operator*/
MATH_CPP_OPR_FIRST,
MATH_CPP_MOD,
MATH_CPP_PLUS,
MATH_CPP_MINUS,
MATH_CPP_MUL,
MATH_CPP_DIV,
MATH_CPP_SQR,
MATH_CPP_SQRT,
MATH_CPP_MAX,
MATH_CPP_MIN,
MATH_CPP_SIN,
MATH_CPP_COS,
MATH_CPP_POW,
/* Inequality Operator*/
MATH_CPP_EQ,
MATH_CPP_NEQ,
MATH_CPP_LESS_THAN,
MATH_CPP_LESS_THAN_EQ,
MATH_CPP_GREATER_THAN,
/* Logical Operators */
MATH_CPP_OR,
MATH_CPP_AND,
/* Other entities which can appear in Math Expression*/
MATH_CPP_BRACKET_START,
MATH_CPP_BRACKET_END,
MATH_CPP_COMMA,
MATH_CPP_OPR_INVALID,
MATH_CPP_OPR_MAX
} mexprcpp_operators_t;
typedef enum {
MATH_CPP_DTYPE_FIRST = (int) MATH_CPP_OPR_MAX + 1,
MATH_CPP_INT ,
MATH_CPP_DOUBLE,
MATH_CPP_STRING,
MATH_CPP_IPV4,
MATH_CPP_BOOL,
MATH_CPP_VARIABLE,
MATH_CPP_DTYPE_LAST,
MATH_CPP_DTYPE_WILDCRAD,
MATH_CPP_DTYPE_INVALID,
MATH_CPP_DTYPE_MAX
} mexprcpp_dtypes_t;
static inline int
Math_cpp_operator_precedence (int token_code) {
mexprcpp_operators_t opr_code = (mexprcpp_operators_t)token_code;
switch (token_code) {
case MATH_CPP_MAX:
case MATH_CPP_MIN:
case MATH_CPP_POW:
return 7;
case MATH_CPP_MUL:
case MATH_CPP_DIV:
return 6;
case MATH_CPP_PLUS:
case MATH_CPP_MINUS:
return 5;
case MATH_CPP_SIN:
case MATH_CPP_COS:
case MATH_CPP_SQR:
case MATH_CPP_SQRT:
return 4;
case MATH_CPP_LESS_THAN:
case MATH_CPP_LESS_THAN_EQ:
case MATH_CPP_GREATER_THAN:
case MATH_CPP_NEQ:
case MATH_CPP_EQ:
return 3;
case MATH_CPP_AND:
return 2;
case MATH_CPP_OR:
return 1;
case MATH_CPP_BRACKET_START:
case MATH_CPP_BRACKET_END:
return 0;
}
assert(0);
return 0;
}
static inline bool
Math_cpp_is_operator (int opcode) {
if (opcode < (int) MATH_CPP_OPR_FIRST ||
opcode >= (int) MATH_CPP_OPR_MAX ) return false;
return true;
}
static inline bool
Math_cpp_is_operand (int opcode) {
if (opcode < (int) MATH_CPP_DTYPE_FIRST ||
opcode >= (int) MATH_CPP_DTYPE_LAST ) return false;
return true;
}
static inline bool
Math_cpp_is_unary_operator (int opcode) {
mexprcpp_operators_t opr_code;
if (Math_cpp_is_operator (opcode) == false) return false;
opr_code = (mexprcpp_operators_t) opcode;
switch (opr_code) {
case MATH_CPP_SIN:
case MATH_CPP_COS:
case MATH_CPP_SQR:
case MATH_CPP_SQRT:
return true;
default:
return false;
}
return false;
}
#endif