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
13 struct lttng_event_field_value
;
20 * Types of a event field value expression.
22 enum lttng_event_field_value_type
{
26 LTTNG_EVENT_FIELD_VALUE_TYPE_UNKNOWN
= -2,
29 * Returned by lttng_event_field_value_get_type() with an
32 LTTNG_EVENT_FIELD_VALUE_TYPE_INVALID
= -1,
35 * Unsigned integer event field value.
37 LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_INT
= 0,
40 * Signed integer event field value.
42 LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_INT
= 1,
45 * Unsigned enumeration event field value.
47 * This type conceptually inherits
48 * `LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_INT`.
50 LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_ENUM
= 2,
53 * Signed enumeration event field value.
55 * This type conceptually inherits
56 * `LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_INT`.
58 LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_ENUM
= 3,
61 * Real event field value.
63 LTTNG_EVENT_FIELD_VALUE_TYPE_REAL
= 4,
66 * String event field value.
68 LTTNG_EVENT_FIELD_VALUE_TYPE_STRING
= 5,
71 * Array event field value.
73 LTTNG_EVENT_FIELD_VALUE_TYPE_ARRAY
= 6,
77 * Event field value API status codes.
79 enum lttng_event_field_value_status
{
81 * Event field value is not available.
83 LTTNG_EVENT_FIELD_VALUE_STATUS_UNAVAILABLE
= -2,
88 LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID
= -1,
93 LTTNG_EVENT_FIELD_VALUE_STATUS_OK
= 0,
97 * Returns the type of the event field value `field_val`, or:
99 * `LTTNG_EVENT_FIELD_VALUE_TYPE_UNKNOWN`:
100 * The type of `field_val` is unknown as of this version of the
101 * LTTng control library.
103 * `LTTNG_EVENT_FIELD_VALUE_TYPE_INVALID`:
104 * `field_val` is `NULL`.
106 extern enum lttng_event_field_value_type
lttng_event_field_value_get_type(
107 const struct lttng_event_field_value
*field_val
);
110 * Sets `*val` to the raw value of the unsigned integer/enumeration
111 * event field value `field_val`.
115 * `LTTNG_EVENT_FIELD_VALUE_STATUS_OK`:
118 * `LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID`:
119 * * `field_val` is `NULL`.
120 * * The type of `field_val` is not
121 * `LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_INT` or
122 * `LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_ENUM`.
125 extern enum lttng_event_field_value_status
126 lttng_event_field_value_unsigned_int_get_value(
127 const struct lttng_event_field_value
*field_val
, uint64_t *val
);
130 * Sets `*val` to the raw value of the signed integer/enumeration event
131 * field value `field_val`.
135 * `LTTNG_EVENT_FIELD_VALUE_STATUS_OK`:
138 * `LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID`:
139 * * `field_val` is `NULL`.
140 * * The type of `field_val` is not
141 * `LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_INT` or
142 * `LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_ENUM`.
145 extern enum lttng_event_field_value_status
146 lttng_event_field_value_signed_int_get_value(
147 const struct lttng_event_field_value
*field_val
, int64_t *val
);
150 * Sets `*val` to the raw value of the real event field value
155 * `LTTNG_EVENT_FIELD_VALUE_STATUS_OK`:
158 * `LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID`:
159 * * `field_val` is `NULL`.
160 * * The type of `field_val` is not
161 * `LTTNG_EVENT_FIELD_VALUE_TYPE_REAL`.
164 extern enum lttng_event_field_value_status
165 lttng_event_field_value_real_get_value(
166 const struct lttng_event_field_value
*field_val
, double *val
);
169 * Returns the raw value (an UTF-8 C string) of the string event field
170 * value `field_val`, or `NULL` if:
172 * `LTTNG_EVENT_FIELD_VALUE_STATUS_OK`:
175 * `LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID`:
176 * * `field_val` is `NULL`.
177 * * The type of `field_val` is not
178 * `LTTNG_EVENT_FIELD_VALUE_TYPE_STRING`.
180 extern enum lttng_event_field_value_status
181 lttng_event_field_value_string_get_value(
182 const struct lttng_event_field_value
*field_val
,
186 * Sets `*length` to the length (the number of contained elements) of
187 * the array event field value `field_val`.
191 * `LTTNG_EVENT_FIELD_VALUE_STATUS_OK`:
194 * `LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID`:
195 * * `field_val` is `NULL`.
196 * * The type of `field_val` is not
197 * `LTTNG_EVENT_FIELD_VALUE_TYPE_ARRAY`.
198 * * `length` is `NULL`.
200 extern enum lttng_event_field_value_status
201 lttng_event_field_value_array_get_length(
202 const struct lttng_event_field_value
*field_val
,
203 unsigned int *length
);
206 * Sets `*elem_field_val` to the event field value at index `index` in
207 * the array event field value `field_val`.
211 * `LTTNG_EVENT_FIELD_VALUE_STATUS_OK`:
214 * `LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID`:
215 * * `field_val` is `NULL`.
216 * * The type of `field_val` is not
217 * `LTTNG_EVENT_FIELD_VALUE_TYPE_ARRAY`.
218 * * `index` is greater than or equal to the length of `field_val`,
219 * as returned by lttng_event_field_value_array_get_length().
221 * `LTTNG_EVENT_FIELD_VALUE_STATUS_UNAVAILABLE`:
222 * * No event field value exists at index `index` within
225 extern enum lttng_event_field_value_status
226 lttng_event_field_value_array_get_element_at_index(
227 const struct lttng_event_field_value
*field_val
,
229 const struct lttng_event_field_value
**elem_field_val
);
235 #endif /* LTTNG_EVENT_FIELD_VALUE_H */