]> AND Private Git Repository - blast.git/blobdiff - ArithmeticEvaluator.cpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
start to include clkdomain converters
[blast.git] / ArithmeticEvaluator.cpp
index 54a9596a35b5fb569f6e65f683c439919d6baa30..2898f139dd356293d174308c4c005292e1cb0c63 100644 (file)
@@ -15,7 +15,7 @@ supp. infos : saved in UTF-8 [éè]
 #include <math.h>
 
 ArithmeticEvaluator::ArithmeticEvaluator() {
 #include <math.h>
 
 ArithmeticEvaluator::ArithmeticEvaluator() {
-  opMarkers = "+-*/";
+  opMarkers = "+-*/|%"; // | is for euclidan division
   varMarkers = "$";
   expression = QStringList();
   /* CAUTION : function are mandatory using ( ) to encapsulate the operand
   varMarkers = "$";
   expression = QStringList();
   /* CAUTION : function are mandatory using ( ) to encapsulate the operand
@@ -26,7 +26,7 @@ ArithmeticEvaluator::ArithmeticEvaluator() {
 }
 
 ArithmeticEvaluator::ArithmeticEvaluator(const QString& _expression) throw(int) {
 }
 
 ArithmeticEvaluator::ArithmeticEvaluator(const QString& _expression) throw(int) {
-  opMarkers = "+-*/";
+  opMarkers = "+-*/|%"; // | is for euclidan division
   varMarkers = "$";
   expression = QStringList();
   /* CAUTION : function are mandatory using ( ) to encapsulate the operand
   varMarkers = "$";
   expression = QStringList();
   /* CAUTION : function are mandatory using ( ) to encapsulate the operand
@@ -156,6 +156,16 @@ double ArithmeticEvaluator::evaluate() throw(int) {
       else if (c == '/') {
         stack.push(value1/value2);
       }
       else if (c == '/') {
         stack.push(value1/value2);
       }
+      else if (c == '|') {
+        int val1 = (int)value1;
+        int val2 = (int)value2;
+        stack.push(val1/val2);
+      }
+      else if (c == '%') {
+        int val1 = (int)value1;
+        int val2 = (int)value2;
+        stack.push(val1%val2);
+      }
     }
     else {
       value1 = elt.toDouble(&ok);
     }
     else {
       value1 = elt.toDouble(&ok);
@@ -303,7 +313,7 @@ QString ArithmeticEvaluator::convertRecur(const QString& _expression, int *offse
         *offset += 1;
       }      
     }
         *offset += 1;
       }      
     }
-    else if (expr[*offset] == '/') {
+    else if ((expr[*offset] == '/')||(expr[*offset] == '|')||(expr[*offset] == '%')) {
 
       if (!checkAfterOp(expr,*offset)) throw(*offset);
 
 
       if (!checkAfterOp(expr,*offset)) throw(*offset);
 
@@ -311,7 +321,7 @@ QString ArithmeticEvaluator::convertRecur(const QString& _expression, int *offse
       c = '1';
       while ( (pile.isEmpty() == false) && (c != '(') && (c != '+') && (c != '-')) {
         c = pile.pop();
       c = '1';
       while ( (pile.isEmpty() == false) && (c != '(') && (c != '+') && (c != '-')) {
         c = pile.pop();
-        if ( (c=='*') || (c == '/')) {
+        if ( (c=='*') || (c == '/') || (c == '|') || (c=='%')) {
           result.append(c).append(",");
         }
         else {
           result.append(c).append(",");
         }
         else {
@@ -469,6 +479,8 @@ bool ArithmeticEvaluator::checkAfterPar(const QString& _expression, int offset)
   else if (_expression[offset+1] == '-') return true;
   else if (_expression[offset+1] == '*') return true;
   else if (_expression[offset+1] == '/') return true;
   else if (_expression[offset+1] == '-') return true;
   else if (_expression[offset+1] == '*') return true;
   else if (_expression[offset+1] == '/') return true;
+  else if (_expression[offset+1] == '|') return true;
+  else if (_expression[offset+1] == '%') return true;
 
   return false;
 }
 
   return false;
 }