ctf.fs: bt_ctf_notif_iter_create(): assert() that all medops exist
[babeltrace.git] / formats / ctf / ir / event-class.c
index 750203aeef24b3e85e042b1bed63a21235c50a6b..3747a5cf9da21daad3f76ed2940ccf22a7bd437f 100644 (file)
@@ -58,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) {
@@ -112,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) {
@@ -137,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) {
@@ -209,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;
@@ -242,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;
@@ -343,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;
 }
@@ -476,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;
 
@@ -547,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.024749 seconds and 4 git commands to generate.