+
+int bt_ctf_event_set_header(struct bt_ctf_event *event,
+ struct bt_ctf_field *header)
+{
+ BT_ASSERT_PRE_NON_NULL(event, "Event");
+ BT_ASSERT_PRE_EVENT_COMMON_HOT(BT_TO_COMMON(event), "Event");
+
+ /*
+ * Ensure the provided header's type matches the one registered to the
+ * stream class.
+ */
+ if (header) {
+ BT_ASSERT_PRE(bt_field_type_common_compare(
+ ((struct bt_field_common *) header)->type,
+ bt_event_class_common_borrow_stream_class(event->common.class)->event_header_field_type) == 0,
+ "Header field's type is different from the "
+ "expected field type: %![event-]+we, %![ft-]+wF, "
+ "%![expected-ft-]+wF",
+ event, ((struct bt_field_common *) header)->type,
+ bt_event_class_common_borrow_stream_class(event->common.class)->event_header_field_type);
+ } else {
+ BT_ASSERT_PRE(!bt_event_class_common_borrow_stream_class(event->common.class)->event_header_field_type,
+ "Setting no event header field, "
+ "but event header field type is not NULL: ",
+ "%![event-]+we, %![header-ft-]+wF",
+ event,
+ bt_event_class_common_borrow_stream_class(event->common.class)->event_header_field_type);
+ }
+
+ bt_put(event->common.header_field->field);
+ event->common.header_field->field = bt_get(header);
+ BT_LOGV("Set event's header field: event-addr=%p, "
+ "event-class-name=\"%s\", event-class-id=%" PRId64 ", "
+ "header-field-addr=%p",
+ event, bt_event_class_common_get_name(event->common.class),
+ bt_event_class_common_get_id(event->common.class), header);
+ return 0;
+}
+
+int bt_ctf_event_common_set_payload(struct bt_ctf_event *event,
+ struct bt_ctf_field *payload)
+{
+ BT_ASSERT_PRE_NON_NULL(event, "Event");
+ BT_ASSERT_PRE_EVENT_COMMON_HOT(BT_TO_COMMON(event), "Event");
+
+ if (payload) {
+ BT_ASSERT_PRE(bt_field_type_common_compare(
+ ((struct bt_field_common *) payload)->type,
+ event->common.class->payload_field_type) == 0,
+ "Payload field's type is different from the "
+ "expected field type: %![event-]+we, %![ft-]+wF, "
+ "%![expected-ft-]+wF",
+ event,
+ ((struct bt_field_common *) payload)->type,
+ event->common.class->payload_field_type);
+ } else {
+ BT_ASSERT_PRE(!event->common.class->payload_field_type,
+ "Setting no event payload field, "
+ "but event payload field type is not NULL: ",
+ "%![event-]+we, %![payload-ft-]+wF",
+ event, event->common.class->payload_field_type);
+ }
+
+ bt_put(event->common.payload_field);
+ event->common.payload_field = bt_get(payload);
+ BT_LOGV("Set event's payload field: event-addr=%p, "
+ "event-class-name=\"%s\", event-class-id=%" PRId64 ", "
+ "payload-field-addr=%p",
+ event, bt_event_class_common_get_name(event->common.class),
+ bt_event_class_common_get_id(event->common.class), payload);
+ return 0;
+}
+
+int bt_ctf_event_set_context(struct bt_ctf_event *event,
+ struct bt_ctf_field *context)
+{
+ BT_ASSERT_PRE_NON_NULL(event, "Event");
+ BT_ASSERT_PRE_EVENT_COMMON_HOT(BT_TO_COMMON(event), "Event");
+
+ if (context) {
+ BT_ASSERT_PRE(bt_field_type_common_compare(
+ ((struct bt_field_common *) context)->type,
+ event->common.class->context_field_type) == 0,
+ "Context field's type is different from the "
+ "expected field type: %![event-]+we, %![ft-]+wF, "
+ "%![expected-ft-]+wF",
+ event, ((struct bt_field_common *) context)->type,
+ event->common.class->context_field_type);
+ } else {
+ BT_ASSERT_PRE(!event->common.class->context_field_type,
+ "Setting no event context field, "
+ "but event context field type is not NULL: ",
+ "%![event-]+we, %![context-ft-]+wF",
+ event, event->common.class->context_field_type);
+ }
+
+ bt_put(event->common.context_field);
+ event->common.context_field = bt_get(context);
+ BT_LOGV("Set event's context field: event-addr=%p, "
+ "event-class-name=\"%s\", event-class-id=%" PRId64 ", "
+ "context-field-addr=%p",
+ event, bt_event_class_common_get_name(event->common.class),
+ bt_event_class_common_get_id(event->common.class), context);
+ return 0;
+}
+
+int bt_ctf_event_set_stream_event_context(struct bt_ctf_event *event,
+ struct bt_ctf_field *stream_event_context)
+{
+ BT_ASSERT_PRE_NON_NULL(event, "Event");
+ BT_ASSERT_PRE_EVENT_COMMON_HOT(BT_TO_COMMON(event), "Event");
+
+ if (stream_event_context) {
+ BT_ASSERT_PRE(bt_field_type_common_compare(
+ ((struct bt_field_common *) stream_event_context)->type,
+ bt_event_class_common_borrow_stream_class(event->common.class)->event_context_field_type) == 0,
+ "Stream event context field's type is different from the "
+ "expected field type: %![event-]+we, %![ft-]+wF, "
+ "%![expected-ft-]+wF",
+ event,
+ ((struct bt_field_common *) stream_event_context)->type,
+ bt_event_class_common_borrow_stream_class(event->common.class)->event_context_field_type);
+ } else {
+ BT_ASSERT_PRE(!bt_event_class_common_borrow_stream_class(event->common.class)->event_context_field_type,
+ "Setting no stream event context field, "
+ "but stream event context field type is not NULL: ",
+ "%![event-]+we, %![context-ft-]+wF",
+ event,
+ bt_event_class_common_borrow_stream_class(event->common.class)->event_context_field_type);
+ }
+
+ bt_put(event->common.stream_event_context_field);
+ event->common.stream_event_context_field = bt_get(stream_event_context);
+ BT_LOGV("Set event's stream event context field: event-addr=%p, "
+ "event-class-name=\"%s\", event-class-id=%" PRId64 ", "
+ "stream-event-context-field-addr=%p",
+ event, bt_event_class_common_get_name(event->common.class),
+ bt_event_class_common_get_id(event->common.class),
+ stream_event_context);
+ return 0;
+}