void CMathParser::AddVar(MPExtended Value, LPCTSTR lpszVarName) { if( NULL == lpszVarName || strlen(lpszVarName) == 0 ) return; VARSTRU *pvar = new VARSTRU; CSPString VarName = lpszVarName; VarName.MakeUpper(); pvar->Value = Value; strncpy( pvar->VarName, VarName.GetBuffer(MP_MaxVarNameLen-1), MP_MaxVarNameLen-1 ); m_VarMap.SetAt( VarName, pvar ); }
BOOL CMathParser::GetVar( LPCTSTR lpszVarName, MPExtended &Value) { if( m_VarMap.IsEmpty() || NULL == lpszVarName || strlen(lpszVarName) == 0 ) return FALSE; CSPString VarName = lpszVarName; VarName.MakeUpper(); void * pvar = NULL; if( m_VarMap.Lookup( VarName, pvar ) ) { Value = ((VARSTRU *)pvar)->Value; return TRUE; } return FALSE; }
BOOL CMathParser::IsFunc(CSPString S)//{ Checks to see if the parser is about to read a function } { WORD P, SLen; CSPString FuncName; BOOL bIsFunc; P = Position; FuncName = ""; while (P < FInput.GetLength())// && (FInput[P] in ['A'..'Z', 'a'..'z', '0'..'9', '_']) { if(!((FInput.GetAt(P) <= 'Z' && FInput.GetAt(P) >= 'A') ||(FInput.GetAt(P) <= 'z' && FInput.GetAt(P) >= 'a') ||(FInput.GetAt(P) <= '9' && FInput.GetAt(P) >= '0') ||(FInput.GetAt(P) == '_'))) break; //FInput.SetAt(P, FInput.GetAt(P)); FuncName = FuncName + FInput.GetAt(P);//[P]; P++;//Inc(P); }// end; { while } FuncName.MakeUpper(); if (FuncName == S )//Uppercase(FuncName) = S { SLen = S.GetLength(); CurrToken.FuncName = FInput.Mid(Position, SLen); CurrToken.FuncName.MakeUpper(); Position += SLen; //Inc(Position, SLen); bIsFunc = TRUE; } else bIsFunc = FALSE; return bIsFunc; }