Adapt plugin system to use unified reference counting
[babeltrace.git] / plugins / iterator.c
index 66f918c8dbe629a266fd14380c5e915943d970fa..4cfd1e49e3fc4871c7bdbf20ff174f6a1ecb2fca 100644 (file)
  */
 
 #include <babeltrace/compiler.h>
+#include <babeltrace/ref.h>
 #include <babeltrace/plugin/component.h>
 #include <babeltrace/plugin/source-internal.h>
 #include <babeltrace/plugin/notification/iterator.h>
 #include <babeltrace/plugin/notification/iterator-internal.h>
 
 static
-void bt_notification_iterator_destroy(struct bt_notification_iterator *iterator)
+void bt_notification_iterator_destroy(struct bt_object *obj)
 {
-       
+       struct bt_notification_iterator *iterator;
+
+       assert(obj);
+       iterator = container_of(obj, struct bt_notification_iterator,
+                       base);
+       assert(iterator->user_destroy || !iterator->user_data);
+       iterator->user_destroy(iterator);
+       g_free(iterator);
 }
 
 BT_HIDDEN
@@ -44,7 +52,8 @@ struct bt_notification_iterator *bt_notification_iterator_create(
 {
        struct bt_notification_iterator *iterator = NULL;
 
-       if (!component || bt_component_get_type(component) != BT_COMPONENT_TYPE_SOURCE) {
+       if (!component ||
+               bt_component_get_type(component) != BT_COMPONENT_TYPE_SOURCE) {
                goto end;
        }
 
@@ -53,7 +62,7 @@ struct bt_notification_iterator *bt_notification_iterator_create(
                goto end;
        }
 
-       bt_ctf_ref_init(&iterator->ref_count);
+       bt_object_init(iterator, bt_notification_iterator_destroy);
 end:
        return iterator;
 }
@@ -62,7 +71,8 @@ BT_HIDDEN
 enum bt_notification_iterator_status bt_notification_iterator_validate(
                struct bt_notification_iterator *iterator)
 {
-       enum bt_notification_iterator_status ret = BT_NOTIFICATION_ITERATOR_STATUS_OK;
+       enum bt_notification_iterator_status ret =
+               BT_NOTIFICATION_ITERATOR_STATUS_OK;
 
        if (!iterator || !iterator->get || !iterator->next) {
                ret = BT_NOTIFICATION_ITERATOR_STATUS_INVAL;
@@ -72,20 +82,18 @@ end:
        return ret;
 }
 
-void bt_notification_iterator_get(struct bt_notification_iterator *iterator)
+enum bt_notification_iterator_status bt_notification_iterator_set_get_cb(
+               struct bt_notification_iterator *iterator,
+               bt_notification_iterator_get_cb get)
 {
-       if (!iterator) {
-               return;
-       }
+       enum bt_notification_iterator_status ret;
 
-       bt_ctf_ref_get(&iterator->ref_count);
-}
-
-void bt_notification_iterator_put(struct bt_notification_iterator *iterator)
-{
-       if (!iterator) {
-               return;
+       if (!iterator || !get) {
+               ret = BT_NOTIFICATION_ITERATOR_STATUS_INVAL;
+               goto end;
        }
 
-       bt_ctf_ref_put(&iterator->ref_count, bt_notification_iterator_destroy);
+       
+end:
+       return ret;
 }
This page took 0.030459 seconds and 4 git commands to generate.