# HG changeset patch # User Matti Hamalainen # Date 1366094011 -10800 # Node ID d168fcf6f493806464e518221f8461e7e25862ed # Parent f9a3b0e8f0fc2cf0fa925efab9ae06cbbbc4acd1# Parent 57fc2ec4efdc34aba1b86b127064dfd67788333b Merged. diff -r f9a3b0e8f0fc -r d168fcf6f493 dmeval.c --- a/dmeval.c Tue Apr 16 08:13:20 2013 +0300 +++ b/dmeval.c Tue Apr 16 09:33:31 2013 +0300 @@ -6,9 +6,27 @@ #define DM_MAX_BUF 512 #define DM_STACK_SIZE 512 -static DMValue int_clip(DMValue v) +static DMValue func_int_clip(DMValue *v) +{ + return (*v < -1.0f) ? -1.0f : ((*v > 1.0f) ? 1.0f : *v); +} + + +static DMValue func_sin(DMValue *v) { - return (v < -1.0f) ? -1.0f : ((v > 1.0f) ? 1.0f : v); + return sin(*v); +} + + +static DMValue func_cos(DMValue *v) +{ + return cos(*v); +} + + +static DMValue func_pow(DMValue *v) +{ + return pow(v[0], v[1]); } @@ -16,9 +34,10 @@ */ static const DMEvalId dm_eval_basic[] = { - { "sin", ID_FUNC, sin, NULL }, - { "cos", ID_FUNC, cos, NULL }, - { "clip", ID_FUNC, int_clip, NULL }, + { "sin", ID_FUNC, 1, func_sin, NULL }, + { "cos", ID_FUNC, 1, func_cos, NULL }, + { "clip", ID_FUNC, 1, func_int_clip, NULL }, + { "pow", ID_FUNC, 2, func_pow, NULL }, }; static const int ndm_eval_basic = sizeof(dm_eval_basic) / sizeof(dm_eval_basic[0]); @@ -103,7 +122,7 @@ } -DMEvalId *dm_eval_add_func(DMEvalContext *ev, const char *name, DMValue (*func)(DMValue)) +DMEvalId *dm_eval_add_func(DMEvalContext *ev, const char *name, DMValue (*func)(DMValue *)) { DMEvalId *id = dm_eval_add_id(ev, name, ID_VAR); if (id == NULL) @@ -221,10 +240,10 @@ if (node == NULL) return NULL; - node->op = src->op; - node->val = src->val; - node->id = src->id; - node->subexpr = src->subexpr; + node->op = src->op; + node->val = src->val; + node->id = src->id; + node->subexpr = src->subexpr; return dm_eval_insert_node(list, node); } @@ -740,8 +759,8 @@ static int dm_eval_get(DMEvalContext *ev, DMEvalNode *node, DMValue *result) { - DMValue tmp; - + DMValue tmp[16]; + if (node == NULL) return -32; diff -r f9a3b0e8f0fc -r d168fcf6f493 dmeval.h --- a/dmeval.h Tue Apr 16 08:13:20 2013 +0300 +++ b/dmeval.h Tue Apr 16 09:33:31 2013 +0300 @@ -44,7 +44,8 @@ { char *name; int type; - DMValue (*func)(DMValue); + int args; + DMValue (*func)(DMValue *); DMValue *var; } DMEvalId; @@ -73,7 +74,7 @@ DMEvalId *dm_eval_find_id(DMEvalContext *ev, const char *name); DMEvalId *dm_eval_add_var(DMEvalContext *ev, const char *name, DMValue *var); -DMEvalId *dm_eval_add_func(DMEvalContext *ev, const char *name, DMValue (*func)(DMValue)); +DMEvalId *dm_eval_add_func(DMEvalContext *ev, const char *name, DMValue (*func)(DMValue *)); DMEvalContext *dm_eval_new(void); void dm_eval_close(DMEvalContext *ev);