2 * Copyright (C) 2020 Philippe Proulx <pproulx@efficios.com>
4 * SPDX-License-Identifier: LGPL-2.1-only
8 #ifndef LTTNG_EVENT_FIELD_VALUE_H
9 #define LTTNG_EVENT_FIELD_VALUE_H
11 #include <lttng/lttng-export.h>
14 struct lttng_event_field_value
;
21 * Types of a event field value expression.
23 enum lttng_event_field_value_type
{
27 LTTNG_EVENT_FIELD_VALUE_TYPE_UNKNOWN
= -2,
30 * Returned by lttng_event_field_value_get_type() with an
33 LTTNG_EVENT_FIELD_VALUE_TYPE_INVALID
= -1,
36 * Unsigned integer event field value.
38 LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_INT
= 0,
41 * Signed integer event field value.
43 LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_INT
= 1,
46 * Unsigned enumeration event field value.
48 * This type conceptually inherits
49 * `LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_INT`.
51 LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_ENUM
= 2,
54 * Signed enumeration event field value.
56 * This type conceptually inherits
57 * `LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_INT`.
59 LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_ENUM
= 3,
62 * Real event field value.
64 LTTNG_EVENT_FIELD_VALUE_TYPE_REAL
= 4,
67 * String event field value.
69 LTTNG_EVENT_FIELD_VALUE_TYPE_STRING
= 5,
72 * Array event field value.
74 LTTNG_EVENT_FIELD_VALUE_TYPE_ARRAY
= 6,
78 * Event field value API status codes.
80 enum lttng_event_field_value_status
{
82 * Event field value is not available.
84 LTTNG_EVENT_FIELD_VALUE_STATUS_UNAVAILABLE
= -2,
89 LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID
= -1,
94 LTTNG_EVENT_FIELD_VALUE_STATUS_OK
= 0,
98 * Returns the type of the event field value `field_val`, or:
100 * `LTTNG_EVENT_FIELD_VALUE_TYPE_UNKNOWN`:
101 * The type of `field_val` is unknown as of this version of the
102 * LTTng control library.
104 * `LTTNG_EVENT_FIELD_VALUE_TYPE_INVALID`:
105 * `field_val` is `NULL`.
107 LTTNG_EXPORT
extern enum lttng_event_field_value_type
lttng_event_field_value_get_type(
108 const struct lttng_event_field_value
*field_val
);
111 * Sets `*val` to the raw value of the unsigned integer/enumeration
112 * event field value `field_val`.
116 * `LTTNG_EVENT_FIELD_VALUE_STATUS_OK`:
119 * `LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID`:
120 * * `field_val` is `NULL`.
121 * * The type of `field_val` is not
122 * `LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_INT` or
123 * `LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_ENUM`.
126 LTTNG_EXPORT
extern enum lttng_event_field_value_status
127 lttng_event_field_value_unsigned_int_get_value(
128 const struct lttng_event_field_value
*field_val
, uint64_t *val
);
131 * Sets `*val` to the raw value of the signed integer/enumeration event
132 * field value `field_val`.
136 * `LTTNG_EVENT_FIELD_VALUE_STATUS_OK`:
139 * `LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID`:
140 * * `field_val` is `NULL`.
141 * * The type of `field_val` is not
142 * `LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_INT` or
143 * `LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_ENUM`.
146 LTTNG_EXPORT
extern enum lttng_event_field_value_status
147 lttng_event_field_value_signed_int_get_value(
148 const struct lttng_event_field_value
*field_val
, int64_t *val
);
151 * Sets `*val` to the raw value of the real event field value
156 * `LTTNG_EVENT_FIELD_VALUE_STATUS_OK`:
159 * `LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID`:
160 * * `field_val` is `NULL`.
161 * * The type of `field_val` is not
162 * `LTTNG_EVENT_FIELD_VALUE_TYPE_REAL`.
165 LTTNG_EXPORT
extern enum lttng_event_field_value_status
166 lttng_event_field_value_real_get_value(
167 const struct lttng_event_field_value
*field_val
, double *val
);
170 * Returns the raw value (an UTF-8 C string) of the string event field
171 * value `field_val`, or `NULL` if:
173 * `LTTNG_EVENT_FIELD_VALUE_STATUS_OK`:
176 * `LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID`:
177 * * `field_val` is `NULL`.
178 * * The type of `field_val` is not
179 * `LTTNG_EVENT_FIELD_VALUE_TYPE_STRING`.
181 LTTNG_EXPORT
extern enum lttng_event_field_value_status
182 lttng_event_field_value_string_get_value(
183 const struct lttng_event_field_value
*field_val
,
187 * Sets `*length` to the length (the number of contained elements) of
188 * the array event field value `field_val`.
192 * `LTTNG_EVENT_FIELD_VALUE_STATUS_OK`:
195 * `LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID`:
196 * * `field_val` is `NULL`.
197 * * The type of `field_val` is not
198 * `LTTNG_EVENT_FIELD_VALUE_TYPE_ARRAY`.
199 * * `length` is `NULL`.
201 LTTNG_EXPORT
extern enum lttng_event_field_value_status
202 lttng_event_field_value_array_get_length(
203 const struct lttng_event_field_value
*field_val
,
204 unsigned int *length
);
207 * Sets `*elem_field_val` to the event field value at index `index` in
208 * the array event field value `field_val`.
212 * `LTTNG_EVENT_FIELD_VALUE_STATUS_OK`:
215 * `LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID`:
216 * * `field_val` is `NULL`.
217 * * The type of `field_val` is not
218 * `LTTNG_EVENT_FIELD_VALUE_TYPE_ARRAY`.
219 * * `index` is greater than or equal to the length of `field_val`,
220 * as returned by lttng_event_field_value_array_get_length().
222 * `LTTNG_EVENT_FIELD_VALUE_STATUS_UNAVAILABLE`:
223 * * No event field value exists at index `index` within
226 LTTNG_EXPORT
extern enum lttng_event_field_value_status
227 lttng_event_field_value_array_get_element_at_index(
228 const struct lttng_event_field_value
*field_val
,
230 const struct lttng_event_field_value
**elem_field_val
);
236 #endif /* LTTNG_EVENT_FIELD_VALUE_H */