Introduce factory function makeArjArchive, hide ArjArchive class implementation

svn-id: r48009
This commit is contained in:
Max Horn 2010-02-08 21:46:50 +00:00
parent 4e86741d9a
commit b3da11ba8a
3 changed files with 30 additions and 22 deletions

View file

@ -712,6 +712,26 @@ void ArjDecoder::decode_f(int32 origsize) {
#pragma mark ArjArchive implementation
typedef HashMap<String, int, IgnoreCase_Hash, IgnoreCase_EqualTo> ArjFilesMap;
class ArjArchive : public Common::Archive {
Common::Array<ArjHeader *> _headers;
ArjFilesMap _fileMap;
Common::String _arjFilename;
public:
ArjArchive(const String &name);
virtual ~ArjArchive();
// Common::Archive implementation
virtual bool hasFile(const String &name);
virtual int listMembers(ArchiveMemberList &list);
virtual ArchiveMemberPtr getMember(const String &name);
virtual SeekableReadStream *createReadStreamForMember(const String &name) const;
};
ArjArchive::ArjArchive(const String &filename) : _arjFilename(filename) {
Common::File arjFile;
@ -813,4 +833,8 @@ SeekableReadStream *ArjArchive::createReadStreamForMember(const String &name) co
return new Common::MemoryReadStream(uncompressedData, hdr->origSize, DisposeAfterUse::YES);
}
Archive *makeArjArchive(const String &name) {
return new ArjArchive(name);
}
} // End of namespace Common

View file

@ -32,27 +32,11 @@
namespace Common {
struct ArjHeader;
typedef HashMap<String, int, IgnoreCase_Hash, IgnoreCase_EqualTo> ArjFilesMap;
class ArjArchive : public Common::Archive {
Common::Array<ArjHeader *> _headers;
ArjFilesMap _fileMap;
Common::String _arjFilename;
public:
ArjArchive(const String &name);
virtual ~ArjArchive();
// Common::Archive implementation
virtual bool hasFile(const String &name);
virtual int listMembers(ArchiveMemberList &list);
virtual ArchiveMemberPtr getMember(const String &name);
virtual SeekableReadStream *createReadStreamForMember(const String &name) const;
};
/**
* This factory method creates an Archive instance corresponding to the content
* of the ARJ compressed file with the given name.
*/
Archive *makeArjArchive(const String &name);
} // End of namespace Common

View file

@ -35,7 +35,7 @@ ArchiveMan::~ArchiveMan() {
}
void ArchiveMan::registerArchive(const Common::String &filename) {
add(filename, new Common::ArjArchive(filename));
add(filename, Common::makeArjArchive(filename));
}
Common::SeekableReadStream *ArchiveMan::open(const Common::String &filename) {