X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Fctf%2Ffs-src%2Fdata-stream-file.hpp;h=05a6db13538049d4ab194dd0695e03fa9a3f852e;hb=HEAD;hp=86cc218b854e7f1e31e5596f049fb21cf80cc576;hpb=2cef6403332c78eedd27af34071f871d2233dad3;p=babeltrace.git diff --git a/src/plugins/ctf/fs-src/data-stream-file.hpp b/src/plugins/ctf/fs-src/data-stream-file.hpp index 86cc218b..eb20944d 100644 --- a/src/plugins/ctf/fs-src/data-stream-file.hpp +++ b/src/plugins/ctf/fs-src/data-stream-file.hpp @@ -4,21 +4,24 @@ * Copyright (C) 2016 Philippe Proulx */ -#ifndef CTF_FS_DS_FILE_H -#define CTF_FS_DS_FILE_H +#ifndef BABELTRACE_PLUGINS_CTF_FS_SRC_DATA_STREAM_FILE_HPP +#define BABELTRACE_PLUGINS_CTF_FS_SRC_DATA_STREAM_FILE_HPP #include #include +#include #include #include #include +#include "cpp-common/bt2/trace-ir.hpp" #include "cpp-common/bt2c/data-len.hpp" #include "cpp-common/bt2c/logging.hpp" #include "../common/src/msg-iter/msg-iter.hpp" +#include "file.hpp" struct ctf_fs_ds_file_info { @@ -32,21 +35,25 @@ struct ctf_fs_ds_file_info struct ctf_fs_ds_file { + using UP = std::unique_ptr; + explicit ctf_fs_ds_file(const bt2c::Logger& parentLogger) : logger {parentLogger, "PLUGIN/SRC.CTF.FS/DS"} { } + ctf_fs_ds_file(const ctf_fs_ds_file&) = delete; + ctf_fs_ds_file& operator=(const ctf_fs_ds_file&) = delete; + ~ctf_fs_ds_file(); + bt2c::Logger logger; /* Weak */ struct ctf_fs_metadata *metadata = nullptr; - /* Owned by this */ - struct ctf_fs_file *file = nullptr; + ctf_fs_file::UP file; - /* Owned by this */ - bt_stream *stream = nullptr; + bt2::Stream::Shared stream; void *mmap_addr = nullptr; @@ -71,15 +78,15 @@ struct ctf_fs_ds_file struct ctf_fs_ds_index_entry { - explicit ctf_fs_ds_index_entry(const bt2c::DataLen offsetParam, - const bt2c::DataLen packetSizeParam) noexcept : - offset(offsetParam), - packetSize(packetSizeParam) + ctf_fs_ds_index_entry(const bt2c::CStringView pathParam, const bt2c::DataLen offsetParam, + const bt2c::DataLen packetSizeParam) noexcept : + path {pathParam}, + offset {offsetParam}, packetSize {packetSizeParam} { } /* Weak, belongs to ctf_fs_ds_file_info. */ - const char *path = nullptr; + const char *path; /* Position of the packet from the beginning of the file. */ bt2c::DataLen offset; @@ -102,40 +109,47 @@ struct ctf_fs_ds_index_entry /* * Packet sequence number, or UINT64_MAX if not present in the index. */ - uint64_t packet_seq_num = 0; + uint64_t packet_seq_num = UINT64_MAX; }; struct ctf_fs_ds_index { - /* Array of pointer to struct ctf_fs_ds_index_entry. */ - GPtrArray *entries = nullptr; -}; - -struct ctf_fs_ds_file_group_deleter -{ - void operator()(struct ctf_fs_ds_file_group *group) noexcept; + std::vector entries; }; struct ctf_fs_ds_file_group { - using UP = std::unique_ptr; + using UP = std::unique_ptr; + + explicit ctf_fs_ds_file_group(struct ctf_fs_trace * const trace, + ctf_stream_class * const scParam, const uint64_t streamInstanceId, + ctf_fs_ds_index indexParam) noexcept : + + sc {scParam}, + stream_id(streamInstanceId), ctf_fs_trace {trace}, index {std::move(indexParam)} + + { + } + + /* + * Insert ds_file_info in the list of ds_file_infos at the right + * place to keep it sorted. + */ + void insert_ds_file_info_sorted(ctf_fs_ds_file_info::UP ds_file_info); /* - * Array of struct ctf_fs_ds_file_info, owned by this. - * * This is an _ordered_ array of data stream file infos which * belong to this group (a single stream instance). * * You can call ctf_fs_ds_file_create() with one of those paths * and the trace IR stream below. */ - GPtrArray *ds_file_infos = nullptr; + std::vector ds_file_infos; /* Owned by this */ struct ctf_stream_class *sc = nullptr; - /* Owned by this */ - bt_stream *stream = nullptr; + bt2::Stream::Shared stream; /* Stream (instance) ID; -1ULL means none */ uint64_t stream_id = 0; @@ -143,34 +157,18 @@ struct ctf_fs_ds_file_group /* Weak, belongs to component */ struct ctf_fs_trace *ctf_fs_trace = nullptr; - /* - * Owned by this. - */ - struct ctf_fs_ds_index *index = nullptr; + ctf_fs_ds_index index; }; -struct ctf_fs_ds_file *ctf_fs_ds_file_create(struct ctf_fs_trace *ctf_fs_trace, bt_stream *stream, - const char *path, const bt2c::Logger& logger); - -void ctf_fs_ds_file_destroy(struct ctf_fs_ds_file *stream); - -struct ctf_fs_ds_index *ctf_fs_ds_file_build_index(struct ctf_fs_ds_file *ds_file, - struct ctf_fs_ds_file_info *ds_file_info, - struct ctf_msg_iter *msg_iter); - -struct ctf_fs_ds_index *ctf_fs_ds_index_create(const bt2c::Logger& logger); +ctf_fs_ds_file::UP ctf_fs_ds_file_create(ctf_fs_trace *ctf_fs_trace, bt2::Stream::Shared stream, + const char *path, const bt2c::Logger& logger); -void ctf_fs_ds_index_destroy(struct ctf_fs_ds_index *index); - -void ctf_fs_ds_file_info_destroy(struct ctf_fs_ds_file_info *ds_file_info); +bt2s::optional ctf_fs_ds_file_build_index(struct ctf_fs_ds_file *ds_file, + struct ctf_fs_ds_file_info *ds_file_info, + struct ctf_msg_iter *msg_iter); ctf_fs_ds_file_info::UP ctf_fs_ds_file_info_create(const char *path, int64_t begin_ns); -ctf_fs_ds_file_group::UP ctf_fs_ds_file_group_create(struct ctf_fs_trace *ctf_fs_trace, - struct ctf_stream_class *sc, - uint64_t stream_instance_id, - struct ctf_fs_ds_index *index); - /* * Medium operations to iterate on a single ctf_fs_ds_file. * @@ -188,12 +186,19 @@ extern struct ctf_msg_iter_medium_ops ctf_fs_ds_file_medops; */ extern struct ctf_msg_iter_medium_ops ctf_fs_ds_group_medops; -enum ctf_msg_iter_medium_status ctf_fs_ds_group_medops_data_create( - struct ctf_fs_ds_file_group *ds_file_group, bt_self_message_iterator *self_msg_iter, - const bt2c::Logger& logger, struct ctf_fs_ds_group_medops_data **out); +struct ctf_fs_ds_group_medops_data_deleter +{ + void operator()(struct ctf_fs_ds_group_medops_data *data) noexcept; +}; -void ctf_fs_ds_group_medops_data_reset(struct ctf_fs_ds_group_medops_data *data); +using ctf_fs_ds_group_medops_data_up = + std::unique_ptr; + +enum ctf_msg_iter_medium_status +ctf_fs_ds_group_medops_data_create(struct ctf_fs_ds_file_group *ds_file_group, + bt_self_message_iterator *self_msg_iter, + const bt2c::Logger& logger, ctf_fs_ds_group_medops_data_up& out); -void ctf_fs_ds_group_medops_data_destroy(struct ctf_fs_ds_group_medops_data *data); +void ctf_fs_ds_group_medops_data_reset(struct ctf_fs_ds_group_medops_data *data); -#endif /* CTF_FS_DS_FILE_H */ +#endif /* BABELTRACE_PLUGINS_CTF_FS_SRC_DATA_STREAM_FILE_HPP */