use builtin base2dec 27/5627/3
Allan CORNET [Mon, 12 Dec 2011 16:13:17 +0000 (17:13 +0100)]
Change-Id: I4e35f6ae1ab9fad1c06107da03e0a0d5d3c00d23

scilab/modules/elementary_functions/macros/bin2dec.sci
scilab/modules/elementary_functions/macros/hex2dec.sci
scilab/modules/elementary_functions/macros/oct2dec.sci
scilab/modules/elementary_functions/sci_gateway/c/sci_base2dec.c
scilab/modules/elementary_functions/src/c/convertbase.c
scilab/modules/elementary_functions/src/c/convertbase.h

index a0250c9..78cf2fe 100644 (file)
@@ -2,6 +2,7 @@
 // Copyright (C) ???? - INRIA - Farid BELAHCENE
 // Copyright (C) 2006 - INRIA - Pierre MARECHAL
 // Copyright (C) 2011 - DIGITEO - Pierre MARECHAL
+// Copyright (C) 2011 - DIGITEO - Allan CORNET
 //
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
@@ -42,31 +43,6 @@ function y = bin2dec(str)
 
   // delete all spaces included in the str
   str = strsubst(str,' ','');
-
-  // check the str characters are only '0' or '1', and convert the binary str to corresponing decimal number
-  for i=1:prod(size(str))
-
-    ind1=strindex(str(i),'1')
-    ind0=strindex(str(i),'0')
-
-    if length(str(i)) <> sum([prod(size(ind0)) prod(size(ind1))]) then
-      error(msprintf(gettext("%s: Wrong value for input argument #%d: Matrix of strings made of zeros and ones expected.\n"),"bin2dec",1));
-    end
-
-    if length(str(i)) > 54 then
-      error(msprintf(gettext("%s: Wrong size for input argument #%d: Must be less than %d characters.\n"),"bin2dec",1,54));
-    end
-
-    if ~isempty(ind1)
-      ind1   = length(str(i))-ind1($:-1:1);
-      y($+1) = sum(2^ind1);
-    elseif ~isempty(ind0)
-      y($+1) = 0;
-    else
-      y($+1) = [];
-    end
-  end
-
-  y = matrix(y, size(str));
+  y = base2dec(str, 2);
 
 endfunction
index 1802083..27b4db3 100644 (file)
@@ -33,19 +33,6 @@ function d = hex2dec(h)
     error(msprintf(gettext("%s: Wrong type for input argument #%d: Matrix of strings expected.\n"),"hex2dec",1));
   end
 
-  [nr, nc] = size(h);
-
-  d = [];
-
-  for i = 1:size(h, "*")
-    r = msscanf(h(i), "%X");
-    if r <> [] then
-      d(i) = r;
-    else
-      error(msprintf(gettext("%s: Wrong value for input argument #%d: Valid hexadecimal representations expected.\n"), "hex2dec", 1));
-    end
-  end
-
-  d = matrix(d, nr, nc);
+  d = base2dec(h, 16);
 
 endfunction
index 83b8d24..8bee4d6 100644 (file)
@@ -33,19 +33,6 @@ function d = oct2dec(o)
     error(msprintf(gettext("%s: Wrong type for input argument #%d: Matrix of strings expected.\n"), "oct2dec", 1));
   end
 
-  [nr, nc] = size(o);
-
-  d = [];
-
-  for i = 1:size(o, "*")
-    r = msscanf(o(i), "%o");
-    if r <> [] then
-      d(i) = r;
-    else
-      error(msprintf(gettext("%s: Wrong value for input argument #%d: Valid octal representations expected.\n"),"oct2dec",1));
-    end
-  end
-
-  d = matrix(d, nr, nc);
+  d = base2dec(o, 8);
 
 endfunction
index 92736a4..b756fa6 100644 (file)
@@ -105,7 +105,7 @@ int sci_base2dec(char *fname,unsigned long fname_len)
     for (i = 0; i < m * n; i++)
     {
         int ierr = 0;
-        dResults[i] = (double)convertBase2Dec(pStrs[i], iValue, &ierr);
+        dResults[i] = convertBase2Dec(pStrs[i], iValue, &ierr);
         if (ierr)
         {
             freeAllocatedMatrixOfString(m, n, pStrs);
index 438c50c..3e05eb3 100644 (file)
@@ -20,9 +20,9 @@
 #define char_zero '0'
 #define char_nine '9'
 /*--------------------------------------------------------------------------*/ 
-unsigned int convertBase2Dec(char *pStr, int numberbase, int *ierr)
+double convertBase2Dec(const char *pStr, int numberbase, int *ierr)
 {
-    unsigned int result = 0;
+    double result = 0.;
     *ierr = 1;
 
     if (pStr)
index 73c13dd..925ea8d 100644 (file)
@@ -20,7 +20,7 @@
 * @param[out] int if 0 no error  
 * @return converted value (decimal)
 */
-unsigned int convertBase2Dec(char *pStr, int numberbase, int *ierr);
+double convertBase2Dec(const char *pStr, int numberbase, int *ierr);
 
 #endif /* __CONVERTBASE_H__ */
 /*--------------------------------------------------------------------------*/