#include "trimmer.h"
#include "iterator.h"
#include <babeltrace/component/notification/iterator.h>
+#include <babeltrace/component/notification/private-iterator.h>
#include <babeltrace/component/notification/notification.h>
#include <babeltrace/component/notification/event.h>
#include <babeltrace/component/notification/stream.h>
#include <babeltrace/component/notification/packet.h>
#include <babeltrace/component/component-filter.h>
-#include <babeltrace/component/port.h>
-#include <babeltrace/component/connection.h>
+#include <babeltrace/component/private-component-filter.h>
+#include <babeltrace/component/private-port.h>
+#include <babeltrace/component/private-connection.h>
+#include <babeltrace/component/private-component.h>
#include <babeltrace/ctf-ir/event.h>
#include <babeltrace/ctf-ir/stream.h>
#include <babeltrace/ctf-ir/stream-class.h>
#include <plugins-common.h>
BT_HIDDEN
-void trimmer_iterator_destroy(struct bt_notification_iterator *it)
+void trimmer_iterator_finalize(struct bt_private_notification_iterator *it)
{
struct trimmer_iterator *it_data;
- it_data = bt_notification_iterator_get_private_data(it);
+ it_data = bt_private_notification_iterator_get_user_data(it);
assert(it_data);
- bt_put(it_data->current_notification);
bt_put(it_data->input_iterator);
g_free(it_data);
}
BT_HIDDEN
enum bt_notification_iterator_status trimmer_iterator_init(
- struct bt_component *component,
- struct bt_notification_iterator *iterator,
- UNUSED_VAR void *init_method_data)
+ struct bt_private_notification_iterator *iterator,
+ struct bt_private_port *port)
{
enum bt_notification_iterator_status ret =
BT_NOTIFICATION_ITERATOR_STATUS_OK;
enum bt_notification_iterator_status it_ret;
- struct bt_port *input_port = NULL;
- struct bt_connection *connection = NULL;
+ struct bt_private_port *input_port = NULL;
+ struct bt_private_connection *connection = NULL;
+ struct bt_private_component *component =
+ bt_private_notification_iterator_get_private_component(iterator);
struct trimmer_iterator *it_data = g_new0(struct trimmer_iterator, 1);
if (!it_data) {
}
/* Create a new iterator on the upstream component. */
- input_port = bt_component_filter_get_default_input_port(component);
+ input_port = bt_private_component_filter_get_default_input_private_port(
+ component);
assert(input_port);
- connection = bt_port_get_connection(input_port, 0);
+ connection = bt_private_port_get_private_connection(input_port);
assert(connection);
- it_data->input_iterator = bt_connection_create_notification_iterator(
- connection);
+ it_data->input_iterator =
+ bt_private_connection_create_notification_iterator(connection);
if (!it_data->input_iterator) {
ret = BT_NOTIFICATION_ITERATOR_STATUS_NOMEM;
goto end;
}
- it_ret = bt_notification_iterator_set_private_data(iterator, it_data);
+ it_ret = bt_private_notification_iterator_set_user_data(iterator,
+ it_data);
if (it_ret) {
goto end;
}
end:
+ bt_put(component);
bt_put(connection);
bt_put(input_port);
return ret;
}
-BT_HIDDEN
-struct bt_notification *trimmer_iterator_get(
- struct bt_notification_iterator *iterator)
-{
- struct trimmer_iterator *trim_it;
-
- trim_it = bt_notification_iterator_get_private_data(iterator);
- assert(trim_it);
-
- if (!trim_it->current_notification) {
- enum bt_notification_iterator_status it_ret;
-
- it_ret = trimmer_iterator_next(iterator);
- if (it_ret) {
- goto end;
- }
- }
-end:
- return bt_get(trim_it->current_notification);
-}
-
static
int update_lazy_bound(struct trimmer_bound *bound, const char *name,
int64_t ts, bool *lazy_update)
}
BT_HIDDEN
-enum bt_notification_iterator_status trimmer_iterator_next(
- struct bt_notification_iterator *iterator)
+struct bt_notification_iterator_next_return trimmer_iterator_next(
+ struct bt_private_notification_iterator *iterator)
{
struct trimmer_iterator *trim_it = NULL;
- struct bt_component *component = NULL;
+ struct bt_private_component *component = NULL;
struct trimmer *trimmer = NULL;
struct bt_notification_iterator *source_it = NULL;
- enum bt_notification_iterator_status ret =
- BT_NOTIFICATION_ITERATOR_STATUS_OK;
+ struct bt_notification_iterator_next_return ret = {
+ .status = BT_NOTIFICATION_ITERATOR_STATUS_OK,
+ .notification = NULL,
+ };
bool notification_in_range = false;
- trim_it = bt_notification_iterator_get_private_data(iterator);
+ trim_it = bt_private_notification_iterator_get_user_data(iterator);
assert(trim_it);
- component = bt_notification_iterator_get_component(iterator);
+ component = bt_private_notification_iterator_get_private_component(
+ iterator);
assert(component);
- trimmer = bt_component_get_private_data(component);
+ trimmer = bt_private_component_get_user_data(component);
assert(trimmer);
source_it = trim_it->input_iterator;
assert(source_it);
while (!notification_in_range) {
- struct bt_notification *notification;
-
- ret = bt_notification_iterator_next(source_it);
- if (ret != BT_NOTIFICATION_ITERATOR_STATUS_OK) {
+ ret.status = bt_notification_iterator_next(source_it);
+ if (ret.status != BT_NOTIFICATION_ITERATOR_STATUS_OK) {
goto end;
}
- notification = bt_notification_iterator_get_notification(
+ ret.notification = bt_notification_iterator_get_notification(
source_it);
- if (!notification) {
- ret = BT_NOTIFICATION_ITERATOR_STATUS_ERROR;
+ if (!ret.notification) {
+ ret.status = BT_NOTIFICATION_ITERATOR_STATUS_ERROR;
goto end;
}
- ret = evaluate_notification(notification,
+ ret.status = evaluate_notification(ret.notification,
&trimmer->begin, &trimmer->end,
¬ification_in_range);
- if (notification_in_range) {
- BT_MOVE(trim_it->current_notification, notification);
- } else {
- bt_put(notification);
+ if (!notification_in_range) {
+ bt_put(ret.notification);
}
- if (ret != BT_NOTIFICATION_ITERATOR_STATUS_OK) {
+ if (ret.status != BT_NOTIFICATION_ITERATOR_STATUS_OK) {
break;
}
}
BT_HIDDEN
enum bt_notification_iterator_status trimmer_iterator_seek_time(
- struct bt_notification_iterator *iterator, int64_t time)
+ struct bt_private_notification_iterator *iterator,
+ int64_t time)
{
- enum bt_notification_iterator_status ret;
-
- ret = BT_NOTIFICATION_ITERATOR_STATUS_OK;
-end:
- return ret;
+ return BT_NOTIFICATION_ITERATOR_STATUS_OK;
}