#ifndef _XiaoGeMVarTempleteHasBeenDefined_ #define _XiaoGeMVarTempleteHasBeenDefined_ #include <Afxmt.h> template <class MVAR_TYPE> class MVAR { public: MVAR() { m_pBegin=new char[sizeof(MVAR_TYPE)]; memset(m_pBegin,0,sizeof(MVAR_TYPE)); } ~MVAR(){delete[] m_pBegin;} int GetLength(){return sizeof(MVAR_TYPE);} MVAR_TYPE Set(MVAR_TYPE& value) { m_csLockHandle.Lock(); memcpy(m_pBegin,(char*)&value,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return value; } MVAR_TYPE Get() { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator=(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); myValue=value; memcpy(m_pBegin,(char*)&myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator~() { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue=~myValue; m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator++(int) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue++; memcpy(m_pBegin,(char*)&myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator++() { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue++; memcpy(m_pBegin,(char*)&myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator--(int) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue--; memcpy(m_pBegin,(char*)&myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator--() { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue--; memcpy(m_pBegin,(char*)&myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator+(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue+=value; m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator-(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue-=value; m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator*(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue*=value; m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator/(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue/=value; m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator&(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue&=value; m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator|(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue|=value; m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator^(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue^=value; m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator+=(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue+=value; memcpy(m_pBegin,(char*)&myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator-=(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue-=value; memcpy(m_pBegin,(char*)&myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator*=(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue*=value; memcpy(m_pBegin,(char*)&myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator/=(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue/=value; memcpy(m_pBegin,(char*)&myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator&=(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue&=value; memcpy(m_pBegin,(char*)&myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator|=(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue|=value; memcpy(m_pBegin,(char*)&myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } MVAR_TYPE operator^=(MVAR_TYPE value) { MVAR_TYPE myValue; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); myValue^=value; memcpy(m_pBegin,(char*)&myValue,sizeof(MVAR_TYPE)); m_csLockHandle.Unlock(); return myValue; } BOOL operator>(MVAR_TYPE value) { MVAR_TYPE myValue; BOOL bRet; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); bRet=(myValue>value); m_csLockHandle.Unlock(); return bRet; } BOOL operator<(MVAR_TYPE value) { MVAR_TYPE myValue; BOOL bRet; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); bRet=(myValue<value); m_csLockHandle.Unlock(); return bRet; } BOOL operator>=(MVAR_TYPE value) { MVAR_TYPE myValue; BOOL bRet; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); bRet=(myValue>=value); m_csLockHandle.Unlock(); return bRet; } BOOL operator<=(MVAR_TYPE value) { MVAR_TYPE myValue; BOOL bRet; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); bRet=(myValue<=value); m_csLockHandle.Unlock(); return bRet; } BOOL operator==(MVAR_TYPE value) { MVAR_TYPE myValue; BOOL bRet; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); bRet=(myValue==value); m_csLockHandle.Unlock(); return bRet; } BOOL operator!=(MVAR_TYPE value) { MVAR_TYPE myValue; BOOL bRet; m_csLockHandle.Lock(); memcpy((char*)&myValue,m_pBegin,sizeof(MVAR_TYPE)); bRet=(myValue!=value); m_csLockHandle.Unlock(); return bRet; } private: char* m_pBegin; CCriticalSection m_csLockHandle; }; typedef MVAR<char> MCHAR; typedef MVAR<unsigned char> MUCHAR; typedef MVAR<short> MSHORT; typedef MVAR<unsigned short> MUSHORT; typedef MVAR<int> MINT; typedef MVAR<unsigned int> MUINT; typedef MVAR<long> MLONG; typedef MVAR<unsigned long> MULONG; typedef MVAR<float> MFLOAT; typedef MVAR<double> MDOUBLE; typedef MVAR<BOOL> MBOOL; typedef MVAR<LPVOID> MLPVOID; typedef MVAR<BYTE> MBYTE; #endif //_XiaoGeMVarTempleteHasBeenDefined_ |