mirror of
				https://github.com/eledio-devices/thirdparty-tinyexpr.git
				synced 2025-10-31 00:32:38 +01:00 
			
		
		
		
	Added arity greater than 2, and test cases.
This commit is contained in:
		
							
								
								
									
										19
									
								
								tinyexpr.h
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								tinyexpr.h
									
									
									
									
									
								
							| @@ -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; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user