[Scummvm-cvs-logs] CVS: scummvm/common stream.cpp,NONE,1.1 stream.h,NONE,1.1 file.cpp,1.56,1.57 file.h,1.21,1.22 module.mk,1.14,1.15 savefile.cpp,1.9,1.10 savefile.h,1.9,1.10

Max Horn fingolfin at users.sourceforge.net
Sat Apr 17 02:58:05 CEST 2004


Update of /cvsroot/scummvm/scummvm/common
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27777

Modified Files:
	file.cpp file.h module.mk savefile.cpp savefile.h 
Added Files:
	stream.cpp stream.h 
Log Message:
Introduce ReadStream and WriteStream (as explained in my File class design mails on scummvm-devel)

--- NEW FILE: stream.cpp ---
/* ScummVM - Scumm Interpreter
 * Copyright (C) 2002-2004 The ScummVM project
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.

 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 * $Header: /cvsroot/scummvm/scummvm/common/stream.cpp,v 1.1 2004/04/17 09:57:15 fingolfin Exp $
 *
 */

#include "stdafx.h"
#include "common/stream.h"

namespace Common {

/* TODO:
 * - The ReadStream / WriteStream should provide some error handling
 */

byte ReadStream::readByte() {
	byte b = 0;
	read(&b, 1);
	return b;
}

uint16 ReadStream::readUint16LE() {
	uint16 a = readByte();
	uint16 b = readByte();
	return a | (b << 8);
}

uint32 ReadStream::readUint32LE() {
	uint32 a = readUint16LE();
	uint32 b = readUint16LE();
	return (b << 16) | a;
}

uint16 ReadStream::readUint16BE() {
	uint16 b = readByte();
	uint16 a = readByte();
	return a | (b << 8);
}

uint32 ReadStream::readUint32BE() {
	uint32 b = readUint16BE();
	uint32 a = readUint16BE();
	return (b << 16) | a;
}


void WriteStream::writeByte(byte value) {
	write(&value, 1);
}

void WriteStream::writeUint16LE(uint16 value) {
	writeByte((byte)(value & 0xff));
	writeByte((byte)(value >> 8));
}

void WriteStream::writeUint32LE(uint32 value) {
	writeUint16LE((uint16)(value & 0xffff));
	writeUint16LE((uint16)(value >> 16));
}

void WriteStream::writeUint16BE(uint16 value) {
	writeByte((byte)(value >> 8));
	writeByte((byte)(value & 0xff));
}

void WriteStream::writeUint32BE(uint32 value) {
	writeUint16BE((uint16)(value >> 16));
	writeUint16BE((uint16)(value & 0xffff));
}

}	// End of namespace Common

--- NEW FILE: stream.h ---
/* ScummVM - Scumm Interpreter
 * Copyright (C) 2001  Ludvig Strigeus
 * Copyright (C) 2001/2002 The ScummVM project
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.

 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 * $Header: /cvsroot/scummvm/scummvm/common/stream.h,v 1.1 2004/04/17 09:57:15 fingolfin Exp $
 *
 */

#ifndef COMMON_STREAM_H
#define COMMON_STREAM_H

#include "stdafx.h"
#include "common/scummsys.h"


namespace Common {

class WriteStream {
public:
	virtual uint32 write(const void *ptr, uint32 size) = 0;

	// The remaining methods all have default implementations

	void writeByte(byte value);

	void writeUint16LE(uint16 value);
	void writeUint32LE(uint32 value);

	void writeUint16BE(uint16 value);
	void writeUint32BE(uint32 value);

/*
	void writeSint16LE(int16 value);
	void writeSint32LE(int32 value);

	void writeSint16BE(int16 value);
	void writeSint32BE(int32 value);
*/
};


class ReadStream {
public:
	virtual uint32 read(void *ptr, uint32 size) = 0;

	// The remaining methods all have default implementations

	byte readByte();

	uint16 readUint16LE();
	uint32 readUint32LE();

	uint16 readUint16BE();
	uint32 readUint32BE();

/*
	int16 readSint16LE();
	int32 readSint32LE();

	int16 readSint16BE();
	int32 readSint32BE();
*/
};

/**
 * XORReadStream is a wrapper around an arbitrary other ReadStream,
 * which 'decrypts' the data being read by XORing all data bytes with the given
 * encryption 'key'.
 */
class XORReadStream : public ReadStream {
private:
	byte _encbyte;
	ReadStream *_realStream;
public:
	XORReadStream(ReadStream *in, byte enc = 0) : _realStream(in), _encbyte(enc) {}
	void setEnc(byte value) { _encbyte = value; }

	uint32 read(void *ptr, uint32 size) {
		uint32 len = _realStream->read(ptr, size);
		if (_encbyte) {
			byte *p = (byte *)ptr;
			byte *end = p + len;
			while (p < end)
				*p++ ^= _encbyte;
		}
		return len;
	}
};

class MemoryReadStream : public ReadStream {
private:
	const byte *_ptr;
	uint32 _size;
public:
	MemoryReadStream(const byte *ptr, uint32 size) : _ptr(ptr), _size(size) {}

	uint32 read(void *ptr, uint32 size) {
		if (size > _size)
			size = _size;
		memcpy(ptr, _ptr, size);
		_size -= size;
		_ptr += size;
		return size;
	}
};

}	// End of namespace Common

#endif

Index: file.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/common/file.cpp,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -d -r1.56 -r1.57
--- file.cpp	10 Feb 2004 10:56:16 -0000	1.56
+++ file.cpp	17 Apr 2004 09:57:15 -0000	1.57
@@ -273,45 +273,6 @@
 	return real_len;
 }
 
-byte File::readByte() {
-	byte b;
-
-	if (_handle == NULL) {
-		error("File is not open!");
-		return 0;
-	}
-
-	if (fread(&b, 1, 1, _handle) != 1) {
-		clearerr(_handle);
-		_ioFailed = true;
-	}
-	return b ^ _encbyte;
-}
-
-uint16 File::readUint16LE() {
-	uint16 a = readByte();
-	uint16 b = readByte();
-	return a | (b << 8);
-}
-
-uint32 File::readUint32LE() {
-	uint32 a = readUint16LE();
-	uint32 b = readUint16LE();
-	return (b << 16) | a;
-}
-
-uint16 File::readUint16BE() {
-	uint16 b = readByte();
-	uint16 a = readByte();
-	return a | (b << 8);
-}
-
-uint32 File::readUint32BE() {
-	uint32 b = readUint16BE();
-	uint32 a = readUint16BE();
-	return (b << 16) | a;
-}
-
 uint32 File::write(const void *ptr, uint32 len) {
 	byte *tmp = 0;
 	
@@ -345,36 +306,3 @@
 
 	return len;
 }
-
-void File::writeByte(byte value) {
-	value ^= _encbyte;
-
-	if (_handle == NULL) {
-		error("File is not open!");
-	}
-
-	if (fwrite(&value, 1, 1, _handle) != 1) {
-		clearerr(_handle);
-		_ioFailed = true;
-	}
-}
-
-void File::writeUint16LE(uint16 value) {
-	writeByte((byte)(value & 0xff));
-	writeByte((byte)(value >> 8));
-}
-
-void File::writeUint32LE(uint32 value) {
-	writeUint16LE((uint16)(value & 0xffff));
-	writeUint16LE((uint16)(value >> 16));
-}
-
-void File::writeUint16BE(uint16 value) {
-	writeByte((byte)(value >> 8));
-	writeByte((byte)(value & 0xff));
-}
-
-void File::writeUint32BE(uint32 value) {
-	writeUint16BE((uint16)(value >> 16));
-	writeUint16BE((uint16)(value & 0xffff));
-}

Index: file.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/common/file.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- file.h	6 Jan 2004 12:45:27 -0000	1.21
+++ file.h	17 Apr 2004 09:57:15 -0000	1.22
@@ -25,8 +25,9 @@
 #include "stdafx.h"
 #include "common/scummsys.h"
 #include "common/str.h"
+#include "common/stream.h"
 
-class File {
+class File : public Common::ReadStream, public Common::WriteStream {
 private:
 
 	FILE * _handle;
@@ -60,17 +61,8 @@
 	const char *name() const { return _name; }
 	void seek(int32 offs, int whence = SEEK_SET);
 	uint32 read(void *ptr, uint32 size);
-	byte readByte();
-	uint16 readUint16LE();
-	uint32 readUint32LE();
-	uint16 readUint16BE();
-	uint32 readUint32BE();
 	uint32 write(const void *ptr, uint32 size);
-	void writeByte(byte value);
-	void writeUint16LE(uint16 value);
-	void writeUint32LE(uint32 value);
-	void writeUint16BE(uint16 value);
-	void writeUint32BE(uint32 value);
+
 	void setEnc(byte value) { _encbyte = value; }
 };
 

Index: module.mk
===================================================================
RCS file: /cvsroot/scummvm/scummvm/common/module.mk,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- module.mk	30 Jan 2004 21:54:27 -0000	1.14
+++ module.mk	17 Apr 2004 09:57:15 -0000	1.15
@@ -6,6 +6,7 @@
 	common/md5.o \
 	common/scaler.o \
 	common/str.o \
+	common/stream.o \
 	common/timer.o \
 	common/util.o \
 	common/savefile.o \

Index: savefile.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/common/savefile.cpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- savefile.cpp	6 Jan 2004 12:45:28 -0000	1.9
+++ savefile.cpp	17 Apr 2004 09:57:15 -0000	1.10
@@ -23,6 +23,9 @@
 #include "common/util.h"
 #include "common/savefile.h"
 
+#include <stdio.h>
+#include <string.h>
+
 #ifdef USE_ZLIB
 #include <zlib.h>
 #endif
@@ -31,66 +34,10 @@
 	return fread(ptr, 1, size);
 }
 
-byte SaveFile::readByte() {
-	byte b;
-	// TODO: Proper error handling
-	if (fread(&b, 1, 1) != 1)
-		return 0;
-	return b;
-}
-
-uint16 SaveFile::readUint16LE() {
-	uint16 a = readByte();
-	uint16 b = readByte();
-	return a | (b << 8);
-}
-
-uint32 SaveFile::readUint32LE() {
-	uint32 a = readUint16LE();
-	uint32 b = readUint16LE();
-	return (b << 16) | a;
-}
-
-uint16 SaveFile::readUint16BE() {
-	uint16 b = readByte();
-	uint16 a = readByte();
-	return a | (b << 8);
-}
-
-uint32 SaveFile::readUint32BE() {
-	uint32 b = readUint16BE();
-	uint32 a = readUint16BE();
-	return (b << 16) | a;
-}
-
 uint32 SaveFile::write(const void *ptr, uint32 size) {
 	return fwrite(ptr, 1, size);
 }
 
-void SaveFile::writeByte(byte value) {
-	fwrite(&value, 1, 1);
-}
-
-void SaveFile::writeUint16LE(uint16 value) {
-	writeByte((byte)(value & 0xff));
-	writeByte((byte)(value >> 8));
-}
-
-void SaveFile::writeUint32LE(uint32 value) {
-	writeUint16LE((uint16)(value & 0xffff));
-	writeUint16LE((uint16)(value >> 16));
-}
-
-void SaveFile::writeUint16BE(uint16 value) {
-	writeByte((byte)(value >> 8));
-	writeByte((byte)(value & 0xff));
-}
-
-void SaveFile::writeUint32BE(uint32 value) {
-	writeUint16BE((uint16)(value >> 16));
-	writeUint16BE((uint16)(value & 0xffff));
-}
-
 
 class StdioSaveFile : public SaveFile {
 private:

Index: savefile.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/common/savefile.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- savefile.h	30 Nov 2003 00:41:19 -0000	1.9
+++ savefile.h	17 Apr 2004 09:57:15 -0000	1.10
@@ -25,28 +25,16 @@
 
 #include "stdafx.h"
 #include "common/scummsys.h"
-
-#include <stdio.h>
-#include <string.h>
+#include "common/stream.h"
 
 
-class SaveFile {
+class SaveFile : public Common::ReadStream, public Common::WriteStream {
 public:
 	virtual ~SaveFile() {}
 
 	/* Compatible with File API */
 	uint32 read(void *ptr, uint32 size);
-	byte readByte();
-	uint16 readUint16LE();
-	uint32 readUint32LE();
-	uint16 readUint16BE();
-	uint32 readUint32BE();
 	uint32 write(const void *ptr, uint32 size);
-	void writeByte(byte value);
-	void writeUint16LE(uint16 value);
-	void writeUint32LE(uint32 value);
-	void writeUint16BE(uint16 value);
-	void writeUint32BE(uint32 value);
 
 	virtual bool isOpen() const = 0;
 





More information about the Scummvm-git-logs mailing list