mirror of
https://github.com/scummvm/scummvm.git
synced 2026-06-20 05:45:29 +00:00
STARTREK: Make FileStream extend MemoryReadStream
This commit is contained in:
committed by
Eugene Sandulenko
parent
e5e54b8a1f
commit
ad6a2bb0bb
@@ -24,79 +24,12 @@
|
||||
|
||||
namespace StarTrek {
|
||||
|
||||
FileStream::FileStream(Common::SeekableReadStream *stream, bool bigEndian) {
|
||||
_bigEndian = bigEndian;
|
||||
|
||||
_pos = 0;
|
||||
_size = stream->size();
|
||||
_data = new byte[_size];
|
||||
stream->read(_data, _size);
|
||||
delete stream;
|
||||
FileStream::FileStream(byte *data, uint32 len, bool bigEndian) : Common::MemoryReadStreamEndian(data, len, bigEndian) {
|
||||
_data = data;
|
||||
}
|
||||
|
||||
FileStream::~FileStream() {
|
||||
delete[] _data;
|
||||
}
|
||||
|
||||
// ReadStream functions
|
||||
|
||||
uint32 FileStream::read(void *dataPtr, uint32 dataSize) {
|
||||
if (_pos + dataSize > (uint32)size())
|
||||
dataSize = size() - _pos;
|
||||
memcpy(dataPtr, _data + _pos, dataSize);
|
||||
_pos += dataSize;
|
||||
return dataSize;
|
||||
}
|
||||
|
||||
byte FileStream::readByte() {
|
||||
assert(_pos + 1 <= size());
|
||||
return _data[_pos++];
|
||||
}
|
||||
|
||||
uint16 FileStream::readUint16() {
|
||||
assert(_pos + 2 <= size());
|
||||
uint16 w;
|
||||
if (_bigEndian)
|
||||
w = READ_BE_UINT16(_data + _pos);
|
||||
else
|
||||
w = READ_LE_UINT16(_data + _pos);
|
||||
_pos += 2;
|
||||
return w;
|
||||
}
|
||||
|
||||
uint32 FileStream::readUint32() {
|
||||
assert(_pos + 4 <= size());
|
||||
uint32 w;
|
||||
if (_bigEndian)
|
||||
w = READ_BE_UINT32(_data + _pos);
|
||||
else
|
||||
w = READ_LE_UINT32(_data + _pos);
|
||||
_pos += 4;
|
||||
return w;
|
||||
}
|
||||
|
||||
int16 FileStream::readSint16() {
|
||||
return (int16)readUint16();
|
||||
}
|
||||
|
||||
int32 FileStream::readSint32() {
|
||||
return (int32)readUint32();
|
||||
}
|
||||
|
||||
// SeekableReadStream functions
|
||||
|
||||
int32 FileStream::pos() const {
|
||||
return _pos;
|
||||
}
|
||||
|
||||
int32 FileStream::size() const {
|
||||
return _size;
|
||||
}
|
||||
|
||||
bool FileStream::seek(int32 offset, int whence) {
|
||||
assert(whence == SEEK_SET);
|
||||
_pos = offset;
|
||||
return true;
|
||||
free(_data);
|
||||
}
|
||||
|
||||
} // End of namespace StarTrek
|
||||
|
||||
@@ -23,37 +23,16 @@
|
||||
#define STARTREK_FILESTREAM_H
|
||||
|
||||
#include "common/stream.h"
|
||||
#include "common/memstream.h"
|
||||
|
||||
namespace StarTrek {
|
||||
|
||||
class FileStream {
|
||||
class FileStream : public Common::MemoryReadStreamEndian {
|
||||
public:
|
||||
FileStream(Common::SeekableReadStream *stream, bool bigEndian);
|
||||
FileStream(byte *data, uint32 len, bool bigEndian);
|
||||
~FileStream();
|
||||
|
||||
byte *_data;
|
||||
|
||||
private:
|
||||
bool _bigEndian;
|
||||
int32 _pos;
|
||||
int32 _size;
|
||||
|
||||
public:
|
||||
// ReadStream functions
|
||||
bool eos() const;
|
||||
uint32 read(void *dataPtr, uint32 dataSize);
|
||||
|
||||
byte readByte();
|
||||
uint16 readUint16();
|
||||
uint32 readUint32();
|
||||
int16 readSint16();
|
||||
int32 readSint32();
|
||||
|
||||
// SeekableReadStream functions
|
||||
int32 pos() const;
|
||||
int32 size() const;
|
||||
bool seek(int32 offset, int whence);
|
||||
|
||||
};
|
||||
|
||||
} // End of namespace StarTrek
|
||||
|
||||
@@ -420,7 +420,9 @@ SharedPtr<FileStream> StarTrekEngine::loadFile(Common::String filename, int file
|
||||
Common::File *file = new Common::File();
|
||||
if (!file->open(filename.c_str()))
|
||||
error("Could not find file \'%s\'", filename.c_str());
|
||||
return SharedPtr<FileStream>(new FileStream(file, bigEndian));
|
||||
byte *data = (byte *)malloc(file->size());
|
||||
file->read(data, file->size());
|
||||
return SharedPtr<FileStream>(new FileStream(data, file->size(), bigEndian));
|
||||
}
|
||||
|
||||
Common::SeekableReadStream *indexFile = 0;
|
||||
@@ -523,7 +525,10 @@ SharedPtr<FileStream> StarTrekEngine::loadFile(Common::String filename, int file
|
||||
Common::SeekableReadStream *stream = dataFile->readStream(uncompressedSize);
|
||||
delete dataFile;
|
||||
delete dataRunFile;
|
||||
return SharedPtr<FileStream>(new FileStream(stream, bigEndian));
|
||||
|
||||
byte *data = (byte *)malloc(stream->size());
|
||||
stream->read(data, stream->size());
|
||||
return SharedPtr<FileStream>(new FileStream(data, stream->size(), bigEndian));
|
||||
} else {
|
||||
if (fileCount != 1) {
|
||||
dataRunFile->seek(indexOffset);
|
||||
@@ -545,7 +550,10 @@ SharedPtr<FileStream> StarTrekEngine::loadFile(Common::String filename, int file
|
||||
|
||||
delete dataFile;
|
||||
delete dataRunFile;
|
||||
return SharedPtr<FileStream>(new FileStream(stream, bigEndian));
|
||||
|
||||
byte *data = (byte *)malloc(stream->size());
|
||||
stream->read(data, stream->size());
|
||||
return SharedPtr<FileStream>(new FileStream(data, stream->size(), bigEndian));
|
||||
}
|
||||
|
||||
// We should not get to this point...
|
||||
|
||||
Reference in New Issue
Block a user