From fc11e32c19c33b4aaf901055b49005fb19a6400e Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Mon, 15 Feb 2016 14:46:56 -0500 Subject: [PATCH] Introduce public component class interface MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérémie Galarneau --- include/Makefile.am | 1 + include/babeltrace/plugin/component-class.h | 56 +++++++++++++++++++ include/babeltrace/plugin/component-factory.h | 8 +++ include/babeltrace/plugin/component.h | 33 +++-------- 4 files changed, 73 insertions(+), 25 deletions(-) create mode 100644 include/babeltrace/plugin/component-class.h diff --git a/include/Makefile.am b/include/Makefile.am index 3ce14183..816b3b50 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 00000000..850f5e85 --- /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 3612d541..cc52aabc 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 b019edbe..87263f08 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 -- 2.34.1