Browse Source

Define basic design of output streams

AlexVinS 10 years ago
parent
commit
221ec55f51

+ 3 - 31
lib/filesystem/CInputStream.h

@@ -1,5 +1,7 @@
 #pragma once
 
+#include "CStream.h"
+
 /*
  * CInputStream.h, part of VCMI engine
  *
@@ -13,7 +15,7 @@
 /**
  * Abstract class which provides method definitions for reading from a stream.
  */
-class DLL_LINKAGE CInputStream : private boost::noncopyable
+class DLL_LINKAGE CInputStream : public virtual CStream
 {
 public:
 	/**
@@ -30,36 +32,6 @@ public:
 	 */
 	virtual si64 read(ui8 * data, si64 size) = 0;
 
-	/**
-	 * Seeks the internal read pointer to the specified position.
-	 *
-	 * @param position The read position from the beginning.
-	 * @return the position actually moved to, -1 on error.
-	 */
-	virtual si64 seek(si64 position) = 0;
-
-	/**
-	 * Gets the current read position in the stream.
-	 *
-	 * @return the read position.
-	 */
-	virtual si64 tell() = 0;
-
-	/**
-	 * Skips delta numbers of bytes.
-	 *
-	 * @param delta The count of bytes to skip.
-	 * @return the count of bytes skipped actually.
-	 */
-	virtual si64 skip(si64 delta) = 0;
-
-	/**
-	 * Gets the length in bytes of the stream.
-	 *
-	 * @return the length in bytes of the stream.
-	 */
-	virtual si64 getSize() = 0;
-
 	/**
 	 * @brief for convenience, reads whole stream at once
 	 *

+ 34 - 0
lib/filesystem/COutputStream.h

@@ -0,0 +1,34 @@
+#pragma once
+
+#include "CStream.h"
+
+/*
+ * COutputStream.h, part of VCMI engine
+ *
+ * Authors: listed in file AUTHORS in main folder
+ *
+ * License: GNU General Public License v2.0 or later
+ * Full text of license available in license.txt file, in main folder
+ *
+ */
+
+/**
+ * Abstract class which provides method definitions for writing into a stream.
+ */
+class DLL_LINKAGE COutputStream : public virtual CStream
+{
+public:
+	/**
+	 * D-tor.
+	 */
+	virtual ~COutputStream() {}
+
+	/**
+	 * Write n bytes from the stream into the data buffer.
+	 *
+	 * @param data A pointer to the destination data array.
+	 * @param size The number of bytes to write.
+	 * @return the number of bytes written actually.
+	 */
+	virtual si64 write(ui8 * data, si64 size) = 0;
+};

+ 50 - 0
lib/filesystem/CStream.h

@@ -0,0 +1,50 @@
+#pragma once
+
+/*
+ * CStream.h, part of VCMI engine
+ *
+ * Authors: listed in file AUTHORS in main folder
+ *
+ * License: GNU General Public License v2.0 or later
+ * Full text of license available in license.txt file, in main folder
+ *
+ */
+
+class DLL_LINKAGE CStream : private boost::noncopyable
+{
+public:
+	/**
+	 * D-tor.
+	 */
+	virtual ~CStream() {}
+
+	/**
+	 * Seeks to the specified position.
+	 *
+	 * @param position The position from the beginning.
+	 * @return the position actually moved to, -1 on error.
+	 */
+	virtual si64 seek(si64 position) = 0;
+
+	/**
+	 * Gets the current position in the stream.
+	 *
+	 * @return the position.
+	 */
+	virtual si64 tell() = 0;
+
+	/**
+	 * Relative seeks to the specified position.
+	 *
+	 * @param delta The count of bytes to seek from current position.
+	 * @return the count of bytes skipped actually.
+	 */
+	virtual si64 skip(si64 delta) = 0;
+
+	/**
+	 * Gets the length in bytes of the stream.
+	 *
+	 * @return the length in bytes of the stream.
+	 */
+	virtual si64 getSize() = 0;	
+};

+ 13 - 0
lib/mapping/CMapService.h

@@ -135,3 +135,16 @@ public:
 	 */
 	virtual void patchMapHeader(std::unique_ptr<CMapHeader> & header) = 0;
 };
+
+/**
+ * Interface for saving a map.
+ */
+class DLL_LINKAGE IMapSaver
+{
+public:
+	/**
+	 * Saves the VCMI/H3 map file.
+	 *
+	 */	
+	 virtual void saveMap(const std::unique_ptr<CMap> & map) = 0;
+};

+ 7 - 0
lib/mapping/MapFormatJson.cpp

@@ -180,3 +180,10 @@ void CMapLoaderJson::readPlayerInfo()
 {
 	assert(0); // Not implemented
 }
+
+///CMapSaverJson
+void CMapSaverJson::saveMap(const std::unique_ptr<CMap>& map)
+{
+	
+}
+

+ 7 - 1
lib/mapping/MapFormatJson.h

@@ -69,7 +69,7 @@ private:
 	const JsonNode input;	
 };
 
-class DLL_LINKAGE CMapLoaderJson :  public CMapFormatJson, public IMapLoader
+class DLL_LINKAGE CMapLoaderJson : public CMapFormatJson, public IMapLoader
 {
 public:
 	/**
@@ -112,3 +112,9 @@ private:
 
 	CInputStream * input;
 };
+
+class DLL_LINKAGE CMapSaverJson : public CMapFormatJson, public IMapSaver
+{
+public:
+	void saveMap(const std::unique_ptr<CMap> & map) override;	
+};