X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=include%2Fbabeltrace%2Fplugin%2Fplugin.h;h=1e5bf37b5e0f74b24d032b9fc5c89a0d0d820e18;hb=d3e4dcd8e7a601e0aa063455147f29fbe051582b;hp=ae6dae865a0591aa1ecf0153f71e22aecea44ad7;hpb=633edee06e8dea4a4a2ba34a175d974f8b90726d;p=babeltrace.git diff --git a/include/babeltrace/plugin/plugin.h b/include/babeltrace/plugin/plugin.h index ae6dae86..1e5bf37b 100644 --- a/include/babeltrace/plugin/plugin.h +++ b/include/babeltrace/plugin/plugin.h @@ -1,11 +1,11 @@ -#ifndef BABELTRACE_PLUGIN_H -#define BABELTRACE_PLUGIN_H +#ifndef BABELTRACE_PLUGIN_PLUGIN_H +#define BABELTRACE_PLUGIN_PLUGIN_H /* * BabelTrace - Babeltrace Plug-in Interface * - * Copyright 2015 Jérémie Galarneau - * Copyright 2015 Philippe Proulx + * Copyright 2016 Jérémie Galarneau + * Copyright 2017 Philippe Proulx * * Author: Jérémie Galarneau * @@ -28,33 +28,88 @@ * SOFTWARE. */ -#include +#include +#include +#include -#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) +#ifdef __cplusplus +extern "C" { +#endif -#define BT_PLUGIN_COMPONENT_CLASSES_BEGIN \ - enum bt_status __bt_plugin_register_component_classes(\ - struct bt_component_factory *factory)\ - { +struct bt_plugin; +struct bt_component_class; -#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); +/** + * Status code. Errors are always negative. + */ +enum bt_plugin_status { + /** No error, okay. */ + BT_PLUGIN_STATUS_OK = 0, + /** General error. */ + BT_PLUGIN_STATUS_ERROR = -1, + /** Memory allocation failure. */ + BT_PLUGIN_STATUS_NOMEM = -4, +}; + +extern struct bt_plugin **bt_plugin_create_all_from_file(const char *path); + +extern struct bt_plugin **bt_plugin_create_all_from_dir(const char *path, + bool recurse); + +extern struct bt_plugin **bt_plugin_create_all_from_static(void); + +/** + * Get the name of a plug-in. + * + * @param plugin An instance of a plug-in + * @returns Plug-in name or NULL on error + */ +extern const char *bt_plugin_get_name(struct bt_plugin *plugin); + +/** + * Get the name of a plug-in's author. + * + * @param plugin An instance of a plug-in + * @returns Plug-in author or NULL on error + */ +extern const char *bt_plugin_get_author(struct bt_plugin *plugin); + +/** + * Get the license of a plug-in. + * + * @param plugin An instance of a plug-in + * @returns Plug-in license or NULL on error + */ +extern const char *bt_plugin_get_license(struct bt_plugin *plugin); + +/** + * Get the decription of a plug-in. + * + * @param plugin An instance of a plug-in + * @returns Plug-in description or NULL if none is available + */ +extern const char *bt_plugin_get_description(struct bt_plugin *plugin); + +/** + * Get the path of a plug-in. + * + * @param plugin An instance of a plug-in + * @returns Plug-in path or NULL on error + */ +extern const char *bt_plugin_get_path(struct bt_plugin *plugin); + +extern int bt_plugin_get_component_class_count(struct bt_plugin *plugin); + +extern struct bt_component_class *bt_plugin_get_component_class( + struct bt_plugin *plugin, size_t index); -#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); +extern +struct bt_component_class *bt_plugin_get_component_class_by_name_and_type( + struct bt_plugin *plugin, const char *name, + enum bt_component_class_type type); -#define BT_PLUGIN_COMPONENT_CLASSES_END\ - \ - return BT_STATUS_OK;\ -}\ - \ - BT_PLUGIN_INIT(__bt_plugin_register_component_classes);\ - BT_PLUGIN_EXIT(NULL); +#ifdef __cplusplus +} +#endif -#endif /* BABELTRACE_PLUGIN_H */ +#endif /* BABELTRACE_PLUGIN_PLUGIN_H */