Mercurial > cpython-lru_cache-weakref
diff Objects/longobject.c @ 18605:0857fb489fa3 legacy-trunk
long_format: Simplify the overly elaborate base-is-a-power-of-2 code.
| author | Tim Peters <tim.peters@gmail.com> |
|---|---|
| date | Sun, 15 Jul 2001 09:11:14 +0000 |
| parents | 19250f9181dc |
| children | faf7f171a9f3 |
line wrap: on
line diff
--- a/Objects/longobject.c Sat Jul 14 20:55:52 2001 +0000 +++ b/Objects/longobject.c Sun Jul 15 09:11:14 2001 +0000 @@ -792,38 +792,26 @@ } else if ((base & (base - 1)) == 0) { /* JRH: special case for power-of-2 bases */ - twodigits temp = a->ob_digit[0]; - int bitsleft = SHIFT; - int rem; - int last = size_a; - int basebits = 1; + twodigits accum = 0; + int accumbits = 0; /* # of bits in accum */ + int basebits = 1; /* # of bits in base-1 */ i = base; while ((i >>= 1) > 1) ++basebits; - - i = 0; - for (;;) { - while (bitsleft >= basebits) { - if ((temp == 0) && (i >= last - 1)) break; - rem = temp & (base - 1); - if (rem < 10) - rem += '0'; - else - rem += 'A' - 10; + + for (i = 0; i < size_a; ++i) { + accum |= a->ob_digit[i] << accumbits; + accumbits += SHIFT; + assert(accumbits >= basebits); + do { + char digit = (char)(accum & (base - 1)); + digit += (digit < 10) ? '0' : 'A'-10; assert(p > PyString_AS_STRING(str)); - *--p = (char) rem; - bitsleft -= basebits; - temp >>= basebits; - } - if (++i >= last) { - if (temp == 0) break; - bitsleft = 99; - /* loop again to pick up final digits */ - } - else { - temp = (a->ob_digit[i] << bitsleft) | temp; - bitsleft += SHIFT; - } + *--p = digit; + accumbits -= basebits; + accum >>= basebits; + } while (i < size_a-1 ? accumbits >= basebits : + accum > 0); } } else {
