diff --git a/lib/filesystem/CInputStream.h b/lib/filesystem/CInputStream.h index d20a197bd..eab845f75 100644 --- a/lib/filesystem/CInputStream.h +++ b/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 * diff --git a/lib/filesystem/COutputStream.h b/lib/filesystem/COutputStream.h new file mode 100644 index 000000000..ba4a70f13 --- /dev/null +++ b/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; +}; diff --git a/lib/filesystem/CStream.h b/lib/filesystem/CStream.h new file mode 100644 index 000000000..d085eec72 --- /dev/null +++ b/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; +}; diff --git a/lib/mapping/CMapService.h b/lib/mapping/CMapService.h index a633be859..9ce4da6e4 100644 --- a/lib/mapping/CMapService.h +++ b/lib/mapping/CMapService.h @@ -135,3 +135,16 @@ public: */ virtual void patchMapHeader(std::unique_ptr & 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 & map) = 0; +}; diff --git a/lib/mapping/MapFormatJson.cpp b/lib/mapping/MapFormatJson.cpp index 272a58f75..8f130a092 100644 --- a/lib/mapping/MapFormatJson.cpp +++ b/lib/mapping/MapFormatJson.cpp @@ -180,3 +180,10 @@ void CMapLoaderJson::readPlayerInfo() { assert(0); // Not implemented } + +///CMapSaverJson +void CMapSaverJson::saveMap(const std::unique_ptr& map) +{ + +} + diff --git a/lib/mapping/MapFormatJson.h b/lib/mapping/MapFormatJson.h index 31bfc3fa4..0e44389a7 100644 --- a/lib/mapping/MapFormatJson.h +++ b/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 & map) override; +};