#ifndef NETDATA_EVAL_H
#define NETDATA_EVAL_H
+#define EVAL_MAX_VARIABLE_NAME_LENGTH 300
+
typedef struct eval_variable {
char *name;
+ uint32_t hash;
struct rrdvar *rrdvar;
struct eval_variable *next;
} EVAL_VARIABLE;
const char *source;
const char *parsed_as;
+ int *status;
+ calculated_number *this;
+ time_t *after;
+ time_t *before;
+
calculated_number result;
int error;
void *nodes;
// custom data to be used for looking up variables
- void *data;
+ struct rrdcalc *rrdcalc;
} EVAL_EXPRESSION;
-#define EVAL_VALUE_INVALID 0
-#define EVAL_VALUE_NUMBER 1
-#define EVAL_VALUE_VARIABLE 2
+#define EVAL_VALUE_INVALID 0
+#define EVAL_VALUE_NUMBER 1
+#define EVAL_VALUE_VARIABLE 2
#define EVAL_VALUE_EXPRESSION 3
-#define EVAL_ERROR_OK 0
+// parsing and evaluation
+#define EVAL_ERROR_OK 0
// parsing errors
-#define EVAL_ERROR_MISSING_CLOSE_SUBEXPRESSION 1
-#define EVAL_ERROR_UNKNOWN_OPERAND 2
-#define EVAL_ERROR_MISSING_OPERAND 3
-#define EVAL_ERROR_MISSING_OPERATOR 4
-#define EVAL_ERROR_REMAINING_GARBAGE 5
+#define EVAL_ERROR_MISSING_CLOSE_SUBEXPRESSION 1
+#define EVAL_ERROR_UNKNOWN_OPERAND 2
+#define EVAL_ERROR_MISSING_OPERAND 3
+#define EVAL_ERROR_MISSING_OPERATOR 4
+#define EVAL_ERROR_REMAINING_GARBAGE 5
+#define EVAL_ERROR_IF_THEN_ELSE_MISSING_ELSE 6
// evaluation errors
-#define EVAL_ERROR_INVALID_VALUE 11
-#define EVAL_ERROR_INVALID_NUMBER_OF_OPERANDS 12
-#define EVAL_ERROR_VALUE_IS_NAN 13
-#define EVAL_ERROR_VALUE_IS_INFINITE 14
-#define EVAL_ERROR_UNKNOWN_VARIABLE 15
+#define EVAL_ERROR_INVALID_VALUE 101
+#define EVAL_ERROR_INVALID_NUMBER_OF_OPERANDS 102
+#define EVAL_ERROR_VALUE_IS_NAN 103
+#define EVAL_ERROR_VALUE_IS_INFINITE 104
+#define EVAL_ERROR_UNKNOWN_VARIABLE 105
// parse the given string as an expression and return:
// a pointer to an expression if it parsed OK