[Python-checkins] CVS: python/dist/src/Modules mpzmodule.c,2.35,2.36

Fred L. Drake fdrake@users.sourceforge.net
Mon, 12 Feb 2001 08:48:16 -0800


Update of /cvsroot/python/python/dist/src/Modules
In directory usw-pr-cvs1:/tmp/cvs-serv19598

Modified Files:
	mpzmodule.c 
Log Message:

Richard Fish <rfish@users.sourceforge.net>:
Fix the .binary() method of mpz objects for 64-bit systems.

[Also removed a lot of trailing whitespace elsewhere in the file. --FLD]

This closes SF patch #103547.


Index: mpzmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/mpzmodule.c,v
retrieving revision 2.35
retrieving revision 2.36
diff -C2 -r2.35 -r2.36
*** mpzmodule.c	2001/02/06 22:33:45	2.35
--- mpzmodule.c	2001/02/12 16:48:13	2.36
***************
*** 418,422 ****
  #endif /* def MPZ_TEST_DIV */
  	return (PyObject *)z;
! 	
  } /* mpz_divide() */
  
--- 418,422 ----
  #endif /* def MPZ_TEST_DIV */
  	return (PyObject *)z;
! 
  } /* mpz_divide() */
  
***************
*** 429,433 ****
  	mpzobject *z;
  
! 	
  	if ((
  #ifdef MPZ_SPARE_MALLOC	     
--- 429,433 ----
  	mpzobject *z;
  
! 
  	if ((
  #ifdef MPZ_SPARE_MALLOC	     
***************
*** 487,491 ****
  #endif /* def MPZ_TEST_DIV */
  	return (PyObject *)z;
! 	
  } /* mpz_remainder() */
  
--- 487,491 ----
  #endif /* def MPZ_TEST_DIV */
  	return (PyObject *)z;
! 
  } /* mpz_remainder() */
  
***************
*** 544,548 ****
  	(void)PyTuple_SetItem(z, 0, (PyObject *)x);
  	(void)PyTuple_SetItem(z, 1, (PyObject *)y);
! 	
  	return z;
  } /* mpz_div_and_mod() */
--- 544,548 ----
  	(void)PyTuple_SetItem(z, 0, (PyObject *)x);
  	(void)PyTuple_SetItem(z, 1, (PyObject *)y);
! 
  	return z;
  } /* mpz_div_and_mod() */
***************
*** 571,575 ****
  		return (PyObject *)mpz_value_one;
  	}
! 		
  	if (cmpres < 0) {
  		PyErr_SetString(PyExc_ValueError,
--- 571,575 ----
  		return (PyObject *)mpz_value_one;
  	}
! 
  	if (cmpres < 0) {
  		PyErr_SetString(PyExc_ValueError,
***************
*** 632,638 ****
  	if ((z = newmpzobject()) == NULL)
  		return NULL;
! 	
  	mpz_pow_ui(&z->mpz, &a->mpz, mpz_get_ui(&b->mpz));
! 	
  	return (PyObject *)z;
  } /* mpz_power() */
--- 632,638 ----
  	if ((z = newmpzobject()) == NULL)
  		return NULL;
! 
  	mpz_pow_ui(&z->mpz, &a->mpz, mpz_get_ui(&b->mpz));
! 
  	return (PyObject *)z;
  } /* mpz_power() */
***************
*** 644,648 ****
  	mpzobject *z;
  
! 	
  #ifdef MPZ_SPARE_MALLOC
  	if (mpz_cmp_ui(&v->mpz, (unsigned long int)0) == 0) {
--- 644,648 ----
  	mpzobject *z;
  
! 
  #ifdef MPZ_SPARE_MALLOC
  	if (mpz_cmp_ui(&v->mpz, (unsigned long int)0) == 0) {
***************
*** 674,678 ****
  	mpzobject *z;
  
! 	
  	if (mpz_cmp_ui(&v->mpz, (unsigned long int)0) >= 0) {
  		Py_INCREF(v);
--- 674,678 ----
  	mpzobject *z;
  
! 
  	if (mpz_cmp_ui(&v->mpz, (unsigned long int)0) >= 0) {
  		Py_INCREF(v);
***************
*** 792,796 ****
  {
  	MP_INT tmpmpz;
! 	
  	mpz_init(&tmpmpz);
  
--- 792,796 ----
  {
  	MP_INT tmpmpz;
! 
  	mpz_init(&tmpmpz);
  
***************
*** 855,859 ****
  		if (!PyArg_Parse(objp, "l", &lval))
  			return NULL;
! 		
  		if (lval == (long)0) {
  			Py_INCREF(mpz_value_zero);
--- 855,859 ----
  		if (!PyArg_Parse(objp, "l", &lval))
  			return NULL;
! 
  		if (lval == (long)0) {
  			Py_INCREF(mpz_value_zero);
***************
*** 872,876 ****
  		int i;
  		unsigned char isnegative;
! 		
  
  		if ((mpzp = newmpzobject()) == NULL)
--- 872,876 ----
  		int i;
  		unsigned char isnegative;
! 
  
  		if ((mpzp = newmpzobject()) == NULL)
***************
*** 879,883 ****
  		mpz_set_si(&mpzp->mpz, 0L);
  		mpz_init(&mplongdigit);
! 		
  		/* how we're gonna handle this? */
  		if ((isnegative =
--- 879,883 ----
  		mpz_set_si(&mpzp->mpz, 0L);
  		mpz_init(&mplongdigit);
! 
  		/* how we're gonna handle this? */
  		if ((isnegative =
***************
*** 910,914 ****
  		mpz_set_si(&mpzp->mpz, 0L);
  		mpz_init(&mplongdigit);
! 		
  		/* let's do it the same way as with the long conversion:
  		   without thinking how it can be faster (-: :-) */
--- 910,914 ----
  		mpz_set_si(&mpzp->mpz, 0L);
  		mpz_init(&mplongdigit);
! 
  		/* let's do it the same way as with the long conversion:
  		   without thinking how it can be faster (-: :-) */
***************
*** 974,978 ****
  	int tstres;
  
! 	
  	if (!PyArg_Parse(args, "(OOO)", &base, &exp, &mod))
  		return NULL;
--- 974,978 ----
  	int tstres;
  
! 
  	if (!PyArg_Parse(args, "(OOO)", &base, &exp, &mod))
  		return NULL;
***************
*** 1008,1012 ****
  		mpz_powm(&z->mpz, &mpzbase->mpz, &mpzexp->mpz, &mpzmod->mpz);
  	}
! 		
  	Py_DECREF(mpzbase);
  	Py_DECREF(mpzexp);
--- 1008,1012 ----
  		mpz_powm(&z->mpz, &mpzbase->mpz, &mpzexp->mpz, &mpzmod->mpz);
  	}
! 	
  	Py_DECREF(mpzbase);
  	Py_DECREF(mpzexp);
***************
*** 1024,1028 ****
  	mpzobject *z;
  
! 	
  	if (!PyArg_Parse(args, "(OO)", &op1, &op2))
  		return NULL;
--- 1024,1028 ----
  	mpzobject *z;
  
! 
  	if (!PyArg_Parse(args, "(OO)", &op1, &op2))
  		return NULL;
***************
*** 1053,1057 ****
  	mpzobject *g = NULL, *s = NULL, *t = NULL;
  
! 	
  	if (!PyArg_Parse(args, "(OO)", &op1, &op2))
  		return NULL;
--- 1053,1057 ----
  	mpzobject *g = NULL, *s = NULL, *t = NULL;
  
! 
  	if (!PyArg_Parse(args, "(OO)", &op1, &op2))
  		return NULL;
***************
*** 1092,1096 ****
  	mpzobject *z;
  
! 	
  	if (!PyArg_Parse(args, "O", &op))
  		return NULL;
--- 1092,1096 ----
  	mpzobject *z;
  
! 
  	if (!PyArg_Parse(args, "O", &op))
  		return NULL;
***************
*** 1117,1121 ****
  	mpzobject *root = NULL, *rem = NULL;
  
! 	
  	if (!PyArg_Parse(args, "O", &op))
  		return NULL;
--- 1117,1121 ----
  	mpzobject *root = NULL, *rem = NULL;
  
! 
  	if (!PyArg_Parse(args, "O", &op))
  		return NULL;
***************
*** 1190,1194 ****
  		else
  			mpz_mod(res, &s0, mod);
! 		
  #else /* def MPZ_MDIV_BUG */
  		mpz_mmod(res, &s0, mod);
--- 1190,1194 ----
  		else
  			mpz_mod(res, &s0, mod);
! 
  #else /* def MPZ_MDIV_BUG */
  		mpz_mmod(res, &s0, mod);
***************
*** 1213,1217 ****
  	mpzobject *z = NULL;
  
! 	
  	if (!PyArg_Parse(args, "(OOO)", &num, &den, &mod))
  		return NULL;
--- 1213,1217 ----
  	mpzobject *z = NULL;
  
! 
  	if (!PyArg_Parse(args, "(OOO)", &num, &den, &mod))
  		return NULL;
***************
*** 1226,1230 ****
  		return NULL;
  	}
! 	
  	mpz_divm(&z->mpz, &mpznum->mpz, &mpzden->mpz, &mpzmod->mpz);
  
--- 1226,1230 ----
  		return NULL;
  	}
! 
  	mpz_divm(&z->mpz, &mpznum->mpz, &mpzden->mpz, &mpzmod->mpz);
  
***************
*** 1341,1351 ****
  		ldcount--;
  	longobjp->ob_size = ldcount;
- 	
  
  	if (isnegative)
  		longobjp->ob_size = -longobjp->ob_size;
  
  	return (PyObject *)longobjp;
! 	
  } /* mpz_long() */
  
--- 1341,1351 ----
  		ldcount--;
  	longobjp->ob_size = ldcount;
  
+ 
  	if (isnegative)
  		longobjp->ob_size = -longobjp->ob_size;
  
  	return (PyObject *)longobjp;
! 
  } /* mpz_long() */
  
***************
*** 1353,1357 ****
  /* I would have avoided pow() anyways, so ... */
  static const double multiplier = 256.0 * 256.0 * 256.0 * 256.0;
! 	
  #ifdef MPZ_CONVERSIONS_AS_METHODS
  static PyObject *
--- 1353,1357 ----
  /* I would have avoided pow() anyways, so ... */
  static const double multiplier = 256.0 * 256.0 * 256.0 * 256.0;
! 
  #ifdef MPZ_CONVERSIONS_AS_METHODS
  static PyObject *
***************
*** 1374,1378 ****
  
  	i = (int)mpz_size(&self->mpz);
! 	
  	/* determine sign, and copy abs(self) to scratch var */
  	if ((isnegative = (mpz_cmp_ui(&self->mpz, (unsigned long int)0) < 0)))
--- 1374,1378 ----
  
  	i = (int)mpz_size(&self->mpz);
! 
  	/* determine sign, and copy abs(self) to scratch var */
  	if ((isnegative = (mpz_cmp_ui(&self->mpz, (unsigned long int)0) < 0)))
***************
*** 1405,1409 ****
  
  	return PyFloat_FromDouble(x);
! 	
  } /* mpz_float() */
  
--- 1405,1409 ----
  
  	return PyFloat_FromDouble(x);
! 
  } /* mpz_float() */
  
***************
*** 1420,1427 ****
  		return NULL;
  #endif /* def MPZ_CONVERSIONS_AS_METHODS */
! 	
  	return mpz_format((PyObject *)self, 16, (unsigned char)1);
  } /* mpz_hex() */
! 	
  #ifdef MPZ_CONVERSIONS_AS_METHODS
  static PyObject *
--- 1420,1427 ----
  		return NULL;
  #endif /* def MPZ_CONVERSIONS_AS_METHODS */
! 
  	return mpz_format((PyObject *)self, 16, (unsigned char)1);
  } /* mpz_hex() */
! 
  #ifdef MPZ_CONVERSIONS_AS_METHODS
  static PyObject *
***************
*** 1439,1443 ****
  	return mpz_format((PyObject *)self, 8, (unsigned char)1);
  } /* mpz_oct() */
! 	
  static PyObject *
  mpz_binary(mpzobject *self, PyObject *args)
--- 1439,1443 ----
  	return mpz_format((PyObject *)self, 8, (unsigned char)1);
  } /* mpz_oct() */
! 
  static PyObject *
  mpz_binary(mpzobject *self, PyObject *args)
***************
*** 1448,1452 ****
  	MP_INT mp;
  	unsigned long ldigit;
! 	
  	if (!PyArg_NoArgs(args))
  		return NULL;
--- 1448,1452 ----
  	MP_INT mp;
  	unsigned long ldigit;
! 
  	if (!PyArg_NoArgs(args))
  		return NULL;
***************
*** 1478,1481 ****
--- 1478,1487 ----
  		*cp++ = (unsigned char)((ldigit >>= 8) & 0xFF);
  		*cp++ = (unsigned char)((ldigit >>= 8) & 0xFF);
+ 		if (sizeof(ldigit) == 8 && BITS_PER_MP_LIMB == 64) {
+ 			*cp++ = (unsigned char)((ldigit >>= 8) & 0xFF);
+ 			*cp++ = (unsigned char)((ldigit >>= 8) & 0xFF);
+ 			*cp++ = (unsigned char)((ldigit >>= 8) & 0xFF);
+ 			*cp++ = (unsigned char)((ldigit >>= 8) & 0xFF);
+ 		}
  	}
  
***************
*** 1485,1489 ****
  	return (PyObject *)strobjp;
  } /* mpz_binary() */
! 	
  
  static PyMethodDef mpz_methods[] = {
--- 1491,1495 ----
  	return (PyObject *)strobjp;
  } /* mpz_binary() */
! 
  
  static PyMethodDef mpz_methods[] = {