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_OPERAND.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
37 #define EVAL_ERROR_MISSING_CLOSE_SUBEXPRESSION 1
38 #define EVAL_ERROR_UNKNOWN_OPERAND 2
39 #define EVAL_ERROR_MISSING_OPERAND 3
40 #define EVAL_ERROR_MISSING_OPERATOR 4
42 typedef struct eval_value {
46 calculated_number number;
48 struct eval_operand *expression;
52 typedef struct eval_operand {
61 extern EVAL_OPERAND *parse_expression(const char *string, const char **failed_at, int *error);
62 extern void free_expression(EVAL_OPERAND *op);
64 #endif //NETDATA_EVAL_H