lib: add internal object pool API and use it; adapt plugins/tests
[babeltrace.git] / include / babeltrace / ctf-ir / trace.h
CommitLineData
bc37ae52
JG
1#ifndef BABELTRACE_CTF_IR_TRACE_H
2#define BABELTRACE_CTF_IR_TRACE_H
3
4/*
5 * BabelTrace - CTF IR: Trace
6 *
7 * Copyright 2014 Jérémie Galarneau <jeremie.galarneau@efficios.com>
8 *
9 * Author: Jérémie Galarneau <jeremie.galarneau@efficios.com>
10 *
11 * Permission is hereby granted, free of charge, to any person obtaining a copy
12 * of this software and associated documentation files (the "Software"), to deal
13 * in the Software without restriction, including without limitation the rights
14 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15 * copies of the Software, and to permit persons to whom the Software is
16 * furnished to do so, subject to the following conditions:
17 *
18 * The above copyright notice and this permission notice shall be included in
19 * all copies or substantial portions of the Software.
20 *
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27 * SOFTWARE.
28 *
29 * The Common Trace Format (CTF) Specification is available at
30 * http://www.efficios.com/ctf
31 */
32
094ff7c0
PP
33/* For bt_get() */
34#include <babeltrace/ref.h>
35
50842bdc 36/* For bt_visitor */
8bf65fbd 37#include <babeltrace/ctf-ir/visitor.h>
9d408fca
PP
38
39/* For bt_bool */
c55a9f58 40#include <babeltrace/types.h>
410d0373 41#include <stdint.h>
bc37ae52
JG
42
43#ifdef __cplusplus
44extern "C" {
45#endif
46
06300316
PP
47/**
48@defgroup ctfirtraceclass CTF IR trace class
49@ingroup ctfir
50@brief CTF IR trace class.
51
6dd2bd0c
PP
52@code
53#include <babeltrace/ctf-ir/trace.h>
54@endcode
55
06300316
PP
56A CTF IR <strong><em>trace class</em></strong> is a descriptor of
57traces.
58
59You can obtain a trace class in two different modes:
60
50842bdc 61- <strong>Normal mode</strong>: use bt_trace_create() to create a
06300316 62 default, empty trace class.
50842bdc 63- <strong>CTF writer mode</strong>: use bt_writer_get_trace() to
dfeca116 64 get the trace class created by a given CTF writer object.
06300316
PP
65
66A trace class has the following properties:
67
68- A \b name.
8a716c8d 69- A <strong>native byte order</strong>: all the
654515f1 70 \link ctfirfieldtypes field types\endlink eventually part of the trace
50842bdc 71 class with a byte order set to #BT_BYTE_ORDER_NATIVE have this
06300316 72 "real" byte order.
4a32fda0 73- A \b UUID.
06300316
PP
74- An \b environment, which is a custom key-value mapping. Keys are
75 strings and values can be strings or integers.
76
77In the Babeltrace CTF IR system, a trace class contains zero or more
78\link ctfirstreamclass stream classes\endlink, and a stream class
79contains zero or more \link ctfireventclass event classes\endlink. You
80can add an event class to a stream class with
50842bdc
PP
81bt_stream_class_add_event_class(). You can add a stream class to a
82trace class with bt_trace_add_stream_class().
06300316 83
c1e730fe 84You can access the streams of a trace, that is, the streams which were
50842bdc
PP
85created from the trace's stream classes with bt_stream_create(),
86with bt_trace_get_stream_by_index().
c1e730fe 87
06300316
PP
88A trace class owns the <strong>trace packet header</strong>
89\link ctfirfieldtypes field type\endlink, which represents the
90\c trace.packet.header CTF scope. This field type describes the
91trace packet header fields of the traces that this trace class
92describes.
93
94The trace packet header field type \em must be a structure field type as
95of Babeltrace \btversion.
96
97As per the CTF specification, the trace packet header field type \em
98must contain a field named \c stream_id if the trace class contains more
99than one stream class.
100
101As a reminder, here's the structure of a CTF packet:
102
103@imgpacketstructure
104
105A trace class also contains zero or more
fe7041b3 106\link ctfirclockclass CTF IR clock classes\endlink.
06300316
PP
107
108@todo
109Elaborate about clock classes irt clock values.
110
2c1c33a4 111As with any Babeltrace object, CTF IR trace class objects have
06300316
PP
112<a href="https://en.wikipedia.org/wiki/Reference_counting">reference
113counts</a>. See \ref refs to learn more about the reference counting
114management of Babeltrace objects.
115
116The following functions \em freeze their trace class parameter on
117success:
118
50842bdc
PP
119- bt_trace_add_stream_class()
120- bt_writer_create_stream()
dfeca116 121 (\link ctfwriter CTF writer\endlink mode only)
06300316
PP
122
123You cannot modify a frozen trace class: it is considered immutable,
124except for:
125
126- Adding a stream class to it with
50842bdc
PP
127 bt_trace_add_stream_class().
128- Adding a CTF IR clock class to it with bt_trace_add_clock_class().
06300316
PP
129- \link refs Reference counting\endlink.
130
06300316
PP
131@sa ctfirstreamclass
132@sa ctfireventclass
133@sa ctfirclockclass
134
135@file
136@brief CTF IR trace class type and functions.
137@sa ctfirtraceclass
138
139@addtogroup ctfirtraceclass
140@{
141*/
142
143/**
50842bdc 144@struct bt_trace
06300316
PP
145@brief A CTF IR trace class.
146@sa ctfirtraceclass
147*/
50842bdc
PP
148struct bt_trace;
149struct bt_stream;
150struct bt_stream_class;
151struct bt_clock_class;
312c056a
PP
152struct bt_field_type;
153struct bt_value;
154struct bt_packet_header_field;
bc37ae52 155
3602afb0
PP
156/**
157@brief User function type to use with
50842bdc 158 bt_trace_add_is_static_listener().
3602afb0
PP
159
160@param[in] trace_class Trace class which is now static.
161@param[in] data User data as passed to
50842bdc 162 bt_trace_add_is_static_listener() when
3602afb0
PP
163 you added the listener.
164
165@prenotnull{trace_class}
166*/
50842bdc
PP
167typedef void (* bt_trace_is_static_listener)(
168 struct bt_trace *trace_class, void *data);
3602afb0 169
8480c8cc
PP
170/**
171@brief User function type to use with
50842bdc 172 bt_trace_add_is_static_listener().
8480c8cc
PP
173
174@param[in] trace_class Trace class to which the listener was added.
175@param[in] data User data as passed to
50842bdc 176 bt_trace_add_is_static_listener() when
8480c8cc
PP
177 you added the listener.
178
179@prenotnull{trace_class}
180*/
50842bdc
PP
181typedef void (* bt_trace_listener_removed)(
182 struct bt_trace *trace_class, void *data);
8480c8cc 183
2204c381 184/**
06300316
PP
185@name Creation function
186@{
187*/
2204c381 188
06300316
PP
189/**
190@brief Creates a default CTF IR trace class.
191
192On success, the trace packet header field type of the created trace
488e09a7
PP
193class is an empty structure field type. You can modify this default
194trace packet header field type after the trace class is created with
3dca2276
PP
195bt_trace_get_packet_header_field_type() and
196bt_trace_set_packet_header_field_type().
06300316
PP
197
198The created trace class has the following initial properties:
199
200- <strong>Name</strong>: none. You can set a name
50842bdc 201 with bt_trace_set_name().
488e09a7 202- <strong>UUID</strong>: none. You can set a UUID with
50842bdc
PP
203 bt_trace_set_uuid().
204- <strong>Native byte order</strong>: #BT_BYTE_ORDER_UNSPECIFIED.
2f4b93cd 205 You can set a native byte order with
50842bdc 206 bt_trace_set_native_byte_order().
06300316 207- <strong>Environment</strong>: empty. You can add environment entries
50842bdc
PP
208 with bt_trace_set_environment_field(),
209 bt_trace_set_environment_field_integer(), and
210 bt_trace_set_environment_field_string().
06300316
PP
211
212@returns Created trace class, or \c NULL on error.
213
214@postsuccessrefcountret1
215*/
50842bdc 216extern struct bt_trace *bt_trace_create(void);
bc37ae52 217
06300316 218/** @} */
e96045d4 219
06300316
PP
220/**
221@name Properties functions
222@{
223*/
e96045d4 224
06300316
PP
225/**
226@brief Returns the name of the CTF IR trace class \p trace_class.
7f800dc7 227
06300316
PP
228On success, \p trace_class remains the sole owner of the returned
229string. The returned string is valid as long as \p trace_class exists
230and is not modified.
bc37ae52 231
06300316
PP
232@param[in] trace_class Trace class of which to get the name.
233@returns Name of trace class \p trace_class, or
234 \c NULL if \p trace_class is unnamed or
235 on error.
3487c9f3 236
06300316
PP
237@prenotnull{trace_class}
238@postrefcountsame{trace_class}
239
50842bdc 240@sa bt_trace_set_name(): Sets the name of a given trace class.
06300316 241*/
50842bdc 242extern const char *bt_trace_get_name(struct bt_trace *trace_class);
06300316
PP
243
244/**
245@brief Sets the name of the CTF IR trace class \p trace_class
246 to \p name.
247
248@param[in] trace_class Trace class of which to set the name.
249@param[in] name Name of the trace class (copied on success).
250@returns 0 on success, or a negative value on error.
251
252@prenotnull{trace_class}
253@prenotnull{name}
254@prehot{trace_class}
255@postrefcountsame{trace_class}
256
50842bdc 257@sa bt_trace_get_name(): Returns the name of a given trace class.
06300316 258*/
50842bdc 259extern int bt_trace_set_name(struct bt_trace *trace_class,
06300316
PP
260 const char *name);
261
262/**
8a716c8d 263@brief Returns the native byte order of the CTF IR trace class
06300316
PP
264 \p trace_class.
265
266@param[in] trace_class Trace class of which to get the default byte
267 order.
488e09a7 268@returns Native byte order of \p trace_class,
50842bdc 269 or #BT_BYTE_ORDER_UNKNOWN on error.
06300316
PP
270
271@prenotnull{trace_class}
272@postrefcountsame{trace_class}
273
50842bdc 274@sa bt_trace_set_native_byte_order(): Sets the native byte order of
8a716c8d 275 a given trace class.
06300316 276*/
50842bdc
PP
277extern enum bt_byte_order bt_trace_get_native_byte_order(
278 struct bt_trace *trace_class);
06300316
PP
279
280/**
8a716c8d 281@brief Sets the native byte order of the CTF IR trace class
391c8f0d 282 \p trace_class to \p native_byte_order.
06300316 283
391c8f0d 284\p native_byte_order \em must be one of:
06300316 285
50842bdc
PP
286- #BT_BYTE_ORDER_LITTLE_ENDIAN
287- #BT_BYTE_ORDER_BIG_ENDIAN
288- #BT_BYTE_ORDER_NETWORK
d41cff38 289- <strong>If the trace is not in CTF writer mode<strong>,
50842bdc 290 #BT_BYTE_ORDER_UNSPECIFIED.
06300316 291
8a716c8d 292@param[in] trace_class Trace class of which to set the native byte
391c8f0d 293 order.
488e09a7 294@param[in] native_byte_order Native byte order of the trace class.
391c8f0d 295@returns 0 on success, or a negative value on error.
06300316
PP
296
297@prenotnull{trace_class}
06300316 298@prehot{trace_class}
50842bdc 299@pre \p native_byte_order is either #BT_BYTE_ORDER_UNSPECIFIED (if the
d41cff38 300 trace is not in CTF writer mode),
50842bdc
PP
301 #BT_BYTE_ORDER_LITTLE_ENDIAN, #BT_BYTE_ORDER_BIG_ENDIAN, or
302 #BT_BYTE_ORDER_NETWORK.
06300316
PP
303@postrefcountsame{trace_class}
304
50842bdc 305@sa bt_trace_get_native_byte_order(): Returns the native byte order of a
8a716c8d 306 given trace class.
06300316 307*/
50842bdc
PP
308extern int bt_trace_set_native_byte_order(struct bt_trace *trace_class,
309 enum bt_byte_order native_byte_order);
06300316 310
4a32fda0
PP
311/**
312@brief Returns the UUID of the CTF IR trace class \p trace_class.
313
314On success, the return value is an array of 16 bytes.
315
316@param[in] trace_class Trace class of which to get the UUID.
317@returns UUID of trace class \p trace_class, or
318 \c NULL if \p trace_class has no UUID or on error.
319
320@prenotnull{trace_class}
321@postrefcountsame{trace_class}
322
50842bdc 323@sa bt_trace_set_uuid(): Sets the UUID of a given trace class.
4a32fda0 324*/
50842bdc
PP
325extern const unsigned char *bt_trace_get_uuid(
326 struct bt_trace *trace_class);
4a32fda0
PP
327
328/**
329@brief Sets the UUID of the CTF IR trace class \p trace_class to
330 \p uuid.
331
332\p uuid \em must be an array of 16 bytes.
333
334@param[in] trace_class Trace class of which to set the UUID.
335@param[in] uuid UUID of the \p trace_class (copied on
336 success).
337@returns 0 on success, or a negative value on error.
338
339@prenotnull{trace_class}
340@prenotnull{uuid}
341@prehot{trace_class}
342@pre \p uuid is an array of 16 bytes.
343@postrefcountsame{trace_class}
344
50842bdc 345@sa bt_trace_get_uuid(): Returns the UUID of a given trace class.
4a32fda0 346*/
50842bdc 347extern int bt_trace_set_uuid(struct bt_trace *trace_class,
4a32fda0
PP
348 const unsigned char *uuid);
349
06300316
PP
350/**
351@brief Returns the number of entries contained in the environment of
352 the CTF IR trace class \p trace_class.
353
354@param[in] trace_class Trace class of which to get the number
355 of environment entries.
356@returns Number of environment entries
357 contained in \p trace_class, or
358 a negative value on error.
359
360@prenotnull{trace_class}
361@postrefcountsame{trace_class}
362*/
50842bdc
PP
363extern int64_t bt_trace_get_environment_field_count(
364 struct bt_trace *trace_class);
e6fa2160 365
06300316
PP
366/**
367@brief Returns the field name of the environment entry at index
368 \p index in the CTF IR trace class \p trace_class.
369
370On success, the returned string is valid as long as this trace class
371exists and is \em not modified. \p trace_class remains the sole owner of
372the returned string.
373
374@param[in] trace_class Trace class of which to get the name of the
375 environment entry at index \p index.
376@param[in] index Index of environment entry to find.
377@returns Name of the environment entry at index \p index
378 in \p trace_class, or \c NULL on error.
379
380@prenotnull{trace_class}
381@pre \p index is lesser than the number of environment entries in
50842bdc 382 \p trace_class (see bt_trace_get_environment_field_count()).
06300316
PP
383@postrefcountsame{trace_class}
384
50842bdc 385@sa bt_trace_get_environment_field_value_by_index(): Finds a trace class's
06300316 386 environment entry by index.
50842bdc 387@sa bt_trace_get_environment_field_value_by_name(): Finds a trace
06300316 388 class's environment entry by name.
50842bdc 389@sa bt_trace_set_environment_field(): Sets the value of a trace
06300316
PP
390 class's environment entry.
391*/
e6fa2160 392extern const char *
50842bdc
PP
393bt_trace_get_environment_field_name_by_index(
394 struct bt_trace *trace_class, uint64_t index);
e6fa2160 395
094ff7c0
PP
396extern struct bt_value *
397bt_trace_borrow_environment_field_value_by_index(struct bt_trace *trace_class,
398 uint64_t index);
399
06300316
PP
400/**
401@brief Returns the value of the environment entry at index
402 \p index in the CTF IR trace class \p trace_class.
403
404@param[in] trace_class Trace class of which to get the value of the
405 environment entry at index \p index.
406@param[in] index Index of the environment entry to find.
407@returns Value of the environment entry at index \p index
408 in \p trace_class, or \c NULL on error.
409
410@prenotnull{trace_class}
411@pre \p index is lesser than the number of environment entries in
50842bdc 412 \p trace_class (see bt_trace_get_environment_field_count()).
06300316
PP
413@postrefcountsame{trace_class}
414@postsuccessrefcountretinc
415
50842bdc 416@sa bt_trace_get_environment_field_value_by_name(): Finds a trace
06300316 417 class's environment entry by name.
50842bdc 418@sa bt_trace_set_environment_field(): Sets the value of a trace
06300316
PP
419 class's environment entry.
420*/
094ff7c0
PP
421static inline
422struct bt_value *bt_trace_get_environment_field_value_by_index(
423 struct bt_trace *trace_class, uint64_t index)
424{
425 return bt_get(bt_trace_borrow_environment_field_value_by_index(
426 trace_class, index));
427}
428
dac5c838 429extern struct bt_value *
094ff7c0
PP
430bt_trace_borrow_environment_field_value_by_name(
431 struct bt_trace *trace_class, const char *name);
e6fa2160 432
06300316
PP
433/**
434@brief Returns the value of the environment entry named \p name
435 in the CTF IR trace class \p trace_class.
436
437@param[in] trace_class Trace class of which to get the value of the
438 environment entry named \p name.
439@param[in] name Name of the environment entry to find.
440@returns Value of the environment entry named \p name
441 in \p trace_class, or \c NULL if there's no such
442 entry or on error.
443
444@prenotnull{trace_class}
445@prenotnull{name}
446@postrefcountsame{trace_class}
447@postsuccessrefcountretinc
448
50842bdc 449@sa bt_trace_get_environment_field_value_by_index(): Finds a trace class's
06300316 450 environment entry by index.
50842bdc 451@sa bt_trace_set_environment_field(): Sets the value of a trace
06300316
PP
452 class's environment entry.
453*/
094ff7c0
PP
454static inline
455struct bt_value *
50842bdc 456bt_trace_get_environment_field_value_by_name(
094ff7c0
PP
457 struct bt_trace *trace_class, const char *name)
458{
459 return bt_get(
460 bt_trace_borrow_environment_field_value_by_name(
461 trace_class, name));
462}
e6fa2160 463
06300316
PP
464/**
465@brief Sets the environment entry named \p name in the
466 CTF IR trace class \p trace_class to \p value.
467
468If an environment entry named \p name exists in \p trace_class, its
469value is first put, and then replaced by \p value.
470
471@param[in] trace_class Trace class of which to set the environment
472 entry.
473@param[in] name Name of the environment entry to set (copied
474 on success).
475@param[in] value Value of the environment entry named \p name.
476@returns 0 on success, or a negative value on error.
477
478@prenotnull{trace_class}
479@prenotnull{name}
480@prenotnull{value}
481@prehot{trace_class}
482@pre \p value is an
483 \link bt_value_integer_create() integer value object\endlink
484 or a
485 \link bt_value_string_create() string value object\endlink.
486@postrefcountsame{trace_class}
487@postsuccessrefcountinc{value}
488
50842bdc 489@sa bt_trace_get_environment_field_value_by_index(): Finds a trace class's
06300316 490 environment entry by index.
50842bdc 491@sa bt_trace_get_environment_field_value_by_name(): Finds a trace
06300316
PP
492 class's environment entry by name.
493*/
50842bdc
PP
494extern int bt_trace_set_environment_field(
495 struct bt_trace *trace_class, const char *name,
06300316 496 struct bt_value *value);
bc37ae52 497
06300316
PP
498/**
499@brief Sets the environment entry named \p name in the
500 CTF IR trace class \p trace_class to \p value.
501
502If an environment entry named \p name exists in \p trace_class, its
503value is first put, and then replaced by a new
504\link bt_value_integer_create() integer value object\endlink
505containing \p value.
506
507@param[in] trace_class Trace class of which to set the environment
508 entry.
509@param[in] name Name of the environment entry to set (copied
510 on success).
511@param[in] value Value of the environment entry named \p name.
512@returns 0 on success, or a negative value on error.
513
514@prenotnull{trace_class}
515@prenotnull{name}
516@prehot{trace_class}
517@postrefcountsame{trace_class}
518
50842bdc 519@sa bt_trace_set_environment_field(): Sets the value of a trace
06300316
PP
520 class's environment entry.
521*/
50842bdc
PP
522extern int bt_trace_set_environment_field_integer(
523 struct bt_trace *trace_class, const char *name,
06300316 524 int64_t value);
884cd6c3 525
06300316
PP
526/**
527@brief Sets the environment entry named \p name in the
528 CTF IR trace class \p trace_class to \p value.
529
530If an environment entry named \p name exists in \p trace_class, its
531value is first put, and then replaced by a new
532\link bt_value_string_create() string value object\endlink
533containing \p value.
534
535@param[in] trace_class Trace class of which to set the environment
536 entry.
537@param[in] name Name of the environment entry to set (copied
538 on success).
539@param[in] value Value of the environment entry named \p name
540 (copied on success).
541@returns 0 on success, or a negative value on error.
542
543@prenotnull{trace_class}
544@prenotnull{name}
545@prenotnull{value}
546@prehot{trace_class}
547@postrefcountsame{trace_class}
548
50842bdc 549@sa bt_trace_set_environment_field(): Sets the value of a trace
06300316
PP
550 class's environment entry.
551*/
50842bdc
PP
552extern int bt_trace_set_environment_field_string(
553 struct bt_trace *trace_class, const char *name,
06300316
PP
554 const char *value);
555
556/** @} */
557
558/**
559@name Contained field types functions
560@{
561*/
562
094ff7c0
PP
563extern struct bt_field_type *bt_trace_borrow_packet_header_field_type(
564 struct bt_trace *trace_class);
565
06300316
PP
566/**
567@brief Returns the packet header field type of the CTF IR trace class
568 \p trace_class.
569
570@param[in] trace_class Trace class of which to get the packet
571 header field type.
572@returns Packet header field type of \p trace_class,
6b783f49
JG
573 or \c NULL if \p trace_class has no packet header field
574 type or on error.
06300316
PP
575
576@prenotnull{trace_class}
c2f29fb9 577@postrefcountsame{trace_class}
6b783f49
JG
578@post <strong>On success, if the return value is a field type</strong>, its
579 reference count is incremented.
06300316 580
3dca2276 581@sa bt_trace_set_packet_header_field_type(): Sets the packet
06300316
PP
582 header field type of a given trace class.
583*/
094ff7c0
PP
584static inline
585struct bt_field_type *bt_trace_get_packet_header_field_type(
586 struct bt_trace *trace_class)
587{
588 return bt_get(bt_trace_borrow_packet_header_field_type(trace_class));
589}
06300316 590
312c056a
PP
591extern struct bt_packet_header_field *bt_trace_create_packet_header_field(
592 struct bt_trace *trace);
593
06300316
PP
594/**
595@brief Sets the packet header field type of the CTF IR trace class
6b783f49
JG
596 \p trace_class to \p packet_header_type, or unsets the current packet
597 header field type from \p trace_class.
598
599If \p packet_header_type is \c NULL, then this function unsets the current
600packet header field type from \p trace_class, effectively making \p trace_class
601a trace without a packet header field type.
06300316 602
6b783f49
JG
603As of Babeltrace \btversion, if \p packet_header_type is not \c NULL,
604\p packet_header_type \em must be a CTF IR structure field type object.
06300316
PP
605
606@param[in] trace_class Trace class of which to set the packet
607 header field type.
6b783f49
JG
608@param[in] packet_header_type Packet header field type, or \c NULL to unset
609 the current packet header field type.
06300316
PP
610@returns 0 on success, or a negative value on error.
611
612@prenotnull{trace_class}
06300316 613@prehot{trace_class}
6b783f49
JG
614@pre <strong>\p packet_header_type, if not \c NULL</strong>, is a CTF IR
615 structure field type.
06300316 616@postrefcountsame{trace_class}
6b783f49
JG
617@post <strong>On success, if \p packet_header_type is not \c NULL</strong>,
618 the reference count of \p packet_header_type is incremented.
06300316 619
3dca2276 620@sa bt_trace_get_packet_header_field_type(): Returns the packet
06300316
PP
621 header field type of a given trace class.
622*/
3dca2276 623extern int bt_trace_set_packet_header_field_type(struct bt_trace *trace_class,
50842bdc 624 struct bt_field_type *packet_header_type);
06300316
PP
625
626/** @} */
627
628/**
fe7041b3 629@name Contained clock classes functions
06300316
PP
630@{
631*/
632
633/**
fe7041b3 634@brief Returns the number of CTF IR clock classes contained in the
06300316
PP
635 CTF IR trace class \p trace_class.
636
637@param[in] trace_class Trace class of which to get the number
fe7041b3
PP
638 of contained clock classes.
639@returns Number of contained clock classes
06300316
PP
640 contained in \p trace_class, or a negative
641 value on error.
642
643@prenotnull{trace_class}
644@postrefcountsame{trace_class}
645*/
50842bdc
PP
646extern int64_t bt_trace_get_clock_class_count(
647 struct bt_trace *trace_class);
06300316 648
094ff7c0
PP
649extern struct bt_clock_class *bt_trace_borrow_clock_class_by_index(
650 struct bt_trace *trace_class, uint64_t index);
651
06300316 652/**
fe7041b3
PP
653@brief Returns the CTF IR clock class at index \p index in the CTF
654 IR trace class \p trace_class.
06300316 655
fe7041b3
PP
656@param[in] trace_class Trace class of which to get the clock class
657 contained at index \p index.
658@param[in] index Index of the clock class to find in
659 \p trace_class.
660@returns Clock class at index \p index in \p trace_class,
661 or \c NULL on error.
06300316
PP
662
663@prenotnull{trace_class}
664@pre \p index is lesser than the number of clock classes contained in
665 the trace class \p trace_class (see
50842bdc 666 bt_trace_get_clock_class_count()).
06300316
PP
667@postrefcountsame{trace_class}
668@postsuccessrefcountretinc
669
50842bdc 670@sa bt_trace_get_clock_class_by_name(): Finds a clock class by name
fe7041b3 671 in a given trace class.
50842bdc 672@sa bt_trace_add_clock_class(): Adds a clock class to a trace class.
06300316 673*/
094ff7c0
PP
674static inline
675struct bt_clock_class *bt_trace_get_clock_class_by_index(
676 struct bt_trace *trace_class, uint64_t index)
677{
678 return bt_get(bt_trace_borrow_clock_class_by_index(
679 trace_class, index));
680}
681
682extern struct bt_clock_class *bt_trace_borrow_clock_class_by_name(
683 struct bt_trace *trace_class, const char *name);
884cd6c3 684
06300316 685/**
fe7041b3
PP
686@brief Returns the CTF IR clock class named \c name found in the CTF
687 IR trace class \p trace_class.
06300316 688
fe7041b3
PP
689@param[in] trace_class Trace class of which to get the clock class
690 named \p name.
691@param[in] name Name of the clock class to find in \p trace_class.
692@returns Clock class named \p name in \p trace_class,
693 or \c NULL on error.
06300316
PP
694
695@prenotnull{trace_class}
696@prenotnull{name}
697@postrefcountsame{trace_class}
698@postsuccessrefcountretinc
699
50842bdc 700@sa bt_trace_get_clock_class_by_index(): Returns the clock class contained
ac0c6bdd 701 in a given trace class at a given index.
50842bdc 702@sa bt_trace_add_clock_class(): Adds a clock class to a trace class.
06300316 703*/
094ff7c0
PP
704static inline
705struct bt_clock_class *bt_trace_get_clock_class_by_name(
706 struct bt_trace *trace_class, const char *name)
707{
708 return bt_get(bt_trace_borrow_clock_class_by_name(trace_class, name));
709}
ef0c4a15 710
06300316
PP
711/**
712@brief Adds the CTF IR clock class \p clock_class to the CTF IR
713 trace class \p trace_class.
ef0c4a15 714
fe7041b3 715On success, \p trace_class contains \p clock_class.
06300316 716
fe7041b3
PP
717You can call this function even if \p trace_class or \p clock_class
718are frozen.
06300316
PP
719
720@param[in] trace_class Trace class to which to add \p clock_class.
721@param[in] clock_class Clock class to add to \p trace_class.
722@returns 0 on success, or a negative value on error.
723
724@prenotnull{trace_class}
725@prenotnull{clock_class}
726@postrefcountsame{trace_class}
727@postsuccessrefcountinc{clock_class}
30484384 728@post <strong>On success, if \p trace_class is frozen</strong>,
2c1c33a4 729 \p clock_class is frozen.
06300316 730
50842bdc 731@sa bt_trace_get_clock_class_by_index(): Returns the clock class contained
ac0c6bdd 732 in a given trace class at a given index.
50842bdc 733@sa bt_trace_get_clock_class_by_name(): Finds a clock class by name
fe7041b3 734 in a given trace class.
06300316 735*/
50842bdc
PP
736extern int bt_trace_add_clock_class(struct bt_trace *trace_class,
737 struct bt_clock_class *clock_class);
06300316
PP
738
739/** @} */
740
741/**
742@name Stream class children functions
743@{
744*/
745
746/**
747@brief Returns the number of stream classes contained in the
748 CTF IR trace class \p trace_class.
749
750@param[in] trace_class Trace class of which to get the number
751 of children stream classes.
752@returns Number of children stream classes
753 contained in \p trace_class, or a negative
754 value on error.
755
756@prenotnull{trace_class}
757@postrefcountsame{trace_class}
758*/
50842bdc
PP
759extern int64_t bt_trace_get_stream_class_count(
760 struct bt_trace *trace_class);
06300316 761
094ff7c0
PP
762extern struct bt_stream_class *bt_trace_borrow_stream_class_by_index(
763 struct bt_trace *trace_class, uint64_t index);
764
06300316
PP
765/**
766@brief Returns the stream class at index \p index in the CTF IR trace
767 class \p trace_class.
768
769@param[in] trace_class Trace class of which to get the stream class.
770@param[in] index Index of the stream class to find.
771@returns Stream class at index \p index, or \c NULL
772 on error.
773
774@prenotnull{trace_class}
775@pre \p index is lesser than the number of stream classes contained in
776 the trace class \p trace_class (see
50842bdc 777 bt_trace_get_stream_class_count()).
06300316 778@postrefcountsame{trace_class}
06300316 779
50842bdc
PP
780@sa bt_trace_get_stream_class_by_id(): Finds a stream class by ID.
781@sa bt_trace_add_stream_class(): Adds a stream class to a trace class.
06300316 782*/
094ff7c0
PP
783static inline
784struct bt_stream_class *bt_trace_get_stream_class_by_index(
785 struct bt_trace *trace_class, uint64_t index)
786{
787 return bt_get(bt_trace_borrow_stream_class_by_index(
788 trace_class, index));
789}
790
791extern struct bt_stream_class *bt_trace_borrow_stream_class_by_id(
792 struct bt_trace *trace_class, uint64_t id);
ef0c4a15 793
06300316
PP
794/**
795@brief Returns the stream class with ID \c id found in the CTF IR
796 trace class \p trace_class.
797
798@param[in] trace_class Trace class of which to get the stream class.
799@param[in] id ID of the stream class to find.
800@returns Stream class with ID \p id, or \c NULL
801 on error.
802
803@prenotnull{trace_class}
804@postrefcountsame{trace_class}
805@postsuccessrefcountretinc
806
50842bdc 807@sa bt_trace_get_stream_class_by_index(): Returns the stream class contained
ac0c6bdd 808 in a given trace class at a given index.
50842bdc 809@sa bt_trace_add_stream_class(): Adds a stream class to a trace class.
06300316 810*/
094ff7c0
PP
811static inline
812struct bt_stream_class *bt_trace_get_stream_class_by_id(
813 struct bt_trace *trace_class, uint64_t id)
814{
815 return bt_get(bt_trace_borrow_stream_class_by_id(trace_class, id));
816}
4841ccc1 817
06300316
PP
818/**
819@brief Adds the CTF IR stream class \p stream_class to the
820 CTF IR trace class \p trace_class.
7e4347a3 821
06300316 822On success, \p stream_class becomes the child of \p trace_class.
bc37ae52 823
06300316 824You can only add a given stream class to one trace class.
4ed90fb3 825
06300316 826You can call this function even if \p trace_class is frozen.
bc37ae52 827
4cdafd51
PP
828This function tries to resolve the needed
829\link ctfirfieldtypes CTF IR field type\endlink of the dynamic field
830types that are found anywhere in the root field types of
831\p stream_class and of all its currently contained
832\link ctfireventclass CTF IR event classes\endlink. If any automatic
833resolving fails, then this function fails.
834
06300316
PP
835@param[in] trace_class Trace class to which to add \p stream_class.
836@param[in] stream_class Stream class to add to \p trace_class.
837@returns 0 on success, or a negative value on error.
d246b111 838
06300316
PP
839@prenotnull{trace_class}
840@prenotnull{stream_class}
841@postrefcountsame{trace_class}
842@postsuccessrefcountinc{stream_class}
2c1c33a4 843@postsuccessfrozen{stream_class}
d246b111 844
50842bdc 845@sa bt_trace_get_stream_class_by_index(): Returns the stream class contained
ac0c6bdd 846 in a given trace class at a given index.
50842bdc 847@sa bt_trace_get_stream_class_by_id(): Finds a stream class by ID.
06300316 848*/
50842bdc
PP
849extern int bt_trace_add_stream_class(struct bt_trace *trace_class,
850 struct bt_stream_class *stream_class);
06300316
PP
851
852/** @} */
853
c1e730fe
PP
854/**
855@name Stream children functions
856@{
857*/
858
859/**
860@brief Returns the number of streams contained in the CTF IR trace
861 class \p trace_class.
862
863@param[in] trace_class Trace class of which to get the number
864 of children streams.
865@returns Number of children streams
866 contained in \p trace_class, or a negative
867 value on error.
868
869@prenotnull{trace_class}
870@postrefcountsame{trace_class}
871*/
50842bdc 872extern int64_t bt_trace_get_stream_count(struct bt_trace *trace_class);
c1e730fe 873
094ff7c0
PP
874extern struct bt_stream *bt_trace_borrow_stream_by_index(
875 struct bt_trace *trace_class, uint64_t index);
876
c1e730fe
PP
877/**
878@brief Returns the stream at index \p index in the CTF IR trace
879 class \p trace_class.
880
881@param[in] trace_class Trace class of which to get the stream.
882@param[in] index Index of the stream to find.
883@returns Stream at index \p index, or \c NULL
884 on error.
885
886@prenotnull{trace_class}
887@pre \p index is lesser than the number of streams contained in
888 the trace class \p trace_class (see
50842bdc 889 bt_trace_get_stream_count()).
c1e730fe
PP
890@postrefcountsame{trace_class}
891*/
094ff7c0
PP
892static inline
893struct bt_stream *bt_trace_get_stream_by_index(
894 struct bt_trace *trace_class, uint64_t index)
895{
896 return bt_get(bt_trace_borrow_stream_by_index(trace_class, index));
897}
c1e730fe
PP
898
899/** @} */
900
06300316
PP
901/**
902@name Misc. functions
903@{
904*/
905
5acf2ae6
PP
906/**
907@brief Returns whether or not the CTF IR trace class \p trace_class
908 is static.
909
910It is guaranteed that a static trace class will never contain new
911streams, stream classes, or clock classes. A static class is always
912frozen.
913
50842bdc 914This function returns #BT_TRUE if bt_trace_set_is_static() was
5acf2ae6
PP
915previously called on it.
916
917@param[in] trace_class Trace class to check.
c55a9f58 918@returns #BT_TRUE if \p trace_class is static,
5acf2ae6 919
50842bdc 920@sa bt_trace_set_is_static(): Makes a trace class static.
5acf2ae6 921*/
50842bdc 922extern bt_bool bt_trace_is_static(struct bt_trace *trace_class);
5acf2ae6
PP
923
924/**
925@brief Makes the CTF IR trace class \p trace_class static.
926
927A static trace class is frozen and you cannot call any modifying
928function on it:
929
50842bdc
PP
930- bt_trace_add_stream_class()
931- bt_trace_add_clock_class()
932- bt_trace_set_environment_field()
933- bt_trace_set_environment_field_integer()
934- bt_trace_set_environment_field_string()
935- bt_trace_add_is_static_listener()
5acf2ae6 936
50842bdc 937You cannot create a stream with bt_stream_create() with any of the
5acf2ae6
PP
938stream classes of a static trace class.
939
940@param[in] trace_class Trace class to make static.
941@returns 0 on success, or a negative value on error.
942
943@prenotnull{trace_class}
944@postrefcountsame{trace_class}
945@postsuccessfrozen{trace_class}
946
50842bdc 947@sa bt_trace_is_static(): Checks whether or not a given trace class
5acf2ae6 948 is static.
50842bdc 949@sa bt_trace_add_is_static_listener(): Adds a listener to a trace
3602afb0 950 class which is called when the trace class is made static.
5acf2ae6 951*/
50842bdc 952extern int bt_trace_set_is_static(struct bt_trace *trace_class);
5acf2ae6 953
3602afb0
PP
954/**
955@brief Adds the listener \p listener to the CTF IR trace class
956 \p trace_class which is called when the trace is made static.
957
958\p listener is called with \p data, the user data, the first time
50842bdc 959bt_trace_set_is_static() is called on \p trace_class.
3602afb0 960
8480c8cc 961When the trace is destroyed, or when you remove the added listener with
50842bdc 962bt_trace_remove_is_static_listener(), \p listener_removed is called
8480c8cc
PP
963if it's not \c NULL. You can use \p listener_removed to free any dynamic
964data which exists only for the added listener. You cannot call
965any function which modifies \p trace_class during the execution of
50842bdc 966\p listener_removed, including bt_trace_remove_is_static_listener().
8480c8cc 967
3602afb0 968This function fails if \p trace_class is already static: you need to
50842bdc 969check the condition first with bt_trace_is_static().
3602afb0
PP
970
971On success, this function returns a unique numeric identifier for this
972listener within \p trace. You can use this identifier to remove the
973specific listener you added with
50842bdc 974bt_trace_remove_is_static_listener().
3602afb0 975
8480c8cc
PP
976@param[in] trace_class Trace class to which to add the
977 listener.
978@param[in] listener Listener to add to \p trace_class.
979@param[in] listener_removed Remove listener called when \p listener
980 is removed from \p trace_class, or
981 \c NULL if you don't need a remove
982 listener.
983@param[in] data User data passed when \p listener or
984 \p listener_removed is called.
985@returns A unique numeric identifier for this
986 listener on success (0 or greater), or a
987 negative value on error.
3602afb0
PP
988
989@prenotnull{trace_class}
990@prenotnull{listener}
991@pre \p trace_class is not static.
992@postrefcountsame{trace_class}
993
50842bdc 994@sa bt_trace_remove_is_static_listener(): Removes a "trace is
3602afb0
PP
995 static" listener from a trace class previously added with this
996 function.
50842bdc 997@sa bt_trace_is_static(): Checks whether or not a given trace class
3602afb0 998 is static.
50842bdc 999@sa bt_trace_set_is_static(): Makes a trace class static.
3602afb0 1000*/
50842bdc
PP
1001extern int bt_trace_add_is_static_listener(
1002 struct bt_trace *trace_class,
1003 bt_trace_is_static_listener listener,
1004 bt_trace_listener_removed listener_removed, void *data);
3602afb0
PP
1005
1006/**
1007@brief Removes the "trace is static" listener identified by
1008 \p listener_id from the trace class \p trace_class.
1009
1010@param[in] trace_class Trace class from which to remove the listener
1011 identified by \p listener_id.
1012@param[in] listener_id Identifier of the listener to remove from
1013 \p trace_class.
1014@returns 0 if this function removed the listener, or
1015 a negative value on error.
1016
1017@prenotnull{trace_class}
1018@pre \p listener_id is the identifier of a listener that you previously
50842bdc 1019 added with bt_trace_add_is_static_listener() and did not
3602afb0
PP
1020 already remove with this function.
1021@postrefcountsame{trace_class}
1022
50842bdc 1023@sa bt_trace_add_is_static_listener(): Adds a listener to a trace
3602afb0
PP
1024 class which is called when the trace class is made static.
1025*/
50842bdc
PP
1026extern int bt_trace_remove_is_static_listener(
1027 struct bt_trace *trace_class, int listener_id);
3602afb0 1028
06300316
PP
1029/**
1030@brief Accepts the visitor \p visitor to visit the hierarchy of the
1031 CTF IR trace class \p trace_class.
1032
1033This function traverses the hierarchy of \p trace_class in pre-order
1034and calls \p visitor on each element.
1035
1036The trace class itself is visited first, then, for each children stream
1037class, the stream class itself, and all its children event classes.
1038
1039@param[in] trace_class Trace class to visit.
1040@param[in] visitor Visiting function.
1041@param[in] data User data.
1042@returns 0 on success, or a negative value on error.
1043
1044@prenotnull{trace_class}
1045@prenotnull{visitor}
1046*/
50842bdc
PP
1047extern int bt_trace_visit(struct bt_trace *trace_class,
1048 bt_visitor visitor, void *data);
8bf65fbd 1049
06300316
PP
1050/** @} */
1051
35827558
PP
1052/** @} */
1053
bc37ae52
JG
1054#ifdef __cplusplus
1055}
1056#endif
1057
1058#endif /* BABELTRACE_CTF_IR_TRACE_H */
This page took 0.09579 seconds and 4 git commands to generate.