Author: Armin Rigo <ar...@tunes.org> Branch: gmp Changeset: r48269:5308f097341b Date: 2011-10-20 16:44 +0200 http://bitbucket.org/pypy/pypy/changeset/5308f097341b/
Log: Some more operations. diff --git a/pypy/rlib/_rbigint_gmp.py b/pypy/rlib/_rbigint_gmp.py --- a/pypy/rlib/_rbigint_gmp.py +++ b/pypy/rlib/_rbigint_gmp.py @@ -23,10 +23,13 @@ mpz_add = external("mpz_add", [mpz_ptr, mpz_ptr, mpz_ptr]) mpz_sub = external("mpz_sub", [mpz_ptr, mpz_ptr, mpz_ptr]) mpz_mul = external("mpz_mul", [mpz_ptr, mpz_ptr, mpz_ptr]) +mpz_fdiv_q = external("mpz_fdiv_q", [mpz_ptr, mpz_ptr, mpz_ptr]) +mpz_fdiv_r = external("mpz_fdiv_r", [mpz_ptr, mpz_ptr, mpz_ptr]) _free = external("free", [rffi.CCHARP]) # ____________________________________________________________ + def _fromint(value): r = lltype.malloc(RBIGINT) mpz_init_set_si(r.mpz, value) @@ -51,33 +54,35 @@ mpz_init_set_str(r.mpz, str(l), 10) return r - def tolong(r): - return mpz_get_si(r.mpz) - - def add(r1, r2): - r = lltype.malloc(RBIGINT) - mpz_init(r.mpz) - mpz_add(r.mpz, r1.mpz, r2.mpz) - return r - - def sub(r1, r2): - r = lltype.malloc(RBIGINT) - mpz_init(r.mpz) - mpz_sub(r.mpz, r1.mpz, r2.mpz) - return r - - def mul(r1, r2): - r = lltype.malloc(RBIGINT) - mpz_init(r.mpz) - mpz_mul(r.mpz, r1.mpz, r2.mpz) - return r - def str(r): p = mpz_get_str(lltype.nullptr(rffi.CCHARP.TO), 10, r.mpz) result = rffi.charp2str(p) _free(p) return result + def tolong(r): + return mpz_get_si(r.mpz) + + def _binary(opname): + mpz_op = globals()['mpz_' + opname] + def operation(r1, r2): + r = lltype.malloc(RBIGINT) + mpz_init(r.mpz) + mpz_op(r.mpz, r1.mpz, r2.mpz) + return r + operation.__name__ = opname + return operation + + add = _binary('add') + sub = _binary('sub') + mul = _binary('mul') + div = _binary('fdiv_q') + floordiv = div + mod = _binary('fdiv_r') + + def truediv(r1, r2): + import py; py.test.skip("XXX") + _adtmeths = dict([(key, value) for (key, value) in _adtmeths.__dict__.items() if not key.startswith('_')]) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit