Merged _headers and _filemap.

svn-id: r48012
This commit is contained in:
Nicola Mettifogo 2010-02-09 01:07:39 +00:00
parent 816e318134
commit 62741adf23

View file

@ -714,13 +714,11 @@ void ArjDecoder::decode_f(int32 origsize) {
#pragma mark ArjArchive implementation #pragma mark ArjArchive implementation
typedef HashMap<String, int, IgnoreCase_Hash, IgnoreCase_EqualTo> ArjFilesMap; typedef HashMap<String, ArjHeader*, IgnoreCase_Hash, IgnoreCase_EqualTo> ArjHeadersMap;
class ArjArchive : public Common::Archive { class ArjArchive : public Common::Archive {
Common::Array<ArjHeader *> _headers; ArjHeadersMap _headers;
ArjFilesMap _fileMap;
Common::String _arjFilename; Common::String _arjFilename;
public: public:
@ -755,32 +753,31 @@ ArjArchive::ArjArchive(const String &filename) : _arjFilename(filename) {
ArjHeader *header; ArjHeader *header;
while ((header = readHeader(arjFile)) != NULL) { while ((header = readHeader(arjFile)) != NULL) {
_headers.push_back(header); _headers[header->filename] = header;
arjFile.seek(header->compSize, SEEK_CUR); 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()); debug(0, "ArjArchive::ArjArchive(%s): Located %d files", filename.c_str(), _headers.size());
} }
ArjArchive::~ArjArchive() { ArjArchive::~ArjArchive() {
for (uint i = 0; i < _headers.size(); i++) ArjHeadersMap::iterator it = _headers.begin();
delete _headers[i]; for ( ; it != _headers.end(); ++it) {
delete it->_value;
}
} }
bool ArjArchive::hasFile(const String &name) { bool ArjArchive::hasFile(const String &name) {
return _fileMap.contains(name); return _headers.contains(name);
} }
int ArjArchive::listMembers(ArchiveMemberList &list) { int ArjArchive::listMembers(ArchiveMemberList &list) {
int matches = 0; int matches = 0;
Common::Array<ArjHeader *>::iterator it = _headers.begin(); ArjHeadersMap::iterator it = _headers.begin();
for ( ; it != _headers.end(); ++it) { 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++; matches++;
} }
@ -795,11 +792,11 @@ ArchiveMemberPtr ArjArchive::getMember(const String &name) {
} }
SeekableReadStream *ArjArchive::createReadStreamForMember(const String &name) const { SeekableReadStream *ArjArchive::createReadStreamForMember(const String &name) const {
if (!_fileMap.contains(name)) { if (!_headers.contains(name)) {
return 0; return 0;
} }
ArjHeader *hdr = _headers[_fileMap[name]]; ArjHeader *hdr = _headers[name];
Common::File archiveFile; Common::File archiveFile;
archiveFile.open(_arjFilename); archiveFile.open(_arjFilename);