[Python-checkins] r75639 - sandbox/trunk/decimal/decimal_in_c/deccoeff.c

mark.dickinson python-checkins at python.org
Fri Oct 23 21:30:54 CEST 2009


Author: mark.dickinson
Date: Fri Oct 23 21:30:54 2009
New Revision: 75639

Log:
Remove unnecessary abstractions

Modified:
   sandbox/trunk/decimal/decimal_in_c/deccoeff.c

Modified: sandbox/trunk/decimal/decimal_in_c/deccoeff.c
==============================================================================
--- sandbox/trunk/decimal/decimal_in_c/deccoeff.c	(original)
+++ sandbox/trunk/decimal/decimal_in_c/deccoeff.c	Fri Oct 23 21:30:54 2009
@@ -254,26 +254,6 @@
         return limb_fmaa(res, a, powers_of_ten[n], b, LIMB_ZERO);
 }
 
-/* *res = (a + b*LIMB_BASE) >> n, b < 10**n.  Returns part shifted out. */
-
-static limb_t
-limb_rshift(limb_t *res, limb_t a, Py_ssize_t n, limb_t b)
-{
-    limb_t rem;
-    if (!(0 <= n && n <= LIMB_DIGITS))
-        limb_error("limb_rshift: invalid shift index");
-    if (b != limb_mask(b, n))
-        limb_error("limb_rshift: b out of range");
-    if (LIMB_DIGITS == n) {
-        *res = b;
-        return a;
-    }
-    else {
-        *res = limb_div(&rem, b, a, powers_of_ten[n]);
-        return rem;
-    }
-}
-
 /* retrieve the value of a particular digit, as a limb_t */
 
 static limb_t
@@ -286,22 +266,6 @@
     return limb_mask(q, 1);
 }
 
-/* convert a character in the range '0' through '9' into a limb and back */
-
-static limb_t
-wdigit_to_limb(Py_UNICODE d)
-{
-    digit dummy;
-    return limb_digit_swap(&dummy, LIMB_ZERO, (digit)(d - (Py_UNICODE)'0'));
-}
-
-static Py_UNICODE
-limb_to_wdigit(limb_t b)
-{
-    limb_t dummy;
-    return (Py_UNICODE)'0' + (Py_UNICODE)digit_limb_swap(&dummy, 0, b);
-}
-
 #ifndef DECCOEFF_SLOW_BASECASE_MUL
 
 /**********************************
@@ -776,13 +740,17 @@
     s += s_len;
     for (j=0; j < nlimbs; j++) {
         limb = a[j];
-        for (i=0; i < LIMB_DIGITS; i++)
-            *--s = limb_to_wdigit(limb_rshift(&limb, limb, 1, LIMB_ZERO));
+        for (i=0; i < LIMB_DIGITS; i++) {
+            *--s = '0' + limb % 10;
+            limb /= 10;
+        }
     }
     /* most significant limb */
     limb = a[nlimbs];
-    for (i=0; i < ndigits; i++)
-        *--s = limb_to_wdigit(limb_rshift(&limb, limb, 1, LIMB_ZERO));
+    for (i=0; i < ndigits; i++) {
+        *--s = '0' + limb % 10;
+        limb /= 10;
+    }
 
     assert(s == s_store);
 }
@@ -807,7 +775,7 @@
         c = s[i];
         if (c < '0' || c > '9')
             return true;
-        limb_lshift(&acc, acc, 1, wdigit_to_limb(c));
+        limb_lshift(&acc, acc, 1, c - '0');
         digits_in_limb--;
         if (digits_in_limb == 0) {
             digits_in_limb = LIMB_DIGITS;


More information about the Python-checkins mailing list