Merge tag 'v5.9-rc2' into regulator-5.9
[linux-2.6-microblaze.git] / tools / perf / util / expr.h
index 8a2c107..fc2b5e8 100644 (file)
 #include "util/hashmap.h"
 //#endif
 
+struct metric_ref;
+
+struct expr_id {
+       char            *id;
+       struct expr_id  *parent;
+};
+
 struct expr_parse_ctx {
-       struct hashmap ids;
+       struct hashmap   ids;
+       struct expr_id  *parent;
+};
+
+struct expr_id_data {
+       union {
+               double val;
+               struct {
+                       const char *metric_name;
+                       const char *metric_expr;
+                       bool counted;
+               } ref;
+               struct expr_id  *parent;
+       };
+
+       bool is_ref;
 };
 
 struct expr_scanner_ctx {
@@ -22,8 +44,14 @@ struct expr_scanner_ctx {
 
 void expr__ctx_init(struct expr_parse_ctx *ctx);
 void expr__ctx_clear(struct expr_parse_ctx *ctx);
-int expr__add_id(struct expr_parse_ctx *ctx, const char *id, double val);
-int expr__get_id(struct expr_parse_ctx *ctx, const char *id, double *val_ptr);
+void expr__del_id(struct expr_parse_ctx *ctx, const char *id);
+int expr__add_id(struct expr_parse_ctx *ctx, const char *id);
+int expr__add_id_val(struct expr_parse_ctx *ctx, const char *id, double val);
+int expr__add_ref(struct expr_parse_ctx *ctx, struct metric_ref *ref);
+int expr__get_id(struct expr_parse_ctx *ctx, const char *id,
+                struct expr_id_data **data);
+int expr__resolve_id(struct expr_parse_ctx *ctx, const char *id,
+                    struct expr_id_data **datap);
 int expr__parse(double *final_val, struct expr_parse_ctx *ctx,
                const char *expr, int runtime);
 int expr__find_other(const char *expr, const char *one,