X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=include%2Fbabeltrace%2Fplugin%2Fcomponent-class.h;h=1526e4cb810042f63d0d24635780bd5739971041;hb=09ac5ce7990677798a58638ab45ab1a62e615a9a;hp=8988abc246135515ca10e6f3859d2d79a55e617e;hpb=62ed7c304672e2b6fd88b6d59fa3c9a7ad993a2d;p=babeltrace.git diff --git a/include/babeltrace/plugin/component-class.h b/include/babeltrace/plugin/component-class.h index 8988abc2..1526e4cb 100644 --- a/include/babeltrace/plugin/component-class.h +++ b/include/babeltrace/plugin/component-class.h @@ -2,10 +2,9 @@ #define BABELTRACE_PLUGIN_COMPONENT_CLASS_H /* - * Babeltrace - Plugin Component Class Interface. + * Babeltrace - Component Class Interface. * - * Copyright 2015 EfficiOS Inc. - * Copyright 2015 Philippe Proulx + * Copyright 2016 Jérémie Galarneau * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -26,42 +25,67 @@ * SOFTWARE. */ -#include -#include - #ifdef __cplusplus extern "C" { - #endif +#endif -#define BT_PLUGIN_NAME(_x) const char *__bt_plugin_name = (_x) -#define BT_PLUGIN_AUTHOR(_x) const char *__bt_plugin_author = (_x) -#define BT_PLUGIN_LICENSE(_x) const char *__bt_plugin_license = (_x) -#define BT_PLUGIN_INIT(_x) void *__bt_plugin_init = (_x) -#define BT_PLUGIN_EXIT(_x) void *__bt_plugin_exit = (_x) +/** + * Component type. + */ +enum bt_component_type { + BT_COMPONENT_TYPE_UNKNOWN = -1, -#define BT_PLUGIN_COMPONENT_CLASSES_BEGIN\ - enum bt_status __bt_plugin_register_component_classes(\ - struct bt_component_factory *factory)\ - { + /** A source component is a notification generator. */ + BT_COMPONENT_TYPE_SOURCE = 0, -#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_ENTRY(_name, _init, _fini, _it_cr) \ - bt_component_factory_register_source_component_class(factory, \ - _name, _init, _fini, _it_cr); + /** A sink component handles incoming notifications. */ + BT_COMPONENT_TYPE_SINK = 1, -#define BT_PLUGIN_SINK_COMPONENT_CLASS_ENTRY(_name, _init, _fini, _hd_notif) \ - bt_component_factory_register_sink_component_class(factory, \ - _name, _init, _fini, _hd_notif); + /** A filter component implements both Source and Sink interfaces. */ + BT_COMPONENT_TYPE_FILTER = 2, +}; -#define BT_PLUGIN_COMPONENT_CLASSES_END\ - \ - return BT_STATUS_OK;\ -}\ - \ - BT_PLUGIN_INIT(__bt_plugin_register_component_classes);\ - BT_PLUGIN_EXIT(NULL); +struct bt_plugin; +struct bt_component_class; - #ifdef __cplusplus -} -#endif + +/** + * Get a component class' name. + * + * @param component_class Component class of which to get the name + * @returns Name of the component class + */ +extern const char *bt_component_class_get_name( + struct bt_component_class *component_class); + +/** + * Get a component class' description. + * + * Component classes may provide an optional description. It may, however, + * opt not to. + * + * @param component_class Component class of which to get the description + * @returns Description of the component class, or NULL. + */ +extern const char *bt_component_class_get_description( + struct bt_component_class *component_class); + +/** + * Get a component class' type. + * + * @param component_class Component class of which to get the type + * @returns One of #bt_component_type + */ +extern enum bt_component_type bt_component_class_get_type( + struct bt_component_class *component_class); + +/** + * Get a component class' plug-in. + * + * @param component_class Component class of which to get the plug-in + * @returns The plug-in which registered the component class + */ +extern struct bt_plugin *bt_component_class_get_plugin( + struct bt_component_class *component_class); #endif /* BABELTRACE_PLUGIN_COMPONENT_CLASS_H */