Commit | Line | Data |
---|---|---|
48c47564 PP |
1 | /* |
2 | * Copyright (C) 2020 Philippe Proulx <pproulx@efficios.com> | |
3 | * | |
4 | * SPDX-License-Identifier: LGPL-2.1-only | |
5 | * | |
6 | */ | |
7 | ||
8 | #ifndef LTTNG_EVENT_EXPR_INTERNAL_H | |
9 | #define LTTNG_EVENT_EXPR_INTERNAL_H | |
10 | ||
c9e313bc | 11 | #include <common/macros.hpp> |
28f23191 | 12 | |
48c47564 PP |
13 | #include <lttng/event-expr.h> |
14 | ||
1aa9c49c | 15 | struct lttng_bytecode; |
6a751b95 | 16 | struct mi_writer; |
1aa9c49c | 17 | |
48c47564 PP |
18 | struct lttng_event_expr { |
19 | enum lttng_event_expr_type type; | |
20 | }; | |
21 | ||
22 | /* | |
23 | * `LTTNG_EVENT_EXPR_TYPE_EVENT_PAYLOAD_FIELD` and | |
24 | * `LTTNG_EVENT_EXPR_TYPE_CHANNEL_CONTEXT_FIELD`. | |
25 | */ | |
26 | struct lttng_event_expr_field { | |
27 | struct lttng_event_expr parent; | |
28 | char *name; | |
29 | }; | |
30 | ||
31 | /* `LTTNG_EVENT_EXPR_TYPE_APP_SPECIFIC_CONTEXT_FIELD` */ | |
32 | struct lttng_event_expr_app_specific_context_field { | |
33 | struct lttng_event_expr parent; | |
34 | char *provider_name; | |
35 | char *type_name; | |
36 | }; | |
37 | ||
38 | /* `LTTNG_EVENT_EXPR_TYPE_ARRAY_FIELD_ELEMENT` */ | |
39 | struct lttng_event_expr_array_field_element { | |
40 | struct lttng_event_expr parent; | |
41 | ||
42 | /* Owned by this */ | |
43 | struct lttng_event_expr *array_field_expr; | |
44 | ||
45 | unsigned int index; | |
46 | }; | |
47 | ||
48 | /* | |
49 | * Returns whether or not `expr` is an l-value (locator value). | |
50 | */ | |
28f23191 | 51 | static inline bool lttng_event_expr_is_lvalue(const struct lttng_event_expr *expr) |
48c47564 | 52 | { |
a0377dfe | 53 | LTTNG_ASSERT(expr); |
48c47564 | 54 | return expr->type == LTTNG_EVENT_EXPR_TYPE_EVENT_PAYLOAD_FIELD || |
28f23191 JG |
55 | expr->type == LTTNG_EVENT_EXPR_TYPE_CHANNEL_CONTEXT_FIELD || |
56 | expr->type == LTTNG_EVENT_EXPR_TYPE_APP_SPECIFIC_CONTEXT_FIELD || | |
57 | expr->type == LTTNG_EVENT_EXPR_TYPE_ARRAY_FIELD_ELEMENT; | |
48c47564 PP |
58 | } |
59 | ||
1aa9c49c | 60 | int lttng_event_expr_to_bytecode(const struct lttng_event_expr *expr, |
28f23191 | 61 | struct lttng_bytecode **bytecode_out); |
1aa9c49c | 62 | |
28f23191 JG |
63 | enum lttng_error_code lttng_event_expr_mi_serialize(const struct lttng_event_expr *expression, |
64 | struct mi_writer *writer); | |
6a751b95 | 65 | |
48c47564 | 66 | #endif /* LTTNG_EVENT_EXPR_INTERNAL_H */ |