///////////////////////////////////////////////////////////////////////////////
//  CFileImageAnalyser.h

#ifndef CFILEIMAGEANALYSER_H_
#define CFILEIMAGEANALYSER_H_

#include <string>

namespace fileimage {

class CFileImageAnalyser {
	const unsigned char*	m_pData;
	const unsigned char*	m_pDataBegin;
	const unsigned char*	m_pDataEnd;

public:
	CFileImageAnalyser(const unsigned char* pData, const unsigned char* pDataEnd);
	virtual ~CFileImageAnalyser();

	bool	IsEnd(void) const;

	bool	Skip(int Size);
	
	bool	GetChar(char& Data);
	bool	GetByte(unsigned char& Data);
	bool	GetBool(bool& Data);
	bool	GetShort(short& Data);
	bool	GetWord(unsigned short& Data);
	bool	GetInt(int& Data);
	bool	GetDWord(unsigned int& Data);
	bool	GetFloat(float& Data);

	bool	GetString(std::string& Text, int Length);
	bool	GetZeroTerminatedString(std::string& Text);
	bool	GetStringAligned4(std::string& Text);

	bool	GetTextLine(std::string& Text);

	bool	GetMemoryBlock(unsigned char* pData, int Size);

	// オーバーランチェックをおこなわない読み込み
	// 先にIsCanReadでオーバーしないようチェックしておくべき
	unsigned char	GetByteNoCheck();
	short			GetShortNoCheck();
	unsigned short	GetWordNoCheck();
	int				GetIntNoCheck();
	unsigned int	GetDWordNoCheck();
	float			GetFloatNoCheck();

	//
	bool	IsCanRead(int Size) const;

	const unsigned char*	GetReadPointer() const;
	int		GetCanReadSize() const;

	int		GetPos() const;
};

} // end of namespace fileimage

#endif // CFILEIMAGEANALYSER_H_

