X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fgraph%2Fcomponent-class-sink-colander.c;h=7f3cfeca6329f94604cc4f9127d4bd6f782c7fe6;hb=36d1acad60fd6c9cfb933f3f2fbc039443d47115;hp=0c91aeaa5af4232471ffa4df7e917771f9ef7c45;hpb=05e2128659970c32648a01255ed870449f05d518;p=babeltrace.git diff --git a/lib/graph/component-class-sink-colander.c b/lib/graph/component-class-sink-colander.c index 0c91aeaa..7f3cfeca 100644 --- a/lib/graph/component-class-sink-colander.c +++ b/lib/graph/component-class-sink-colander.c @@ -1,5 +1,5 @@ /* - * Copyright 2017 Philippe Proulx + * Copyright 2017-2018 Philippe Proulx * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,25 +23,19 @@ #define BT_LOG_TAG "COLANDER" #include -#include -#include -#include +#include +#include +#include +#include #include #include -#include +#include #include #include -#include #include static -struct bt_private_component_class_sink *colander_comp_cls; - -struct colander_data { - bt_notification_array notifs; - uint64_t *count_addr; - struct bt_self_component_port_input_notification_iterator *notif_iter; -}; +struct bt_component_class_sink *colander_comp_cls; static enum bt_self_component_status colander_init( @@ -49,7 +43,7 @@ enum bt_self_component_status colander_init( const struct bt_value *params, void *init_method_data) { enum bt_self_component_status status = BT_SELF_COMPONENT_STATUS_OK; - struct colander_data *colander_data = NULL; + struct bt_component_class_sink_colander_priv_data *colander_data = NULL; struct bt_component_class_sink_colander_data *user_provided_data = init_method_data; @@ -59,14 +53,15 @@ enum bt_self_component_status colander_init( goto end; } - colander_data = g_new0(struct colander_data, 1); + colander_data = g_new0( + struct bt_component_class_sink_colander_priv_data, 1); if (!colander_data) { BT_LOGE_STR("Failed to allocate colander data."); status = BT_SELF_COMPONENT_STATUS_NOMEM; goto end; } - colander_data->notifs = user_provided_data->notifs; + colander_data->msgs = user_provided_data->msgs; colander_data->count_addr = user_provided_data->count_addr; status = bt_self_component_sink_add_input_port(self_comp, "in", NULL, NULL); @@ -86,7 +81,7 @@ end: static void colander_finalize(struct bt_self_component_sink *self_comp) { - struct colander_data *colander_data = + struct bt_component_class_sink_colander_priv_data *colander_data = bt_self_component_get_data( bt_self_component_sink_as_self_component(self_comp)); @@ -94,28 +89,30 @@ void colander_finalize(struct bt_self_component_sink *self_comp) return; } - BT_OBJECT_PUT_REF_AND_RESET(colander_data->notif_iter); + BT_OBJECT_PUT_REF_AND_RESET(colander_data->msg_iter); g_free(colander_data); } static -enum bt_self_component_status colander_input_port_connected( - struct bt_self_component_sink *self_comp, - struct bt_self_component_port_input *self_port, - struct bt_port_output *other_port) +enum bt_self_component_status colander_graph_is_configured( + bt_self_component_sink *self_comp) { enum bt_self_component_status status = BT_SELF_COMPONENT_STATUS_OK; - struct colander_data *colander_data = + struct bt_component_class_sink_colander_priv_data *colander_data = bt_self_component_get_data( bt_self_component_sink_as_self_component(self_comp)); + struct bt_self_component_port_input *self_port = + bt_self_component_sink_borrow_input_port_by_name(self_comp, "in"); + BT_ASSERT(self_port); + BT_ASSERT(colander_data); - BT_OBJECT_PUT_REF_AND_RESET(colander_data->notif_iter); - colander_data->notif_iter = - bt_self_component_port_input_notification_iterator_create( + BT_OBJECT_PUT_REF_AND_RESET(colander_data->msg_iter); + colander_data->msg_iter = + bt_self_component_port_input_message_iterator_create( self_port); - if (!colander_data->notif_iter) { - BT_LIB_LOGE("Cannot create notification iterator on " + if (!colander_data->msg_iter) { + BT_LIB_LOGE("Cannot create message iterator on " "self component input port: %![port-]+p", self_port); status = BT_SELF_COMPONENT_STATUS_NOMEM; @@ -131,39 +128,36 @@ enum bt_self_component_status colander_consume( struct bt_self_component_sink *self_comp) { enum bt_self_component_status status = BT_SELF_COMPONENT_STATUS_OK; - enum bt_notification_iterator_status notif_iter_status; - struct colander_data *colander_data = + enum bt_message_iterator_status msg_iter_status; + struct bt_component_class_sink_colander_priv_data *colander_data = bt_self_component_get_data( bt_self_component_sink_as_self_component(self_comp)); - bt_notification_array notifs; + bt_message_array_const msgs; BT_ASSERT(colander_data); - if (!colander_data->notif_iter) { + if (!colander_data->msg_iter) { BT_LIB_LOGW("Trying to consume without an " - "upstream notification iterator: %![comp-]+c", + "upstream message iterator: %![comp-]+c", self_comp); goto end; } - notif_iter_status = - bt_self_component_port_input_notification_iterator_next( - colander_data->notif_iter, ¬ifs, + msg_iter_status = + bt_self_component_port_input_message_iterator_next( + colander_data->msg_iter, &msgs, colander_data->count_addr); - switch (notif_iter_status) { - case BT_NOTIFICATION_ITERATOR_STATUS_CANCELED: - status = BT_SELF_COMPONENT_STATUS_OK; - goto end; - case BT_NOTIFICATION_ITERATOR_STATUS_AGAIN: + switch (msg_iter_status) { + case BT_MESSAGE_ITERATOR_STATUS_AGAIN: status = BT_SELF_COMPONENT_STATUS_AGAIN; goto end; - case BT_NOTIFICATION_ITERATOR_STATUS_END: + case BT_MESSAGE_ITERATOR_STATUS_END: status = BT_SELF_COMPONENT_STATUS_END; goto end; - case BT_NOTIFICATION_ITERATOR_STATUS_OK: - /* Move notifications to user (count already set) */ - memcpy(colander_data->notifs, notifs, - sizeof(*notifs) * *colander_data->count_addr); + case BT_MESSAGE_ITERATOR_STATUS_OK: + /* Move messages to user (count already set) */ + memcpy(colander_data->msgs, msgs, + sizeof(*msgs) * *colander_data->count_addr); break; default: status = BT_SELF_COMPONENT_STATUS_ERROR; @@ -180,19 +174,19 @@ struct bt_component_class_sink *bt_component_class_sink_colander_get(void) goto end; } - colander_comp_cls = bt_private_component_class_sink_create( - "colander", colander_consume); + colander_comp_cls = bt_component_class_sink_create("colander", + colander_consume); if (!colander_comp_cls) { BT_LOGE_STR("Cannot create sink colander component class."); goto end; } - (void) bt_private_component_class_sink_set_init_method( + (void) bt_component_class_sink_set_init_method( colander_comp_cls, colander_init); - (void) bt_private_component_class_sink_set_finalize_method( + (void) bt_component_class_sink_set_finalize_method( colander_comp_cls, colander_finalize); - (void) bt_private_component_class_sink_set_input_port_connected_method( - colander_comp_cls, colander_input_port_connected); + (void) bt_component_class_sink_set_graph_is_configured_method( + colander_comp_cls, colander_graph_is_configured); end: bt_object_get_ref(colander_comp_cls);