#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_ref *ref)
{
-
+ struct bt_notification_iterator *iterator;
+
+ if (!ref) {
+ return;
+ }
+
+ iterator = container_of(ref, struct bt_notification_iterator,
+ ref);
+ assert(iterator->user_destroy || !iterator->user_data);
+ iterator->user_destroy(iterator);
+ g_free(iterator);
}
BT_HIDDEN
{
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;
}
goto end;
}
- bt_ctf_ref_init(&iterator->ref_count);
+ bt_ref_init(&iterator->ref, bt_notification_iterator_destroy);
end:
return iterator;
}
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;
return;
}
- bt_ctf_ref_get(&iterator->ref_count);
+ bt_ref_get(&iterator->ref);
}
void bt_notification_iterator_put(struct bt_notification_iterator *iterator)
return;
}
- bt_ctf_ref_put(&iterator->ref_count, bt_notification_iterator_destroy);
+ bt_ref_put(&iterator->ref);
+}
+
+enum bt_notification_iterator_status bt_notification_iterator_set_get_cb(
+ struct bt_notification_iterator *iterator,
+ bt_notification_iterator_get_cb get)
+{
+ enum bt_notification_iterator_status ret;
+
+ if (!iterator || !get) {
+ ret = BT_NOTIFICATION_ITERATOR_STATUS_INVAL;
+ goto end;
+ }
+
+
+end:
+ return ret;
}