Changed to switch case for Equ and BooleanLogic and added warnings

This commit is contained in:
sam-astro 2022-01-05 10:20:26 -05:00 committed by GitHub
parent 26cc5eeeb4
commit d761591b14
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -309,19 +309,25 @@ bool BooleanLogic(const string& valA, const string& determinant, const string& v
any valARealValue = EvalExpression(valA, variableVals); any valARealValue = EvalExpression(valA, variableVals);
any valBRealValue = EvalExpression(valB, variableVals); any valBRealValue = EvalExpression(valB, variableVals);
if (determinant == "==") switch(determinant)
return AnyAsString(valARealValue) == AnyAsString(valBRealValue); {
if (determinant == "!=") case "==":
return AnyAsString(valARealValue) != AnyAsString(valBRealValue); return AnyAsString(valARealValue) == AnyAsString(valBRealValue);
if (determinant == ">=") case "!=":
return AnyAsFloat(valARealValue) >= AnyAsFloat(valBRealValue); return AnyAsString(valARealValue) != AnyAsString(valBRealValue);
if (determinant == "<=") case ">=":
return AnyAsFloat(valARealValue) <= AnyAsFloat(valBRealValue); return AnyAsFloat(valARealValue) >= AnyAsFloat(valBRealValue);
if (determinant == ">") case "<=":
return AnyAsFloat(valARealValue) > AnyAsFloat(valBRealValue); return AnyAsFloat(valARealValue) <= AnyAsFloat(valBRealValue);
if (determinant == "<") case ">":
return AnyAsFloat(valARealValue) < AnyAsFloat(valBRealValue); return AnyAsFloat(valARealValue) > AnyAsFloat(valBRealValue);
case "<":
return AnyAsFloat(valARealValue) < AnyAsFloat(valBRealValue);
default:
LogWarning("invalid determinant \'" + determinant + "\'");
return false;
}
return false; return false;
} }
@ -329,34 +335,43 @@ int evalEqu(const vector<string>& str, unordered_map<string, any>& variableValue
{ {
if (IsVar(str[0], variableValues)) if (IsVar(str[0], variableValues))
{ {
if (str[1] == "=") switch(str[1])
variableValues[str[0]] = EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues); {
else if (str[1] == "+=") case "=":
variableValues[str[0]] = EvalExpression(str[0] + "+(" + unWrapVec(vector<string>(str.begin() + 2, str.end())) + ")", variableValues); variableValues[str[0]] = EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues);
else if (str[1] == "-=") case "+=":
variableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) - AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues)); variableValues[str[0]] = EvalExpression(str[0] + "+(" + unWrapVec(vector<string>(str.begin() + 2, str.end())) + ")", variableValues);
else if (str[1] == "*=") case "-=":
variableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) * AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues)); variableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) - AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues));
else if (str[1] == "/=") case "*=":
variableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) / AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues)); variableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) * AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues));
case "/=":
variableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) / AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues));
default:
LogWarning("invalid operator \'" + str[1] + "\'");
return 1;
}
//cout << variables[v] << " is " << variableValues[v] << endl;
return 0; return 0;
} }
else if (IsVar(str[0], globalVariableValues)) else if (IsVar(str[0], globalVariableValues))
{ {
if (str[1] == "=") switch(str[1])
globalVariableValues[str[0]] = EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues); {
else if (str[1] == "+=") case "=":
globalVariableValues[str[0]] = EvalExpression(str[0] + "+(" + unWrapVec(vector<string>(str.begin() + 2, str.end())) + ")", variableValues); globalVariableValues[str[0]] = EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues);
else if (str[1] == "-=") case "+=":
globalVariableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) - AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues)); globalVariableValues[str[0]] = EvalExpression(str[0] + "+(" + unWrapVec(vector<string>(str.begin() + 2, str.end())) + ")", variableValues);
else if (str[1] == "*=") case "-=":
globalVariableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) * AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues)); globalVariableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) - AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues));
else if (str[1] == "/=") case "*=":
globalVariableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) / AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues)); globalVariableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) * AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues));
case "/=":
//cout << variables[v] << " is " << variableValues[v] << endl; globalVariableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) / AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues));
default:
LogWarning("invalid operator \'" + str[1] + "\'");
return 1;
}
return 0; return 0;
} }
LogWarning("uninitialized variable or typo in \'" << str[0] << "\'"); LogWarning("uninitialized variable or typo in \'" << str[0] << "\'");