fix comparison two string : [a;b] == [c a b] 85/15985/1
Sylvain GENIN [Thu, 19 Feb 2015 16:24:56 +0000 (17:24 +0100)]
Change-Id: Ib52fb7cbbce88d815f0f521c68c674440dc55585

scilab/modules/ast/src/cpp/operations/types_comparison_eq.cpp
scilab/modules/ast/src/cpp/operations/types_comparison_ne.cpp

index ebcda27..4bbe586 100644 (file)
@@ -2830,54 +2830,59 @@ InternalType* compequal_M_P(T *_pL, U *_pR)
 template<>
 InternalType* compequal_M_M<String, String, Bool>(String* _pL, String* _pR)
 {
-    if (_pL->getSize() == _pR->getSize())
-    {
-        //check dims
-        int iDimsL = _pL->getDims();
-        int iDimsR = _pR->getDims();
-
-        if (iDimsL != iDimsR)
-        {
-            return new Bool(false);
-        }
 
-        int* piDimsL = _pL->getDimsArray();
-        int* piDimsR = _pR->getDimsArray();
-
-        for (int i = 0; i < iDimsL; ++i)
+    if (_pL->isScalar())
+    {
+        Bool*  pOut = new Bool(_pR->getDims(), _pR->getDimsArray());
+        for (int i = 0; i < _pR->getSize(); i++)
         {
-            if (piDimsL[i] != piDimsR[i])
-            {
-                return new Bool(false);
-            }
+            pOut->set(i, wcscmp(_pL->get(0), _pR->get(i)) == 0);
         }
-        Bool*  pOut = new Bool(iDimsL, piDimsL);
+        return pOut;
+    }
 
+    if (_pR->isScalar())
+    {
+        Bool*  pOut = new Bool(_pL->getDims(), _pL->getDimsArray());
         for (int i = 0; i < _pL->getSize(); i++)
         {
-            pOut->set(i, wcscmp(_pL->get(i), _pR->get(i)) == 0);
+            pOut->set(i, wcscmp(_pL->get(i), _pR->get(0)) == 0);
         }
         return pOut;
     }
-    else if (_pL->getSize() == 1)
+
+    int iDimsL = _pL->getDims();
+    int iDimsR = _pR->getDims();
+
+    int* piDimsL = _pL->getDimsArray();
+    int* piDimsR = _pR->getDimsArray();
+
+
+    if (iDimsL != iDimsR)
+    {
+        return new Bool(false);
+    }
+
+
+    for (int i = 0; i < iDimsL; ++i)
     {
-        Bool*  pOut = new Bool(_pR->getDims(), _pR->getDimsArray());
-        for (int i = 0; i < _pR->getSize(); i++)
+        if (piDimsL[i] != piDimsR[i])
         {
-            pOut->set(i, wcscmp(_pL->get(0), _pR->get(i)) == 0);
+            return new Bool(false);
         }
-        return pOut;
     }
-    else if (_pR->getSize() == 1)
+
+
+    if (_pL->getSize() == _pR->getSize())
     {
-        Bool*  pOut = new Bool(_pL->getDims(), _pL->getDimsArray());
+        Bool*  pOut = new Bool(iDimsL, piDimsL);
+
         for (int i = 0; i < _pL->getSize(); i++)
         {
-            pOut->set(i, wcscmp(_pL->get(i), _pR->get(0)) == 0);
+            pOut->set(i, wcscmp(_pL->get(i), _pR->get(i)) == 0);
         }
         return pOut;
     }
-
     return NULL;
 }
 
index 567ab7a..fd807d3 100644 (file)
@@ -2833,54 +2833,59 @@ InternalType* compnoequal_M_P(T *_pL, U *_pR)
 template<>
 InternalType* compnoequal_M_M<String, String, Bool>(String* _pL, String* _pR)
 {
-    if (_pL->getSize() == _pR->getSize())
+    if (_pL->isScalar())
     {
-        //check dims
-        int iDimsL = _pL->getDims();
-        int iDimsR = _pR->getDims();
-
-        if (iDimsL != iDimsR)
-        {
-            return new Bool(true);
-        }
-
-        int* piDimsL = _pL->getDimsArray();
-        int* piDimsR = _pR->getDimsArray();
-
-        for (int i = 0; i < iDimsL; ++i)
+        Bool*  pOut = new Bool(_pR->getDims(), _pR->getDimsArray());
+        for (int i = 0; i < _pR->getSize(); i++)
         {
-            if (piDimsL[i] != piDimsR[i])
-            {
-                return new Bool(true);
-            }
+            pOut->set(i, wcscmp(_pL->get(0), _pR->get(i)) != 0);
         }
-        Bool*  pOut = new Bool(iDimsL, piDimsL);
+        return pOut;
+    }
 
+    if (_pR->isScalar())
+    {
+        Bool*  pOut = new Bool(_pL->getDims(), _pL->getDimsArray());
         for (int i = 0; i < _pL->getSize(); i++)
         {
-            pOut->set(i, wcscmp(_pL->get(i), _pR->get(i)) != 0);
+            pOut->set(i, wcscmp(_pL->get(i), _pR->get(0)) != 0);
         }
         return pOut;
     }
-    else if (_pL->getSize() == 1)
+
+    int iDimsL = _pL->getDims();
+    int iDimsR = _pR->getDims();
+
+    int* piDimsL = _pL->getDimsArray();
+    int* piDimsR = _pR->getDimsArray();
+
+    if (iDimsL != iDimsR)
+    {
+        return new Bool(true);
+    }
+
+
+    for (int i = 0; i < iDimsL; ++i)
     {
-        Bool*  pOut = new Bool(_pR->getDims(), _pR->getDimsArray());
-        for (int i = 0; i < _pR->getSize(); i++)
+        if (piDimsL[i] != piDimsR[i])
         {
-            pOut->set(i, wcscmp(_pL->get(0), _pR->get(i)) != 0);
+            return new Bool(true);
         }
-        return pOut;
     }
-    else if (_pR->getSize() == 1)
+
+
+    if (_pL->getSize() == _pR->getSize())
     {
-        Bool*  pOut = new Bool(_pL->getDims(), _pL->getDimsArray());
+        Bool*  pOut = new Bool(iDimsL, piDimsL);
+
         for (int i = 0; i < _pL->getSize(); i++)
         {
-            pOut->set(i, wcscmp(_pL->get(i), _pR->get(0)) != 0);
+            pOut->set(i, wcscmp(_pL->get(i), _pR->get(i)) != 0);
         }
         return pOut;
     }
 
+
     return NULL;
 }