[Scummvm-cvs-logs] SF.net SVN: scummvm:[48012] scummvm/trunk/common/unarj.cpp

peres001 at users.sourceforge.net peres001 at users.sourceforge.net
Tue Feb 9 02:07:40 CET 2010


Revision: 48012
          http://scummvm.svn.sourceforge.net/scummvm/?rev=48012&view=rev
Author:   peres001
Date:     2010-02-09 01:07:39 +0000 (Tue, 09 Feb 2010)

Log Message:
-----------
Merged _headers and _filemap.

Modified Paths:
--------------
    scummvm/trunk/common/unarj.cpp

Modified: scummvm/trunk/common/unarj.cpp
===================================================================
--- scummvm/trunk/common/unarj.cpp	2010-02-08 23:12:42 UTC (rev 48011)
+++ scummvm/trunk/common/unarj.cpp	2010-02-09 01:07:39 UTC (rev 48012)
@@ -714,13 +714,11 @@
 
 #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 {
 
-	Common::Array<ArjHeader *> _headers;
-	ArjFilesMap _fileMap;
-
+	ArjHeadersMap _headers;
 	Common::String _arjFilename;
 
 public:
@@ -755,32 +753,31 @@
 
 	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<ArjHeader *>::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 @@
 }
 
 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);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list