[Python-checkins] python/nondist/sandbox/datetime obj_timetz.c,1.12,1.13

tim_one@users.sourceforge.net tim_one@users.sourceforge.net
2002年12月11日 17:30:50 -0800


Update of /cvsroot/python/python/nondist/sandbox/datetime
In directory sc8-pr-cvs1:/tmp/cvs-serv16595
Modified Files:
	obj_timetz.c 
Log Message:
More.
Index: obj_timetz.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/obj_timetz.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
*** obj_timetz.c	12 Dec 2002 01:13:36 -0000	1.12
--- obj_timetz.c	12 Dec 2002 01:30:47 -0000	1.13
***************
*** 224,234 ****
 timetz_hash(PyDateTime_TimeTZ *self)
 {
! 	if (self->hashcode == -1) {
! 		PyObject *temp = timetz_getstate(self);
! 		if (temp != NULL) {
! 			self->hashcode = PyObject_Hash(temp);
! 			Py_DECREF(temp);
! 		}
 	}
 	return self->hashcode;
 }
--- 224,254 ----
 timetz_hash(PyDateTime_TimeTZ *self)
 {
! 	long offset;
! 	int none;
! 
! 	if (self->hashcode != -1)
! 		goto Done;
! 
! 	self->hashcode = time_hash((PyDateTime_Time *)self);
! 	if (self->tzinfo == Py_None ||
! 	 (self->hashcode == -1 && PyErr_Occurred()))
! 		goto Done;
! 
! 	offset = get_utcoffset(self->tzinfo, (PyObject *)self, &none);
! 	if (offset == -1 && PyErr_Occurred()) {
! 		self->hashcode = -1;
! 		goto Done;
 	}
+ 	if (none)	/* utcoffset returned None */
+ 		goto Done;
+ 
+ 	/* It doesn't really matter what we do now. Scrambling the bits
+ 	 * a little based on the offset is as good as anything.
+ 	 */
+ 	self->hashcode ^= offset * 1319;
+ 	if (self->hashcode == -1)
+ 		self->hashcode = -2;
+ 
+ Done:
 	return self->hashcode;
 }

AltStyle によって変換されたページ (->オリジナル) /