Mercurial > hg > dmlib
annotate dmeval.h @ 725:f3cab48c6746
Add new header file dmevalw.h
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sun, 21 Apr 2013 18:32:24 +0300 |
parents | 6d96d5bf9653 |
children | 48c48e94d87f |
rev | line source |
---|---|
0 | 1 #ifndef DMEVAL_H |
2 #define DMEVAL_H | |
3 | |
4 #include "dmlib.h" | |
5 | |
6 | |
7 typedef double DMValue; | |
670 | 8 #define DMCONVTYPE (int) |
9 #define DM_MAX_ARGS 8 | |
0 | 10 |
11 enum | |
12 { | |
674 | 13 // No-op |
0 | 14 OP_NONE, |
15 | |
16 OP_ADD, | |
17 OP_SUB, | |
18 OP_MUL, | |
19 OP_DIV, | |
20 OP_MOD, | |
21 | |
22 OP_LSHIFT, | |
23 OP_RSHIFT, | |
24 | |
25 OP_AND, | |
26 OP_OR, | |
27 OP_XOR, | |
28 | |
674 | 29 // Special ops |
0 | 30 OP_FUNC, |
31 OP_VAR, | |
32 OP_SUBEXPR, | |
33 OP_CONST, | |
34 | |
674 | 35 // Total number of operators |
0 | 36 OP_NOPERS |
37 } DMOperType; | |
38 | |
685 | 39 |
0 | 40 enum |
41 { | |
42 ID_FUNC, | |
670 | 43 ID_VAR, |
44 ID_CVAR, | |
0 | 45 } DMEvalIdType; |
46 | |
47 | |
48 typedef struct | |
49 { | |
50 char *name; | |
51 int type; | |
670 | 52 int nargs; |
53 DMValue (*func)(DMValue arg[DM_MAX_ARGS]); | |
54 DMValue *var, cvalue; | |
0 | 55 } DMEvalId; |
56 | |
57 | |
58 typedef struct DMEvalNode | |
59 { | |
693
837ad9dcc348
More work on evaluator reordering pass.
Matti Hamalainen <ccr@tnsp.org>
parents:
685
diff
changeset
|
60 BOOL ok; |
0 | 61 int op; |
62 DMValue val; | |
63 DMEvalId *id; | |
64 | |
670 | 65 struct DMEvalNode *args[DM_MAX_ARGS]; |
0 | 66 struct DMEvalNode *subexpr, *next, *prev; |
67 } DMEvalNode; | |
68 | |
69 | |
70 typedef struct | |
71 { | |
72 BOOL err; | |
73 char *errStr; | |
74 | |
75 int nids; | |
76 DMEvalId *ids; | |
77 | |
78 int mode, prev, expect; | |
79 } DMEvalContext; | |
80 | |
81 | |
82 DMEvalId *dm_eval_find_id(DMEvalContext *ev, const char *name); | |
83 DMEvalId *dm_eval_add_var(DMEvalContext *ev, const char *name, DMValue *var); | |
670 | 84 DMEvalId *dm_eval_add_const(DMEvalContext *ev, const char *name, DMValue value); |
85 DMEvalId *dm_eval_add_func(DMEvalContext *ev, const char *name, DMValue (*func)(DMValue *), int nargs); | |
0 | 86 |
87 DMEvalContext *dm_eval_new(void); | |
88 void dm_eval_close(DMEvalContext *ev); | |
89 void dm_eval_free(DMEvalNode *node); | |
90 void dm_eval_clear_err(DMEvalContext *ev); | |
91 | |
92 int dm_eval_parse_expr(DMEvalContext *ev, char *expr, DMEvalNode **result); | |
680 | 93 int dm_eval_reorder(DMEvalContext *ev, DMEvalNode *node, DMEvalNode **result); |
0 | 94 int dm_eval_exec(DMEvalContext *ev, DMEvalNode *tree, DMValue *presult); |
95 | |
96 | |
97 #endif // DMEVAL_H |