[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