diff options
| -rw-r--r-- | engines/adl/disk.cpp | 21 | ||||
| -rw-r--r-- | engines/adl/disk.h | 27 | 
2 files changed, 48 insertions, 0 deletions
diff --git a/engines/adl/disk.cpp b/engines/adl/disk.cpp index b91efec1f1..e2c3da3d5c 100644 --- a/engines/adl/disk.cpp +++ b/engines/adl/disk.cpp @@ -21,6 +21,7 @@   */  #include "common/stream.h" +#include "common/substream.h"  #include "adl/disk.h" @@ -87,4 +88,24 @@ bool DiskImage_DSK::open(const Common::String &filename) {  	return true;  } +Common::SeekableReadStream *FilesDataBlock::createReadStream() const { +	return _files->createReadStream(_filename, _offset); +} + +const DataBlockPtr PlainFiles::getDataBlock(const Common::String &filename, uint offset) const { +	return Common::SharedPtr<FilesDataBlock>(new FilesDataBlock(this, filename, offset)); +} + +Common::SeekableReadStream *PlainFiles::createReadStream(const Common::String &filename, uint offset) const { +	Common::File *f(new Common::File()); + +	if (!f->open(filename)) +		error("Failed to open '%s'", filename.c_str()); + +	if (offset == 0) +		return f; +	else +		return new Common::SeekableSubReadStream(f, offset, f->size(), DisposeAfterUse::YES); +} +  } // End of namespace Adl diff --git a/engines/adl/disk.h b/engines/adl/disk.h index 0bf57c7661..b6a5c60262 100644 --- a/engines/adl/disk.h +++ b/engines/adl/disk.h @@ -43,6 +43,33 @@ public:  typedef Common::SharedPtr<DataBlock> DataBlockPtr; +class Files { +public: +	virtual ~Files() { } + +	virtual const DataBlockPtr getDataBlock(const Common::String &filename, uint offset) const = 0; +	virtual Common::SeekableReadStream *createReadStream(const Common::String &filename, uint offset) const = 0; +}; + +class FilesDataBlock : public DataBlock { +public: +	FilesDataBlock(const Files *files, const Common::String &filename, uint offset) : _files(files), _filename(filename), _offset(offset) { } + +	bool isValid() const { return true; } +	Common::SeekableReadStream *createReadStream() const; + +private: +	const Common::String _filename; +	uint _offset; +	const Files *_files; +}; + +class PlainFiles : public Files { +public: +	const DataBlockPtr getDataBlock(const Common::String &filename, uint offset = 0) const; +	Common::SeekableReadStream *createReadStream(const Common::String &filename, uint offset = 0) const; +}; +  class DiskImage {  public:  	DiskImage();  | 
