[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