/*
- * graph.c
- *
- * Babeltrace Plugin Component Graph
- *
* Copyright 2017 Jérémie Galarneau <jeremie.galarneau@efficios.com>
* Copyright 2017 Philippe Proulx <pproulx@efficios.com>
*
#include <babeltrace/lib-logging-internal.h>
#include <babeltrace/graph/component-internal.h>
+#include <babeltrace/graph/private-graph.h>
#include <babeltrace/graph/graph-internal.h>
#include <babeltrace/graph/connection-internal.h>
#include <babeltrace/graph/component-sink-internal.h>
#include <babeltrace/graph/notification-event-internal.h>
#include <babeltrace/graph/notification-packet-internal.h>
#include <babeltrace/compiler-internal.h>
+#include <babeltrace/common-internal.h>
#include <babeltrace/types.h>
#include <babeltrace/values.h>
+#include <babeltrace/private-values.h>
#include <babeltrace/values-internal.h>
#include <babeltrace/assert-internal.h>
#include <babeltrace/assert-pre-internal.h>
struct bt_graph_listener {
void *func;
- bt_graph_listener_removed removed;
+ bt_private_graph_listener_removed removed;
void *data;
};
* Cancel the graph to disallow some operations, like creating
* notification iterators and adding ports to components.
*/
- (void) bt_graph_cancel(graph);
+ (void) bt_private_graph_cancel((void *) graph);
/* Call all remove listeners */
call_remove_listeners(graph->listeners.port_added);
bt_notification_unlink_graph(notif);
}
-struct bt_graph *bt_graph_create(void)
+struct bt_private_graph *bt_private_graph_create(void)
{
struct bt_graph *graph;
int ret;
BT_LOGD("Created graph object: addr=%p", graph);
end:
- return graph;
+ return (void *) graph;
error:
- BT_PUT(graph);
+ BT_OBJECT_PUT_REF_AND_RESET(graph);
goto end;
}
-enum bt_graph_status bt_graph_connect_ports(struct bt_graph *graph,
+enum bt_graph_status bt_private_graph_connect_ports(
+ struct bt_private_graph *priv_graph,
struct bt_port *upstream_port, struct bt_port *downstream_port,
struct bt_connection **user_connection)
{
+ struct bt_graph *graph = (void *) priv_graph;
enum bt_graph_status status = BT_GRAPH_STATUS_OK;
struct bt_connection *connection = NULL;
struct bt_graph *upstream_graph = NULL;
}
end:
- bt_put(upstream_graph);
- bt_put(downstream_graph);
- bt_put(upstream_component);
- bt_put(downstream_component);
- bt_put(connection);
+ bt_object_put_ref(upstream_graph);
+ bt_object_put_ref(downstream_graph);
+ bt_object_put_ref(upstream_component);
+ bt_object_put_ref(downstream_component);
+ bt_object_put_ref(connection);
if (graph) {
(void) init_can_consume;
bt_graph_set_can_consume(graph, init_can_consume);
return status;
}
-enum bt_graph_status bt_graph_consume(struct bt_graph *graph)
+enum bt_graph_status bt_private_graph_consume(
+ struct bt_private_graph *priv_graph)
{
+ struct bt_graph *graph = (void *) priv_graph;
enum bt_graph_status status;
BT_ASSERT_PRE_NON_NULL(graph, "Graph");
return status;
}
-enum bt_graph_status bt_graph_run(struct bt_graph *graph)
+enum bt_graph_status bt_private_graph_run(
+ struct bt_private_graph *priv_graph)
{
+ struct bt_graph *graph = (void *) priv_graph;
enum bt_graph_status status = BT_GRAPH_STATUS_OK;
if (!graph) {
return listeners->len - 1;
}
-int bt_graph_add_port_added_listener(
- struct bt_graph *graph,
- bt_graph_port_added_listener listener,
- bt_graph_listener_removed listener_removed, void *data)
+int bt_private_graph_add_port_added_listener(
+ struct bt_private_graph *priv_graph,
+ bt_private_graph_port_added_listener listener,
+ bt_private_graph_listener_removed listener_removed, void *data)
{
+ struct bt_graph *graph = (void *) priv_graph;
int ret;
if (!graph) {
return ret;
}
-int bt_graph_add_port_removed_listener(
- struct bt_graph *graph,
- bt_graph_port_removed_listener listener,
- bt_graph_listener_removed listener_removed, void *data)
+int bt_private_graph_add_port_removed_listener(
+ struct bt_private_graph *priv_graph,
+ bt_private_graph_port_removed_listener listener,
+ bt_private_graph_listener_removed listener_removed, void *data)
{
+ struct bt_graph *graph = (void *) priv_graph;
int ret;
if (!graph) {
return ret;
}
-int bt_graph_add_ports_connected_listener(
- struct bt_graph *graph,
- bt_graph_ports_connected_listener listener,
- bt_graph_listener_removed listener_removed, void *data)
+int bt_private_graph_add_ports_connected_listener(
+ struct bt_private_graph *priv_graph,
+ bt_private_graph_ports_connected_listener listener,
+ bt_private_graph_listener_removed listener_removed, void *data)
{
+ struct bt_graph *graph = (void *) priv_graph;
int ret;
if (!graph) {
return ret;
}
-int bt_graph_add_ports_disconnected_listener(
- struct bt_graph *graph,
- bt_graph_ports_disconnected_listener listener,
- bt_graph_listener_removed listener_removed, void *data)
+int bt_private_graph_add_ports_disconnected_listener(
+ struct bt_private_graph *priv_graph,
+ bt_private_graph_ports_disconnected_listener listener,
+ bt_private_graph_listener_removed listener_removed, void *data)
{
+ struct bt_graph *graph = (void *) priv_graph;
int ret;
if (!graph) {
struct bt_graph_listener listener =
g_array_index(graph->listeners.port_added,
struct bt_graph_listener, i);
- bt_graph_port_added_listener func = listener.func;
+ bt_private_graph_port_added_listener func = listener.func;
BT_ASSERT(func);
func(port, listener.data);
struct bt_graph_listener listener =
g_array_index(graph->listeners.port_removed,
struct bt_graph_listener, i);
- bt_graph_port_removed_listener func = listener.func;
+ bt_private_graph_port_removed_listener func = listener.func;
BT_ASSERT(func);
func(comp, port, listener.data);
struct bt_graph_listener listener =
g_array_index(graph->listeners.ports_connected,
struct bt_graph_listener, i);
- bt_graph_ports_connected_listener func = listener.func;
+ bt_private_graph_ports_connected_listener func = listener.func;
BT_ASSERT(func);
func(upstream_port, downstream_port, listener.data);
struct bt_graph_listener listener =
g_array_index(graph->listeners.ports_disconnected,
struct bt_graph_listener, i);
- bt_graph_ports_disconnected_listener func = listener.func;
+ bt_private_graph_ports_disconnected_listener func = listener.func;
BT_ASSERT(func);
func(upstream_comp, downstream_comp, upstream_port,
}
}
-enum bt_graph_status bt_graph_cancel(struct bt_graph *graph)
+enum bt_graph_status bt_private_graph_cancel(
+ struct bt_private_graph *priv_graph)
{
+ struct bt_graph *graph = (void *) priv_graph;
enum bt_graph_status ret = BT_GRAPH_STATUS_OK;
if (!graph) {
g_ptr_array_remove(graph->connections, connection);
}
-enum bt_graph_status bt_graph_add_component_with_init_method_data(
- struct bt_graph *graph,
+enum bt_graph_status bt_private_graph_add_component_with_init_method_data(
+ struct bt_private_graph *priv_graph,
struct bt_component_class *component_class,
const char *name, struct bt_value *params,
void *init_method_data,
struct bt_component **user_component)
{
+ struct bt_graph *graph = (void *) priv_graph;
enum bt_graph_status graph_status = BT_GRAPH_STATUS_OK;
enum bt_component_status comp_status;
struct bt_component *component = NULL;
size_t i;
bt_bool init_can_consume;
- bt_get(params);
+ bt_object_get_ref(params);
if (!graph) {
BT_LOGW_STR("Invalid parameter: graph is NULL.");
if (!bt_value_is_map(params)) {
BT_LOGW("Invalid parameter: initialization parameters must be a map value: "
"type=%s",
- bt_value_type_string(bt_value_get_type(params)));
+ bt_common_value_type_string(
+ bt_value_get_type(params)));
graph_status = BT_GRAPH_STATUS_INVALID;
goto end;
}
} else {
- params = bt_value_map_create();
+ params = bt_value_borrow_from_private(
+ bt_private_value_map_create());
if (!params) {
BT_LOGE_STR("Cannot create map value object.");
graph_status = BT_GRAPH_STATUS_NOMEM;
}
end:
- bt_put(component);
- bt_put(params);
+ bt_object_put_ref(component);
+ bt_object_put_ref(params);
if (graph) {
graph->can_consume = init_can_consume;
}
return graph_status;
}
-enum bt_graph_status bt_graph_add_component(
- struct bt_graph *graph,
+enum bt_graph_status bt_private_graph_add_component(
+ struct bt_private_graph *graph,
struct bt_component_class *component_class,
const char *name, struct bt_value *params,
struct bt_component **component)
{
- return bt_graph_add_component_with_init_method_data(graph,
+ return bt_private_graph_add_component_with_init_method_data(graph,
component_class, name, params, NULL, component);
}
bt_component_get_input_port_by_index(component, i);
BT_ASSERT(port);
- bt_put(port);
+ bt_object_put_ref(port);
if (bt_port_is_connected(port)) {
BT_LOGW("Cannot remove component from graph: "
bt_component_get_output_port_by_index(component, i);
BT_ASSERT(port);
- bt_put(port);
+ bt_object_put_ref(port);
if (bt_port_is_connected(port)) {
BT_LOGW("Cannot remove component from graph: "
*/
g_ptr_array_add(graph->notifications, notif);
}
+
+struct bt_graph *bt_graph_borrow_from_private(
+ struct bt_private_graph *priv_graph)
+{
+ return (void *) priv_graph;
+}