Added arity greater than 2, and test cases.

This commit is contained in:
EvilPudding
2016-02-24 17:46:54 +00:00
parent 681fb9aa0f
commit 0417ed63a8
3 changed files with 163 additions and 113 deletions

View File

@@ -34,18 +34,29 @@ extern "C" {
typedef double (*te_fun0)(void);
typedef double (*te_fun1)(double);
typedef double (*te_fun2)(double, double);
typedef double (*te_fun3)(double, double, double);
typedef double (*te_fun4)(double, double, double, double);
typedef double (*te_fun5)(double, double, double, double, double);
typedef double (*te_fun6)(double, double, double, double, double, double);
typedef double (*te_fun7)(double, double, double, double, double, double, double);
typedef union
{
te_fun0 f0; te_fun1 f1; te_fun2 f2; te_fun3 f3; te_fun4 f4; te_fun5 f5; te_fun6 f6; te_fun7 f7;
} te_fun;
typedef struct te_expr {
struct te_expr *left, *right;
int type;
union {double value; const double *bound; te_fun0 f0; te_fun1 f1; te_fun2 f2;};
union {double value; const double *bound; te_fun fun; };
int member_count;
struct te_expr *members[];
} te_expr;
#define TE_MASK_ARIT 0x00000007 /* Three bits, Arity, max is 8 */
#define TE_FLAG_TYPE 0x00000018 /* Two bits, 1 = constant, 2 = variable, 3 = function */
enum {TE_FUNCTION0 = -1, TE_VARIABLE = 0, TE_FUNCTION1 = 1, TE_FUNCTION2 = 2};
enum { TE_CONST = 1 << 3, TE_VAR = 2 << 3, TE_FUN = 3 << 3};
typedef struct te_variable {
const char *name;