X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=include%2Fbabeltrace%2Fplugin%2Fcomponent-factory.h;h=ded452f1430f487194a6c9ee89d5519f16a83cd5;hb=f3e4505ba1b7bacce5fc1cc942f4cfaa905b4e74;hp=379e6c0a78c519511de10aa591fcfbd9a621873f;hpb=62ed7c304672e2b6fd88b6d59fa3c9a7ad993a2d;p=babeltrace.git diff --git a/include/babeltrace/plugin/component-factory.h b/include/babeltrace/plugin/component-factory.h index 379e6c0a..ded452f1 100644 --- a/include/babeltrace/plugin/component-factory.h +++ b/include/babeltrace/plugin/component-factory.h @@ -1,11 +1,10 @@ -#ifndef BABELTRACE_PLUGIN_COMPONENT_CLASS_H -#define BABELTRACE_PLUGIN_COMPONENT_CLASS_H +#ifndef BABELTRACE_PLUGIN_COMPONENT_FACTORY_H +#define BABELTRACE_PLUGIN_COMPONENT_FACTORY_H /* - * Babeltrace - Plugin Component Class Interface. + * Babeltrace - Component Factory Class Interface. * - * Copyright 2015 EfficiOS Inc. - * Copyright 2015 Philippe Proulx + * Copyright 2015 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,87 @@ * SOFTWARE. */ -#include -#include +#include +#include +#include +#include +#include #ifdef __cplusplus extern "C" { - #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) - -#define BT_PLUGIN_COMPONENT_CLASSES_BEGIN\ - enum bt_status __bt_plugin_register_component_classes(\ - struct bt_component_factory *factory)\ - { - -#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); - -#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); - -#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 + +/** + * Status code. Errors are always negative. + */ +enum bt_component_factory_status { + /** General error. */ + BT_COMPONENT_FACTORY_STATUS_ERROR = -128, + + /** Invalid arguments. */ + /* -22 for compatibility with -EINVAL */ + BT_COMPONENT_FACTORY_STATUS_INVAL = -22, + + /** Memory allocation failure. */ + /* -12 for compatibility with -ENOMEM */ + BT_COMPONENT_FACTORY_STATUS_NOMEM = -12, + + /** I/O error. */ + /* -5 for compatibility with -EIO */ + BT_COMPONENT_FACTORY_STATUS_IO = -5, + + /** No such file or directory. */ + /* -2 for compatibility with -ENOENT */ + BT_COMPONENT_FACTORY_STATUS_NOENT = -2, + + /** Operation not permitted. */ + /* -1 for compatibility with -EPERM */ + BT_COMPONENT_FACTORY_STATUS_PERM = -1, + + /** No error, okay. */ + BT_COMPONENT_FACTORY_STATUS_OK = 0, +}; + +struct bt_component_factory; + +/** + * Create a component factory. + * + * @returns An instance of component factory + */ +extern +struct bt_component_factory *bt_component_factory_create(void); + +/** + * Recursively load and register Babeltrace plugins under a given path. + * + * Path will be traversed recursively if it is a directory, otherwise only the + * provided file will be loaded. + * + * @param factory A component factory instance + * @param path A path to a file or directory + * @returns One of #bt_component_factory_status values + */ +extern +enum bt_component_factory_status bt_component_factory_load( + struct bt_component_factory *factory, const char *path); + +extern +enum bt_component_factory_status +bt_component_factory_register_source_component_class( + struct bt_component_factory *factory, const char *name, + bt_component_source_init_cb init); + +extern +enum bt_component_factory_status bt_component_factory_register_sink_component_class( + struct bt_component_factory *factory, const char *name, + bt_component_sink_init_cb init); + +extern +void bt_component_factory_destroy(struct bt_component_factory *factory); + +#ifdef __cplusplus } #endif -#endif /* BABELTRACE_PLUGIN_H */ +#endif /* BABELTRACE_PLUGIN_COMPONENT_FACTORY_H */