From: Jérémie Galarneau Date: Mon, 15 Feb 2016 19:46:56 +0000 (-0500) Subject: Introduce public component class interface X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=fc11e32c19c33b4aaf901055b49005fb19a6400e;p=deliverable%2Fbabeltrace.git Introduce public component class interface Signed-off-by: Jérémie Galarneau --- diff --git a/include/Makefile.am b/include/Makefile.am index 3ce14183e..816b3b500 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -39,6 +39,7 @@ babeltracectfirinclude_HEADERS = \ babeltraceplugininclude_HEADERS = \ babeltrace/plugin/plugin.h \ babeltrace/plugin/component.h \ + babeltrace/plugin/component-class.h \ babeltrace/plugin/component-factory.h \ babeltrace/plugin/source.h \ babeltrace/plugin/sink.h \ diff --git a/include/babeltrace/plugin/component-class.h b/include/babeltrace/plugin/component-class.h new file mode 100644 index 000000000..850f5e851 --- /dev/null +++ b/include/babeltrace/plugin/component-class.h @@ -0,0 +1,56 @@ +#ifndef BABELTRACE_PLUGIN_COMPONENT_CLASS_H +#define BABELTRACE_PLUGIN_COMPONENT_CLASS_H + +/* + * Babeltrace - Component Class Interface. + * + * 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 + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Component type. + */ +enum bt_component_type { + BT_COMPONENT_TYPE_UNKNOWN = -1, + + /** A source component is a notification generator. */ + BT_COMPONENT_TYPE_SOURCE = 0, + + /** A sink component handles incoming notifications. */ + BT_COMPONENT_TYPE_SINK = 1, + + /** A filter component implements both Source and Sink interfaces. */ + BT_COMPONENT_TYPE_FILTER = 2, +}; + +struct bt_component_class; + +const char *bt_component_class_get_name( + struct bt_component_class *component_class); + +enum bt_component_type bt_component_class_get_type( + struct bt_component_class *component_class); + +#endif /* BABELTRACE_PLUGIN_COMPONENT_CLASS_H */ diff --git a/include/babeltrace/plugin/component-factory.h b/include/babeltrace/plugin/component-factory.h index 3612d5415..cc52aabc1 100644 --- a/include/babeltrace/plugin/component-factory.h +++ b/include/babeltrace/plugin/component-factory.h @@ -76,10 +76,18 @@ extern struct bt_component_factory *bt_component_factory_create(void); /** * Get the list of components registered to this factory. + * + * @param factory Component factory */ extern struct bt_value *bt_component_factory_get_components( struct bt_component_factory *factory); +/** + * . + */ +extern struct bt_value *bt_component_factory_create_component( + struct bt_component_factory *factory); + /** * Recursively load and register Babeltrace plugins under a given path. * diff --git a/include/babeltrace/plugin/component.h b/include/babeltrace/plugin/component.h index b019edbe3..87263f08c 100644 --- a/include/babeltrace/plugin/component.h +++ b/include/babeltrace/plugin/component.h @@ -27,39 +27,22 @@ * SOFTWARE. */ +#include #include #ifdef __cplusplus extern "C" { #endif -/** - * Component type. - */ -enum bt_component_type { - BT_COMPONENT_TYPE_UNKNOWN = -1, - - /** A source component is a notification generator. */ - BT_COMPONENT_TYPE_SOURCE = 0, - - /** A sink component handles incoming notifications. */ - BT_COMPONENT_TYPE_SINK = 1, - - /** A filter component implements both Source and Sink interfaces. */ - BT_COMPONENT_TYPE_FILTER = 2, -}; - /** * Status code. Errors are always negative. */ enum bt_component_status { /** Memory allocation failure. */ - /* -12 for compatibility with -ENOMEM */ - BT_COMPONENT_STATUS_NOMEM = -12, + BT_COMPONENT_STATUS_NOMEM = -4, /** Invalid arguments. */ - /* -22 for compatibility with -EINVAL */ - BT_COMPONENT_STATUS_INVAL = -22, + BT_COMPONENT_STATUS_INVAL = -3, /** Unsupported component feature. */ BT_COMPONENT_STATUS_UNSUPPORTED = -2, @@ -92,16 +75,16 @@ extern enum bt_component_status bt_component_set_name( struct bt_component *component, const char *name); /** - * Get component instance type. + * Get component's class. * - * @param component Component instance of which to get the type - * @returns One of #bt_component_type values + * @param component Component instance of which to get the class + * @returns The component's class */ -extern enum bt_component_type bt_component_get_type( +extern struct bt_component_class *bt_component_get_class( struct bt_component *component); /** - * Set a component instance's error stream. + * Set component instance's error stream. * * @param component Component instance * @param error_stream Error stream