X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fcomponent%2Fcomponent-class.c;h=0f5337257c4810fada3ca18272db7182bb129b0e;hb=64cadc660bbd0400df65da3534d28dbe59395ec7;hp=72bea187c23e89fd5992aa3754651042fd11d0aa;hpb=22e224622e936c4eba550405f5631c5297c165be;p=babeltrace.git diff --git a/lib/component/component-class.c b/lib/component/component-class.c index 72bea187..0f533725 100644 --- a/lib/component/component-class.c +++ b/lib/component/component-class.c @@ -228,18 +228,69 @@ end: return ret; } -int bt_component_class_set_destroy_method( +int bt_component_class_set_query_method( struct bt_component_class *component_class, - bt_component_class_destroy_method destroy_method) + bt_component_class_query_method query_method) { int ret = 0; - if (!component_class || component_class->frozen || !destroy_method) { + if (!component_class || component_class->frozen || !query_method) { ret = -1; goto end; } - component_class->methods.destroy = destroy_method; + component_class->methods.query = query_method; + +end: + return ret; +} + +int bt_component_class_set_accept_port_connection_method( + struct bt_component_class *component_class, + bt_component_class_accept_port_connection_method method) +{ + int ret = 0; + + if (!component_class || component_class->frozen || !method) { + ret = -1; + goto end; + } + + component_class->methods.accept_port_connection = method; + +end: + return ret; +} + +int bt_component_class_set_port_disconnected_method( + struct bt_component_class *component_class, + bt_component_class_port_disconnected_method method) +{ + int ret = 0; + + if (!component_class || component_class->frozen || !method) { + ret = -1; + goto end; + } + + component_class->methods.port_disconnected = method; + +end: + return ret; +} + +int bt_component_class_set_finalize_method( + struct bt_component_class *component_class, + bt_component_class_finalize_method finalize_method) +{ + int ret = 0; + + if (!component_class || component_class->frozen || !finalize_method) { + ret = -1; + goto end; + } + + component_class->methods.finalize = finalize_method; end: return ret; @@ -267,15 +318,15 @@ end: return ret; } -int bt_component_class_source_set_notification_iterator_destroy_method( +int bt_component_class_source_set_notification_iterator_finalize_method( struct bt_component_class *component_class, - bt_component_class_notification_iterator_destroy_method notification_iterator_destroy_method) + bt_component_class_notification_iterator_finalize_method notification_iterator_finalize_method) { struct bt_component_class_source *source_class; int ret = 0; if (!component_class || component_class->frozen || - !notification_iterator_destroy_method || + !notification_iterator_finalize_method || component_class->type != BT_COMPONENT_CLASS_TYPE_SOURCE) { ret = -1; goto end; @@ -283,8 +334,8 @@ int bt_component_class_source_set_notification_iterator_destroy_method( source_class = container_of(component_class, struct bt_component_class_source, parent); - source_class->methods.iterator.destroy = - notification_iterator_destroy_method; + source_class->methods.iterator.finalize = + notification_iterator_finalize_method; end: return ret; @@ -335,15 +386,15 @@ end: return ret; } -int bt_component_class_filter_set_notification_iterator_destroy_method( +int bt_component_class_filter_set_notification_iterator_finalize_method( struct bt_component_class *component_class, - bt_component_class_notification_iterator_destroy_method notification_iterator_destroy_method) + bt_component_class_notification_iterator_finalize_method notification_iterator_finalize_method) { struct bt_component_class_filter *filter_class; int ret = 0; if (!component_class || component_class->frozen || - !notification_iterator_destroy_method || + !notification_iterator_finalize_method || component_class->type != BT_COMPONENT_CLASS_TYPE_FILTER) { ret = -1; goto end; @@ -351,8 +402,8 @@ int bt_component_class_filter_set_notification_iterator_destroy_method( filter_class = container_of(component_class, struct bt_component_class_filter, parent); - filter_class->methods.iterator.destroy = - notification_iterator_destroy_method; + filter_class->methods.iterator.finalize = + notification_iterator_finalize_method; end: return ret; @@ -464,63 +515,36 @@ end: return ret; } -extern int bt_component_class_sink_set_add_iterator_method( - struct bt_component_class *component_class, - bt_component_class_sink_add_iterator_method add_iterator_method) +int bt_component_class_freeze( + struct bt_component_class *component_class) { - struct bt_component_class_sink *sink_class; int ret = 0; - if (!component_class || component_class->frozen || - !add_iterator_method || - component_class->type != BT_COMPONENT_CLASS_TYPE_SINK) { + if (!component_class) { ret = -1; goto end; } - sink_class = container_of(component_class, - struct bt_component_class_sink, parent); - sink_class->methods.add_iterator = add_iterator_method; + component_class->frozen = true; end: return ret; } -extern int bt_component_class_filter_set_add_iterator_method( +struct bt_value *bt_component_class_query( struct bt_component_class *component_class, - bt_component_class_filter_add_iterator_method add_iterator_method) -{ - struct bt_component_class_filter *filter_class; - int ret = 0; - - if (!component_class || component_class->frozen || - !add_iterator_method || - component_class->type != - BT_COMPONENT_CLASS_TYPE_FILTER) { - ret = -1; - goto end; - } - - filter_class = container_of(component_class, - struct bt_component_class_filter, parent); - filter_class->methods.add_iterator = add_iterator_method; - -end: - return ret; -} - -int bt_component_class_freeze( - struct bt_component_class *component_class) + const char *object, struct bt_value *params) { - int ret = 0; + struct bt_value *results = NULL; - if (!component_class) { - ret = -1; + if (!component_class || !object || !params || + !component_class->methods.query) { goto end; } - component_class->frozen = true; + results = component_class->methods.query(component_class, + object, params); end: - return ret; + return results; }