- int ret = 0;
- size_t i;
-
- BT_LOGD("Serializing stream class's metadata: "
- "stream-class-addr=%p, stream-class-name=\"%s\", "
- "stream-class-id=%" PRId64 ", metadata-context-addr=%p",
- stream_class, bt_ctf_stream_class_get_name(stream_class),
- bt_ctf_stream_class_get_id(stream_class), context);
- g_string_assign(context->field_name, "");
- context->current_indentation_level = 1;
- if (!stream_class->id_set) {
- BT_LOGW_STR("Stream class's ID is not set.");
- ret = -1;
- goto end;
- }
-
- g_string_append_printf(context->string,
- "stream {\n\tid = %" PRId64 ";\n", stream_class->id);
- if (stream_class->event_header_type) {
- BT_LOGD_STR("Serializing stream class's event header field type's metadata.");
- g_string_append(context->string, "\tevent.header := ");
- ret = bt_ctf_field_type_serialize(stream_class->event_header_type,
- context);
- if (ret) {
- BT_LOGW("Cannot serialize stream class's event header field type's metadata: "
- "ret=%d", ret);
- goto end;
- }
- g_string_append(context->string, ";");
- }
-
-
- if (stream_class->packet_context_type) {
- BT_LOGD_STR("Serializing stream class's packet context field type's metadata.");
- g_string_append(context->string, "\n\n\tpacket.context := ");
- ret = bt_ctf_field_type_serialize(stream_class->packet_context_type,
- context);
- if (ret) {
- BT_LOGW("Cannot serialize stream class's packet context field type's metadata: "
- "ret=%d", ret);
- goto end;
- }
- g_string_append(context->string, ";");
- }
-
- if (stream_class->event_context_type) {
- BT_LOGD_STR("Serializing stream class's event context field type's metadata.");
- g_string_append(context->string, "\n\n\tevent.context := ");
- ret = bt_ctf_field_type_serialize(
- stream_class->event_context_type, context);
- if (ret) {
- BT_LOGW("Cannot serialize stream class's event context field type's metadata: "
- "ret=%d", ret);
- goto end;
- }
- g_string_append(context->string, ";");
- }
-
- g_string_append(context->string, "\n};\n\n");
-
- for (i = 0; i < stream_class->event_classes->len; i++) {
- struct bt_ctf_event_class *event_class =
- stream_class->event_classes->pdata[i];
-
- ret = bt_ctf_event_class_serialize(event_class, context);
- if (ret) {
- BT_LOGW("Cannot serialize event class's metadata: "
- "event-class-addr=%p, event-class-name=\"%s\", "
- "event-class-id=%" PRId64,
- event_class,
- bt_ctf_event_class_get_name(event_class),
- bt_ctf_event_class_get_id(event_class));
- goto end;
- }
- }
-end:
- context->current_indentation_level = 0;
- return ret;
-}
-
-static
-void bt_ctf_stream_class_destroy(struct bt_object *obj)
-{
- struct bt_ctf_stream_class *stream_class;
-
- stream_class = container_of(obj, struct bt_ctf_stream_class, base);
- BT_LOGD("Destroying stream class: addr=%p, name=\"%s\", id=%" PRId64,
- stream_class, bt_ctf_stream_class_get_name(stream_class),
- bt_ctf_stream_class_get_id(stream_class));
- bt_put(stream_class->clock);
-
- if (stream_class->event_classes_ht) {
- g_hash_table_destroy(stream_class->event_classes_ht);
- }
- if (stream_class->event_classes) {
- g_ptr_array_free(stream_class->event_classes, TRUE);
- }
-
- if (stream_class->name) {
- g_string_free(stream_class->name, TRUE);
- }
-
- bt_put(stream_class->event_header_type);
- bt_put(stream_class->packet_context_type);
- bt_put(stream_class->event_context_type);
- g_free(stream_class);
-}
-
-static
-int init_event_header(struct bt_ctf_stream_class *stream_class)
-{
- int ret = 0;
- struct bt_ctf_field_type *event_header_type =
- bt_ctf_field_type_structure_create();
- struct bt_ctf_field_type *_uint32_t =
- get_field_type(FIELD_TYPE_ALIAS_UINT32_T);
- struct bt_ctf_field_type *_uint64_t =
- get_field_type(FIELD_TYPE_ALIAS_UINT64_T);
-
- if (!event_header_type) {
- BT_LOGE_STR("Cannot create empty structure field type.");
- ret = -1;
- goto end;
- }
-
- ret = bt_ctf_field_type_structure_add_field(event_header_type,
- _uint32_t, "id");
- if (ret) {
- BT_LOGE_STR("Cannot add `id` field to event header field type.");
- goto end;
- }
-
- ret = bt_ctf_field_type_structure_add_field(event_header_type,
- _uint64_t, "timestamp");
- if (ret) {
- BT_LOGE_STR("Cannot add `timestamp` field to event header field type.");
- goto end;
- }
-
- BT_MOVE(stream_class->event_header_type, event_header_type);
-end:
- if (ret) {
- bt_put(event_header_type);
- }
-
- bt_put(_uint32_t);
- bt_put(_uint64_t);
- return ret;