@@ -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 : b reak ;
}
return PIStringAscii ( " ??? " ) ;
}
@@ -1182,7 +1181,7 @@ bool PIEvaluator::check(const PIString & string) {
instructions . clear ( ) ;
return false ;
}
lastError = " Correct " ;
lastError = PIStringAscii ( " Correct " ) ;
return true ;
}