Split out an interface for finding log files

This allows new implementations which list log files from cloud storage,
etc.

Change-Id: I962946962e92eedf582e6b0b3c65e9ba606835cb
Signed-off-by: Brian Silverman <bsilver16384@gmail.com>
diff --git a/aos/events/logging/logfile_utils.cc b/aos/events/logging/logfile_utils.cc
index 8a10876..31fdc83 100644
--- a/aos/events/logging/logfile_utils.cc
+++ b/aos/events/logging/logfile_utils.cc
@@ -520,6 +520,9 @@
 
 PartsMessageReader::PartsMessageReader(LogParts log_parts)
     : parts_(std::move(log_parts)), message_reader_(parts_.parts[0]) {
+  if (parts_.parts.size() >= 2) {
+    next_message_reader_.emplace(parts_.parts[1]);
+  }
   ComputeBootCounts();
 }
 
@@ -601,11 +604,18 @@
 
 void PartsMessageReader::NextLog() {
   if (next_part_index_ == parts_.parts.size()) {
+    CHECK(!next_message_reader_);
     done_ = true;
     return;
   }
-  message_reader_ = MessageReader(parts_.parts[next_part_index_]);
+  CHECK(next_message_reader_);
+  message_reader_ = std::move(*next_message_reader_);
   ComputeBootCounts();
+  if (next_part_index_ + 1 < parts_.parts.size()) {
+    next_message_reader_.emplace(parts_.parts[next_part_index_ + 1]);
+  } else {
+    next_message_reader_.reset();
+  }
   ++next_part_index_;
 }