src.ctf.fs: implement "seek beginning" method
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Tue, 19 Feb 2019 16:45:42 +0000 (11:45 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 3 May 2019 22:19:38 +0000 (18:19 -0400)
This message iterator method resets the `src.ctf.fs` iterator's current
index within the file group and the stream decoder.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
plugins/ctf/fs-src/fs.c
plugins/ctf/fs-src/fs.h
plugins/ctf/plugin.c

index 29c22eb55b5f15444a40c7b200ac7390be9dbae0..6260a24899b99cdb0f8f9aff8b690fcaeb20e750 100644 (file)
@@ -194,12 +194,49 @@ bt_self_message_iterator_status ctf_fs_iterator_next(
        return status;
 }
 
+static
+int ctf_fs_iterator_reset(struct ctf_fs_msg_iter_data *msg_iter_data)
+{
+       int ret;
+
+       msg_iter_data->ds_file_info_index = 0;
+       ret = msg_iter_data_set_current_ds_file(msg_iter_data);
+       if (ret) {
+               goto end;
+       }
+
+       bt_msg_iter_reset(msg_iter_data->msg_iter);
+       set_msg_iter_emits_stream_beginning_end_messages(msg_iter_data);
+
+end:
+       return ret;
+}
+
+BT_HIDDEN
+bt_self_message_iterator_status ctf_fs_iterator_seek_beginning(
+               bt_self_message_iterator *it)
+{
+       struct ctf_fs_msg_iter_data *msg_iter_data =
+               bt_self_message_iterator_get_data(it);
+       bt_self_message_iterator_status status =
+               BT_SELF_MESSAGE_ITERATOR_STATUS_OK;
+
+       BT_ASSERT(msg_iter_data);
+       if (ctf_fs_iterator_reset(msg_iter_data)) {
+               status = BT_SELF_MESSAGE_ITERATOR_STATUS_ERROR;
+       }
+
+       return status;
+}
+
+BT_HIDDEN
 void ctf_fs_iterator_finalize(bt_self_message_iterator *it)
 {
        ctf_fs_msg_iter_data_destroy(
                bt_self_message_iterator_get_data(it));
 }
 
+BT_HIDDEN
 bt_self_message_iterator_status ctf_fs_iterator_init(
                bt_self_message_iterator *self_msg_iter,
                bt_self_component_source *self_comp,
@@ -209,7 +246,6 @@ bt_self_message_iterator_status ctf_fs_iterator_init(
        struct ctf_fs_msg_iter_data *msg_iter_data = NULL;
        bt_self_message_iterator_status ret =
                BT_SELF_MESSAGE_ITERATOR_STATUS_OK;
-       int iret;
 
        port_data = bt_self_component_port_get_data(
                bt_self_component_port_output_as_self_component_port(
@@ -233,13 +269,11 @@ bt_self_message_iterator_status ctf_fs_iterator_init(
        }
 
        msg_iter_data->ds_file_group = port_data->ds_file_group;
-       iret = msg_iter_data_set_current_ds_file(msg_iter_data);
-       if (iret) {
+       if (ctf_fs_iterator_reset(msg_iter_data)) {
                ret = BT_SELF_MESSAGE_ITERATOR_STATUS_ERROR;
                goto error;
        }
 
-       set_msg_iter_emits_stream_beginning_end_messages(msg_iter_data);
        bt_self_message_iterator_set_data(self_msg_iter,
                msg_iter_data);
        if (ret != BT_SELF_MESSAGE_ITERATOR_STATUS_OK) {
index d43885f09fbbbab0f528e315a405364ddce6b6e7..694b18480c8053d2796203bc499c8b32502c059b 100644 (file)
@@ -195,4 +195,8 @@ bt_self_message_iterator_status ctf_fs_iterator_next(
                bt_message_array_const msgs, uint64_t capacity,
                uint64_t *count);
 
+BT_HIDDEN
+bt_self_message_iterator_status ctf_fs_iterator_seek_beginning(
+               bt_self_message_iterator *message_iterator);
+
 #endif /* BABELTRACE_PLUGIN_CTF_FS_H */
index e87f83fe06135c1555e919b8dff7a81e63557d12..43afb7754b5843c53ac044af9301f2d4f55d8d94 100644 (file)
@@ -50,6 +50,8 @@ BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD(fs,
        ctf_fs_iterator_init);
 BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_FINALIZE_METHOD(fs,
        ctf_fs_iterator_finalize);
+BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_SEEK_BEGINNING_METHOD(fs,
+       ctf_fs_iterator_seek_beginning);
 
 #if 0
 /* ctf.fs sink */
This page took 0.027601 seconds and 4 git commands to generate.