mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	Define basic design of output streams
This commit is contained in:
		| @@ -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
									
								
								lib/filesystem/COutputStream.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								lib/filesystem/COutputStream.h
									
									
									
									
									
										Normal file
									
								
							| @@ -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
									
								
								lib/filesystem/CStream.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								lib/filesystem/CStream.h
									
									
									
									
									
										Normal file
									
								
							| @@ -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;	 | ||||
| }; | ||||
| @@ -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; | ||||
| }; | ||||
|   | ||||
| @@ -180,3 +180,10 @@ void CMapLoaderJson::readPlayerInfo() | ||||
| { | ||||
| 	assert(0); // Not implemented | ||||
| } | ||||
|  | ||||
| ///CMapSaverJson | ||||
| void CMapSaverJson::saveMap(const std::unique_ptr<CMap>& map) | ||||
| { | ||||
| 	 | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -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;	 | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user