| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | #pragma once/* * CBinaryReader.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 CInputStream;/** * Reads primitive binary values from a underlying stream. * * The integers which are read are supposed to be little-endian values permanently. They will be * converted to big-endian values on big-endian machines. */class DLL_LINKAGE CBinaryReader : public boost::noncopyable{public:	/**	 * Default c-tor.	 */	CBinaryReader();	/**	 * C-tor.	 *	 * @param stream The base stream object which serves as the reading input.	 */    CBinaryReader(CInputStream * stream);	/**	 * Gets the underlying stream.	 *	 * @return the base stream.	 */	CInputStream * getStream();	/**	 * Sets the underlying stream.	 *	 * @param stream The base stream to set	 */    void setStream(CInputStream * stream);	/**	 * Reads 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 read.	 * @return the number of bytes read actually.	 */	si64 read(ui8 * data, si64 size);	/**	 * Reads integer of various size. Advances the read pointer.	 *	 * @return a read integer.	 *	 * @throws std::runtime_error if the end of the stream was reached unexpectedly	 */	ui8 readUInt8();	si8 readInt8();	ui16 readUInt16();	si16 readInt16();	ui32 readUInt32();	si32 readInt32();	ui64 readUInt64();	si64 readInt64();	std::string readString();	inline bool readBool()	{		return readUInt8() != 0;	}	void skip(int count);private:    /**     * Reads any integer. Advances the read pointer by its size.     *     * @return read integer.     *     * @throws std::runtime_error if the end of the stream was reached unexpectedly     */    template <typename CData>    CData readInteger();	/**	 * Gets a end of stream exception message.	 *	 * @param bytesToRead The number of bytes which should be read.	 * @return the exception message text	 */	std::string getEndOfStreamExceptionMsg(long bytesToRead) const;	/** The underlying base stream */	CInputStream * stream;};
 |