Implement notification iterator wrappers
[babeltrace.git] / lib / plugin-system / iterator.c
index b2f79f2011ab42929015bef3a7334d2e79970b93..8a67e1ab4862c512a3d573f1767fd3cbcb4a95e2 100644 (file)
@@ -42,7 +42,10 @@ void bt_notification_iterator_destroy(struct bt_object *obj)
        iterator = container_of(obj, struct bt_notification_iterator,
                        base);
        assert(iterator->user_destroy || !iterator->user_data);
-       iterator->user_destroy(iterator);
+       if (iterator->user_destroy) {
+               iterator->user_destroy(iterator);
+       }
+       BT_PUT(iterator->component);
        g_free(iterator);
 }
 
@@ -62,6 +65,7 @@ struct bt_notification_iterator *bt_notification_iterator_create(
                goto end;
        }
 
+       iterator->component = bt_get(component);
        bt_object_init(iterator, bt_notification_iterator_destroy);
 end:
        return iterator;
@@ -72,7 +76,7 @@ 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;
+                       BT_NOTIFICATION_ITERATOR_STATUS_OK;
 
        if (!iterator || !iterator->get || !iterator->next) {
                ret = BT_NOTIFICATION_ITERATOR_STATUS_INVAL;
@@ -87,14 +91,95 @@ enum bt_notification_iterator_status bt_notification_iterator_set_get_cb(
                bt_notification_iterator_get_cb get)
 {
        enum bt_notification_iterator_status ret =
-               BT_NOTIFICATION_ITERATOR_STATUS_OK;
+                       BT_NOTIFICATION_ITERATOR_STATUS_OK;
 
        if (!iterator || !get) {
                ret = BT_NOTIFICATION_ITERATOR_STATUS_INVAL;
                goto end;
        }
 
-       
+       iterator->get = get;
+end:
+       return ret;
+}
+
+enum bt_notification_iterator_status
+bt_notification_iterator_set_next_cb(struct bt_notification_iterator *iterator,
+               bt_notification_iterator_next_cb next)
+{
+       enum bt_notification_iterator_status ret =
+                       BT_NOTIFICATION_ITERATOR_STATUS_OK;
+
+       if (!iterator || !next) {
+               ret = BT_NOTIFICATION_ITERATOR_STATUS_INVAL;
+               goto end;
+       }
+
+       iterator->next = next;
+end:
+       return ret;
+}
+
+enum bt_notification_iterator_status
+bt_notification_iterator_set_destroy_cb(
+               struct bt_notification_iterator *iterator,
+               bt_notification_iterator_destroy_cb destroy)
+{
+       enum bt_notification_iterator_status ret =
+                       BT_NOTIFICATION_ITERATOR_STATUS_OK;
+
+       if (!iterator || !destroy) {
+               ret = BT_NOTIFICATION_ITERATOR_STATUS_INVAL;
+               goto end;
+       }
+
+       iterator->user_destroy = destroy;
 end:
        return ret;
 }
+
+void *bt_notification_iterator_get_private_data(
+               struct bt_notification_iterator *iterator)
+{
+       return iterator ? iterator->user_data : NULL;
+}
+
+enum bt_notification_iterator_status
+bt_notification_iterator_set_private_data(
+               struct bt_notification_iterator *iterator, void *data)
+{
+       enum bt_notification_iterator_status ret =
+                       BT_NOTIFICATION_ITERATOR_STATUS_OK;
+
+       if (!iterator || !data) {
+               ret = BT_NOTIFICATION_ITERATOR_STATUS_INVAL;
+               goto end;
+       }
+
+       iterator->user_data = data;
+end:
+       return ret;
+}
+
+struct bt_notification *bt_notification_iterator_get_notification(
+               struct bt_notification_iterator *iterator)
+{
+       assert(iterator);
+       assert(iterator->get);
+       return iterator->get(iterator);
+}
+
+enum bt_notification_iterator_status
+bt_notification_iterator_next(struct bt_notification_iterator *iterator)
+{
+       assert(iterator);
+       assert(iterator->next);
+       return iterator->next(iterator);
+}
+
+struct bt_component *bt_notification_iterator_get_component(
+               struct bt_notification_iterator *iterator)
+{
+       return bt_get(iterator->component);
+}
+
This page took 0.02486 seconds and 4 git commands to generate.