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

class PureDOUBLE
{
public:
	PureDOUBLE(void);
	PureDOUBLE(double someDOUBLE);
	PureDOUBLE(const PureDOUBLE &somePureDOUBLE);
	virtual ~PureDOUBLE();
	PureDOUBLE &operator=(const PureDOUBLE &somePureDOUBLE);
  PureDOUBLE &operator=(double someDOUBLE);
	BOOL operator==(const PureDOUBLE &somePureDOUBLE)const;
	BOOL operator<(const PureDOUBLE &somePureDOUBLE)const;
	BOOL operator<=(const PureDOUBLE &somePureDOUBLE)const;
	BOOL operator>(const PureDOUBLE &somePureDOUBLE)const;
	BOOL operator>=(const PureDOUBLE &somePureDOUBLE)const;
	PureDOUBLE &operator+=(const PureDOUBLE &somePureDOUBLE);
  PureDOUBLE &operator-=(const PureDOUBLE &somePureDOUBLE);
	PureDOUBLE &operator++(void);
	PureDOUBLE &operator--(void);
	PureDOUBLE operator++(int postFixDummy);
	PureDOUBLE operator--(int postFixDummy);
  operator double(void);
private:
  double mDOUBLE;
};

inline
PureDOUBLE::PureDOUBLE(void)
: mDOUBLE(0.00)
{
}

inline
PureDOUBLE::PureDOUBLE(double someDOUBLE)
: mDOUBLE(someDOUBLE)
{
}

inline
PureDOUBLE::PureDOUBLE(const PureDOUBLE &somePureDOUBLE)
{
  *this=somePureDOUBLE;
}

inline
PureDOUBLE::~PureDOUBLE()
{
}

inline
PureDOUBLE &PureDOUBLE::operator=(const PureDOUBLE &somePureDOUBLE)
{
	mDOUBLE=somePureDOUBLE.mDOUBLE;
	return *this;
}

inline
PureDOUBLE &PureDOUBLE::operator=(double someDOUBLE)
{
	mDOUBLE=someDOUBLE;
	return *this;
}

inline
BOOL PureDOUBLE::operator==(const PureDOUBLE &somePureDOUBLE)const
{
	return mDOUBLE==somePureDOUBLE.mDOUBLE;
}

inline
BOOL PureDOUBLE::operator<(const PureDOUBLE &somePureDOUBLE)const
{
	return mDOUBLE<somePureDOUBLE.mDOUBLE;
}

inline
BOOL PureDOUBLE::operator<=(const PureDOUBLE &somePureDOUBLE)const
{
	return mDOUBLE<=somePureDOUBLE.mDOUBLE;
}

inline
BOOL PureDOUBLE::operator>(const PureDOUBLE &somePureDOUBLE)const
{
	return mDOUBLE>somePureDOUBLE.mDOUBLE;
}

inline
BOOL PureDOUBLE::operator>=(const PureDOUBLE &somePureDOUBLE)const
{
	return mDOUBLE>=somePureDOUBLE.mDOUBLE;
}

inline
PureDOUBLE &PureDOUBLE::operator++(void)
{
	mDOUBLE++;
	return *this;
}

inline
PureDOUBLE &PureDOUBLE::operator--(void)
{
	mDOUBLE--;
	return *this;
}

inline
PureDOUBLE &PureDOUBLE::operator+=(const PureDOUBLE &somePureDOUBLE)
{
	mDOUBLE+=somePureDOUBLE.mDOUBLE;
  return *this;
}

inline
PureDOUBLE &PureDOUBLE::operator-=(const PureDOUBLE &somePureDOUBLE)
{
	mDOUBLE-=somePureDOUBLE.mDOUBLE;
	return *this;
}

inline
PureDOUBLE::operator double (void)
{
	return mDOUBLE;
}
#endif
