4 typedef struct variable {
10 #define EVAL_VALUE_INVALID 0
11 #define EVAL_VALUE_NUMBER 1
12 #define EVAL_VALUE_VARIABLE 2
13 #define EVAL_VALUE_EXPRESSION 3
15 // these are used for EVAL_NODE.operator
16 #define EVAL_OPERATOR_NOP '\0'
17 #define EVAL_OPERATOR_VALUE ':'
18 #define EVAL_OPERATOR_EXPRESSION_OPEN '('
19 #define EVAL_OPERATOR_EXPRESSION_CLOSE ')'
20 #define EVAL_OPERATOR_NOT '!'
21 #define EVAL_OPERATOR_PLUS '+'
22 #define EVAL_OPERATOR_MINUS '-'
23 #define EVAL_OPERATOR_AND '&'
24 #define EVAL_OPERATOR_OR '|'
25 #define EVAL_OPERATOR_GREATER_THAN_OR_EQUAL 'G'
26 #define EVAL_OPERATOR_LESS_THAN_OR_EQUAL 'L'
27 #define EVAL_OPERATOR_NOT_EQUAL '~'
28 #define EVAL_OPERATOR_EQUAL '='
29 #define EVAL_OPERATOR_LESS '<'
30 #define EVAL_OPERATOR_GREATER '>'
31 #define EVAL_OPERATOR_MULTIPLY '*'
32 #define EVAL_OPERATOR_DIVIDE '/'
33 #define EVAL_OPERATOR_SIGN_PLUS 'P'
34 #define EVAL_OPERATOR_SIGN_MINUS 'M'
36 #define EVAL_ERROR_OK 0
39 #define EVAL_ERROR_MISSING_CLOSE_SUBEXPRESSION 1
40 #define EVAL_ERROR_UNKNOWN_OPERAND 2
41 #define EVAL_ERROR_MISSING_OPERAND 3
42 #define EVAL_ERROR_MISSING_OPERATOR 4
45 #define EVAL_ERROR_INVALID_VALUE 5
46 #define EVAL_ERROR_INVALID_NUMBER_OF_OPERANDS 6
47 #define EVAL_ERROR_VALUE_IS_NAN 7
48 #define EVAL_ERROR_VALUE_IS_INFINITE 8
50 typedef struct eval_value {
54 calculated_number number;
56 struct eval_node *expression;
60 typedef struct eval_node {
62 unsigned char operator;
69 extern EVAL_NODE *expression_parse(const char *string, const char **failed_at, int *error);
70 extern calculated_number expression_evaluate(EVAL_NODE *expression, int *error);
71 extern void expression_free(EVAL_NODE *op);
72 extern const char *expression_strerror(int error);
74 #endif //NETDATA_EVAL_H