From ea8d3e58d3d580a2b732ef6bd39c2f948ef8974a Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Tue, 30 Aug 2016 15:41:40 -0400 Subject: [PATCH] Implement base iterator interface MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérémie Galarneau --- lib/plugin-system/iterator.c | 64 ++++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 3 deletions(-) diff --git a/lib/plugin-system/iterator.c b/lib/plugin-system/iterator.c index b2f79f20..45f73bdd 100644 --- a/lib/plugin-system/iterator.c +++ b/lib/plugin-system/iterator.c @@ -72,7 +72,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 +87,72 @@ 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; } -- 2.34.1