lib: compile liblttng-ctl as C++
[lttng-tools.git] / include / lttng / event-field-value.h
CommitLineData
d28fcdec
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_FIELD_VALUE_H
9#define LTTNG_EVENT_FIELD_VALUE_H
10
4bd69c5f 11#include <lttng/lttng-export.h>
d28fcdec
PP
12#include <stdint.h>
13
14struct lttng_event_field_value;
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
20/*
21 * Types of a event field value expression.
22 */
23enum lttng_event_field_value_type {
24 /*
25 * Unknown.
26 */
27 LTTNG_EVENT_FIELD_VALUE_TYPE_UNKNOWN = -2,
28
29 /*
30 * Returned by lttng_event_field_value_get_type() with an
31 * invalid parameter.
32 */
33 LTTNG_EVENT_FIELD_VALUE_TYPE_INVALID = -1,
34
35 /*
36 * Unsigned integer event field value.
37 */
38 LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_INT = 0,
39
40 /*
41 * Signed integer event field value.
42 */
43 LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_INT = 1,
44
45 /*
46 * Unsigned enumeration event field value.
47 *
48 * This type conceptually inherits
49 * `LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_INT`.
50 */
51 LTTNG_EVENT_FIELD_VALUE_TYPE_UNSIGNED_ENUM = 2,
52
53 /*
54 * Signed enumeration event field value.
55 *
56 * This type conceptually inherits
57 * `LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_INT`.
58 */
59 LTTNG_EVENT_FIELD_VALUE_TYPE_SIGNED_ENUM = 3,
60
61 /*
62 * Real event field value.
63 */
64 LTTNG_EVENT_FIELD_VALUE_TYPE_REAL = 4,
65
66 /*
67 * String event field value.
68 */
69 LTTNG_EVENT_FIELD_VALUE_TYPE_STRING = 5,
70
71 /*
72 * Array event field value.
73 */
74 LTTNG_EVENT_FIELD_VALUE_TYPE_ARRAY = 6,
75};
76
77/*
78 * Event field value API status codes.
79 */
80enum lttng_event_field_value_status {
81 /*
82 * Event field value is not available.
83 */
84 LTTNG_EVENT_FIELD_VALUE_STATUS_UNAVAILABLE = -2,
85
86 /*
87 * Invalid parameter.
88 */
89 LTTNG_EVENT_FIELD_VALUE_STATUS_INVALID = -1,
90
91 /*
92 * Success.
93 */
94 LTTNG_EVENT_FIELD_VALUE_STATUS_OK = 0,
95};
96
97/*
98 * Returns the type of the event field value `field_val`, or:
99 *
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.
103 *
104 * `LTTNG_EVENT_FIELD_VALUE_TYPE_INVALID`:
105 * `field_val` is `NULL`.
106 */
4bd69c5f 107LTTNG_EXPORT extern enum lttng_event_field_value_type lttng_event_field_value_get_type(
d28fcdec
PP
108 const struct lttng_event_field_value *field_val);
109
110/*
111 * Sets `*val` to the raw value of the unsigned integer/enumeration
112 * event field value `field_val`.
113 *
114 * Returns:
115 *
116 * `LTTNG_EVENT_FIELD_VALUE_STATUS_OK`:
117 * Success.
118 *
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`.
124 * * `val` is `NULL`.
125 */
4bd69c5f 126LTTNG_EXPORT extern enum lttng_event_field_value_status
d28fcdec
PP
127lttng_event_field_value_unsigned_int_get_value(
128 const struct lttng_event_field_value *field_val, uint64_t *val);
129
130/*
131 * Sets `*val` to the raw value of the signed integer/enumeration event
132 * field value `field_val`.
133 *
134 * Returns:
135 *
136 * `LTTNG_EVENT_FIELD_VALUE_STATUS_OK`:
137 * Success.
138 *
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`.
144 * * `val` is `NULL`.
145 */
4bd69c5f 146LTTNG_EXPORT extern enum lttng_event_field_value_status
d28fcdec
PP
147lttng_event_field_value_signed_int_get_value(
148 const struct lttng_event_field_value *field_val, int64_t *val);
149
150/*
151 * Sets `*val` to the raw value of the real event field value
152 * `field_val`.
153 *
154 * Returns:
155 *
156 * `LTTNG_EVENT_FIELD_VALUE_STATUS_OK`:
157 * Success.
158 *
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`.
163 * * `val` is `NULL`.
164 */
4bd69c5f 165LTTNG_EXPORT extern enum lttng_event_field_value_status
d28fcdec
PP
166lttng_event_field_value_real_get_value(
167 const struct lttng_event_field_value *field_val, double *val);
168
169/*
170 * Returns the raw value (an UTF-8 C string) of the string event field
171 * value `field_val`, or `NULL` if:
172 *
7c920b63
PP
173 * `LTTNG_EVENT_FIELD_VALUE_STATUS_OK`:
174 * Success.
175 *
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`.
d28fcdec 180 */
4bd69c5f 181LTTNG_EXPORT extern enum lttng_event_field_value_status
7c920b63
PP
182lttng_event_field_value_string_get_value(
183 const struct lttng_event_field_value *field_val,
184 const char **value);
d28fcdec
PP
185
186/*
187 * Sets `*length` to the length (the number of contained elements) of
188 * the array event field value `field_val`.
189 *
190 * Returns:
191 *
192 * `LTTNG_EVENT_FIELD_VALUE_STATUS_OK`:
193 * Success.
194 *
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`.
200 */
4bd69c5f 201LTTNG_EXPORT extern enum lttng_event_field_value_status
d28fcdec
PP
202lttng_event_field_value_array_get_length(
203 const struct lttng_event_field_value *field_val,
204 unsigned int *length);
205
206/*
207 * Sets `*elem_field_val` to the event field value at index `index` in
208 * the array event field value `field_val`.
209 *
210 * Returns:
211 *
212 * `LTTNG_EVENT_FIELD_VALUE_STATUS_OK`:
213 * Success.
214 *
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().
221 *
222 * `LTTNG_EVENT_FIELD_VALUE_STATUS_UNAVAILABLE`:
223 * * No event field value exists at index `index` within
224 * `field_val`.
225 */
4bd69c5f 226LTTNG_EXPORT extern enum lttng_event_field_value_status
d28fcdec
PP
227lttng_event_field_value_array_get_element_at_index(
228 const struct lttng_event_field_value *field_val,
229 unsigned int index,
230 const struct lttng_event_field_value **elem_field_val);
231
232#ifdef __cplusplus
233}
234#endif
235
236#endif /* LTTNG_EVENT_FIELD_VALUE_H */
This page took 0.032425 seconds and 4 git commands to generate.