cpp-common/bt2c/fmt.hpp: use `wise_enum::string_type` in `EnableIfIsWiseEnum` definition
[babeltrace.git] / src / lib / trace-ir / event.c
CommitLineData
273b65be 1/*
0235b0db
MJ
2 * SPDX-License-Identifier: MIT
3 *
e2f7325d 4 * Copyright 2017-2018 Philippe Proulx <pproulx@efficios.com>
de9dd397 5 * Copyright 2013, 2014 Jérémie Galarneau <jeremie.galarneau@efficios.com>
273b65be
JG
6 */
7
350ad6c1 8#define BT_LOG_TAG "LIB/EVENT"
c2d9d9cf 9#include "lib/logging.h"
7b010242 10
d98421f2 11#include "lib/assert-cond.h"
43c59509 12#include <babeltrace2/trace-ir/event.h>
3fadfbc0 13#include <babeltrace2/trace-ir/event-class.h>
3fadfbc0 14#include <babeltrace2/trace-ir/stream-class.h>
3fadfbc0 15#include <babeltrace2/trace-ir/packet.h>
3fadfbc0 16#include <babeltrace2/trace-ir/trace.h>
578e048b
MJ
17#include "common/assert.h"
18#include "compat/compiler.h"
c4f23e30 19#include <stdbool.h>
273b65be 20
578e048b
MJ
21#include "field.h"
22#include "field-class.h"
23#include "event.h"
24#include "stream-class.h"
25#include "stream.h"
26#include "packet.h"
578e048b 27#include "packet.h"
578e048b
MJ
28#include "event-class.h"
29
40f4ba76 30void _bt_event_set_is_frozen(const struct bt_event *event, bool is_frozen)
3dca2276 31{
98b15851 32 BT_ASSERT_DBG(event);
44c440bc
PP
33 BT_LIB_LOGD("Setting event's frozen state: %!+e, is-frozen=%d",
34 event, is_frozen);
312c056a 35
44c440bc
PP
36 if (event->common_context_field) {
37 BT_LOGD_STR("Setting event's common context field's frozen state.");
38 bt_field_set_is_frozen(
39 event->common_context_field, is_frozen);
312c056a
PP
40 }
41
44c440bc
PP
42 if (event->specific_context_field) {
43 BT_LOGD_STR("Setting event's specific context field's frozen state.");
44 bt_field_set_is_frozen(event->specific_context_field,
6c677fb5 45 is_frozen);
312c056a
PP
46 }
47
48 if (event->payload_field) {
44c440bc
PP
49 BT_LOGD_STR("Setting event's payload field's frozen state.");
50 bt_field_set_is_frozen(event->payload_field,
6c677fb5 51 is_frozen);
312c056a
PP
52 }
53
40f4ba76 54 ((struct bt_event *) event)->frozen = is_frozen;
26fc5aed
PP
55
56 if (event->packet) {
57 BT_LOGD_STR("Setting event's packet's frozen state.");
58 bt_packet_set_is_frozen(event->packet, is_frozen);
59 }
3dca2276
PP
60}
61
312c056a 62struct bt_event *bt_event_new(struct bt_event_class *event_class)
3dca2276 63{
3dca2276 64 struct bt_event *event = NULL;
312c056a 65 struct bt_stream_class *stream_class;
5cd6d0e5 66 struct bt_field_class *fc;
3dca2276 67
44c440bc 68 BT_ASSERT(event_class);
3dca2276
PP
69 event = g_new0(struct bt_event, 1);
70 if (!event) {
870631a2 71 BT_LIB_LOGE_APPEND_CAUSE("Failed to allocate one event.");
3dca2276
PP
72 goto error;
73 }
74
44c440bc 75 bt_object_init_unique(&event->base);
312c056a
PP
76 stream_class = bt_event_class_borrow_stream_class(event_class);
77 BT_ASSERT(stream_class);
40f4ba76 78 fc = stream_class->event_common_context_fc;
5cd6d0e5
PP
79 if (fc) {
80 event->common_context_field = bt_field_create(fc);
44c440bc
PP
81 if (!event->common_context_field) {
82 /* bt_field_create() logs errors */
83 goto error;
84 }
85 }
86
40f4ba76 87 fc = event_class->specific_context_fc;
5cd6d0e5
PP
88 if (fc) {
89 event->specific_context_field = bt_field_create(fc);
44c440bc
PP
90 if (!event->specific_context_field) {
91 /* bt_field_create() logs errors */
92 goto error;
93 }
94 }
95
40f4ba76 96 fc = event_class->payload_fc;
5cd6d0e5
PP
97 if (fc) {
98 event->payload_field = bt_field_create(fc);
44c440bc
PP
99 if (!event->payload_field) {
100 /* bt_field_create() logs errors */
101 goto error;
102 }
103 }
104
3dca2276
PP
105 goto end;
106
107error:
312c056a
PP
108 if (event) {
109 bt_event_destroy(event);
110 event = NULL;
111 }
112
113end:
114 return event;
115}
116
1353b066 117BT_EXPORT
094ff7c0 118struct bt_event_class *bt_event_borrow_class(struct bt_event *event)
2f100782 119{
d5b13b9b 120 BT_ASSERT_PRE_DEV_EVENT_NON_NULL(event);
cb6f1f7d 121 return event->class;
2f100782
JG
122}
123
1353b066 124BT_EXPORT
40f4ba76
PP
125const struct bt_event_class *bt_event_borrow_class_const(
126 const struct bt_event *event)
127{
128 return bt_event_borrow_class((void *) event);
129}
130
1353b066 131BT_EXPORT
f6ccaed9 132struct bt_stream *bt_event_borrow_stream(struct bt_event *event)
f6ccaed9 133{
d5b13b9b 134 BT_ASSERT_PRE_DEV_EVENT_NON_NULL(event);
26fc5aed 135 return event->stream;
f6ccaed9
PP
136}
137
1353b066 138BT_EXPORT
40f4ba76
PP
139const struct bt_stream *bt_event_borrow_stream_const(
140 const struct bt_event *event)
141{
142 return bt_event_borrow_stream((void *) event);
143}
144
1353b066 145BT_EXPORT
44c440bc 146struct bt_field *bt_event_borrow_common_context_field(struct bt_event *event)
662e778c 147{
d5b13b9b 148 BT_ASSERT_PRE_DEV_EVENT_NON_NULL(event);
44c440bc 149 return event->common_context_field;
662e778c
JG
150}
151
1353b066 152BT_EXPORT
40f4ba76
PP
153const struct bt_field *bt_event_borrow_common_context_field_const(
154 const struct bt_event *event)
e5be10ef 155{
d5b13b9b 156 BT_ASSERT_PRE_DEV_EVENT_NON_NULL(event);
40f4ba76 157 return event->common_context_field;
e5be10ef
PP
158}
159
1353b066 160BT_EXPORT
44c440bc 161struct bt_field *bt_event_borrow_specific_context_field(struct bt_event *event)
f655a84d 162{
d5b13b9b 163 BT_ASSERT_PRE_DEV_EVENT_NON_NULL(event);
44c440bc 164 return event->specific_context_field;
f655a84d
JG
165}
166
1353b066 167BT_EXPORT
40f4ba76
PP
168const struct bt_field *bt_event_borrow_specific_context_field_const(
169 const struct bt_event *event)
e5be10ef 170{
d5b13b9b 171 BT_ASSERT_PRE_DEV_EVENT_NON_NULL(event);
40f4ba76 172 return event->specific_context_field;
e5be10ef
PP
173}
174
1353b066 175BT_EXPORT
44c440bc 176struct bt_field *bt_event_borrow_payload_field(struct bt_event *event)
5fd2e9fd 177{
d5b13b9b 178 BT_ASSERT_PRE_DEV_EVENT_NON_NULL(event);
44c440bc 179 return event->payload_field;
5fd2e9fd
PP
180}
181
1353b066 182BT_EXPORT
40f4ba76
PP
183const struct bt_field *bt_event_borrow_payload_field_const(
184 const struct bt_event *event)
e5be10ef 185{
d5b13b9b 186 BT_ASSERT_PRE_DEV_EVENT_NON_NULL(event);
40f4ba76 187 return event->payload_field;
e5be10ef
PP
188}
189
44c440bc 190void bt_event_destroy(struct bt_event *event)
cb6f1f7d 191{
44c440bc
PP
192 BT_ASSERT(event);
193 BT_LIB_LOGD("Destroying event: %!+e", event);
cb6f1f7d 194
44c440bc
PP
195 if (event->common_context_field) {
196 BT_LOGD_STR("Destroying event's stream event context field.");
197 bt_field_destroy(event->common_context_field);
238b7404 198 event->common_context_field = NULL;
cb6f1f7d
PP
199 }
200
44c440bc
PP
201 if (event->specific_context_field) {
202 BT_LOGD_STR("Destroying event's context field.");
203 bt_field_destroy(event->specific_context_field);
238b7404 204 event->specific_context_field = NULL;
cb6f1f7d
PP
205 }
206
207 if (event->payload_field) {
44c440bc
PP
208 BT_LOGD_STR("Destroying event's payload field.");
209 bt_field_destroy(event->payload_field);
238b7404 210 event->payload_field = NULL;
cb6f1f7d
PP
211 }
212
44c440bc 213 BT_LOGD_STR("Putting event's class.");
65300d60 214 bt_object_put_ref(event->class);
03039f21 215 BT_LOGD_STR("Putting event's packet.");
238b7404 216 BT_OBJECT_PUT_REF_AND_RESET(event->packet);
26fc5aed
PP
217 BT_LOGD_STR("Putting event's stream.");
218 BT_OBJECT_PUT_REF_AND_RESET(event->stream);
273b65be
JG
219 g_free(event);
220}
221
1353b066 222BT_EXPORT
094ff7c0 223struct bt_packet *bt_event_borrow_packet(struct bt_event *event)
5c0f40f4 224{
d5b13b9b 225 BT_ASSERT_PRE_DEV_EVENT_NON_NULL(event);
44c440bc 226 return event->packet;
5c0f40f4
JG
227}
228
1353b066 229BT_EXPORT
40f4ba76
PP
230const struct bt_packet *bt_event_borrow_packet_const(
231 const struct bt_event *event)
e5be10ef 232{
40f4ba76 233 return bt_event_borrow_packet((void *) event);
e5be10ef 234}
This page took 0.129005 seconds and 5 git commands to generate.