Mercurial > hg > dmlib
comparison dmeval.h @ 670:0d37fe455b86
More work on evaluator.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 16 Apr 2013 11:30:52 +0300 |
parents | 57fc2ec4efdc |
children | a25d30714cfe |
comparison
equal
deleted
inserted
replaced
669:440b77b635a5 | 670:0d37fe455b86 |
---|---|
3 | 3 |
4 #include "dmlib.h" | 4 #include "dmlib.h" |
5 | 5 |
6 | 6 |
7 typedef double DMValue; | 7 typedef double DMValue; |
8 #define DMCONVTYPE (int) | 8 #define DMCONVTYPE (int) |
9 | 9 #define DM_MAX_ARGS 8 |
10 | 10 |
11 enum | 11 enum |
12 { | 12 { |
13 OP_NONE, | 13 OP_NONE, |
14 | 14 |
34 } DMOperType; | 34 } DMOperType; |
35 | 35 |
36 enum | 36 enum |
37 { | 37 { |
38 ID_FUNC, | 38 ID_FUNC, |
39 ID_VAR | 39 ID_VAR, |
40 ID_CVAR, | |
40 } DMEvalIdType; | 41 } DMEvalIdType; |
41 | 42 |
42 | 43 |
43 typedef struct | 44 typedef struct |
44 { | 45 { |
45 char *name; | 46 char *name; |
46 int type; | 47 int type; |
47 int args; | 48 int nargs; |
48 DMValue (*func)(DMValue *); | 49 DMValue (*func)(DMValue arg[DM_MAX_ARGS]); |
49 DMValue *var; | 50 DMValue *var, cvalue; |
50 } DMEvalId; | 51 } DMEvalId; |
51 | 52 |
52 | 53 |
53 typedef struct DMEvalNode | 54 typedef struct DMEvalNode |
54 { | 55 { |
55 int op; | 56 int op; |
56 DMValue val; | 57 DMValue val; |
57 DMEvalId *id; | 58 DMEvalId *id; |
58 | 59 |
60 struct DMEvalNode *args[DM_MAX_ARGS]; | |
59 struct DMEvalNode *subexpr, *next, *prev; | 61 struct DMEvalNode *subexpr, *next, *prev; |
60 } DMEvalNode; | 62 } DMEvalNode; |
61 | 63 |
62 | 64 |
63 typedef struct | 65 typedef struct |
72 } DMEvalContext; | 74 } DMEvalContext; |
73 | 75 |
74 | 76 |
75 DMEvalId *dm_eval_find_id(DMEvalContext *ev, const char *name); | 77 DMEvalId *dm_eval_find_id(DMEvalContext *ev, const char *name); |
76 DMEvalId *dm_eval_add_var(DMEvalContext *ev, const char *name, DMValue *var); | 78 DMEvalId *dm_eval_add_var(DMEvalContext *ev, const char *name, DMValue *var); |
77 DMEvalId *dm_eval_add_func(DMEvalContext *ev, const char *name, DMValue (*func)(DMValue *)); | 79 DMEvalId *dm_eval_add_const(DMEvalContext *ev, const char *name, DMValue value); |
80 DMEvalId *dm_eval_add_func(DMEvalContext *ev, const char *name, DMValue (*func)(DMValue *), int nargs); | |
78 | 81 |
79 DMEvalContext *dm_eval_new(void); | 82 DMEvalContext *dm_eval_new(void); |
80 void dm_eval_close(DMEvalContext *ev); | 83 void dm_eval_close(DMEvalContext *ev); |
81 void dm_eval_free(DMEvalNode *node); | 84 void dm_eval_free(DMEvalNode *node); |
82 void dm_eval_clear_err(DMEvalContext *ev); | 85 void dm_eval_clear_err(DMEvalContext *ev); |