blob: ed040f6059564d14a0650da4e06e383cb0b19ea0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
#ifndef NETDATA_EVAL_H
#define NETDATA_EVAL_H
typedef struct variable {
char *name;
struct rrdvar *rrdvar;
struct variable *next;
} VARIABLE;
#define EVAL_VALUE_INVALID 0
#define EVAL_VALUE_NUMBER 1
#define EVAL_VALUE_VARIABLE 2
#define EVAL_VALUE_EXPRESSION 3
// these are used for EVAL_OPERAND.operator
#define EVAL_OPERATOR_NOP '\0'
#define EVAL_OPERATOR_VALUE ':'
#define EVAL_OPERATOR_EXPRESSION_OPEN '('
#define EVAL_OPERATOR_EXPRESSION_CLOSE ')'
#define EVAL_OPERATOR_NOT '!'
#define EVAL_OPERATOR_PLUS '+'
#define EVAL_OPERATOR_MINUS '-'
#define EVAL_OPERATOR_AND '&'
#define EVAL_OPERATOR_OR '|'
#define EVAL_OPERATOR_GREATER_THAN_OR_EQUAL 'G'
#define EVAL_OPERATOR_LESS_THAN_OR_EQUAL 'L'
#define EVAL_OPERATOR_NOT_EQUAL '~'
#define EVAL_OPERATOR_EQUAL '='
#define EVAL_OPERATOR_LESS '<'
#define EVAL_OPERATOR_GREATER '>'
#define EVAL_OPERATOR_MULTIPLY '*'
#define EVAL_OPERATOR_DIVIDE '/'
#define EVAL_OPERATOR_SIGN_PLUS 'P'
#define EVAL_OPERATOR_SIGN_MINUS 'M'
#define EVAL_ERROR_OK 0
#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
typedef struct eval_value {
int type;
union {
calculated_number number;
VARIABLE *variable;
struct eval_operand *expression;
};
} EVAL_VALUE;
typedef struct eval_operand {
int id;
char operator;
int precedence;
int count;
EVAL_VALUE ops[];
} EVAL_OPERAND;
extern EVAL_OPERAND *parse_expression(const char *string, const char **failed_at, int *error);
extern void free_expression(EVAL_OPERAND *op);
#endif //NETDATA_EVAL_H
|