Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 880d65b4 authored by Pierre Lecesne's avatar Pierre Lecesne
Browse files

Iterate over the zip entries in order.

Test: Unit tests pass.

Change-Id: I0501fad51a87c6cc91f2fc22358cd356616e1a2e
parent ddb80216
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -66,7 +66,7 @@ ZipFileCollectionIterator::ZipFileCollectionIterator(
bool ZipFileCollectionIterator::HasNext() { return current_ != end_; }

IFile* ZipFileCollectionIterator::Next() {
  IFile* result = current_->second.get();
  IFile* result = current_->get();
  ++current_;
  return result;
}
@@ -110,8 +110,10 @@ std::unique_ptr<ZipFileCollection> ZipFileCollection::Create(
        std::string(reinterpret_cast<const char*>(zip_entry_name.name),
                    zip_entry_name.name_length);
    std::string nested_path = path.to_string() + "@" + zip_entry_path;
    collection->files_[zip_entry_path] = util::make_unique<ZipFile>(
        collection->handle_, zip_data, Source(nested_path));
    std::unique_ptr<IFile> file =
        util::make_unique<ZipFile>(collection->handle_, zip_data, Source(nested_path));
    collection->files_by_name_[zip_entry_path] = file.get();
    collection->files_.push_back(std::move(file));
  }

  if (result != -1) {
@@ -122,9 +124,9 @@ std::unique_ptr<ZipFileCollection> ZipFileCollection::Create(
}

IFile* ZipFileCollection::FindFile(const StringPiece& path) {
  auto iter = files_.find(path.to_string());
  if (iter != files_.end()) {
    return iter->second.get();
  auto iter = files_by_name_.find(path.to_string());
  if (iter != files_by_name_.end()) {
    return iter->second;
  }
  return nullptr;
}
+3 −2
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@ class ZipFileCollectionIterator : public IFileCollectionIterator {
  io::IFile* Next() override;

 private:
  std::map<std::string, std::unique_ptr<IFile>>::const_iterator current_, end_;
  std::vector<std::unique_ptr<IFile>>::const_iterator current_, end_;
};

/**
@@ -78,7 +78,8 @@ class ZipFileCollection : public IFileCollection {
  ZipFileCollection();

  ZipArchiveHandle handle_;
  std::map<std::string, std::unique_ptr<IFile>> files_;
  std::vector<std::unique_ptr<IFile>> files_;
  std::map<std::string, IFile*> files_by_name_;
};

}  // namespace io