#define BABELTRACE_PLUGIN_COMPONENT_CLASS_H
/*
- * Babeltrace - Plugin Component Class Interface.
+ * Babeltrace - Component Class Interface.
*
- * Copyright 2015 EfficiOS Inc.
- * Copyright 2015 Philippe Proulx <pproulx@efficios.com>
+ * Copyright 2016 Jérémie Galarneau <jeremie.galarneau@efficios.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* SOFTWARE.
*/
-#include <stdint.h>
-#include <babeltrace/plugin/factory.h>
-
#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 */