Refactor the component class and component API
[babeltrace.git] / plugins / text / text.c
index 89fa59901d63cac78c253175822b8e155d253017..4ddca35cfa1310f828e5dd4c9887475a351554f3 100644 (file)
  * SOFTWARE.
  */
 
-#include <babeltrace/plugin/plugin-macros.h>
-#include <babeltrace/plugin/component.h>
-#include <babeltrace/plugin/sink.h>
-#include <babeltrace/plugin/notification/notification.h>
-#include <babeltrace/plugin/notification/iterator.h>
-#include <babeltrace/plugin/notification/event.h>
+#include <babeltrace/plugin/plugin-dev.h>
+#include <babeltrace/component/component.h>
+#include <babeltrace/component/sink.h>
+#include <babeltrace/component/notification/notification.h>
+#include <babeltrace/component/notification/iterator.h>
+#include <babeltrace/component/notification/event.h>
 #include <babeltrace/values.h>
 #include <babeltrace/compiler.h>
 #include <stdio.h>
@@ -40,8 +40,6 @@
 #include <glib.h>
 #include "text.h"
 
-#define PLUGIN_NAME    "text"
-
 static
 const char *plugin_options[] = {
        "output-path",
@@ -119,7 +117,7 @@ enum bt_component_status handle_notification(struct text_component *text,
        }
 
        switch (bt_notification_get_type(notification)) {
-       case BT_NOTIFICATION_TYPE_PACKET_START:
+       case BT_NOTIFICATION_TYPE_PACKET_BEGIN:
                puts("<packet>");
                break;
        case BT_NOTIFICATION_TYPE_PACKET_END:
@@ -164,15 +162,21 @@ enum bt_component_status run(struct bt_component *component)
                goto end;
        }
 
-       if (!text->processed_first_event) {
-               ret = bt_notification_iterator_next(it);
-               if (ret != BT_COMPONENT_STATUS_OK) {
+       if (likely(text->processed_first_event)) {
+               enum bt_notification_iterator_status it_ret;
+
+               it_ret = bt_notification_iterator_next(it);
+               switch (it_ret) {
+               case BT_NOTIFICATION_ITERATOR_STATUS_ERROR:
+                       ret = BT_COMPONENT_STATUS_ERROR;
+                       goto end;
+               case BT_NOTIFICATION_ITERATOR_STATUS_END:
+                       ret = BT_COMPONENT_STATUS_END;
                        goto end;
+               default:
+                       break;
                }
-       } else {
-               text->processed_first_event = true;
        }
-
        notification = bt_notification_iterator_get_notification(it);
        if (!notification) {
                ret = BT_COMPONENT_STATUS_ERROR;
@@ -180,6 +184,7 @@ enum bt_component_status run(struct bt_component *component)
        }
 
        ret = handle_notification(text, notification);
+       text->processed_first_event = true;
 end:
        bt_put(it);
        bt_put(notification);
@@ -217,8 +222,7 @@ bool check_param_exists(const char *key, struct bt_value *object, void *data)
 
        if (!bt_value_map_get(plugin_opt_map, key)) {
                fprintf(text->err,
-                       "[warning] Parameter \"%s\" unknown to \"%s\" plugin\n",
-                       key, PLUGIN_NAME);
+                       "[warning] Parameter \"%s\" unknown to \"text\" plugin\n", key);
        }
        return true;
 }
@@ -624,22 +628,10 @@ enum bt_component_status text_component_init(
                goto error;
        }
 
-       ret = bt_component_set_destroy_cb(component,
-                       destroy_text);
-       if (ret != BT_COMPONENT_STATUS_OK) {
-               goto error;
-       }
-
        ret = bt_component_set_private_data(component, text);
        if (ret != BT_COMPONENT_STATUS_OK) {
                goto error;
        }
-
-       ret = bt_component_sink_set_consume_cb(component,
-                       run);
-       if (ret != BT_COMPONENT_STATUS_OK) {
-               goto error;
-       }
 end:
        return ret;
 error:
@@ -648,13 +640,13 @@ error:
 }
 
 /* Initialize plug-in entry points. */
-BT_PLUGIN_NAME("text");
+BT_PLUGIN(text);
 BT_PLUGIN_DESCRIPTION("Babeltrace text output plug-in.");
 BT_PLUGIN_AUTHOR("Jérémie Galarneau");
 BT_PLUGIN_LICENSE("MIT");
+BT_PLUGIN_SINK_COMPONENT_CLASS(text, run);
+BT_PLUGIN_SINK_COMPONENT_CLASS_INIT_METHOD(text, text_component_init);
+BT_PLUGIN_SINK_COMPONENT_CLASS_DESTROY_METHOD(text, destroy_text);
+BT_PLUGIN_SINK_COMPONENT_CLASS_DESCRIPTION(text,
+       "Formats CTF-IR to text. Formerly known as ctf-text.");
 
-BT_PLUGIN_COMPONENT_CLASSES_BEGIN
-BT_PLUGIN_SINK_COMPONENT_CLASS_ENTRY(PLUGIN_NAME,
-               "Formats CTF-IR to text. Formerly known as ctf-text.",
-               text_component_init)
-BT_PLUGIN_COMPONENT_CLASSES_END
This page took 0.034453 seconds and 4 git commands to generate.