#ifndef _COMMON_PUREBYTE_HPP_
#define _COMMON_PUREBYTE_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif

class PureBYTE
{
public:
	PureBYTE(void);
	PureBYTE(BYTE someBYTE);
	PureBYTE(const PureBYTE &somePureBYTE);
	virtual ~PureBYTE();
	PureBYTE &operator=(const PureBYTE &somePureBYTE);
	WORD operator==(const PureBYTE &somePureBYTE)const;
	WORD operator<(const PureBYTE &somePureBYTE)const;
	WORD operator<=(const PureBYTE &somePureBYTE)const;
	WORD operator>(const PureBYTE &somePureBYTE)const;
	WORD operator>=(const PureBYTE &somePureBYTE)const;
	PureBYTE &operator+=(const PureBYTE &somePureBYTE);
  PureBYTE &operator-=(const PureBYTE &somePureBYTE);
	PureBYTE &operator++(void);
	PureBYTE &operator--(void);
	PureBYTE operator++(int postFixDummy);
	PureBYTE operator--(int postFixDummy);
	operator BYTE(void);
	BYTE value(void)const;
private:
	BYTE mBYTE;
};

inline
PureBYTE::PureBYTE(void)
: mBYTE(0L)
{
}

inline
PureBYTE::PureBYTE(BYTE someBYTE)
: mBYTE(someBYTE)
{
}

inline
PureBYTE::PureBYTE(const PureBYTE &somePureBYTE)
{
	*this=somePureBYTE;
}

inline
PureBYTE::~PureBYTE()
{
}

inline
PureBYTE &PureBYTE::operator=(const PureBYTE &somePureBYTE)
{
	mBYTE=somePureBYTE.mBYTE;
	return *this;
}

inline
WORD PureBYTE::operator==(const PureBYTE &somePureBYTE)const
{
	return mBYTE==somePureBYTE.mBYTE;
}

inline
WORD PureBYTE::operator<(const PureBYTE &somePureBYTE)const
{
	return mBYTE<somePureBYTE.mBYTE;
}

inline
WORD PureBYTE::operator<=(const PureBYTE &somePureBYTE)const
{
	return mBYTE<=somePureBYTE.mBYTE;
}

inline
WORD PureBYTE::operator>(const PureBYTE &somePureBYTE)const
{
	return mBYTE>somePureBYTE.mBYTE;
}

inline
WORD PureBYTE::operator>=(const PureBYTE &somePureBYTE)const
{
	return mBYTE>=somePureBYTE.mBYTE;
}

inline
PureBYTE &PureBYTE::operator++(void)
{
	mBYTE++;
	return *this;
}

inline
PureBYTE &PureBYTE::operator+=(const PureBYTE &somePureBYTE)
{
	mBYTE+=somePureBYTE.mBYTE;
  return *this;
}

inline
PureBYTE &PureBYTE::operator-=(const PureBYTE &somePureBYTE)
{
	mBYTE-=somePureBYTE.mBYTE;
  return *this;
}

inline
PureBYTE &PureBYTE::operator--(void)
{
	mBYTE--;
	return *this;
}

inline
BYTE PureBYTE::value(void)const
{
	return mBYTE;
}

inline
PureBYTE::operator BYTE (void)
{
	return mBYTE;
}
#endif