Merge "Iterate over the zip entries in order."

This commit is contained in:
Pierre Lecesne
2017-02-03 18:51:39 +00:00
committed by Android (Google) Code Review
2 changed files with 11 additions and 8 deletions

View File

@@ -70,7 +70,7 @@ ZipFileCollectionIterator::ZipFileCollectionIterator(
bool ZipFileCollectionIterator::HasNext() { return current_ != end_; }
IFile* ZipFileCollectionIterator::Next() {
IFile* result = current_->second.get();
IFile* result = current_->get();
++current_;
return result;
}
@@ -114,8 +114,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) {
@@ -126,9 +128,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;
}

View File

@@ -58,7 +58,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_;
};
/**
@@ -79,7 +79,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