*/
#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
{
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_object_init(iterator, 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 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;
}