X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fgraph%2Fcomponent-class-sink-colander.c;h=7f3cfeca6329f94604cc4f9127d4bd6f782c7fe6;hb=36d1acad60fd6c9cfb933f3f2fbc039443d47115;hp=582176753d4c47cc18c9d272e5356107a1a16470;hpb=c5b9b4417bedfbec9b5dd23b8395ccdd4eeffc44;p=babeltrace.git diff --git a/lib/graph/component-class-sink-colander.c b/lib/graph/component-class-sink-colander.c index 58217675..7f3cfeca 100644 --- a/lib/graph/component-class-sink-colander.c +++ b/lib/graph/component-class-sink-colander.c @@ -29,7 +29,7 @@ #include #include #include -#include +#include #include #include #include @@ -37,19 +37,13 @@ static struct bt_component_class_sink *colander_comp_cls; -struct colander_data { - bt_notification_array_const notifs; - uint64_t *count_addr; - struct bt_self_component_port_input_notification_iterator *notif_iter; -}; - static enum bt_self_component_status colander_init( struct bt_self_component_sink *self_comp, 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, - const 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_const 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; @@ -191,8 +185,8 @@ struct bt_component_class_sink *bt_component_class_sink_colander_get(void) colander_comp_cls, colander_init); (void) bt_component_class_sink_set_finalize_method( colander_comp_cls, colander_finalize); - (void) bt_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);