Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "CVar.h"
- void CVar::Init()
- {
- memset(&sValue,0,sizeof(sValue));
- memset(&uLimit,0,sizeof(uLimit));
- memset(&uCallback,0,sizeof(uCallback));
- memset(&sDefault,0,sizeof(sDefault));
- eType = FReal;
- lpszVarName = 0;
- lpszVarDescription = 0;
- dwVarFlags = 0;
- uLimit.String.nMaxLength = 0;
- bUseLimits = false;
- bCreated = false;
- }
- CVar::CVar()
- {
- Init();
- }
- CVar::CVar(char* lpszName, char* lpszDescription, double dMinValue, double dMaxValue, double dDefaultValue, DWORD dwFlags, bool(*lpfnRealCallback)(double dPrevValue, double dCurrValue))
- {
- Init();
- Create(lpszName,lpszDescription,dMinValue,dMaxValue,dDefaultValue,dwFlags,lpfnRealCallback);
- }
- CVar::CVar(char* lpszName, char* lpszDescription, int nMinLength, int nMaxLength, char* lpszDefaultValue, DWORD dwFlags, bool(*lpfnStringCallback)(const char* lpszPrevValue, const char* lpszCurrValue))
- {
- Init();
- Create(lpszName,lpszDescription,nMinLength,nMaxLength,lpszDefaultValue,dwFlags,lpfnStringCallback);
- }
- CVar::~CVar()
- {
- if(bCreated) delete[] sValue.lpszValue;
- }
- bool CVar::Create(char* lpszName, char* lpszDescription, double dMinValue, double dMaxValue, double dDefaultValue, DWORD dwFlags, bool(*lpfnRealCallback)(double dPrevValue, double dCurrValue))
- {
- if(bCreated) return(false);
- if(lpszName==0) return(false);
- (dMinValue==dMaxValue)?(bUseLimits = false):(bUseLimits = true);
- sValue.lpszValue = new char[32];
- sDefault.dValue = dDefaultValue;
- uLimit.Real.dMinValue = dMinValue;
- uLimit.Real.dMaxValue = dMaxValue;
- eType = FReal;
- lpszVarName = lpszName;
- lpszVarDescription = lpszDescription;
- dwVarFlags = dwFlags;
- uCallback.lpfnRealCallback = lpfnRealCallback;
- Reset();
- bCreated = true;
- return(true);
- }
- bool CVar::Create(char* lpszName, char* lpszDescription, int nMinLength, int nMaxLength, char* lpszDefaultValue, DWORD dwFlags, bool(*lpfnStringCallback)(const char* lpszPrevValue, const char* lpszCurrValue))
- {
- if(bCreated) return(false);
- if(lpszName==0) return(false);
- if(nMaxLength<1) return(false);
- bUseLimits = true;
- sValue.lpszValue = new char[nMaxLength+1];
- sDefault.lpszValue = lpszDefaultValue;
- uLimit.String.nMinLength = nMinLength;
- uLimit.String.nMaxLength = nMaxLength;
- eType = FString;
- lpszVarName = lpszName;
- lpszVarDescription = lpszDescription;
- dwVarFlags = dwFlags;
- uCallback.lpfnStringCallback = lpfnStringCallback;
- Reset();
- bCreated = true;
- return(true);
- }
- bool CVar::Set(bool bValue)
- {
- if(!bCreated)return(false);
- switch(eType)
- {
- case FReal:
- {
- if(bUseLimits)
- {
- if(1>uLimit.Real.dMaxValue || 0<uLimit.Real.dMinValue) return(false);
- }
- if(bValue)
- {
- if(sValue.dValue == 1.0) return(true);
- if(uCallback.lpfnRealCallback?uCallback.lpfnRealCallback(sValue.dValue,1.0):true)
- {
- sValue.dValue = 1.0;
- return(true);
- }
- else
- {
- return(false);
- }
- }
- else
- {
- if(sValue.dValue == 0.0) return(true);
- if(uCallback.lpfnRealCallback?uCallback.lpfnRealCallback(sValue.dValue,0.0):true)
- {
- sValue.dValue = 0.0;
- return(true);
- }
- else
- {
- return(false);
- }
- }
- }
- case FString:
- {
- if(4<uLimit.String.nMinLength) return(false);
- if(bValue)
- {
- if(!strcmp(sValue.lpszValue,"true")) return(true);
- if(uCallback.lpfnStringCallback?uCallback.lpfnStringCallback((const char*)sValue.lpszValue,"true"):true)
- {
- strncpy(sValue.lpszValue,"true",uLimit.String.nMaxLength);
- sValue.lpszValue[uLimit.String.nMaxLength-1] = 0;
- return(true);
- }
- else
- {
- return(false);
- }
- }
- else
- {
- if(!strcmp(sValue.lpszValue,"false")) return(true);
- if(uCallback.lpfnStringCallback?uCallback.lpfnStringCallback((const char*)sValue.lpszValue,"false"):true)
- {
- strncpy(sValue.lpszValue,"false",uLimit.String.nMaxLength);
- sValue.lpszValue[uLimit.String.nMaxLength] = 0;
- return(true);
- }
- else
- {
- return(false);
- }
- }
- }
- default: return(false);
- }
- }
- bool CVar::Set(int nValue)
- {
- if(!bCreated)return(false);
- switch(eType)
- {
- case FReal:
- {
- if(bUseLimits)
- {
- if(nValue>uLimit.Real.dMaxValue) nValue=(int)uLimit.Real.dMaxValue;
- if(nValue<uLimit.Real.dMinValue) nValue=(int)uLimit.Real.dMinValue;
- }
- if(sValue.dValue == (double)nValue) return(true);
- if(uCallback.lpfnRealCallback?uCallback.lpfnRealCallback(sValue.dValue,(double)nValue):true)
- {
- sValue.dValue = (double)nValue;
- return(true);
- }
- else
- {
- return(false);
- }
- }
- case FString:
- {
- char cBuffer[16];
- _itoa(nValue,cBuffer,10);
- if(uLimit.String.nMinLength>(int)strlen(cBuffer)) return(false);
- if(!strcmp(cBuffer,sValue.lpszValue)) return(true);
- if(uCallback.lpfnStringCallback?uCallback.lpfnStringCallback(sValue.lpszValue,cBuffer):true)
- {
- strncpy(sValue.lpszValue,cBuffer,uLimit.String.nMaxLength);
- sValue.lpszValue[uLimit.String.nMaxLength] = 0;
- return(true);
- }
- else
- {
- return(false);
- }
- return(true);
- }
- default: return(false);
- }
- }
- bool CVar::Set(float fValue)
- {
- if(!bCreated)return(false);
- switch(eType)
- {
- case FReal:
- {
- if(bUseLimits)
- {
- if(fValue>uLimit.Real.dMaxValue) fValue=(float)uLimit.Real.dMaxValue;
- if(fValue<uLimit.Real.dMinValue) fValue=(float)uLimit.Real.dMinValue;
- }
- if(sValue.dValue == (double)fValue) return(true);
- if(uCallback.lpfnRealCallback?uCallback.lpfnRealCallback(sValue.dValue,(double)fValue):true)
- {
- sValue.dValue = (double)fValue;
- return(true);
- }
- else
- {
- return(false);
- }
- }
- case FString:
- {
- char cBuffer[32];
- _snprintf(cBuffer,31,"%f",fValue);
- cBuffer[31] = 0;
- if(uLimit.String.nMinLength>(int)strlen(cBuffer)) return(false);
- if(!strcmp(cBuffer,sValue.lpszValue)) return(true);
- if(uCallback.lpfnStringCallback?uCallback.lpfnStringCallback(sValue.lpszValue,cBuffer):true)
- {
- strncpy(sValue.lpszValue,cBuffer,uLimit.String.nMaxLength);
- sValue.lpszValue[uLimit.String.nMaxLength] = 0;
- return(true);
- }
- else
- {
- return(false);
- }
- }
- default: return(false);
- }
- }
- bool CVar::Set(double dValue)
- {
- if(!bCreated)return(false);
- switch(eType)
- {
- case FReal:
- {
- if(sValue.dValue == dValue) return(true);
- if(uCallback.lpfnRealCallback?uCallback.lpfnRealCallback(sValue.dValue,dValue):true)
- {
- sValue.dValue = dValue;
- return(true);
- }
- else
- {
- return(false);
- }
- }
- case FString:
- {
- char cBuffer[32];
- _snprintf(cBuffer,31,"%f",dValue);
- cBuffer[31] = 0;
- if(uLimit.String.nMinLength>(int)strlen(cBuffer)) return(false);
- if(!strcmp(cBuffer,sValue.lpszValue)) return(true);
- if(uCallback.lpfnStringCallback?uCallback.lpfnStringCallback(sValue.lpszValue,cBuffer):true)
- {
- strncpy(sValue.lpszValue,cBuffer,uLimit.String.nMaxLength);
- sValue.lpszValue[uLimit.String.nMaxLength] = 0;
- return(true);
- }
- else
- {
- return(false);
- }
- }
- default: return(false);
- }
- }
- bool CVar::Set(char* lpszValue)
- {
- if(!bCreated)return(false);
- switch(eType)
- {
- case FReal:
- {
- double dNewValue = atof(lpszValue);
- if(bUseLimits)
- {
- if(dNewValue>uLimit.Real.dMaxValue) dNewValue=uLimit.Real.dMaxValue;
- if(dNewValue<uLimit.Real.dMinValue) dNewValue=uLimit.Real.dMinValue;
- }
- if(sValue.dValue == dNewValue) return(true);
- if(uCallback.lpfnRealCallback?uCallback.lpfnRealCallback(sValue.dValue,dNewValue):true)
- {
- sValue.dValue = dNewValue;
- return(true);
- }
- else
- {
- return(false);
- }
- }
- case FString:
- {
- if(uLimit.String.nMinLength>(int)strlen(lpszValue)) return(false);
- if(!strcmp(sValue.lpszValue,lpszValue)) return(true);
- if(uCallback.lpfnStringCallback?uCallback.lpfnStringCallback(sValue.lpszValue,lpszValue):true)
- {
- strncpy(sValue.lpszValue,lpszValue,uLimit.String.nMaxLength);
- sValue.lpszValue[uLimit.String.nMaxLength] = 0;
- return(true);
- }
- else
- {
- return(false);
- }
- }
- default: return(false);
- }
- }
- bool CVar::GetBool()
- {
- if(!bCreated)return(false);
- switch(eType)
- {
- case FReal: if(sValue.dValue) return(true); else return(false);
- case FString: if(strcmp(sValue.lpszValue,"false")) return(true); else return(false);
- }
- return(false);
- }
- int CVar::GetInt()
- {
- if(!bCreated)return(0);
- switch(eType)
- {
- case FReal: return((int)(sValue.dValue));
- case FString: return((int)(atof((const char*)sValue.lpszValue)));
- }
- return(0);
- }
- float CVar::GetFloat()
- {
- if(!bCreated)return(0.0f);
- switch(eType)
- {
- case FReal: return((float)(sValue.dValue));
- case FString: return((float)(atof((const char*)sValue.lpszValue)));
- }
- return(0);
- }
- double CVar::GetDouble()
- {
- if(!bCreated)return(0.0);
- switch(eType)
- {
- case FReal: return(sValue.dValue);
- case FString: return(atof((const char*)sValue.lpszValue));
- }
- return(0);
- }
- const char* CVar::GetString()
- {
- if(!bCreated)return(false);
- switch(eType)
- {
- case FReal:
- {
- _snprintf(sValue.lpszValue,31,"%f",sValue.dValue);
- sValue.lpszValue[31] = 0;
- return(sValue.lpszValue);
- }
- case FString: return(sValue.lpszValue);
- }
- return(0);
- }
- bool CVar::Reset()
- {
- switch(eType)
- {
- case FReal:
- {
- double dValue = sDefault.dValue;
- if(bUseLimits)
- {
- if(dValue>uLimit.Real.dMaxValue) dValue=uLimit.Real.dMaxValue;
- if(dValue<uLimit.Real.dMinValue) dValue=uLimit.Real.dMinValue;
- }
- sValue.dValue = dValue;
- return(true);
- }
- case FString:
- {
- strncpy(sValue.lpszValue,sDefault.lpszValue,uLimit.String.nMaxLength);
- sValue.lpszValue[uLimit.String.nMaxLength] = 0;
- return(true);
- }
- }
- return(false);
- }
- void CVar::operator=(bool bNew)
- {
- Set(bNew);
- }
- void CVar::operator=(int nNew)
- {
- Set(nNew);
- }
- void CVar::operator=(float fNew)
- {
- Set(fNew);
- }
- void CVar::operator=(double dNew)
- {
- Set(dNew);
- }
- void CVar::operator=(char* lpszNew)
- {
- Set(lpszNew);
- }
- bool CVar::operator==(bool bValue)
- {
- if(GetBool() == bValue) return(true);
- else return(false);
- }
- bool CVar::operator==(int nValue)
- {
- if(GetInt() == nValue) return(true);
- else return(false);
- }
- bool CVar::operator==(float fValue)
- {
- if(GetFloat() == fValue) return(true);
- else return(false);
- }
- bool CVar::operator==(double dValue)
- {
- if(GetDouble() == dValue) return(true);
- else return(false);
- }
- bool CVar::operator==(char* lpszValue)
- {
- if(!strcmp(GetString(),lpszValue)) return(true);
- else return(false);
- }
Add Comment
Please, Sign In to add comment