X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=include%2Fbabeltrace%2Fgraph%2Fcomponent-class-internal.h;h=909d450ea5bf71a103fc6ab7923bb1e6d3daf75a;hb=e2f7325d1e58710ee928373592adcee466f93d06;hp=68a8e0c11e67075a744273c5ba1b5bbc6570f044;hpb=b2e0c9076135f47110af2d96dfaee397c597bc90;p=babeltrace.git diff --git a/include/babeltrace/graph/component-class-internal.h b/include/babeltrace/graph/component-class-internal.h index 68a8e0c1..909d450e 100644 --- a/include/babeltrace/graph/component-class-internal.h +++ b/include/babeltrace/graph/component-class-internal.h @@ -1,11 +1,9 @@ -#ifndef BABELTRACE_COMPONENT_COMPONENT_CLASS_INTERNAL_H -#define BABELTRACE_COMPONENT_COMPONENT_CLASS_INTERNAL_H +#ifndef BABELTRACE_GRAPH_COMPONENT_CLASS_INTERNAL_H +#define BABELTRACE_GRAPH_COMPONENT_CLASS_INTERNAL_H /* - * BabelTrace - Component Class Internal - * + * Copyright 2017-2018 Philippe Proulx * Copyright 2015 Jérémie Galarneau - * Copyright 2017 Philippe Proulx * * Author: Jérémie Galarneau * @@ -28,17 +26,19 @@ * SOFTWARE. */ -#include +#include #include #include #include #include #include #include -#include +#include +#include #include struct bt_component_class; +struct bt_plugin_so_shared_lib_handle; typedef void (*bt_component_class_destroy_listener_func)( struct bt_component_class *class, void *data); @@ -54,35 +54,38 @@ struct bt_component_class { GString *name; GString *description; GString *help; - struct { - bt_component_class_init_method init; - bt_component_class_finalize_method finalize; - bt_component_class_query_method query; - bt_component_class_accept_port_connection_method accept_port_connection; - bt_component_class_port_disconnected_method port_disconnected; - } methods; + /* Array of struct bt_component_class_destroy_listener */ GArray *destroy_listeners; bool frozen; -}; - -struct bt_component_class_iterator_methods { - bt_component_class_notification_iterator_init_method init; - bt_component_class_notification_iterator_finalize_method finalize; - bt_component_class_notification_iterator_next_method next; - bt_component_class_notification_iterator_seek_time_method seek_time; + struct bt_list_head node; + struct bt_plugin_so_shared_lib_handle *so_handle; }; struct bt_component_class_source { struct bt_component_class parent; struct { - struct bt_component_class_iterator_methods iterator; + bt_component_class_source_init_method init; + bt_component_class_source_finalize_method finalize; + bt_component_class_source_notification_iterator_init_method notif_iter_init; + bt_component_class_source_notification_iterator_finalize_method notif_iter_finalize; + bt_component_class_source_notification_iterator_next_method notif_iter_next; + bt_component_class_source_query_method query; + bt_component_class_source_accept_output_port_connection_method accept_output_port_connection; + bt_component_class_source_output_port_connected_method output_port_connected; + bt_component_class_source_output_port_disconnected_method output_port_disconnected; } methods; }; struct bt_component_class_sink { struct bt_component_class parent; struct { + bt_component_class_sink_init_method init; + bt_component_class_sink_finalize_method finalize; + bt_component_class_sink_query_method query; + bt_component_class_sink_accept_input_port_connection_method accept_input_port_connection; + bt_component_class_sink_input_port_connected_method input_port_connected; + bt_component_class_sink_input_port_disconnected_method input_port_disconnected; bt_component_class_sink_consume_method consume; } methods; }; @@ -90,12 +93,48 @@ struct bt_component_class_sink { struct bt_component_class_filter { struct bt_component_class parent; struct { - struct bt_component_class_iterator_methods iterator; + bt_component_class_filter_init_method init; + bt_component_class_filter_finalize_method finalize; + bt_component_class_filter_notification_iterator_init_method notif_iter_init; + bt_component_class_filter_notification_iterator_finalize_method notif_iter_finalize; + bt_component_class_filter_notification_iterator_next_method notif_iter_next; + bt_component_class_filter_query_method query; + bt_component_class_filter_accept_input_port_connection_method accept_input_port_connection; + bt_component_class_filter_accept_output_port_connection_method accept_output_port_connection; + bt_component_class_filter_input_port_connected_method input_port_connected; + bt_component_class_filter_output_port_connected_method output_port_connected; + bt_component_class_filter_input_port_disconnected_method input_port_disconnected; + bt_component_class_filter_output_port_disconnected_method output_port_disconnected; } methods; }; BT_HIDDEN -int bt_component_class_add_destroy_listener(struct bt_component_class *class, +void bt_component_class_add_destroy_listener(struct bt_component_class *class, bt_component_class_destroy_listener_func func, void *data); -#endif /* BABELTRACE_COMPONENT_COMPONENT_CLASS_INTERNAL_H */ +BT_HIDDEN +void _bt_component_class_freeze( + const struct bt_component_class *component_class); + +#ifdef BT_DEV_MODE +# define bt_component_class_freeze _bt_component_class_freeze +#else +# define bt_component_class_freeze(_cc) +#endif + +static inline +const char *bt_component_class_type_string(enum bt_component_class_type type) +{ + switch (type) { + case BT_COMPONENT_CLASS_TYPE_SOURCE: + return "BT_COMPONENT_CLASS_TYPE_SOURCE"; + case BT_COMPONENT_CLASS_TYPE_SINK: + return "BT_COMPONENT_CLASS_TYPE_SINK"; + case BT_COMPONENT_CLASS_TYPE_FILTER: + return "BT_COMPONENT_CLASS_TYPE_FILTER"; + default: + return "(unknown)"; + } +} + +#endif /* BABELTRACE_GRAPH_COMPONENT_CLASS_INTERNAL_H */