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);