diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-08-02 17:24:19 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-08-02 17:24:19 +0000 |
commit | 04cf3fa3468dd4948ca453dfa730d52341a270e0 (patch) | |
tree | 1469c10473089c78a91e493c860a1194e13beadc /bignum.c | |
parent | 81f42c757676dd1e7866d39f42257873f8b14f21 (diff) |
* bignum.c (big2str_orig): Refactored.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42344 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'bignum.c')
-rw-r--r-- | bignum.c | 31 |
1 files changed, 13 insertions, 18 deletions
@@ -4251,7 +4251,6 @@ big2str_orig(struct big2str_struct *b2s, VALUE x, size_t taillen) { long i = RBIGNUM_LEN(x); size_t j; - int k; BDIGIT* ds = BDIGITS(x); BDIGIT_DBL num; char buf[SIZEOF_BDIGIT_DBL*CHAR_BIT], *p; @@ -4271,27 +4270,23 @@ big2str_orig(struct big2str_struct *b2s, VALUE x, size_t taillen) return; p = buf; j = sizeof(buf); - } - else { - power_cache_get_power(b2s->base, 0, &len); - p = b2s->ptr; - j = len; - } - - k = b2s->hbase2_numdigits; - while (k--) { - p[--j] = ruby_digitmap[num % b2s->base]; - num /= b2s->base; - if (j <= 0) break; - if (beginning && num == 0) break; - } - if (beginning) { - while (j < sizeof(buf) && buf[j] == '0') - j++; + do { + p[--j] = ruby_digitmap[num % b2s->base]; + num /= b2s->base; + } while (num); len = sizeof(buf) - j; big2str_alloc(b2s, len + taillen); MEMCPY(b2s->ptr, buf + j, char, len); } + else { + p = b2s->ptr; + j = b2s->hbase2_numdigits; + do { + p[--j] = ruby_digitmap[num % b2s->base]; + num /= b2s->base; + } while (j); + len = b2s->hbase2_numdigits; + } b2s->ptr += len; } |