Update notification iterator's "init" function signature
[babeltrace.git] / plugins / ctf / fs / fs.c
index b406ee96deee4e494626c9ad4542a4c9383491b5..f559a7ba47d2f735158de748ad4df31c213c012f 100644 (file)
 
 #include <babeltrace/ctf-ir/packet.h>
 #include <babeltrace/ctf-ir/clock-class.h>
+#include <babeltrace/component/private-component.h>
+#include <babeltrace/component/component.h>
 #include <babeltrace/component/notification/iterator.h>
+#include <babeltrace/component/notification/private-iterator.h>
 #include <babeltrace/component/notification/stream.h>
 #include <babeltrace/component/notification/event.h>
 #include <babeltrace/component/notification/packet.h>
 BT_HIDDEN
 bool ctf_fs_debug;
 
-enum bt_notification_iterator_status ctf_fs_iterator_next(
-               struct bt_notification_iterator *iterator);
-
-struct bt_notification *ctf_fs_iterator_get(
-               struct bt_notification_iterator *iterator)
-{
-       struct ctf_fs_iterator *ctf_it =
-                       bt_notification_iterator_get_private_data(iterator);
-
-       if (!ctf_it->current_notification) {
-               (void) ctf_fs_iterator_next(iterator);
-       }
-
-       return bt_get(ctf_it->current_notification);
-}
+struct bt_notification_iterator_next_return ctf_fs_iterator_next(
+               struct bt_private_notification_iterator *iterator);
 
 static
 enum bt_notification_iterator_status ctf_fs_iterator_get_next_notification(
@@ -245,46 +235,49 @@ end:
        return ret;
 }
 
-enum bt_notification_iterator_status ctf_fs_iterator_next(
-               struct bt_notification_iterator *iterator)
+struct bt_notification_iterator_next_return ctf_fs_iterator_next(
+               struct bt_private_notification_iterator *iterator)
 {
        int heap_ret;
        struct bt_ctf_stream *stream = NULL;
        struct ctf_fs_stream *fs_stream;
-       struct bt_notification *notification;
        struct bt_notification *next_stream_notification;
-       enum bt_notification_iterator_status ret =
-                       BT_NOTIFICATION_ITERATOR_STATUS_OK;
        struct ctf_fs_iterator *ctf_it =
-                       bt_notification_iterator_get_private_data(iterator);
+                       bt_private_notification_iterator_get_user_data(
+                               iterator);
+       struct bt_notification_iterator_next_return ret = {
+               .status = BT_NOTIFICATION_ITERATOR_STATUS_OK,
+               .notification = NULL,
+       };
 
-       notification = bt_notification_heap_pop(ctf_it->pending_notifications);
-       if (!notification && !ctf_it->pending_streams) {
-               ret = BT_NOTIFICATION_ITERATOR_STATUS_END;
+       ret.notification =
+               bt_notification_heap_pop(ctf_it->pending_notifications);
+       if (!ret.notification && !ctf_it->pending_streams) {
+               ret.status = BT_NOTIFICATION_ITERATOR_STATUS_END;
                goto end;
        }
 
-       if (!notification && ctf_it->pending_streams) {
+       if (!ret.notification && ctf_it->pending_streams) {
                /*
                 * Insert at one notification per stream in the heap and pop
                 * one.
                 */
-               ret = populate_heap(ctf_it);
-               if (ret) {
+               ret.status = populate_heap(ctf_it);
+               if (ret.status) {
                        goto end;
                }
 
-               notification = bt_notification_heap_pop(
+               ret.notification = bt_notification_heap_pop(
                                ctf_it->pending_notifications);
-               if (!notification) {
-                       ret = BT_NOTIFICATION_ITERATOR_STATUS_END;
+               if (!ret.notification) {
+                       ret.status = BT_NOTIFICATION_ITERATOR_STATUS_END;
                        goto end;
                }
        }
 
        /* notification is set from here. */
 
-       stream = internal_bt_notification_get_stream(notification);
+       stream = internal_bt_notification_get_stream(ret.notification);
        if (!stream) {
                /*
                 * The current notification is not associated to a particular
@@ -300,11 +293,12 @@ enum bt_notification_iterator_status ctf_fs_iterator_next(
                goto end;
        }
 
-       ret = ctf_fs_iterator_get_next_notification(ctf_it, fs_stream,
+       ret.status = ctf_fs_iterator_get_next_notification(ctf_it, fs_stream,
                        &next_stream_notification);
-       if ((ret && ret != BT_NOTIFICATION_ITERATOR_STATUS_END)) {
+       if ((ret.status && ret.status != BT_NOTIFICATION_ITERATOR_STATUS_END)) {
                heap_ret = bt_notification_heap_insert(
-                               ctf_it->pending_notifications, notification);
+                               ctf_it->pending_notifications,
+                               ret.notification);
 
                assert(!next_stream_notification);
                if (heap_ret) {
@@ -312,19 +306,19 @@ enum bt_notification_iterator_status ctf_fs_iterator_next(
                         * We're dropping the most recent notification, but at
                         * this point, something is seriously wrong...
                         */
-                       ret = BT_NOTIFICATION_ITERATOR_STATUS_NOMEM;
+                       ret.status = BT_NOTIFICATION_ITERATOR_STATUS_NOMEM;
                }
-               BT_PUT(notification);
+               BT_PUT(ret.notification);
                goto end;
        }
 
-       if (ret == BT_NOTIFICATION_ITERATOR_STATUS_END) {
+       if (ret.status == BT_NOTIFICATION_ITERATOR_STATUS_END) {
                gboolean success;
 
                /* Remove stream. */
                success = g_hash_table_remove(ctf_it->stream_ht, stream);
                assert(success);
-               ret = BT_NOTIFICATION_ITERATOR_STATUS_OK;
+               ret.status = BT_NOTIFICATION_ITERATOR_STATUS_OK;
        } else {
                heap_ret = bt_notification_heap_insert(ctf_it->pending_notifications,
                                                       next_stream_notification);
@@ -333,7 +327,7 @@ enum bt_notification_iterator_status ctf_fs_iterator_next(
                        /*
                         * We're dropping the most recent notification...
                         */
-                       ret = BT_NOTIFICATION_ITERATOR_STATUS_NOMEM;
+                       ret.status = BT_NOTIFICATION_ITERATOR_STATUS_NOMEM;
                }
        }
 
@@ -343,7 +337,6 @@ enum bt_notification_iterator_status ctf_fs_iterator_next(
         * notification.
         */
 end:
-       BT_MOVE(ctf_it->current_notification, notification);
        bt_put(stream);
        return ret;
 }
@@ -354,7 +347,6 @@ void ctf_fs_iterator_destroy_data(struct ctf_fs_iterator *ctf_it)
        if (!ctf_it) {
                return;
        }
-       bt_put(ctf_it->current_notification);
        bt_put(ctf_it->pending_notifications);
        if (ctf_it->pending_streams) {
                g_ptr_array_free(ctf_it->pending_streams, TRUE);
@@ -365,9 +357,9 @@ void ctf_fs_iterator_destroy_data(struct ctf_fs_iterator *ctf_it)
        g_free(ctf_it);
 }
 
-void ctf_fs_iterator_destroy(struct bt_notification_iterator *it)
+void ctf_fs_iterator_finalize(struct bt_private_notification_iterator *it)
 {
-       void *data = bt_notification_iterator_get_private_data(it);
+       void *data = bt_private_notification_iterator_get_user_data(it);
 
        ctf_fs_iterator_destroy_data(data);
 }
@@ -584,17 +576,19 @@ end:
        return ret;
 }
 
-enum bt_notification_iterator_status ctf_fs_iterator_init(struct bt_component *source,
-               struct bt_notification_iterator *it,
-               UNUSED_VAR void *init_method_data)
+enum bt_notification_iterator_status ctf_fs_iterator_init(
+               struct bt_private_notification_iterator *it,
+               struct bt_private_port *port)
 {
        struct ctf_fs_iterator *ctf_it;
        struct ctf_fs_component *ctf_fs;
+       struct bt_private_component *source =
+               bt_private_notification_iterator_get_private_component(it);
        enum bt_notification_iterator_status ret = BT_NOTIFICATION_ITERATOR_STATUS_OK;
 
        assert(source && it);
 
-       ctf_fs = bt_component_get_private_data(source);
+       ctf_fs = bt_private_component_get_user_data(source);
        if (!ctf_fs) {
                ret = BT_NOTIFICATION_ITERATOR_STATUS_INVAL;
                goto end;
@@ -627,17 +621,20 @@ enum bt_notification_iterator_status ctf_fs_iterator_init(struct bt_component *s
                goto error;
        }
 
-       ret = bt_notification_iterator_set_private_data(it, ctf_it);
+       ret = bt_private_notification_iterator_set_user_data(it, ctf_it);
        if (ret) {
                goto error;
        }
 
-end:
-       return ret;
+       goto end;
+
 error:
-       (void) bt_notification_iterator_set_private_data(it, NULL);
+       (void) bt_private_notification_iterator_set_user_data(it, NULL);
        ctf_fs_iterator_destroy_data(ctf_it);
-       goto end;
+
+end:
+       bt_put(source);
+       return ret;
 }
 
 static
@@ -656,9 +653,9 @@ void ctf_fs_destroy_data(struct ctf_fs_component *ctf_fs)
        g_free(ctf_fs);
 }
 
-void ctf_fs_destroy(struct bt_component *component)
+void ctf_fs_finalize(struct bt_private_component *component)
 {
-       void *data = bt_component_get_private_data(component);
+       void *data = bt_private_component_get_user_data(component);
 
        ctf_fs_destroy_data(data);
 }
@@ -711,7 +708,7 @@ end:
 }
 
 BT_HIDDEN
-enum bt_component_status ctf_fs_init(struct bt_component *source,
+enum bt_component_status ctf_fs_init(struct bt_private_component *source,
                struct bt_value *params, UNUSED_VAR void *init_method_data)
 {
        struct ctf_fs_component *ctf_fs;
@@ -725,21 +722,21 @@ enum bt_component_status ctf_fs_init(struct bt_component *source,
                goto end;
        }
 
-       ret = bt_component_set_private_data(source, ctf_fs);
+       ret = bt_private_component_set_user_data(source, ctf_fs);
        if (ret != BT_COMPONENT_STATUS_OK) {
                goto error;
        }
 end:
        return ret;
 error:
-       (void) bt_component_set_private_data(source, NULL);
+       (void) bt_private_component_set_user_data(source, NULL);
         ctf_fs_destroy_data(ctf_fs);
        return ret;
 }
 
 BT_HIDDEN
-struct bt_value *ctf_fs_query_info(struct bt_component_class *comp_class,
-               const char *action, struct bt_value *params)
+struct bt_value *ctf_fs_query(struct bt_component_class *comp_class,
+               const char *object, struct bt_value *params)
 {
        struct bt_value *results = NULL;
        struct bt_value *path_value = NULL;
@@ -747,7 +744,7 @@ struct bt_value *ctf_fs_query_info(struct bt_component_class *comp_class,
        FILE *metadata_fp = NULL;
        GString *g_metadata_text = NULL;
 
-       if (strcmp(action, "get-metadata-info") == 0) {
+       if (strcmp(object, "metadata-info") == 0) {
                int ret;
                int bo;
                const char *path;
@@ -760,7 +757,7 @@ struct bt_value *ctf_fs_query_info(struct bt_component_class *comp_class,
 
                if (!bt_value_is_map(params)) {
                        fprintf(stderr,
-                               "Query info parameters is not a map value object\n");
+                               "Query parameters is not a map value object\n");
                        goto error;
                }
 
@@ -840,7 +837,7 @@ struct bt_value *ctf_fs_query_info(struct bt_component_class *comp_class,
                        goto error;
                }
        } else {
-               fprintf(stderr, "Unknown query info action `%s`\n", action);
+               fprintf(stderr, "Unknown query object `%s`\n", object);
                goto error;
        }
 
This page took 0.027791 seconds and 4 git commands to generate.