X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fcomponent%2Fcomponent.c;h=e8c4b5af7c14e2167386c9d1886bfcd2ef20a442;hb=b2e0c9076135f47110af2d96dfaee397c597bc90;hp=d55526c8ee4bdfa7d7968d0f4df277035f7039b5;hpb=1bf957a039dfe5a1cd00659779fdb004aacd706b;p=babeltrace.git diff --git a/lib/component/component.c b/lib/component/component.c index d55526c8..e8c4b5af 100644 --- a/lib/component/component.c +++ b/lib/component/component.c @@ -26,15 +26,18 @@ * SOFTWARE. */ -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -79,8 +82,9 @@ void bt_component_destroy(struct bt_object *obj) * User data is destroyed first, followed by the concrete component * instance. */ - if (component->class->methods.destroy) { - component->class->methods.destroy(component); + if (component->class->methods.finalize) { + component->class->methods.finalize( + bt_private_component_from_component(component)); } if (component->destroy) { @@ -100,84 +104,16 @@ void bt_component_destroy(struct bt_object *obj) g_free(component); } -enum bt_component_class_type bt_component_get_class_type( - struct bt_component *component) +struct bt_component *bt_component_from_private_component( + struct bt_private_component *private_component) { - return component ? component->class->type : BT_COMPONENT_CLASS_TYPE_UNKNOWN; + return bt_get(bt_component_from_private(private_component)); } -BT_HIDDEN -struct bt_notification_iterator *bt_component_create_iterator( - struct bt_component *component, void *init_method_data) +enum bt_component_class_type bt_component_get_class_type( + struct bt_component *component) { - enum bt_notification_iterator_status ret_iterator; - enum bt_component_class_type type; - struct bt_notification_iterator *iterator = NULL; - struct bt_component_class *class = component->class; - - if (!component) { - goto error; - } - - type = bt_component_get_class_type(component); - if (type != BT_COMPONENT_CLASS_TYPE_SOURCE && - type != BT_COMPONENT_CLASS_TYPE_FILTER) { - /* Unsupported operation. */ - goto error; - } - - iterator = bt_notification_iterator_create(component); - if (!iterator) { - goto error; - } - - switch (type) { - case BT_COMPONENT_CLASS_TYPE_SOURCE: - { - struct bt_component_class_source *source_class; - enum bt_notification_iterator_status status; - - source_class = container_of(class, struct bt_component_class_source, parent); - - if (source_class->methods.iterator.init) { - status = source_class->methods.iterator.init(component, - iterator, init_method_data); - if (status < 0) { - goto error; - } - } - break; - } - case BT_COMPONENT_CLASS_TYPE_FILTER: - { - struct bt_component_class_filter *filter_class; - enum bt_notification_iterator_status status; - - filter_class = container_of(class, struct bt_component_class_filter, parent); - - if (filter_class->methods.iterator.init) { - status = filter_class->methods.iterator.init(component, - iterator, init_method_data); - if (status < 0) { - goto error; - } - } - break; - } - default: - /* Unreachable. */ - assert(0); - } - - ret_iterator = bt_notification_iterator_validate(iterator); - if (ret_iterator != BT_NOTIFICATION_ITERATOR_STATUS_OK) { - goto error; - } - - return iterator; -error: - BT_PUT(iterator); - return iterator; + return component ? component->class->type : BT_COMPONENT_CLASS_TYPE_UNKNOWN; } static @@ -326,7 +262,8 @@ struct bt_component *bt_component_create_with_init_method_data( component->initializing = true; if (component_class->methods.init) { - ret = component_class->methods.init(component, params, + ret = component_class->methods.init( + bt_private_component_from_component(component), params, init_method_data); component->initializing = false; if (ret != BT_COMPONENT_STATUS_OK) { @@ -390,15 +327,21 @@ struct bt_component_class *bt_component_get_class( return component ? bt_get(component->class) : NULL; } -void *bt_component_get_private_data(struct bt_component *component) +void *bt_private_component_get_user_data( + struct bt_private_component *private_component) { + struct bt_component *component = + bt_component_from_private(private_component); + return component ? component->user_data : NULL; } -enum bt_component_status -bt_component_set_private_data(struct bt_component *component, +enum bt_component_status bt_private_component_set_user_data( + struct bt_private_component *private_component, void *data) { + struct bt_component *component = + bt_component_from_private(private_component); enum bt_component_status ret = BT_COMPONENT_STATUS_OK; if (!component || !component->initializing) { @@ -591,16 +534,20 @@ end: BT_HIDDEN enum bt_component_status bt_component_accept_port_connection( - struct bt_component *comp, struct bt_port *port) + struct bt_component *comp, struct bt_port *self_port, + struct bt_port *other_port) { enum bt_component_status status = BT_COMPONENT_STATUS_OK; assert(comp); - assert(port); + assert(self_port); + assert(other_port); if (comp->class->methods.accept_port_connection) { status = comp->class->methods.accept_port_connection( - comp, port); + bt_private_component_from_component(comp), + bt_private_port_from_port(self_port), + other_port); } return status; @@ -614,6 +561,8 @@ void bt_component_port_disconnected(struct bt_component *comp, assert(port); if (comp->class->methods.port_disconnected) { - comp->class->methods.port_disconnected(comp, port); + comp->class->methods.port_disconnected( + bt_private_component_from_component(comp), + bt_private_port_from_port(port)); } }