X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fgraph%2Fcomponent-class.c;h=4cfc3dc7cc5510419f77498ba91fb24fc4d53269;hb=3fadfbc0c91f82c46bd36e6e0657ea93570c9db1;hp=36d3970fd2da5060cca922b7da1fc2547be62ab3;hpb=d94d92ac6656fd252a5d7bb4f6c76935ba18e62e;p=babeltrace.git diff --git a/lib/graph/component-class.c b/lib/graph/component-class.c index 36d3970f..4cfc3dc7 100644 --- a/lib/graph/component-class.c +++ b/lib/graph/component-class.c @@ -1,8 +1,7 @@ /* + * Copyright 2017-2018 Philippe Proulx * Copyright 2016 Jérémie Galarneau * - * Author: Jérémie Galarneau - * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights @@ -23,22 +22,25 @@ */ #define BT_LOG_TAG "COMP-CLASS" -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #define BT_ASSERT_PRE_COMP_CLS_HOT(_cc) \ - BT_ASSERT_PRE_HOT(((struct bt_component_class *) (_cc)), \ + BT_ASSERT_PRE_HOT(((const struct bt_component_class *) (_cc)), \ "Component class", ": %!+C", (_cc)) static @@ -130,18 +132,17 @@ end: return ret; } -struct bt_private_component_class_source * -bt_private_component_class_source_create( +struct bt_component_class_source *bt_component_class_source_create( const char *name, - bt_private_component_class_source_notification_iterator_next_method method) + bt_component_class_source_message_iterator_next_method method) { struct bt_component_class_source *source_class = NULL; int ret; BT_ASSERT_PRE_NON_NULL(name, "Name"); - BT_ASSERT_PRE_NON_NULL(method, "Notification iterator next method"); + BT_ASSERT_PRE_NON_NULL(method, "Message iterator next method"); BT_LOGD("Creating source component class: " - "name=\"%s\", notif-iter-next-method-addr=%p", + "name=\"%s\", msg-iter-next-method-addr=%p", name, method); source_class = g_new0(struct bt_component_class_source, 1); if (!source_class) { @@ -162,24 +163,24 @@ bt_private_component_class_source_create( goto end; } - source_class->methods.notif_iter_next = method; + source_class->methods.msg_iter_next = method; BT_LIB_LOGD("Created source component class: %!+C", source_class); end: return (void *) source_class; } -struct bt_private_component_class_filter * -bt_private_component_class_filter_create(const char *name, - bt_private_component_class_filter_notification_iterator_next_method method) +struct bt_component_class_filter *bt_component_class_filter_create( + const char *name, + bt_component_class_filter_message_iterator_next_method method) { struct bt_component_class_filter *filter_class = NULL; int ret; BT_ASSERT_PRE_NON_NULL(name, "Name"); - BT_ASSERT_PRE_NON_NULL(method, "Notification iterator next method"); + BT_ASSERT_PRE_NON_NULL(method, "Message iterator next method"); BT_LOGD("Creating filter component class: " - "name=\"%s\", notif-iter-next-method-addr=%p", + "name=\"%s\", msg-iter-next-method-addr=%p", name, method); filter_class = g_new0(struct bt_component_class_filter, 1); if (!filter_class) { @@ -200,16 +201,15 @@ bt_private_component_class_filter_create(const char *name, goto end; } - filter_class->methods.notif_iter_next = method; + filter_class->methods.msg_iter_next = method; BT_LIB_LOGD("Created filter component class: %!+C", filter_class); end: return (void *) filter_class; } -struct bt_private_component_class_sink *bt_private_component_class_sink_create( - const char *name, - bt_private_component_class_sink_consume_method method) +struct bt_component_class_sink *bt_component_class_sink_create( + const char *name, bt_component_class_sink_consume_method method) { struct bt_component_class_sink *sink_class = NULL; int ret; @@ -245,387 +245,429 @@ end: return (void *) sink_class; } -int bt_private_component_class_source_set_init_method( - struct bt_private_component_class_source *priv_comp_cls, - bt_private_component_class_source_init_method method) +enum bt_component_class_status +bt_component_class_source_set_init_method( + struct bt_component_class_source *comp_cls, + bt_component_class_source_init_method method) { - struct bt_component_class_source *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); comp_cls->methods.init = method; BT_LIB_LOGV("Set source component class's initialization method: " "%!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_filter_set_init_method( - struct bt_private_component_class_filter *priv_comp_cls, - bt_private_component_class_filter_init_method method) +enum bt_component_class_status +bt_component_class_filter_set_init_method( + struct bt_component_class_filter *comp_cls, + bt_component_class_filter_init_method method) { - struct bt_component_class_filter *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); comp_cls->methods.init = method; BT_LIB_LOGV("Set filter component class's initialization method: " "%!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_sink_set_init_method( - struct bt_private_component_class_sink *priv_comp_cls, - bt_private_component_class_sink_init_method method) +enum bt_component_class_status +bt_component_class_sink_set_init_method( + struct bt_component_class_sink *comp_cls, + bt_component_class_sink_init_method method) { - struct bt_component_class_sink *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); comp_cls->methods.init = method; BT_LIB_LOGV("Set sink component class's initialization method: " "%!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_source_set_finalize_method( - struct bt_private_component_class_source *priv_comp_cls, - bt_private_component_class_source_finalize_method method) +enum bt_component_class_status +bt_component_class_source_set_finalize_method( + struct bt_component_class_source *comp_cls, + bt_component_class_source_finalize_method method) { - struct bt_component_class_source *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); comp_cls->methods.finalize = method; BT_LIB_LOGV("Set source component class's finalization method: " "%!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_filter_set_finalize_method( - struct bt_private_component_class_filter *priv_comp_cls, - bt_private_component_class_filter_finalize_method method) +enum bt_component_class_status +bt_component_class_filter_set_finalize_method( + struct bt_component_class_filter *comp_cls, + bt_component_class_filter_finalize_method method) { - struct bt_component_class_filter *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); comp_cls->methods.finalize = method; BT_LIB_LOGV("Set filter component class's finalization method: " "%!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_sink_set_finalize_method( - struct bt_private_component_class_sink *priv_comp_cls, - bt_private_component_class_sink_finalize_method method) +enum bt_component_class_status +bt_component_class_sink_set_finalize_method( + struct bt_component_class_sink *comp_cls, + bt_component_class_sink_finalize_method method) { - struct bt_component_class_sink *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); comp_cls->methods.finalize = method; BT_LIB_LOGV("Set sink component class's finalization method: " "%!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_source_set_query_method( - struct bt_private_component_class_source *priv_comp_cls, - bt_private_component_class_source_query_method method) +enum bt_component_class_status +bt_component_class_source_set_query_method( + struct bt_component_class_source *comp_cls, + bt_component_class_source_query_method method) { - struct bt_component_class_source *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); comp_cls->methods.query = method; BT_LIB_LOGV("Set source component class's query method: " "%!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_filter_set_query_method( - struct bt_private_component_class_filter *priv_comp_cls, - bt_private_component_class_filter_query_method method) +enum bt_component_class_status +bt_component_class_filter_set_query_method( + struct bt_component_class_filter *comp_cls, + bt_component_class_filter_query_method method) { - struct bt_component_class_filter *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); comp_cls->methods.query = method; BT_LIB_LOGV("Set filter component class's query method: " "%!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_sink_set_query_method( - struct bt_private_component_class_sink *priv_comp_cls, - bt_private_component_class_sink_query_method method) +enum bt_component_class_status +bt_component_class_sink_set_query_method( + struct bt_component_class_sink *comp_cls, + bt_component_class_sink_query_method method) { - struct bt_component_class_sink *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); comp_cls->methods.query = method; BT_LIB_LOGV("Set sink component class's query method: " "%!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_filter_set_accept_input_port_connection_method( - struct bt_private_component_class_filter *priv_comp_cls, - bt_private_component_class_filter_accept_input_port_connection_method method) +enum bt_component_class_status +bt_component_class_filter_set_accept_input_port_connection_method( + struct bt_component_class_filter *comp_cls, + bt_component_class_filter_accept_input_port_connection_method method) { - struct bt_component_class_filter *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); comp_cls->methods.accept_input_port_connection = method; BT_LIB_LOGV("Set filter component class's \"accept input port connection\" method" ": %!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_sink_set_accept_input_port_connection_method( - struct bt_private_component_class_sink *priv_comp_cls, - bt_private_component_class_sink_accept_input_port_connection_method method) +enum bt_component_class_status +bt_component_class_sink_set_accept_input_port_connection_method( + struct bt_component_class_sink *comp_cls, + bt_component_class_sink_accept_input_port_connection_method method) { - struct bt_component_class_sink *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); comp_cls->methods.accept_input_port_connection = method; BT_LIB_LOGV("Set sink component class's \"accept input port connection\" method" ": %!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_source_set_accept_output_port_connection_method( - struct bt_private_component_class_source *priv_comp_cls, - bt_private_component_class_source_accept_output_port_connection_method method) +enum bt_component_class_status +bt_component_class_source_set_accept_output_port_connection_method( + struct bt_component_class_source *comp_cls, + bt_component_class_source_accept_output_port_connection_method method) { - struct bt_component_class_source *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); comp_cls->methods.accept_output_port_connection = method; BT_LIB_LOGV("Set source component class's \"accept output port connection\" method" ": %!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_filter_set_accept_output_port_connection_method( - struct bt_private_component_class_filter *priv_comp_cls, - bt_private_component_class_filter_accept_output_port_connection_method method) +enum bt_component_class_status +bt_component_class_filter_set_accept_output_port_connection_method( + struct bt_component_class_filter *comp_cls, + bt_component_class_filter_accept_output_port_connection_method method) { - struct bt_component_class_filter *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); comp_cls->methods.accept_output_port_connection = method; BT_LIB_LOGV("Set filter component class's \"accept output port connection\" method" ": %!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_filter_set_input_port_connected_method( - struct bt_private_component_class_filter *priv_comp_cls, - bt_private_component_class_filter_input_port_connected_method method) +enum bt_component_class_status +bt_component_class_filter_set_input_port_connected_method( + struct bt_component_class_filter *comp_cls, + bt_component_class_filter_input_port_connected_method method) { - struct bt_component_class_filter *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); comp_cls->methods.input_port_connected = method; BT_LIB_LOGV("Set filter component class's \"input port connected\" method" ": %!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_sink_set_input_port_connected_method( - struct bt_private_component_class_sink *priv_comp_cls, - bt_private_component_class_sink_input_port_connected_method method) +enum bt_component_class_status +bt_component_class_sink_set_input_port_connected_method( + struct bt_component_class_sink *comp_cls, + bt_component_class_sink_input_port_connected_method method) { - struct bt_component_class_sink *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); comp_cls->methods.input_port_connected = method; BT_LIB_LOGV("Set sink component class's \"input port connected\" method" ": %!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_source_set_output_port_connected_method( - struct bt_private_component_class_source *priv_comp_cls, - bt_private_component_class_source_output_port_connected_method method) +enum bt_component_class_status +bt_component_class_source_set_output_port_connected_method( + struct bt_component_class_source *comp_cls, + bt_component_class_source_output_port_connected_method method) { - struct bt_component_class_source *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); comp_cls->methods.output_port_connected = method; BT_LIB_LOGV("Set source component class's \"output port connected\" method" ": %!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_filter_set_output_port_connected_method( - struct bt_private_component_class_filter *priv_comp_cls, - bt_private_component_class_filter_output_port_connected_method method) +enum bt_component_class_status +bt_component_class_filter_set_output_port_connected_method( + struct bt_component_class_filter *comp_cls, + bt_component_class_filter_output_port_connected_method method) { - struct bt_component_class_filter *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); comp_cls->methods.output_port_connected = method; BT_LIB_LOGV("Set filter component class's \"output port connected\" method" ": %!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_filter_set_input_port_disconnected_method( - struct bt_private_component_class_filter *priv_comp_cls, - bt_private_component_class_filter_input_port_disconnected_method method) +enum bt_component_class_status +bt_component_class_sink_set_graph_is_configured_method( + struct bt_component_class_sink *comp_cls, + bt_component_class_sink_graph_is_configured_method method) { - struct bt_component_class_filter *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); - comp_cls->methods.input_port_disconnected = method; - BT_LIB_LOGV("Set filter component class's \"input port disconnected\" method" + comp_cls->methods.graph_is_configured = method; + BT_LIB_LOGV("Set sink component class's \"graph is configured\" method" ": %!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_sink_set_input_port_disconnected_method( - struct bt_private_component_class_sink *priv_comp_cls, - bt_private_component_class_sink_input_port_disconnected_method method) +int bt_component_class_source_set_message_iterator_init_method( + struct bt_component_class_source *comp_cls, + bt_component_class_source_message_iterator_init_method method) { - struct bt_component_class_sink *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); - comp_cls->methods.input_port_disconnected = method; - BT_LIB_LOGV("Set sink component class's \"input port disconnected\" method" + comp_cls->methods.msg_iter_init = method; + BT_LIB_LOGV("Set source component class's message iterator initialization method" ": %!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_source_set_output_port_disconnected_method( - struct bt_private_component_class_source *priv_comp_cls, - bt_private_component_class_source_output_port_disconnected_method method) +enum bt_component_class_status +bt_component_class_filter_set_message_iterator_init_method( + struct bt_component_class_filter *comp_cls, + bt_component_class_filter_message_iterator_init_method method) { - struct bt_component_class_source *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); - comp_cls->methods.output_port_disconnected = method; - BT_LIB_LOGV("Set source component class's \"output port disconnected\" method" + comp_cls->methods.msg_iter_init = method; + BT_LIB_LOGV("Set filter component class's message iterator initialization method" ": %!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_filter_set_output_port_disconnected_method( - struct bt_private_component_class_filter *priv_comp_cls, - bt_private_component_class_filter_output_port_disconnected_method method) +enum bt_component_class_status +bt_component_class_source_set_message_iterator_finalize_method( + struct bt_component_class_source *comp_cls, + bt_component_class_source_message_iterator_finalize_method method) { - struct bt_component_class_filter *comp_cls = (void *) priv_comp_cls; + BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); + BT_ASSERT_PRE_NON_NULL(method, "Method"); + BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); + comp_cls->methods.msg_iter_finalize = method; + BT_LIB_LOGV("Set source component class's message iterator finalization method" + ": %!+C", comp_cls); + return BT_COMPONENT_CLASS_STATUS_OK; +} +enum bt_component_class_status +bt_component_class_filter_set_message_iterator_finalize_method( + struct bt_component_class_filter *comp_cls, + bt_component_class_filter_message_iterator_finalize_method method) +{ BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); - comp_cls->methods.output_port_disconnected = method; - BT_LIB_LOGV("Set filter component class's \"output port disconnected\" method" + comp_cls->methods.msg_iter_finalize = method; + BT_LIB_LOGV("Set filter component class's message iterator finalization method" ": %!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_source_set_notification_iterator_init_method( - struct bt_private_component_class_source *priv_comp_cls, - bt_private_component_class_source_notification_iterator_init_method method) +enum bt_component_class_status +bt_component_class_filter_set_message_iterator_seek_ns_from_origin_method( + struct bt_component_class_filter *comp_cls, + bt_component_class_filter_message_iterator_seek_ns_from_origin_method method) { - struct bt_component_class_source *comp_cls = (void *) priv_comp_cls; + BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); + BT_ASSERT_PRE_NON_NULL(method, "Method"); + BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); + comp_cls->methods.msg_iter_seek_ns_from_origin = method; + BT_LIB_LOGV("Set filter component class's message iterator \"seek nanoseconds from origin\" method" + ": %!+C", comp_cls); + return BT_COMPONENT_CLASS_STATUS_OK; +} +enum bt_component_class_status +bt_component_class_source_set_message_iterator_seek_ns_from_origin_method( + struct bt_component_class_source *comp_cls, + bt_component_class_source_message_iterator_seek_ns_from_origin_method method) +{ BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); - comp_cls->methods.notif_iter_init = method; - BT_LIB_LOGV("Set source component class's notification iterator initialization method" + comp_cls->methods.msg_iter_seek_ns_from_origin = method; + BT_LIB_LOGV("Set source component class's message iterator \"seek nanoseconds from origin\" method" ": %!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_filter_set_notification_iterator_init_method( - struct bt_private_component_class_filter *priv_comp_cls, - bt_private_component_class_filter_notification_iterator_init_method method) +enum bt_component_class_status +bt_component_class_filter_set_message_iterator_seek_beginning_method( + struct bt_component_class_filter *comp_cls, + bt_component_class_filter_message_iterator_seek_beginning_method method) { - struct bt_component_class_filter *comp_cls = (void *) priv_comp_cls; + BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); + BT_ASSERT_PRE_NON_NULL(method, "Method"); + BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); + comp_cls->methods.msg_iter_seek_beginning = method; + BT_LIB_LOGV("Set filter component class's message iterator \"seek beginning\" method" + ": %!+C", comp_cls); + return BT_COMPONENT_CLASS_STATUS_OK; +} +enum bt_component_class_status +bt_component_class_source_set_message_iterator_seek_beginning_method( + struct bt_component_class_source *comp_cls, + bt_component_class_source_message_iterator_seek_beginning_method method) +{ BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); - comp_cls->methods.notif_iter_init = method; - BT_LIB_LOGV("Set filter component class's notification iterator initialization method" + comp_cls->methods.msg_iter_seek_beginning = method; + BT_LIB_LOGV("Set source component class's message iterator \"seek beginning\" method" ": %!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_source_set_notification_iterator_finalize_method( - struct bt_private_component_class_source *priv_comp_cls, - bt_private_component_class_source_notification_iterator_finalize_method method) +enum bt_component_class_status +bt_component_class_filter_set_message_iterator_can_seek_beginning_method( + struct bt_component_class_filter *comp_cls, + bt_component_class_filter_message_iterator_can_seek_beginning_method method) { - struct bt_component_class_source *comp_cls = (void *) priv_comp_cls; + BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); + BT_ASSERT_PRE_NON_NULL(method, "Method"); + BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); + comp_cls->methods.msg_iter_can_seek_beginning = method; + BT_LIB_LOGV("Set filter component class's message iterator \"can seek beginning\" method" + ": %!+C", comp_cls); + return BT_COMPONENT_CLASS_STATUS_OK; +} +enum bt_component_class_status +bt_component_class_source_set_message_iterator_can_seek_beginning_method( + struct bt_component_class_source *comp_cls, + bt_component_class_source_message_iterator_can_seek_beginning_method method) +{ BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); - comp_cls->methods.notif_iter_finalize = method; - BT_LIB_LOGV("Set source component class's notification iterator finalization method" + comp_cls->methods.msg_iter_can_seek_beginning = method; + BT_LIB_LOGV("Set source component class's message iterator \"can seek beginning\" method" ": %!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_filter_set_notification_iterator_finalize_method( - struct bt_private_component_class_filter *priv_comp_cls, - bt_private_component_class_filter_notification_iterator_finalize_method method) +enum bt_component_class_status +bt_component_class_filter_set_message_iterator_can_seek_ns_from_origin_method( + struct bt_component_class_filter *comp_cls, + bt_component_class_filter_message_iterator_can_seek_ns_from_origin_method method) { - struct bt_component_class_filter *comp_cls = (void *) priv_comp_cls; + BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); + BT_ASSERT_PRE_NON_NULL(method, "Method"); + BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); + comp_cls->methods.msg_iter_can_seek_ns_from_origin = method; + BT_LIB_LOGV("Set filter component class's message iterator \"can seek nanoseconds from origin\" method" + ": %!+C", comp_cls); + return BT_COMPONENT_CLASS_STATUS_OK; +} +enum bt_component_class_status +bt_component_class_source_set_message_iterator_can_seek_ns_from_origin_method( + struct bt_component_class_source *comp_cls, + bt_component_class_source_message_iterator_can_seek_ns_from_origin_method method) +{ BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(method, "Method"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); - comp_cls->methods.notif_iter_finalize = method; - BT_LIB_LOGV("Set filter component class's notification iterator finalization method" + comp_cls->methods.msg_iter_can_seek_ns_from_origin = method; + BT_LIB_LOGV("Set source component class's message iterator \"can seek nanoseconds from origin\" method" ": %!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_set_description( - struct bt_private_component_class *priv_comp_cls, +bt_component_class_status bt_component_class_set_description( + struct bt_component_class *comp_cls, const char *description) { - struct bt_component_class *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(description, "Description"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); @@ -635,38 +677,36 @@ int bt_private_component_class_set_description( comp_cls, bt_component_class_get_name(comp_cls), bt_component_class_type_string(comp_cls->type)); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -int bt_private_component_class_set_help( - struct bt_private_component_class *priv_comp_cls, +bt_component_class_status bt_component_class_set_help( + struct bt_component_class *comp_cls, const char *help) { - struct bt_component_class *comp_cls = (void *) priv_comp_cls; - BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); BT_ASSERT_PRE_NON_NULL(help, "Help"); BT_ASSERT_PRE_COMP_CLS_HOT(comp_cls); g_string_assign(comp_cls->help, help); BT_LIB_LOGV("Set component class's help text: %!+C", comp_cls); - return 0; + return BT_COMPONENT_CLASS_STATUS_OK; } -const char *bt_component_class_get_name(struct bt_component_class *comp_cls) +const char *bt_component_class_get_name(const struct bt_component_class *comp_cls) { BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); return comp_cls->name->str; } enum bt_component_class_type bt_component_class_get_type( - struct bt_component_class *comp_cls) + const struct bt_component_class *comp_cls) { BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); return comp_cls->type; } const char *bt_component_class_get_description( - struct bt_component_class *comp_cls) + const struct bt_component_class *comp_cls) { BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); return comp_cls->description && @@ -675,7 +715,7 @@ const char *bt_component_class_get_description( } const char *bt_component_class_get_help( - struct bt_component_class *comp_cls) + const struct bt_component_class *comp_cls) { BT_ASSERT_PRE_NON_NULL(comp_cls, "Component class"); return comp_cls->help && @@ -699,9 +739,57 @@ void bt_component_class_add_destroy_listener( } BT_HIDDEN -void _bt_component_class_freeze(struct bt_component_class *comp_cls) +void _bt_component_class_freeze(const struct bt_component_class *comp_cls) { BT_ASSERT(comp_cls); BT_LIB_LOGD("Freezing component class: %!+C", comp_cls); - comp_cls->frozen = true; + ((struct bt_component_class *) comp_cls)->frozen = true; +} + +void bt_component_class_get_ref( + const struct bt_component_class *component_class) +{ + bt_object_get_ref(component_class); +} + +void bt_component_class_put_ref( + const struct bt_component_class *component_class) +{ + bt_object_put_ref(component_class); +} + +void bt_component_class_source_get_ref( + const struct bt_component_class_source *component_class_source) +{ + bt_object_get_ref(component_class_source); +} + +void bt_component_class_source_put_ref( + const struct bt_component_class_source *component_class_source) +{ + bt_object_put_ref(component_class_source); +} + +void bt_component_class_filter_get_ref( + const struct bt_component_class_filter *component_class_filter) +{ + bt_object_get_ref(component_class_filter); +} + +void bt_component_class_filter_put_ref( + const struct bt_component_class_filter *component_class_filter) +{ + bt_object_put_ref(component_class_filter); +} + +void bt_component_class_sink_get_ref( + const struct bt_component_class_sink *component_class_sink) +{ + bt_object_get_ref(component_class_sink); +} + +void bt_component_class_sink_put_ref( + const struct bt_component_class_sink *component_class_sink) +{ + bt_object_put_ref(component_class_sink); }