lib: add bt_graph_add_simple_sink_component()
[babeltrace.git] / src / lib / graph / graph.c
index 192ec9e59489e01e5c61bdacbb05609224e4aa39..d4ed5afcec1bbace5f9782c7682984731799b884 100644 (file)
@@ -42,6 +42,7 @@
 #include <unistd.h>
 #include <glib.h>
 
+#include "component-class-sink-simple.h"
 #include "component.h"
 #include "component-sink.h"
 #include "connection.h"
@@ -700,9 +701,9 @@ end:
        return status;
 }
 
-enum bt_graph_consume_status bt_graph_consume(struct bt_graph *graph)
+enum bt_graph_run_once_status bt_graph_run_once(struct bt_graph *graph)
 {
-       enum bt_graph_consume_status status;
+       enum bt_graph_run_once_status status;
 
        BT_ASSERT_PRE_DEV_NON_NULL(graph, "Graph");
        BT_ASSERT_PRE_DEV(graph->can_consume,
@@ -791,7 +792,7 @@ bt_graph_add_source_component_output_port_added_listener(
                struct bt_graph *graph,
                bt_graph_source_component_output_port_added_listener_func func,
                bt_graph_listener_removed_func listener_removed, void *data,
-               int *out_listener_id)
+               bt_listener_id *out_listener_id)
 {
        struct bt_graph_listener_port_added listener = {
                .base = {
@@ -800,7 +801,7 @@ bt_graph_add_source_component_output_port_added_listener(
                },
                .func = (port_added_func_t) func,
        };
-       int listener_id;
+       bt_listener_id listener_id;
 
        BT_ASSERT_PRE_NON_NULL(graph, "Graph");
        BT_ASSERT_PRE_NON_NULL(func, "Listener");
@@ -826,7 +827,7 @@ bt_graph_add_filter_component_output_port_added_listener(
                struct bt_graph *graph,
                bt_graph_filter_component_output_port_added_listener_func func,
                bt_graph_listener_removed_func listener_removed, void *data,
-               int *out_listener_id)
+               bt_listener_id *out_listener_id)
 {
        struct bt_graph_listener_port_added listener = {
                .base = {
@@ -835,7 +836,7 @@ bt_graph_add_filter_component_output_port_added_listener(
                },
                .func = (port_added_func_t) func,
        };
-       int listener_id;
+       bt_listener_id listener_id;
 
        BT_ASSERT_PRE_NON_NULL(graph, "Graph");
        BT_ASSERT_PRE_NON_NULL(func, "Listener");
@@ -861,7 +862,7 @@ bt_graph_add_filter_component_input_port_added_listener(
                struct bt_graph *graph,
                bt_graph_filter_component_input_port_added_listener_func func,
                bt_graph_listener_removed_func listener_removed, void *data,
-               int *out_listener_id)
+               bt_listener_id *out_listener_id)
 {
        struct bt_graph_listener_port_added listener = {
                .base = {
@@ -870,7 +871,7 @@ bt_graph_add_filter_component_input_port_added_listener(
                },
                .func = (port_added_func_t) func,
        };
-       int listener_id;
+       bt_listener_id listener_id;
 
        BT_ASSERT_PRE_NON_NULL(graph, "Graph");
        BT_ASSERT_PRE_NON_NULL(func, "Listener");
@@ -896,7 +897,7 @@ bt_graph_add_sink_component_input_port_added_listener(
                struct bt_graph *graph,
                bt_graph_sink_component_input_port_added_listener_func func,
                bt_graph_listener_removed_func listener_removed, void *data,
-               int *out_listener_id)
+               bt_listener_id *out_listener_id)
 {
        struct bt_graph_listener_port_added listener = {
                .base = {
@@ -905,7 +906,7 @@ bt_graph_add_sink_component_input_port_added_listener(
                },
                .func = (port_added_func_t) func,
        };
-       int listener_id;
+       bt_listener_id listener_id;
 
        BT_ASSERT_PRE_NON_NULL(graph, "Graph");
        BT_ASSERT_PRE_NON_NULL(func, "Listener");
@@ -931,7 +932,7 @@ bt_graph_add_source_filter_component_ports_connected_listener(
                struct bt_graph *graph,
                bt_graph_source_filter_component_ports_connected_listener_func func,
                bt_graph_listener_removed_func listener_removed, void *data,
-               int *out_listener_id)
+               bt_listener_id *out_listener_id)
 {
        struct bt_graph_listener_ports_connected listener = {
                .base = {
@@ -940,7 +941,7 @@ bt_graph_add_source_filter_component_ports_connected_listener(
                },
                .func = (ports_connected_func_t) func,
        };
-       int listener_id;
+       bt_listener_id listener_id;
 
        BT_ASSERT_PRE_NON_NULL(graph, "Graph");
        BT_ASSERT_PRE_NON_NULL(func, "Listener");
@@ -967,7 +968,7 @@ bt_graph_add_source_sink_component_ports_connected_listener(
                struct bt_graph *graph,
                bt_graph_source_sink_component_ports_connected_listener_func func,
                bt_graph_listener_removed_func listener_removed, void *data,
-               int *out_listener_id)
+               bt_listener_id *out_listener_id)
 {
        struct bt_graph_listener_ports_connected listener = {
                .base = {
@@ -976,7 +977,7 @@ bt_graph_add_source_sink_component_ports_connected_listener(
                },
                .func = (ports_connected_func_t) func,
        };
-       int listener_id;
+       bt_listener_id listener_id;
 
        BT_ASSERT_PRE_NON_NULL(graph, "Graph");
        BT_ASSERT_PRE_NON_NULL(func, "Listener");
@@ -1003,7 +1004,7 @@ bt_graph_add_filter_filter_component_ports_connected_listener(
                struct bt_graph *graph,
                bt_graph_filter_filter_component_ports_connected_listener_func func,
                bt_graph_listener_removed_func listener_removed, void *data,
-               int *out_listener_id)
+               bt_listener_id *out_listener_id)
 {
        struct bt_graph_listener_ports_connected listener = {
                .base = {
@@ -1012,7 +1013,7 @@ bt_graph_add_filter_filter_component_ports_connected_listener(
                },
                .func = (ports_connected_func_t) func,
        };
-       int listener_id;
+       bt_listener_id listener_id;
 
        BT_ASSERT_PRE_NON_NULL(graph, "Graph");
        BT_ASSERT_PRE_NON_NULL(func, "Listener");
@@ -1039,7 +1040,7 @@ bt_graph_add_filter_sink_component_ports_connected_listener(
                struct bt_graph *graph,
                bt_graph_filter_sink_component_ports_connected_listener_func func,
                bt_graph_listener_removed_func listener_removed, void *data,
-               int *out_listener_id)
+               bt_listener_id *out_listener_id)
 {
        struct bt_graph_listener_ports_connected listener = {
                .base = {
@@ -1048,7 +1049,7 @@ bt_graph_add_filter_sink_component_ports_connected_listener(
                },
                .func = (ports_connected_func_t) func,
        };
-       int listener_id;
+       bt_listener_id listener_id;
 
        BT_ASSERT_PRE_NON_NULL(graph, "Graph");
        BT_ASSERT_PRE_NON_NULL(func, "Listener");
@@ -1352,7 +1353,8 @@ int add_component_with_init_method_data(
 
        /*
         * If it's a sink component, it needs to be part of the graph's
-        * sink queue to be consumed by bt_graph_consume().
+        * sink queue to be consumed by bt_graph_run() or
+        * bt_graph_run_once().
         */
        if (bt_component_is_sink(component)) {
                graph->has_sink = true;
@@ -1465,6 +1467,44 @@ enum bt_graph_add_component_status bt_graph_add_sink_component(
                graph, comp_cls, name, params, NULL, log_level, component);
 }
 
+enum bt_graph_add_component_status
+bt_graph_add_simple_sink_component(struct bt_graph *graph, const char *name,
+               bt_graph_simple_sink_component_init_func init_func,
+               bt_graph_simple_sink_component_consume_func consume_func,
+               bt_graph_simple_sink_component_finalize_func finalize_func,
+               void *user_data, const bt_component_sink **component)
+{
+       enum bt_graph_add_component_status status;
+       struct bt_component_class_sink *comp_cls;
+       struct simple_sink_init_method_data init_method_data = {
+               .init_func = init_func,
+               .consume_func = consume_func,
+               .finalize_func = finalize_func,
+               .user_data = user_data,
+       };
+
+       /*
+        * Other preconditions are checked by
+        * bt_graph_add_sink_component_with_init_method_data().
+        */
+       BT_ASSERT_PRE_NON_NULL(consume_func, "Consume function");
+
+       comp_cls = bt_component_class_sink_simple_borrow();
+       if (!comp_cls) {
+               BT_LIB_LOGE_APPEND_CAUSE(
+                       "Cannot borrow simple sink component class.");
+               status = BT_FUNC_STATUS_MEMORY_ERROR;
+               goto end;
+       }
+
+       status = bt_graph_add_sink_component_with_init_method_data(graph,
+               comp_cls, name, NULL, &init_method_data,
+               BT_LOGGING_LEVEL_NONE, component);
+
+end:
+       return status;
+}
+
 BT_HIDDEN
 int bt_graph_remove_unconnected_component(struct bt_graph *graph,
                struct bt_component *component)
This page took 0.054562 seconds and 4 git commands to generate.