summaryrefslogtreecommitdiffstats
path: root/Include
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2003-01-11 00:15:54 (GMT)
committerTim Peters <tim.peters@gmail.com>2003-01-11 00:15:54 (GMT)
commita032d2eb7f547a8850f78f825c00298206f53f69 (patch)
tree3f74553acc23fb544ee40de1f7117f664ac074e0 /Include
parent74a032ea1f56a26dc8e91873a7e212b0c356b368 (diff)
downloadcpython-a032d2eb7f547a8850f78f825c00298206f53f69.zip
cpython-a032d2eb7f547a8850f78f825c00298206f53f69.tar.gz
cpython-a032d2eb7f547a8850f78f825c00298206f53f69.tar.bz2
Minor fiddling to make the next part easier. Introduced an internal
HASTZINFO() macro.
Diffstat (limited to 'Include')
-rw-r--r--Include/datetime.h62
1 files changed, 41 insertions, 21 deletions
diff --git a/Include/datetime.h b/Include/datetime.h
index 5c31162..4df0753 100644
--- a/Include/datetime.h
+++ b/Include/datetime.h
@@ -27,35 +27,52 @@
/* # of bytes for year, month, day, hour, minute, second, and usecond. */
#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;
+ 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
- long hashcode;
- unsigned char data[_PyDateTime_DATETIME_DATASIZE];
-} PyDateTime_DateTime;
+ PyObject_HEAD /* a pure abstract base clase */
+} PyDateTime_TZInfo;
typedef struct
{
PyObject_HEAD
long hashcode;
- unsigned char data[_PyDateTime_DATETIME_DATASIZE];
- PyObject *tzinfo;
-} PyDateTime_DateTimeTZ;
+ 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 \
unsigned char data[_PyDateTime_TIME_DATASIZE];
@@ -71,20 +88,23 @@ typedef struct
PyObject *tzinfo;
} PyDateTime_Time; /* hastzinfo true */
+/* XXX The date type will be reworked similarly. */
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;
+ long hashcode;
+ unsigned char data[_PyDateTime_DATETIME_DATASIZE];
+} PyDateTime_DateTime;
typedef struct
{
- PyObject_HEAD /* a pure abstract base clase */
-} PyDateTime_TZInfo;
+ PyObject_HEAD
+ long hashcode;
+ unsigned char data[_PyDateTime_DATETIME_DATASIZE];
+ PyObject *tzinfo;
+} PyDateTime_DateTimeTZ;
+
/* Apply for date, datetime, and datetimetz instances. */
#define PyDateTime_GET_YEAR(o) ((((PyDateTime_Date*)o)->data[0] << 8) | \