[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. */