[Scummvm-cvs-logs] CVS: scummvm/backends/dc vmsave.cpp,1.24,1.25

Marcus Comstedt marcus_c at users.sourceforge.net
Wed May 4 16:25:27 CEST 2005


Update of /cvsroot/scummvm/scummvm/backends/dc
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21713

Modified Files:
	vmsave.cpp 
Log Message:
Split VMSave into InVMSave and OutVMSave.

Index: vmsave.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/backends/dc/vmsave.cpp,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -d -r1.24 -r1.25
--- vmsave.cpp	27 Apr 2005 21:57:13 -0000	1.24
+++ vmsave.cpp	4 May 2005 23:24:03 -0000	1.25
@@ -215,30 +215,24 @@
 }
 
 
-class VMSave : public SaveFile {
+class InVMSave : public InSaveFile {
 private:
-  bool issave;
   char *buffer;
   int pos, size;
   char filename[16];
 
   uint32 read(void *buf, uint32 cnt);
-  uint32 write(const void *buf, uint32 cnt);
 
 public:
-  VMSave(const char *_filename, bool _saveOrLoad) 
-    : issave(_saveOrLoad), pos(0), buffer(NULL)
+  InVMSave(const char *_filename) 
+    : pos(0), buffer(NULL)
   {
     strncpy(filename, _filename, 16);
-    if(issave)
-      buffer = new char[size = MAX_SAVE_SIZE];
   }
 
-  ~VMSave();
-
-  bool isOpen() const { return true; }
+  ~InVMSave();
 
-  bool eos() const { return !issave && pos >= size; }
+  bool eos() const { return pos >= size; }
 
   bool readSaveGame()
   { return ::readSaveGame(buffer, size, filename); }
@@ -258,61 +252,73 @@
   }
 };
 
+class OutVMSave : public OutSaveFile {
+private:
+  char *buffer;
+  int pos, size;
+  char filename[16];
+
+  uint32 write(const void *buf, uint32 cnt);
+
+public:
+  OutVMSave(const char *_filename) 
+    : pos(0)
+  {
+    strncpy(filename, _filename, 16);
+    buffer = new char[size = MAX_SAVE_SIZE];
+  }
+  
+  ~OutVMSave();
+};
+
 class VMSaveManager : public SaveFileManager {
 public:
   
   virtual OutSaveFile *openForSaving(const char *filename) {
-	return openSavefile(filename, true);
+	return new OutVMSave(filename);
   }
+
   virtual InSaveFile *openForLoading(const char *filename) {
-	return openSavefile(filename, false);
+	InVMSave *s = new InVMSave(filename);
+	if(s->readSaveGame()) {
+	  s->tryUncompress();
+	  return s;
+	} else {
+	  delete s;
+	  return NULL;
+	}
   }
   
-  SaveFile *openSavefile(const char *filename, bool saveOrLoad);
   virtual void listSavefiles(const char *prefix, bool *marks, int num);
 };
 
-SaveFile *VMSaveManager::openSavefile(const char *filename, bool saveOrLoad)
+InVMSave::~InVMSave()
 {
-  VMSave *s = new VMSave(filename, saveOrLoad);
-  if(saveOrLoad)
-    return s;
-  else if(s->readSaveGame()) {
-    s->tryUncompress();
-    return s;
-  } else {
-    delete s;
-    return NULL;
-  }
+  delete buffer;
 }
 
-VMSave::~VMSave()
+OutVMSave::~OutVMSave()
 {
   extern const char *gGameName;
   extern Icon icon;
 
-  if(issave) {
-    if(pos) {
-      // Try compression
-      char *compbuf = new char[pos];
-      unsigned long destlen = pos;
-      if(!compress((Bytef*)compbuf, &destlen, (Bytef*)buffer, pos)) {
-	delete buffer;
-	buffer = compbuf;
-	pos = destlen;
-      } else delete compbuf;
-    }
-    displaySaveResult(writeSaveGame(gGameName, buffer,
-				    pos, filename, icon));
+  if(pos) {
+    // Try compression
+    char *compbuf = new char[pos];
+    unsigned long destlen = pos;
+    if(!compress((Bytef*)compbuf, &destlen, (Bytef*)buffer, pos)) {
+      delete buffer;
+      buffer = compbuf;
+      pos = destlen;
+    } else delete compbuf;
   }
+  displaySaveResult(writeSaveGame(gGameName, buffer,
+				  pos, filename, icon));
   delete buffer;
 }
 
-uint32 VMSave::read(void *buf, uint32 cnt)
+uint32 InVMSave::read(void *buf, uint32 cnt)
 {
-  if (issave)
-    return 0; 
-
   int nbyt = cnt;
   if (pos + nbyt > size) {
     cnt = (size - pos);
@@ -324,11 +330,8 @@
   return cnt;
 }
 
-uint32 VMSave::write(const void *buf, uint32 cnt)
+uint32 OutVMSave::write(const void *buf, uint32 cnt)
 {
-  if (!issave)
-    return 0;
-
   int nbyt = cnt;
   if (pos + nbyt > size) {
     cnt = (size - pos);





More information about the Scummvm-git-logs mailing list