Add PartsMessageReader to read part files
This abstracts the multi-part reading logic out to simplify the new log
sorting code.
Change-Id: I83f673fea9f3b9b584eec58bd111da76b2fc2d85
diff --git a/aos/events/logging/logfile_utils.cc b/aos/events/logging/logfile_utils.cc
index 908e5e1..6b7a598 100644
--- a/aos/events/logging/logfile_utils.cc
+++ b/aos/events/logging/logfile_utils.cc
@@ -431,6 +431,32 @@
return std::move(result);
}
+PartsMessageReader::PartsMessageReader(LogParts log_parts)
+ : parts_(std::move(log_parts)), message_reader_(parts_.parts[0]) {}
+
+std::optional<FlatbufferVector<MessageHeader>>
+PartsMessageReader::ReadMessage() {
+ while (!done_) {
+ std::optional<FlatbufferVector<MessageHeader>> message =
+ message_reader_.ReadMessage();
+ if (message) {
+ newest_timestamp_ = message_reader_.newest_timestamp();
+ return message;
+ }
+ NextLog();
+ }
+ return std::nullopt;
+}
+
+void PartsMessageReader::NextLog() {
+ if (next_part_index_ == parts_.parts.size()) {
+ done_ = true;
+ return;
+ }
+ message_reader_ = MessageReader(parts_.parts[next_part_index_]);
+ ++next_part_index_;
+}
+
SplitMessageReader::SplitMessageReader(
const std::vector<std::string> &filenames)
: filenames_(filenames),