ctf.fs: bt_ctf_notif_iter_create(): assert() that all medops exist
[babeltrace.git] / formats / ctf / ir / event-class.c
index 84976e808f21f56ba983c583887896b8fc962e64..3747a5cf9da21daad3f76ed2940ccf22a7bd437f 100644 (file)
@@ -38,6 +38,7 @@
 #include <babeltrace/ref.h>
 #include <babeltrace/ctf-ir/attributes-internal.h>
 #include <babeltrace/compiler.h>
+#include <babeltrace/endian.h>
 
 static
 void bt_ctf_event_class_destroy(struct bt_object *obj);
@@ -57,6 +58,7 @@ struct bt_ctf_event_class *bt_ctf_event_class_create(const char *name)
                goto error;
        }
 
+       event_class->id = -1;
        bt_object_init(event_class, bt_ctf_event_class_destroy);
        event_class->fields = bt_ctf_field_type_structure_create();
        if (!event_class->fields) {
@@ -111,6 +113,11 @@ const char *bt_ctf_event_class_get_name(struct bt_ctf_event_class *event_class)
                goto end;
        }
 
+       if (event_class->name) {
+               name = event_class->name;
+               goto end;
+       }
+
        obj = bt_ctf_attributes_get_field_value(event_class->attributes,
                BT_CTF_EVENT_CLASS_ATTR_NAME_INDEX);
        if (!obj) {
@@ -136,6 +143,11 @@ int64_t bt_ctf_event_class_get_id(struct bt_ctf_event_class *event_class)
                goto end;
        }
 
+       if (event_class->id >= 0) {
+               ret = event_class->id;
+               goto end;
+       }
+
        obj = bt_ctf_attributes_get_field_value(event_class->attributes,
                BT_CTF_EVENT_CLASS_ATTR_ID_INDEX);
        if (!obj) {
@@ -208,12 +220,14 @@ int bt_ctf_event_class_set_attribute(
                goto end;
        }
 
-       if (!strcmp(name, "id") || !strcmp(name, "loglevel")) {
+       if (!strcmp(name, "id") || !strcmp(name, "loglevel") ||
+                       !strcmp(name, "stream_id")) {
                if (!bt_value_is_integer(value)) {
                        ret = -1;
                        goto end;
                }
-       } else if (!strcmp(name, "name") || !strcmp(name, "model.emf.uri")) {
+       } else if (!strcmp(name, "name") || !strcmp(name, "model.emf.uri") ||
+                       !strcmp(name, "loglevel_string")) {
                if (!bt_value_is_string(value)) {
                        ret = -1;
                        goto end;
@@ -241,7 +255,7 @@ int bt_ctf_event_class_set_attribute(
        }
 
        ret = bt_ctf_attributes_set_field_value(event_class->attributes,
-               name, value);
+                       name, value);
 
 end:
        return ret;
@@ -342,16 +356,19 @@ int bt_ctf_event_class_set_payload_type(struct bt_ctf_event_class *event_class,
 {
        int ret = 0;
 
-       if (!event_class || !payload ||
-               bt_ctf_field_type_get_type_id(payload) !=
-               BT_CTF_TYPE_ID_STRUCT) {
+       if (!event_class) {
+               ret = -1;
+               goto end;
+       }
+
+       if (payload && bt_ctf_field_type_get_type_id(payload) !=
+                       BT_CTF_TYPE_ID_STRUCT) {
                ret = -1;
                goto end;
        }
 
-       bt_get(payload);
        bt_put(event_class->fields);
-       event_class->fields = payload;
+       event_class->fields = bt_get(payload);
 end:
        return ret;
 }
@@ -475,19 +492,19 @@ int bt_ctf_event_class_set_context_type(
 {
        int ret = 0;
 
-       if (!event_class || !context || event_class->frozen) {
+       if (!event_class || event_class->frozen) {
                ret = -1;
                goto end;
        }
 
-       if (bt_ctf_field_type_get_type_id(context) != BT_CTF_TYPE_ID_STRUCT) {
+       if (context && bt_ctf_field_type_get_type_id(context) !=
+                       BT_CTF_TYPE_ID_STRUCT) {
                ret = -1;
                goto end;
        }
 
-       bt_get(context);
        bt_put(event_class->context);
-       event_class->context = context;
+       event_class->context = bt_get(context);
 end:
        return ret;
 
@@ -546,6 +563,8 @@ void bt_ctf_event_class_freeze(struct bt_ctf_event_class *event_class)
 {
        assert(event_class);
        event_class->frozen = 1;
+       event_class->name = bt_ctf_event_class_get_name(event_class);
+       event_class->id = bt_ctf_event_class_get_id(event_class);
        bt_ctf_field_type_freeze(event_class->context);
        bt_ctf_field_type_freeze(event_class->fields);
        bt_ctf_attributes_freeze(event_class->attributes);
This page took 0.024933 seconds and 4 git commands to generate.