Mercurial > hg > dmlib
comparison dmeval.h @ 0:32250b436bca
Initial re-import.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 28 Sep 2012 01:54:23 +0300 |
parents | |
children | 05eb24a608f0 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:32250b436bca |
---|---|
1 #ifndef DMEVAL_H | |
2 #define DMEVAL_H | |
3 | |
4 #include "dmlib.h" | |
5 | |
6 | |
7 typedef double DMValue; | |
8 #define DMCONVTYPE (int) | |
9 | |
10 | |
11 enum | |
12 { | |
13 OP_NONE, | |
14 | |
15 OP_ADD, | |
16 OP_SUB, | |
17 OP_MUL, | |
18 OP_DIV, | |
19 OP_MOD, | |
20 | |
21 OP_LSHIFT, | |
22 OP_RSHIFT, | |
23 | |
24 OP_AND, | |
25 OP_OR, | |
26 OP_XOR, | |
27 | |
28 OP_FUNC, | |
29 OP_VAR, | |
30 OP_SUBEXPR, | |
31 OP_CONST, | |
32 | |
33 OP_NOPERS | |
34 } DMOperType; | |
35 | |
36 enum | |
37 { | |
38 ID_FUNC, | |
39 ID_VAR | |
40 } DMEvalIdType; | |
41 | |
42 | |
43 typedef struct | |
44 { | |
45 char *name; | |
46 int type; | |
47 DMValue (*func)(DMValue); | |
48 DMValue *var; | |
49 } DMEvalId; | |
50 | |
51 | |
52 typedef struct DMEvalNode | |
53 { | |
54 int op; | |
55 DMValue val; | |
56 DMEvalId *id; | |
57 | |
58 struct DMEvalNode *subexpr, *next, *prev; | |
59 } DMEvalNode; | |
60 | |
61 | |
62 typedef struct | |
63 { | |
64 BOOL err; | |
65 char *errStr; | |
66 | |
67 int nids; | |
68 DMEvalId *ids; | |
69 | |
70 int mode, prev, expect; | |
71 } DMEvalContext; | |
72 | |
73 | |
74 DMEvalId *dm_eval_find_id(DMEvalContext *ev, const char *name); | |
75 DMEvalId *dm_eval_add_var(DMEvalContext *ev, const char *name, DMValue *var); | |
76 DMEvalId *dm_eval_add_func(DMEvalContext *ev, const char *name, DMValue (*func)(DMValue)); | |
77 | |
78 DMEvalContext *dm_eval_new(void); | |
79 void dm_eval_close(DMEvalContext *ev); | |
80 void dm_eval_free(DMEvalNode *node); | |
81 void dm_eval_clear_err(DMEvalContext *ev); | |
82 | |
83 int dm_eval_parse_expr(DMEvalContext *ev, char *expr, DMEvalNode **result); | |
84 int dm_eval_reorder(DMEvalContext *ev, DMEvalNode *node, DMEvalNode **result); | |
85 int dm_eval_exec(DMEvalContext *ev, DMEvalNode *tree, DMValue *presult); | |
86 | |
87 void dm_print_optree(DMEvalContext *ev, DMEvalNode *node); | |
88 | |
89 | |
90 #endif // DMEVAL_H |