1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef PARSE_CTX_H 3 #define PARSE_CTX_H 1 4 5 // There are fixes that need to land upstream before we can use libbpf's headers, 6 // for now use our copy uncoditionally, since the data structures at this point 7 // are exactly the same, no problem. 8 //#ifdef HAVE_LIBBPF_SUPPORT 9 //#include <bpf/hashmap.h> 10 //#else 11 #include "util/hashmap.h" 12 //#endif 13 14 struct metric_ref; 15 16 struct expr_id { 17 char *id; 18 struct expr_id *parent; 19 }; 20 21 struct expr_parse_ctx { 22 struct hashmap ids; 23 struct expr_id *parent; 24 }; 25 26 struct expr_id_data { 27 union { 28 double val; 29 struct { 30 const char *metric_name; 31 const char *metric_expr; 32 bool counted; 33 } ref; 34 struct expr_id *parent; 35 }; 36 37 bool is_ref; 38 }; 39 40 struct expr_scanner_ctx { 41 int start_token; 42 int runtime; 43 }; 44 45 void expr__ctx_init(struct expr_parse_ctx *ctx); 46 void expr__ctx_clear(struct expr_parse_ctx *ctx); 47 void expr__del_id(struct expr_parse_ctx *ctx, const char *id); 48 int expr__add_id(struct expr_parse_ctx *ctx, const char *id); 49 int expr__add_id_val(struct expr_parse_ctx *ctx, const char *id, double val); 50 int expr__add_ref(struct expr_parse_ctx *ctx, struct metric_ref *ref); 51 int expr__get_id(struct expr_parse_ctx *ctx, const char *id, 52 struct expr_id_data **data); 53 int expr__resolve_id(struct expr_parse_ctx *ctx, const char *id, 54 struct expr_id_data **datap); 55 int expr__parse(double *final_val, struct expr_parse_ctx *ctx, 56 const char *expr, int runtime); 57 int expr__find_other(const char *expr, const char *one, 58 struct expr_parse_ctx *ids, int runtime); 59 60 #endif 61