version 2.3.0_beta
optimize PIChunkStream::readAll() optimize PIEvaluator
This commit is contained in:
@@ -122,49 +122,49 @@ using namespace PIEvaluatorTypes;
|
||||
|
||||
|
||||
PIEvaluatorContent::PIEvaluatorContent() {
|
||||
addFunction("arcsin", 1);
|
||||
addFunction("arccos", 1);
|
||||
addFunction("arctg", 1);
|
||||
addFunction("arcctg", 1);
|
||||
addFunction("random", 2);
|
||||
addFunction("randomn", 2);
|
||||
addFunction("sin", 1);
|
||||
addFunction("cos", 1);
|
||||
addFunction("ctg", 1);
|
||||
addFunction("tg", 1);
|
||||
addFunction("exp", 1);
|
||||
addFunction("cth", 1);
|
||||
addFunction("sh", 1);
|
||||
addFunction("ch", 1);
|
||||
addFunction("th", 1);
|
||||
addFunction("sqrt", 1);
|
||||
addFunction("sqr", 1);
|
||||
addFunction("pow", 2);
|
||||
addFunction("abs", 1);
|
||||
addFunction("ln", 1);
|
||||
addFunction("lg", 1);
|
||||
addFunction("log", 2);
|
||||
addFunction("im", 1);
|
||||
addFunction("re", 1);
|
||||
addFunction("arg", 1);
|
||||
addFunction("len", 1);
|
||||
addFunction("conj", 1);
|
||||
addFunction("sign", 1);
|
||||
addFunction("rad", 1);
|
||||
addFunction("deg", 1);
|
||||
addFunction("j0", 1);
|
||||
addFunction("j1", 1);
|
||||
addFunction("jn", 2);
|
||||
addFunction("y0", 1);
|
||||
addFunction("y1", 1);
|
||||
addFunction("yn", 2);
|
||||
addFunction("min", -2); // (x0,x1,...)
|
||||
addFunction("max", -2); // (x0,x1,...)
|
||||
addFunction("clamp", 3); // (x,a,b) = x < a ? a : (x > b ? b : x)
|
||||
addFunction("step", 2); // (x,s) = x >= s ? 1. : 0. (1 if 'x' >= 's', else 0)
|
||||
addFunction("mix", 3); // (x,a,b) = a*(1.-x) + b*x (interpolate between 'a' and 'b' linear for 'x')
|
||||
addFunction("defined", 1);
|
||||
addFunction("round", 1);
|
||||
addFunction(PIStringAscii("arcsin" ), 1);
|
||||
addFunction(PIStringAscii("arccos" ), 1);
|
||||
addFunction(PIStringAscii("arctg" ), 1);
|
||||
addFunction(PIStringAscii("arcctg" ), 1);
|
||||
addFunction(PIStringAscii("random" ), 2);
|
||||
addFunction(PIStringAscii("randomn"), 2);
|
||||
addFunction(PIStringAscii("sin" ), 1);
|
||||
addFunction(PIStringAscii("cos" ), 1);
|
||||
addFunction(PIStringAscii("ctg" ), 1);
|
||||
addFunction(PIStringAscii("tg" ), 1);
|
||||
addFunction(PIStringAscii("exp" ), 1);
|
||||
addFunction(PIStringAscii("cth" ), 1);
|
||||
addFunction(PIStringAscii("sh" ), 1);
|
||||
addFunction(PIStringAscii("ch" ), 1);
|
||||
addFunction(PIStringAscii("th" ), 1);
|
||||
addFunction(PIStringAscii("sqrt" ), 1);
|
||||
addFunction(PIStringAscii("sqr" ), 1);
|
||||
addFunction(PIStringAscii("pow" ), 2);
|
||||
addFunction(PIStringAscii("abs" ), 1);
|
||||
addFunction(PIStringAscii("ln" ), 1);
|
||||
addFunction(PIStringAscii("lg" ), 1);
|
||||
addFunction(PIStringAscii("log" ), 2);
|
||||
addFunction(PIStringAscii("im" ), 1);
|
||||
addFunction(PIStringAscii("re" ), 1);
|
||||
addFunction(PIStringAscii("arg" ), 1);
|
||||
addFunction(PIStringAscii("len" ), 1);
|
||||
addFunction(PIStringAscii("conj" ), 1);
|
||||
addFunction(PIStringAscii("sign" ), 1);
|
||||
addFunction(PIStringAscii("rad" ), 1);
|
||||
addFunction(PIStringAscii("deg" ), 1);
|
||||
addFunction(PIStringAscii("j0" ), 1);
|
||||
addFunction(PIStringAscii("j1" ), 1);
|
||||
addFunction(PIStringAscii("jn" ), 2);
|
||||
addFunction(PIStringAscii("y0" ), 1);
|
||||
addFunction(PIStringAscii("y1" ), 1);
|
||||
addFunction(PIStringAscii("yn" ), 2);
|
||||
addFunction(PIStringAscii("min" ), -2); // (x0,x1,...)
|
||||
addFunction(PIStringAscii("max" ), -2); // (x0,x1,...)
|
||||
addFunction(PIStringAscii("clamp" ), 3); // (x,a,b) = x < a ? a : (x > b ? b : x)
|
||||
addFunction(PIStringAscii("step" ), 2); // (x,s) = x >= s ? 1. : 0. (1 if 'x' >= 's', else 0)
|
||||
addFunction(PIStringAscii("mix" ), 3); // (x,a,b) = a*(1.-x) + b*x (interpolate between 'a' and 'b' linear for 'x')
|
||||
addFunction(PIStringAscii("defined"), 1);
|
||||
addFunction(PIStringAscii("round" ), 1);
|
||||
clearCustomVariables();
|
||||
}
|
||||
|
||||
@@ -185,9 +185,9 @@ bool PIEvaluatorContent::setVariableName(int index, const PIString & new_name) {
|
||||
|
||||
void PIEvaluatorContent::clearCustomVariables() {
|
||||
variables.clear();
|
||||
addVariable("i", complexd_i);
|
||||
addVariable("pi", atan(1.) * 4.);
|
||||
addVariable("e", exp(1.));
|
||||
addVariable(PIStringAscii("i" ), complexd_i);
|
||||
addVariable(PIStringAscii("pi"), atan(1.) * 4.);
|
||||
addVariable(PIStringAscii("e" ), exp(1.));
|
||||
cv_count = variables.size();
|
||||
}
|
||||
|
||||
@@ -203,56 +203,56 @@ void PIEvaluatorContent::sortVariables() {
|
||||
|
||||
|
||||
BaseFunctions PIEvaluatorContent::getBaseFunction(const PIString & name) {
|
||||
if (name == "sin") return bfSin;
|
||||
if (name == "cos") return bfCos;
|
||||
if (name == "tg") return bfTg;
|
||||
if (name == "ctg") return bfCtg;
|
||||
if (name == "arcsin") return bfArcsin;
|
||||
if (name == "arccos") return bfArccos;
|
||||
if (name == "arctg") return bfArctg;
|
||||
if (name == "arcctg") return bfArcctg;
|
||||
if (name == "exp") return bfExp;
|
||||
if (name == "random") return bfRandom;
|
||||
if (name == "randomn") return bfRandomn;
|
||||
if (name == "sh") return bfSh;
|
||||
if (name == "ch") return bfCh;
|
||||
if (name == "th") return bfTh;
|
||||
if (name == "cth") return bfCth;
|
||||
if (name == "sqrt") return bfSqrt;
|
||||
if (name == "sqr") return bfSqr;
|
||||
if (name == "pow") return bfPow;
|
||||
if (name == "abs") return bfAbs;
|
||||
if (name == "ln") return bfLn;
|
||||
if (name == "lg") return bfLg;
|
||||
if (name == "log") return bfLog;
|
||||
if (name == "im") return bfIm;
|
||||
if (name == "re") return bfRe;
|
||||
if (name == "arg") return bfArg;
|
||||
if (name == "len") return bfLen;
|
||||
if (name == "conj") return bfConj;
|
||||
if (name == "sign") return bfSign;
|
||||
if (name == "rad") return bfRad;
|
||||
if (name == "deg") return bfDeg;
|
||||
if (name == "j0") return bfJ0;
|
||||
if (name == "j1") return bfJ1;
|
||||
if (name == "jn") return bfJN;
|
||||
if (name == "y0") return bfY0;
|
||||
if (name == "y1") return bfY1;
|
||||
if (name == "yn") return bfYN;
|
||||
if (name == "min") return bfMin;
|
||||
if (name == "max") return bfMax;
|
||||
if (name == "clamp") return bfClamp;
|
||||
if (name == "step") return bfStep;
|
||||
if (name == "mix") return bfMix;
|
||||
if (name == "defined") return bfDefined;
|
||||
if (name == "round") return bfRound;
|
||||
if (name == PIStringAscii("sin" )) return bfSin;
|
||||
if (name == PIStringAscii("cos" )) return bfCos;
|
||||
if (name == PIStringAscii("tg" )) return bfTg;
|
||||
if (name == PIStringAscii("ctg" )) return bfCtg;
|
||||
if (name == PIStringAscii("arcsin" )) return bfArcsin;
|
||||
if (name == PIStringAscii("arccos" )) return bfArccos;
|
||||
if (name == PIStringAscii("arctg" )) return bfArctg;
|
||||
if (name == PIStringAscii("arcctg" )) return bfArcctg;
|
||||
if (name == PIStringAscii("exp" )) return bfExp;
|
||||
if (name == PIStringAscii("random" )) return bfRandom;
|
||||
if (name == PIStringAscii("randomn")) return bfRandomn;
|
||||
if (name == PIStringAscii("sh" )) return bfSh;
|
||||
if (name == PIStringAscii("ch" )) return bfCh;
|
||||
if (name == PIStringAscii("th" )) return bfTh;
|
||||
if (name == PIStringAscii("cth" )) return bfCth;
|
||||
if (name == PIStringAscii("sqrt" )) return bfSqrt;
|
||||
if (name == PIStringAscii("sqr" )) return bfSqr;
|
||||
if (name == PIStringAscii("pow" )) return bfPow;
|
||||
if (name == PIStringAscii("abs" )) return bfAbs;
|
||||
if (name == PIStringAscii("ln" )) return bfLn;
|
||||
if (name == PIStringAscii("lg" )) return bfLg;
|
||||
if (name == PIStringAscii("log" )) return bfLog;
|
||||
if (name == PIStringAscii("im" )) return bfIm;
|
||||
if (name == PIStringAscii("re" )) return bfRe;
|
||||
if (name == PIStringAscii("arg" )) return bfArg;
|
||||
if (name == PIStringAscii("len" )) return bfLen;
|
||||
if (name == PIStringAscii("conj" )) return bfConj;
|
||||
if (name == PIStringAscii("sign" )) return bfSign;
|
||||
if (name == PIStringAscii("rad" )) return bfRad;
|
||||
if (name == PIStringAscii("deg" )) return bfDeg;
|
||||
if (name == PIStringAscii("j0" )) return bfJ0;
|
||||
if (name == PIStringAscii("j1" )) return bfJ1;
|
||||
if (name == PIStringAscii("jn" )) return bfJN;
|
||||
if (name == PIStringAscii("y0" )) return bfY0;
|
||||
if (name == PIStringAscii("y1" )) return bfY1;
|
||||
if (name == PIStringAscii("yn" )) return bfYN;
|
||||
if (name == PIStringAscii("min" )) return bfMin;
|
||||
if (name == PIStringAscii("max" )) return bfMax;
|
||||
if (name == PIStringAscii("clamp" )) return bfClamp;
|
||||
if (name == PIStringAscii("step" )) return bfStep;
|
||||
if (name == PIStringAscii("mix" )) return bfMix;
|
||||
if (name == PIStringAscii("defined")) return bfDefined;
|
||||
if (name == PIStringAscii("round" )) return bfRound;
|
||||
return bfUnknown;
|
||||
}
|
||||
|
||||
|
||||
const PIString & PIEvaluator::prepare(const PIString & string) {
|
||||
currentString = string.trimmed();
|
||||
if (currentString.isEmpty()) currentString = "0";
|
||||
if (currentString.isEmpty()) currentString = PIStringAscii("0");
|
||||
replaceOperators();
|
||||
removeSpaces();
|
||||
checkBrackets();
|
||||
@@ -281,7 +281,8 @@ void PIEvaluator::removeJunk() {
|
||||
bool junk = true;
|
||||
int bcnt;
|
||||
while (junk) {
|
||||
if (currentString.left(1) != "(" || currentString.right(1) != ")") return;
|
||||
if (currentString.isEmpty()) return;
|
||||
if (currentString.front() != '(' || currentString.back() != ')') return;
|
||||
bcnt = 1;
|
||||
junk = false;
|
||||
for (int i = 1; i < currentString.length(); i++) {
|
||||
@@ -303,26 +304,26 @@ void PIEvaluator::removeJunk() {
|
||||
|
||||
|
||||
void PIEvaluator::replaceOperators() {
|
||||
currentString.replaceAll("==", "=");
|
||||
currentString.replaceAll("!=", ":");
|
||||
currentString.replaceAll(">=", "}");
|
||||
currentString.replaceAll("<=", "{");
|
||||
currentString.replaceAll("&&", "&");
|
||||
currentString.replaceAll("||", "|");
|
||||
currentString.replaceAll(PIString::fromUTF8("≠"), ":");
|
||||
currentString.replaceAll(PIString::fromUTF8("≥"), "}");
|
||||
currentString.replaceAll(PIString::fromUTF8("≤"), "{");
|
||||
currentString.replaceAll(PIString::fromUTF8("⋀"), "&");
|
||||
currentString.replaceAll(PIString::fromUTF8("⋁"), "|");
|
||||
currentString.replaceAll(PIStringAscii("=="), '=');
|
||||
currentString.replaceAll(PIStringAscii("!="), ':');
|
||||
currentString.replaceAll(PIStringAscii(">="), '}');
|
||||
currentString.replaceAll(PIStringAscii("<="), '{');
|
||||
currentString.replaceAll(PIStringAscii("&&"), '&');
|
||||
currentString.replaceAll(PIStringAscii("||"), '|');
|
||||
currentString.replaceAll(PIString::fromUTF8("≠"), ':');
|
||||
currentString.replaceAll(PIString::fromUTF8("≥"), '}');
|
||||
currentString.replaceAll(PIString::fromUTF8("≤"), '{');
|
||||
currentString.replaceAll(PIString::fromUTF8("⋀"), '&');
|
||||
currentString.replaceAll(PIString::fromUTF8("⋁"), '|');
|
||||
}
|
||||
|
||||
|
||||
void PIEvaluator::makeOutput(PIString & string) {
|
||||
string.replaceAll(":", PIString::fromUTF8("≠"));
|
||||
string.replaceAll("}", PIString::fromUTF8("≥"));
|
||||
string.replaceAll("{", PIString::fromUTF8("≤"));
|
||||
string.replaceAll("&", PIString::fromUTF8("⋀"));
|
||||
string.replaceAll("|", PIString::fromUTF8("⋁"));
|
||||
string.replaceAll(PIStringAscii(":"), PIString::fromUTF8("≠"));
|
||||
string.replaceAll(PIStringAscii("}"), PIString::fromUTF8("≥"));
|
||||
string.replaceAll(PIStringAscii("{"), PIString::fromUTF8("≤"));
|
||||
string.replaceAll(PIStringAscii("&"), PIString::fromUTF8("⋀"));
|
||||
string.replaceAll(PIStringAscii("|"), PIString::fromUTF8("⋁"));
|
||||
}
|
||||
|
||||
|
||||
@@ -334,7 +335,7 @@ void PIEvaluator::findUnknownVariables() {
|
||||
else {
|
||||
if (cvar.length() == 0) continue;
|
||||
unknownVars << cvar;
|
||||
cvar = "";
|
||||
cvar.clear();
|
||||
}
|
||||
}
|
||||
if (cvar.length() > 0) unknownVars << cvar;
|
||||
@@ -343,16 +344,13 @@ void PIEvaluator::findUnknownVariables() {
|
||||
|
||||
|
||||
bool PIEvaluator::isSign(const PIChar & ch) {
|
||||
return ch == '+' || ch == '-' ||
|
||||
ch == '*' || ch == '/' ||
|
||||
ch == '%' || ch == '^' ||
|
||||
ch == '=' || ch == ':' ||
|
||||
ch == '>' || ch == '<' ||
|
||||
ch == '}' || ch == '{' ||
|
||||
ch == '&' || ch == '|';
|
||||
static PIString signs = PIStringAscii("+-*/%^=:><}{&|");
|
||||
if (!ch.isAscii()) return false;
|
||||
return signs.contains(ch.toAscii());
|
||||
}
|
||||
|
||||
|
||||
|
||||
void PIEvaluator::checkBrackets() {
|
||||
PIString tmps = currentString;
|
||||
PIChar fc, sc;
|
||||
@@ -365,7 +363,7 @@ void PIEvaluator::checkBrackets() {
|
||||
}
|
||||
if (tmps[i] == ')') {
|
||||
if (bcnt == 0) {
|
||||
currentString.insert(bpos + inserted, "(");
|
||||
currentString.insert(bpos + inserted, '(');
|
||||
inserted++;
|
||||
} else bcnt--;
|
||||
}
|
||||
@@ -428,7 +426,7 @@ bool PIEvaluator::fillElements() {
|
||||
cnum++;
|
||||
}
|
||||
}
|
||||
curfind = "";
|
||||
curfind.clear();
|
||||
cnum = 1;
|
||||
for (int i = 0; i < tmps.length(); i++) {
|
||||
cc = tmps[i];
|
||||
@@ -496,19 +494,19 @@ bool PIEvaluator::fillElements() {
|
||||
break;
|
||||
}
|
||||
if (numFound) {
|
||||
currentVariables.push_back(Variable("tmp" + PIString::fromNumber(cnum), curfind.toDouble()));
|
||||
currentVariables.push_back(Variable(PIStringAscii("tmp") + PIString::fromNumber(cnum), curfind.toDouble()));
|
||||
for (int j = i - curfind.length(); j < i; j++) {
|
||||
elements[j].set(etNumber, cnum, -cnum);
|
||||
tmps.replace(j, 1, fc);
|
||||
}
|
||||
curfind = "";
|
||||
curfind.clear();
|
||||
cnum++;
|
||||
cpart = 0;
|
||||
numFound = false;
|
||||
}
|
||||
}
|
||||
if (cpart > 0) {
|
||||
currentVariables.push_back(Variable("tmp" + PIString::fromNumber(cnum), curfind.toDouble()));
|
||||
currentVariables.push_back(Variable(PIStringAscii("tmp") + PIString::fromNumber(cnum), curfind.toDouble()));
|
||||
for (int j = tmps.length() - curfind.length(); j < tmps.length(); j++) {
|
||||
elements[j].set(etNumber, cnum, -cnum);
|
||||
tmps.replace(j, 1, fc);
|
||||
@@ -584,11 +582,11 @@ bool PIEvaluator::setSignes() {
|
||||
if (elements[pi].type == etOperator && (elements[ni].type == etFunction || elements[ni].type == etVariable) && fc == '-') needInsert = 3;
|
||||
switch (needInsert) {
|
||||
case 1:
|
||||
currentString.insert(ni + inserted, "*");
|
||||
currentString.insert(ni + inserted, '*');
|
||||
elements.insert(ni + inserted, Element(etOperator, -1));
|
||||
return true;
|
||||
case 3:
|
||||
currentString.insert(ni + inserted, "1*");
|
||||
currentString.insert(ni + inserted, PIStringAscii("1*"));
|
||||
elements.insert(ni + inserted, Element(etOperator, -1));
|
||||
return true;
|
||||
}
|
||||
@@ -609,7 +607,7 @@ void PIEvaluator::convert() {
|
||||
if (ce != pe) break;
|
||||
j++;
|
||||
}
|
||||
currentString.replace(i, j - i, " ");
|
||||
currentString.replace(i, j - i, ' ');
|
||||
for (int k = i + 1; k < j; k++) elements.remove(i);
|
||||
}
|
||||
for (int i = 0; i < currentString.length(); i++) {
|
||||
@@ -621,7 +619,7 @@ void PIEvaluator::convert() {
|
||||
if (ce != pe) break;
|
||||
j++;
|
||||
}
|
||||
currentString.replace(i, j - i, " ");
|
||||
currentString.replace(i, j - i, ' ');
|
||||
for (int k = i + 1; k < j; k++) elements.remove(i);
|
||||
}
|
||||
for (int i = 0; i < currentString.length(); i++) {
|
||||
@@ -633,7 +631,7 @@ void PIEvaluator::convert() {
|
||||
if (ce != pe) break;
|
||||
j++;
|
||||
}
|
||||
currentString.replace(i, j - i, " ");
|
||||
currentString.replace(i, j - i, ' ');
|
||||
for (int k = i + 1; k < j; k++) elements.remove(i);
|
||||
}
|
||||
/*cout << " ";
|
||||
@@ -707,7 +705,7 @@ int PIEvaluator::parse(const PIString & string, int offset) {
|
||||
cfunc = content.function(ce.var_num);
|
||||
atmp.clear();
|
||||
bcnt = farg = 1;
|
||||
carg = "";
|
||||
carg.clear();
|
||||
k = i + 1;
|
||||
while (bcnt > 0) {
|
||||
cc = string[k];
|
||||
@@ -719,7 +717,7 @@ int PIEvaluator::parse(const PIString & string, int offset) {
|
||||
///qDebug() << "arument: " << carg;
|
||||
atmp.push_back(parse(carg, k + offset - carg.length()));
|
||||
k++;
|
||||
carg = "";
|
||||
carg.clear();
|
||||
if (atmp.size_s() > 0) if (atmp.back() < 0 && farg > 0) farg = atmp.back();
|
||||
continue;
|
||||
}
|
||||
@@ -729,7 +727,7 @@ int PIEvaluator::parse(const PIString & string, int offset) {
|
||||
///qDebug() << "arument: " << carg;
|
||||
atmp.push_back(parse(carg, k + offset - carg.length()));
|
||||
k++;
|
||||
carg = "";
|
||||
carg.clear();
|
||||
if (atmp.size_s() > 0) if (atmp.back() < 0 && farg > 0) farg = atmp.back();
|
||||
continue;
|
||||
}
|
||||
@@ -818,7 +816,7 @@ bool PIEvaluator::check() {
|
||||
Instruction ci;
|
||||
bool error;
|
||||
if (unknownVars.size_s() > 0) {
|
||||
lastError = "Unknown variables: \"" + unknownVars.join("\", \"") + "\"";
|
||||
lastError = PIStringAscii("Unknown variables: \"") + unknownVars.join("\", \"") + PIStringAscii("\"");
|
||||
return false;
|
||||
}
|
||||
for (int i = 0; i < instructions.size_s(); i++) {
|
||||
@@ -840,25 +838,25 @@ bool PIEvaluator::check() {
|
||||
}
|
||||
if (fac > 0) {
|
||||
if (gac != fac) {
|
||||
lastError = "Invalid arguments count for function \"" + cf.identifier +
|
||||
"\", expected " + PIString::fromNumber(fac) + " but " +
|
||||
PIString::fromNumber(gac) + " given";
|
||||
lastError = PIStringAscii("Invalid arguments count for function \"") + cf.identifier +
|
||||
PIStringAscii("\", expected ") + PIString::fromNumber(fac) + PIStringAscii(" but ") +
|
||||
PIString::fromNumber(gac) + PIStringAscii(" given");
|
||||
return false;
|
||||
}
|
||||
if (error) {
|
||||
lastError = "Invalid at least one of function \"" + cf.identifier + "\" argument";
|
||||
lastError = PIStringAscii("Invalid at least one of function \"") + cf.identifier + PIStringAscii("\" argument");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (fac < 0) {
|
||||
if (gac < -fac) {
|
||||
lastError = "Invalid arguments count for function \"" + cf.identifier +
|
||||
"\", expected at least " + PIString::fromNumber(-fac) + " but " +
|
||||
PIString::fromNumber(gac) + " given";
|
||||
lastError = PIStringAscii("Invalid arguments count for function \"") + cf.identifier +
|
||||
PIStringAscii("\", expected at least ") + PIString::fromNumber(-fac) + PIStringAscii(" but ") +
|
||||
PIString::fromNumber(gac) + PIStringAscii(" given");
|
||||
return false;
|
||||
}
|
||||
if (error) {
|
||||
lastError = "Invalid at least one of function \"" + cf.identifier + "\" argument";
|
||||
lastError = PIStringAscii("Invalid at least one of function \"") + cf.identifier + PIStringAscii("\" argument");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -866,18 +864,18 @@ bool PIEvaluator::check() {
|
||||
default:
|
||||
if (ci.operators[0] == -666 || ci.operators[1] == -666) error = true;
|
||||
if (ci.operators.size_s() != 2 || error) {
|
||||
lastError = "Invalid arguments count for operation \" " + operationChar(ci.operation) + " \"";
|
||||
lastError = PIStringAscii("Invalid arguments count for operation \" ") + operationChar(ci.operation) + PIStringAscii(" \"");
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (ci.out < -variables.size_s()) {
|
||||
lastError = "Invalid variable index \"" + PIString::fromNumber(ci.out) + "\"";
|
||||
lastError = PIStringAscii("Invalid variable index \"") + PIString::fromNumber(ci.out) + PIStringAscii("\"");
|
||||
return false;
|
||||
}
|
||||
for (int j = 0; j < ci.operators.size_s(); j++) {
|
||||
if (ci.operators[j] < -variables.size_s() || ci.operators[j] >= kvars->size_s()) {
|
||||
lastError = "Invalid variable index \"" + PIString::fromNumber(ci.operators[j]) + "\"";
|
||||
lastError = PIStringAscii("Invalid variable index \"") + PIString::fromNumber(ci.operators[j]) + PIStringAscii("\"");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -903,22 +901,23 @@ PIString PIEvaluator::inBrackets(const PIString & string) {
|
||||
|
||||
PIString PIEvaluator::operationChar(const Operation & operation) {
|
||||
switch (operation) {
|
||||
case oAdd: return "+";
|
||||
case oSubtract: return "-";
|
||||
case oMultiply: return "*";
|
||||
case oDivide: return "/";
|
||||
case oPower: return "^";
|
||||
case oResidue: return "%";
|
||||
case oEqual: return "=";
|
||||
case oNotEqual: return PIString::fromUTF8("≠");
|
||||
case oAdd : return PIStringAscii("+");
|
||||
case oSubtract : return PIStringAscii("-");
|
||||
case oMultiply : return PIStringAscii("*");
|
||||
case oDivide : return PIStringAscii("/");
|
||||
case oPower : return PIStringAscii("^");
|
||||
case oResidue : return PIStringAscii("%");
|
||||
case oEqual : return PIStringAscii("=");
|
||||
case oNotEqual : return PIString::fromUTF8("≠");
|
||||
case oGreaterEqual: return PIString::fromUTF8("≥");
|
||||
case oSmallerEqual: return PIString::fromUTF8("≤");
|
||||
case oGreater: return ">";
|
||||
case oSmaller: return "<";
|
||||
case oAnd: return PIString::fromUTF8("⋀");
|
||||
case oOr: return PIString::fromUTF8("⋁");
|
||||
default: return "???";
|
||||
case oGreater : return PIStringAscii(">");
|
||||
case oSmaller : return PIStringAscii("<");
|
||||
case oAnd : return PIString::fromUTF8("⋀");
|
||||
case oOr : return PIString::fromUTF8("⋁");
|
||||
default: break;
|
||||
}
|
||||
return PIStringAscii("???");
|
||||
}
|
||||
|
||||
|
||||
@@ -1182,7 +1181,7 @@ bool PIEvaluator::check(const PIString & string) {
|
||||
instructions.clear();
|
||||
return false;
|
||||
}
|
||||
lastError = "Correct";
|
||||
lastError = PIStringAscii("Correct");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user