From 2a38d9043e2eb16d7f3fcf3460dec5995a3195c6 Mon Sep 17 00:00:00 2001 From: akr Date: Fri, 31 May 2013 14:57:03 +0000 Subject: * bignum.c (calc_hbase): Extracted from rb_big2str0. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41005 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- bignum.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'bignum.c') diff --git a/bignum.c b/bignum.c index 05f3abe41f..a19560a609 100644 --- a/bignum.c +++ b/bignum.c @@ -1119,6 +1119,23 @@ big2str_karatsuba(VALUE x, int base, char* ptr, return lh + ll; } +static void +calc_hbase(int base, long *hbase_p, int *hbase_numdigits_p) +{ + long hbase; + int hbase_numdigits; + + hbase = base*base; + hbase_numdigits = 2; +#if SIZEOF_BDIGITS > 2 + hbase *= hbase; + hbase_numdigits *= 2; +#endif + + *hbase_p = hbase; + *hbase_numdigits_p = hbase_numdigits; +} + VALUE rb_big2str0(VALUE x, int base, int trim) { @@ -1144,12 +1161,7 @@ rb_big2str0(VALUE x, int base, int trim) ptr = RSTRING_PTR(ss); ptr[0] = RBIGNUM_SIGN(x) ? '+' : '-'; - hbase = base*base; - hbase_numdigits = 2; -#if SIZEOF_BDIGITS > 2 - hbase *= hbase; - hbase_numdigits *= 2; -#endif + calc_hbase(base, &hbase, &hbase_numdigits); off = !(trim && RBIGNUM_SIGN(x)); /* erase plus sign if trim */ xx = rb_big_clone(x); RBIGNUM_SET_SIGN(xx, 1); -- cgit v1.2.3