///////////////////////////////////////////////////////////////////////////////
//  FileImage.cpp

#include "FileImage.h"

namespace fileimage {

int ReadInt(const unsigned char* pData)
{
#ifdef WIN32
	return *reinterpret_cast<const int*>(pData);
#else
	return static_cast<int>(
		(static_cast<unsigned int>(pData[0])) |
		(static_cast<unsigned int>(pData[1]) << 8) |
		(static_cast<unsigned int>(pData[2]) << 16) |
		(static_cast<unsigned int>(pData[3]) << 24));
#endif

}

unsigned short ReadWord(const unsigned char* pData)
{
#ifdef WIN32
	return *reinterpret_cast<const unsigned short*>(pData);
#else
	return (
		(static_cast<unsigned short>(pData[0])) |
		(static_cast<unsigned short>(pData[1]) << 8));
#endif

}

unsigned int ReadDWord(const unsigned char* pData)
{
#ifdef WIN32
	return *reinterpret_cast<const unsigned int*>(pData);
#else
	return (
		(static_cast<unsigned int>(pData[0])) |
		(static_cast<unsigned int>(pData[1]) << 8) |
		(static_cast<unsigned int>(pData[2]) << 16) |
		(static_cast<unsigned int>(pData[3]) << 24));
#endif

}

float ReadFloat(const unsigned char* pData)
{
#ifdef WIN32
	return *reinterpret_cast<const float*>(pData);
#else
	const unsigned int Data = ReadDWord(pData);

	return *reinterpret_cast<const float*>(&Data);
#endif

}

//
void WriteInt(unsigned char* pData, int Value)
{
#ifdef WIN32
	*reinterpret_cast<int*>(pData) = Value;
#else
	pData[0] = static_cast<unsigned char>(Value & 0xff);
	pData[1] = static_cast<unsigned char>((Value >> 8) & 0xff);
	pData[2] = static_cast<unsigned char>((Value >> 16) & 0xff);
	pData[3] = static_cast<unsigned char>((Value >> 24) & 0xff);
#endif

}

void WriteWord(unsigned char* pData, unsigned short Value)
{
#ifdef WIN32
	*reinterpret_cast<unsigned short*>(pData) = Value;
#else
	pData[0] = static_cast<unsigned char>(Value & 0xff);
	pData[1] = static_cast<unsigned char>(Value >> 8);
#endif

}

void WriteDWord(unsigned char* pData, unsigned int Value)
{
#ifdef WIN32
	*reinterpret_cast<unsigned int*>(pData) = Value;
#else
	pData[0] = static_cast<unsigned char>(Value & 0xff);
	pData[1] = static_cast<unsigned char>((Value >> 8) & 0xff);
	pData[2] = static_cast<unsigned char>((Value >> 16) & 0xff);
	pData[3] = static_cast<unsigned char>((Value >> 24) & 0xff);
#endif

}

} // end of namespace fileimage

