[Python-checkins] python/dist/src/Include datetime.h,1.2,1.3

tim_one@users.sourceforge.net tim_one@users.sourceforge.net
2003年1月10日 16:15:56 -0800


Update of /cvsroot/python/python/dist/src/Include
In directory sc8-pr-cvs1:/tmp/cvs-serv4090/Include
Modified Files:
	datetime.h 
Log Message:
Minor fiddling to make the next part easier. Introduced an internal
HASTZINFO() macro.
Index: datetime.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/Include/datetime.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** datetime.h	10 Jan 2003 03:49:02 -0000	1.2
--- datetime.h	11 Jan 2003 00:15:53 -0000	1.3
***************
*** 28,49 ****
 #define _PyDateTime_DATETIME_DATASIZE 10
 
- #define _PyTZINFO_HEAD		\
- 	PyObject_HEAD		\
- 	long hashcode;		\
- 	char hastzinfo;		/* boolean flag */
 
 typedef struct
 {
 	PyObject_HEAD
! 	long hashcode;
! 	unsigned char data[_PyDateTime_DATE_DATASIZE];
! } PyDateTime_Date;
 
 typedef struct
 {
! 	PyObject_HEAD
! 	long hashcode;
! 	unsigned char data[_PyDateTime_DATETIME_DATASIZE];
! } PyDateTime_DateTime;
 
 typedef struct
--- 28,45 ----
 #define _PyDateTime_DATETIME_DATASIZE 10
 
 
 typedef struct
 {
 	PyObject_HEAD
! 	long hashcode;		/* -1 when unknown */
! 	int days;		/* -MAX_DELTA_DAYS <= days <= MAX_DELTA_DAYS */
! 	int seconds;		/* 0 <= seconds < 24*3600 is invariant */
! 	int microseconds;	/* 0 <= microseconds < 1000000 is invariant */
! } PyDateTime_Delta;
 
 typedef struct
 {
! 	PyObject_HEAD		/* a pure abstract base clase */
! } PyDateTime_TZInfo;
 
 typedef struct
***************
*** 51,60 ****
 	PyObject_HEAD
 	long hashcode;
! 	unsigned char data[_PyDateTime_DATETIME_DATASIZE];
! 	PyObject *tzinfo;
! } PyDateTime_DateTimeTZ;
 
 
 
 #define _PyDateTime_TIMEHEAD	\
 	_PyTZINFO_HEAD		\
--- 47,77 ----
 	PyObject_HEAD
 	long hashcode;
! 	unsigned char data[_PyDateTime_DATE_DATASIZE];
! } PyDateTime_Date;
! 
 
+ /* The datetime and time types have hashcodes, and an optional tzinfo member,
+ * present if and only if hastzinfo is true.
+ */
+ #define _PyTZINFO_HEAD		\
+ 	PyObject_HEAD		\
+ 	long hashcode;		\
+ 	char hastzinfo;		/* boolean flag */
 
+ /* No _PyDateTime_BaseTZInfo is allocated; it's just to have something
+ * convenient to cast to, when getting at the hastzinfo member of objects
+ * starting with _PyTZINFO_HEAD.
+ */
+ typedef struct
+ {
+ 	_PyTZINFO_HEAD
+ } _PyDateTime_BaseTZInfo;
 
+ /* All time objects are of PyDateTime_TimeType, but that can be allocated
+ * in two ways, with or without a tzinfo member. Without is the same as
+ * tzinfo == None, but consumes less memory. _PyDateTime_BaseTime is an
+ * internal struct used to allocate the right amount of space for the
+ * "without" case.
+ */
 #define _PyDateTime_TIMEHEAD	\
 	_PyTZINFO_HEAD		\
***************
*** 72,89 ****
 } PyDateTime_Time;		/* hastzinfo true */
 
 
 typedef struct
 {
 	PyObject_HEAD
! 	long hashcode;		/* -1 when unknown */
! 	int days;		/* -MAX_DELTA_DAYS <= days <= MAX_DELTA_DAYS */
! 	int seconds;		/* 0 <= seconds < 24*3600 is invariant */
! 	int microseconds;	/* 0 <= microseconds < 1000000 is invariant */
! } PyDateTime_Delta;
 
 typedef struct
 {
! 	PyObject_HEAD		/* a pure abstract base clase */
! } PyDateTime_TZInfo;
 
 /* Apply for date, datetime, and datetimetz instances. */
--- 89,109 ----
 } PyDateTime_Time;		/* hastzinfo true */
 
+ /* XXX The date type will be reworked similarly. */
 
 typedef struct
 {
 	PyObject_HEAD
! 	long hashcode;
! 	unsigned char data[_PyDateTime_DATETIME_DATASIZE];
! } PyDateTime_DateTime;
 
 typedef struct
 {
! 	PyObject_HEAD
! 	long hashcode;
! 	unsigned char data[_PyDateTime_DATETIME_DATASIZE];
! 	PyObject *tzinfo;
! } PyDateTime_DateTimeTZ;
! 
 
 /* Apply for date, datetime, and datetimetz instances. */

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