From 62741adf236a8a58674c5746cf7f8ae7417f4865 Mon Sep 17 00:00:00 2001 From: Nicola Mettifogo Date: Tue, 9 Feb 2010 01:07:39 +0000 Subject: Merged _headers and _filemap. svn-id: r48012 --- common/unarj.cpp | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) (limited to 'common') diff --git a/common/unarj.cpp b/common/unarj.cpp index c3bb3308bc..27399036e1 100644 --- a/common/unarj.cpp +++ b/common/unarj.cpp @@ -714,13 +714,11 @@ void ArjDecoder::decode_f(int32 origsize) { #pragma mark ArjArchive implementation -typedef HashMap ArjFilesMap; +typedef HashMap ArjHeadersMap; class ArjArchive : public Common::Archive { - Common::Array _headers; - ArjFilesMap _fileMap; - + ArjHeadersMap _headers; Common::String _arjFilename; public: @@ -755,32 +753,31 @@ ArjArchive::ArjArchive(const String &filename) : _arjFilename(filename) { ArjHeader *header; while ((header = readHeader(arjFile)) != NULL) { - _headers.push_back(header); - + _headers[header->filename] = header; arjFile.seek(header->compSize, SEEK_CUR); - - _fileMap[header->filename] = _headers.size() - 1; } debug(0, "ArjArchive::ArjArchive(%s): Located %d files", filename.c_str(), _headers.size()); } ArjArchive::~ArjArchive() { - for (uint i = 0; i < _headers.size(); i++) - delete _headers[i]; + ArjHeadersMap::iterator it = _headers.begin(); + for ( ; it != _headers.end(); ++it) { + delete it->_value; + } } bool ArjArchive::hasFile(const String &name) { - return _fileMap.contains(name); + return _headers.contains(name); } int ArjArchive::listMembers(ArchiveMemberList &list) { int matches = 0; - Common::Array::iterator it = _headers.begin(); + ArjHeadersMap::iterator it = _headers.begin(); for ( ; it != _headers.end(); ++it) { - list.push_back(ArchiveMemberList::value_type(new GenericArchiveMember((*it)->filename, this))); + list.push_back(ArchiveMemberList::value_type(new GenericArchiveMember(it->_value->filename, this))); matches++; } @@ -795,11 +792,11 @@ ArchiveMemberPtr ArjArchive::getMember(const String &name) { } SeekableReadStream *ArjArchive::createReadStreamForMember(const String &name) const { - if (!_fileMap.contains(name)) { + if (!_headers.contains(name)) { return 0; } - ArjHeader *hdr = _headers[_fileMap[name]]; + ArjHeader *hdr = _headers[name]; Common::File archiveFile; archiveFile.open(_arjFilename); -- cgit v1.2.3