TONY: Get rid of RMDataStream.

This commit is contained in:
Alyssa Milburn 2012-08-28 14:26:00 +02:00
parent 18b1f6d7c6
commit 35fd91793b
12 changed files with 180 additions and 768 deletions

View file

@ -35,360 +35,21 @@ namespace Tony {
/**
* Extracts a string from a data stream
* @param df data stream
* @param var String
*/
RMDataStream &operator>>(RMDataStream &df, Common::String &var) {
Common::String readString(Common::ReadStream &df) {
Common::String var;
uint8 len;
int i;
df >> len;
len = df.readByte();
for (i = 0; i < len; i++) {
char c;
df >> c;
c = df.readByte();
var += c;
}
return df;
}
/****************************************************************************\
* RMFileStreamSlow Methods
\****************************************************************************/
RMFileStreamSlow::RMFileStreamSlow() : RMDataStream() {
_stream = NULL;
}
RMFileStreamSlow::~RMFileStreamSlow() {
close();
}
void RMFileStreamSlow::close() {
delete _stream;
}
bool RMFileStreamSlow::openFile(Common::File &file) {
_stream = file.readStream(file.size());
_length = _stream->pos();
return true;
}
bool RMFileStreamSlow::openFile(const char *lpFN) {
// Open file for reading
Common::File f;
if (!f.open(lpFN))
return false;
_length = f.size();
_stream = f.readStream(f.size());
return true;
}
RMDataStream &RMFileStreamSlow::operator+=(int nBytes) {
seek(nBytes);
return *this;
}
int RMFileStreamSlow::pos() {
return _stream->pos();
}
bool RMFileStreamSlow::isEOF() {
return (pos() >= _length);
}
int RMFileStreamSlow::seek(int nBytes, RMDSPos where) {
switch (where) {
case START:
return _stream->seek(nBytes);
case END:
return _stream->seek(nBytes, SEEK_END);
case CUR:
return _stream->seek(nBytes, SEEK_CUR);
default:
return 0;
}
}
bool RMFileStreamSlow::read(void *buf, int size) {
uint32 dwRead;
dwRead = _stream->read(buf, size);
return ((int)dwRead == size);
}
RMFileStreamSlow &operator>>(RMFileStreamSlow &df, char &var) {
df.read(&var, 1);
return df;
}
RMFileStreamSlow &operator>>(RMFileStreamSlow &df, byte &var) {
df.read(&var, 1);
return df;
}
RMFileStreamSlow &operator>>(RMFileStreamSlow &df, uint16 &var) {
uint16 v;
df.read(&v, 2);
v = FROM_LE_16(v);
return df;
}
RMFileStreamSlow &operator>>(RMFileStreamSlow &df, int16 &var) {
uint16 v;
df.read(&v, 2);
var = (int16)FROM_LE_16(v);
return df;
}
RMFileStreamSlow &operator>>(RMFileStreamSlow &df, int &var) {
int v;
df.read(&v, 4);
var = FROM_LE_32(v);
return df;
}
RMFileStreamSlow &operator>>(RMFileStreamSlow &df, uint32 &var) {
uint32 v;
df.read(&v, 4);
var = FROM_LE_32(v);
return df;
}
/****************************************************************************\
* RMDataStream methods
\****************************************************************************/
/**
* Constructor
*/
RMDataStream::RMDataStream() {
_length = 0;
_pos = 0;
_bError = false;
_buf = NULL;
_ecode = 0;
}
/**
* Destructor
*/
RMDataStream::~RMDataStream() {
close();
}
/**
* Close a stream
*/
void RMDataStream::close() {
_length = 0;
_pos = 0;
}
/**
* Takes the address of the buffer from which will be read the data.
* @param lpBuf Data buffer
* @param size Size of the buffer
* @remarks If the length of the buffer is not known, and cannot be
* specified, then EOF() and Seek() to end won't work.
*/
void RMDataStream::openBuffer(const byte *lpBuf, int size) {
_length = size;
_buf = lpBuf;
_bError = false;
_pos = 0;
}
/**
* Returns the length of the stream
* @returns Stream length
*/
int RMDataStream::length() {
return _length;
}
/**
* Determines if the end of the stream has been reached
* @returns true if end of stream reached, false if not
*/
bool RMDataStream::isEOF() {
return (_pos >= _length);
}
/**
* Extracts data from the stream
* @param df Stream
* @param var Variable of a supported type
* @returns Value read from the stream
*/
RMDataStream &operator>>(RMDataStream &df, char &var) {
df.read(&var, 1);
return df;
}
/**
* Extracts data from the stream
* @param df Stream
* @param var Variable of a supported type
* @returns Value read from the stream
*/
RMDataStream &operator>>(RMDataStream &df, uint8 &var) {
df.read(&var, 1);
return df;
}
/**
* Extracts data from the stream
* @param df Stream
* @param var Variable of a supported type
* @returns Value read from the stream
*/
RMDataStream &operator>>(RMDataStream &df, uint16 &var) {
uint16 v;
df.read(&v, 2);
var = FROM_LE_16(v);
return df;
}
/**
* Extracts data from the stream
* @param df Stream
* @param var Variable of a supported type
* @returns Value read from the stream
*/
RMDataStream &operator>>(RMDataStream &df, int16 &var) {
uint16 v;
df.read(&v, 2);
var = (int16)FROM_LE_16(v);
return df;
}
/**
* Extracts data from the stream
* @param df Stream
* @param var Variable of a supported type
* @returns Value read from the stream
*/
RMDataStream &operator>>(RMDataStream &df, int &var) {
uint32 v;
df.read(&v, 4);
var = (int)FROM_LE_32(v);
return df;
}
/**
* Extracts data from the stream
* @param df Stream
* @param var Variable of a supported type
* @returns Value read from the stream
*/
RMDataStream &operator>>(RMDataStream &df, uint32 &var) {
uint32 v;
df.read(&v, 4);
var = FROM_LE_32(v);
return df;
}
/**
* Reads a series of data from the stream in a buffer
* @param lpBuf Data buffer
* @param size Size of the buffer
* @returns true if we have reached the end, false if not
*/
bool RMDataStream::read(void *lpBuf, int size) {
byte *dest = (byte *)lpBuf;
if ((_pos + size) > _length) {
Common::copy(_buf + _pos, _buf + _pos + (_length - _pos), dest);
return true;
} else {
Common::copy(_buf + _pos, _buf + _pos + size, dest);
_pos += size;
return false;
}
}
/**
* Skips a number of bytes in the stream
* @param nBytres Number of bytes to skip
* @returns The stream
*/
RMDataStream &RMDataStream::operator+=(int nBytes) {
_pos += nBytes;
return *this;
}
/**
* Seeks to a position within the stream
* @param nBytes Number of bytes from specified origin
* @param origin Origin to do offset from
* @returns The absolute current position in bytes
*/
int RMDataStream::seek(int nBytes, RMDSPos origin) {
switch (origin) {
case CUR:
break;
case START:
_pos = 0;
break;
case END:
if (_length == SIZENOTKNOWN)
return _pos;
_pos = _length;
break;
}
_pos += nBytes;
return _pos;
}
/**
* Returns the current position of the stream
* @returns The current position
*/
int RMDataStream::pos() {
return _pos;
}
/**
* Check if an error occurred during reading the stream
* @returns true if there was an error, false otherwise
*/
bool RMDataStream::isError() {
return _bError;
}
/**
* Sets an error code for the stream
* @param code Error code
*/
void RMDataStream::setError(int code) {
_bError = true;
_ecode = code;
}
/**
* Returns the error code for the stream
* @returns Error code
*/
int RMDataStream::getError() {
return _ecode;
return var;
}
/****************************************************************************\
@ -507,9 +168,9 @@ bool RMPoint::operator!=(RMPoint p) {
/**
* Reads a point from a stream
*/
RMDataStream &operator>>(RMDataStream &ds, RMPoint &p) {
ds >> p._x >> p._y;
return ds;
void RMPoint::readFromStream(Common::ReadStream &ds) {
_x = ds.readSint32LE();
_y = ds.readSint32LE();
}
/****************************************************************************\
@ -663,9 +324,11 @@ void RMRect::normalizeRect() {
setRect(MIN(_x1, _x2), MIN(_y1, _y2), MAX(_x1, _x2), MAX(_y1, _y2));
}
RMDataStream &operator>>(RMDataStream &ds, RMRect &rc) {
ds >> rc._x1 >> rc._y1 >> rc._x2 >> rc._y2;
return ds;
void RMRect::readFromStream(Common::ReadStream &ds) {
_x1 = ds.readSint32LE();
_y1 = ds.readSint32LE();
_x2 = ds.readSint32LE();
_y2 = ds.readSint32LE();
}
/****************************************************************************\