From: Alex M. <al...@us...> - 2005-11-07 05:29:33
|
Update of /cvsroot/gmpy/gmpy/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16850/src Modified Files: gmpy.c Log Message: Add floordiv and truediv implementations to mpz, mpq, mpf (unittests still need to be added). Index: gmpy.c =================================================================== RCS file: /cvsroot/gmpy/gmpy/src/gmpy.c,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** gmpy.c 7 Nov 2005 04:07:04 -0000 1.13 --- gmpy.c 7 Nov 2005 05:29:24 -0000 1.14 *************** *** 3508,3511 **** --- 3508,3560 ---- static PyObject * + Pympany_truediv(PyObject *a, PyObject *b) + { + PympfObject *pa = anynum2mpf(a, 0); + PympfObject *pb = anynum2mpf(b, 0); + PyObject *result; + if (!pa || !pb) return 0; + result = Pympf_div(pa, pb); + Py_DECREF((PyObject*)pa); + Py_DECREF((PyObject*)pb); + return result; + } + + static PyObject * + Pympq_floordiv(PyObject *a, PyObject *b) + { + PympfObject *pa = anynum2mpf(a, 0); + PympfObject *pb = anynum2mpf(b, 0); + PyObject *result; + if (!pa || !pb) return 0; + result = Pympf_div(pa, pb); + Py_DECREF((PyObject*)pa); + Py_DECREF((PyObject*)pb); + if( result) { + result = (PyObject*) anynum2mpz(result); + if (result) + result = (PyObject*) anynum2mpq(result); + } + return result; + } + + static PyObject * + Pympf_floordiv(PyObject *a, PyObject *b) + { + PympfObject *pa = anynum2mpf(a, 0); + PympfObject *pb = anynum2mpf(b, 0); + PyObject *result; + if (!pa || !pb) return 0; + result = Pympf_div(pa, pb); + Py_DECREF((PyObject*)pa); + Py_DECREF((PyObject*)pb); + if( result) { + result = (PyObject*) anynum2mpz(result); + if (result) + result = (PyObject*) anynum2mpf(result, 0); + } + return result; + } + + static PyObject * Pympz_divmod(PympzObject *a, PympzObject *b) { *************** *** 5287,5292 **** 0, /* binaryfunc nb_inplace_or; */ ! (binaryfunc) Pympz_div, /* binaryfunc nb_floor_divide; */ ! (binaryfunc) Pympf_div, /* binaryfunc nb_true_divide; */ 0, /* binaryfunc nb_inplace_floor_divide; */ 0, /* binaryfunc nb_inplace_true_divide; */ --- 5336,5341 ---- 0, /* binaryfunc nb_inplace_or; */ ! (binaryfunc) Pympz_div, /* binaryfunc nb_floor_divide; */ ! (binaryfunc) Pympany_truediv, /* binaryfunc nb_true_divide; */ 0, /* binaryfunc nb_inplace_floor_divide; */ 0, /* binaryfunc nb_inplace_true_divide; */ *************** *** 5318,5321 **** --- 5367,5386 ---- (unaryfunc) 0, /* no oct */ (unaryfunc) 0, /* no hex */ + 0, /* binaryfunc nb_inplace_add; */ + 0, /* binaryfunc nb_inplace_subtract; */ + 0, /* binaryfunc nb_inplace_multiply; */ + 0, /* binaryfunc nb_inplace_divide; */ + 0, /* binaryfunc nb_inplace_remainder; */ + 0, /* ternaryfunc nb_inplace_power; */ + 0, /* binaryfunc nb_inplace_lshift; */ + 0, /* binaryfunc nb_inplace_rshift; */ + 0, /* binaryfunc nb_inplace_and; */ + 0, /* binaryfunc nb_inplace_xor; */ + 0, /* binaryfunc nb_inplace_or; */ + + (binaryfunc) Pympq_floordiv, /* binaryfunc nb_floor_divide; */ + (binaryfunc) Pympany_truediv, /* binaryfunc nb_true_divide; */ + 0, /* binaryfunc nb_inplace_floor_divide; */ + 0, /* binaryfunc nb_inplace_true_divide; */ }; *************** *** 5345,5348 **** --- 5410,5429 ---- (unaryfunc) 0, /* no oct */ (unaryfunc) 0, /* no hex */ + 0, /* binaryfunc nb_inplace_add; */ + 0, /* binaryfunc nb_inplace_subtract; */ + 0, /* binaryfunc nb_inplace_multiply; */ + 0, /* binaryfunc nb_inplace_divide; */ + 0, /* binaryfunc nb_inplace_remainder; */ + 0, /* ternaryfunc nb_inplace_power; */ + 0, /* binaryfunc nb_inplace_lshift; */ + 0, /* binaryfunc nb_inplace_rshift; */ + 0, /* binaryfunc nb_inplace_and; */ + 0, /* binaryfunc nb_inplace_xor; */ + 0, /* binaryfunc nb_inplace_or; */ + + (binaryfunc) Pympf_floordiv, /* binaryfunc nb_floor_divide; */ + (binaryfunc) Pympany_truediv, /* binaryfunc nb_true_divide; */ + 0, /* binaryfunc nb_inplace_floor_divide; */ + 0, /* binaryfunc nb_inplace_true_divide; */ }; |