annotate DEPENDENCIES/mingw32/Python27/include/datetime.h @ 118:770eb830ec19 emscripten

Typo fix
author Chris Cannam
date Wed, 18 May 2016 16:14:08 +0100
parents 2a2c65a20a8b
children
rev   line source
Chris@87 1 /* datetime.h
Chris@87 2 */
Chris@87 3
Chris@87 4 #ifndef DATETIME_H
Chris@87 5 #define DATETIME_H
Chris@87 6 #ifdef __cplusplus
Chris@87 7 extern "C" {
Chris@87 8 #endif
Chris@87 9
Chris@87 10 /* Fields are packed into successive bytes, each viewed as unsigned and
Chris@87 11 * big-endian, unless otherwise noted:
Chris@87 12 *
Chris@87 13 * byte offset
Chris@87 14 * 0 year 2 bytes, 1-9999
Chris@87 15 * 2 month 1 byte, 1-12
Chris@87 16 * 3 day 1 byte, 1-31
Chris@87 17 * 4 hour 1 byte, 0-23
Chris@87 18 * 5 minute 1 byte, 0-59
Chris@87 19 * 6 second 1 byte, 0-59
Chris@87 20 * 7 usecond 3 bytes, 0-999999
Chris@87 21 * 10
Chris@87 22 */
Chris@87 23
Chris@87 24 /* # of bytes for year, month, and day. */
Chris@87 25 #define _PyDateTime_DATE_DATASIZE 4
Chris@87 26
Chris@87 27 /* # of bytes for hour, minute, second, and usecond. */
Chris@87 28 #define _PyDateTime_TIME_DATASIZE 6
Chris@87 29
Chris@87 30 /* # of bytes for year, month, day, hour, minute, second, and usecond. */
Chris@87 31 #define _PyDateTime_DATETIME_DATASIZE 10
Chris@87 32
Chris@87 33
Chris@87 34 typedef struct
Chris@87 35 {
Chris@87 36 PyObject_HEAD
Chris@87 37 long hashcode; /* -1 when unknown */
Chris@87 38 int days; /* -MAX_DELTA_DAYS <= days <= MAX_DELTA_DAYS */
Chris@87 39 int seconds; /* 0 <= seconds < 24*3600 is invariant */
Chris@87 40 int microseconds; /* 0 <= microseconds < 1000000 is invariant */
Chris@87 41 } PyDateTime_Delta;
Chris@87 42
Chris@87 43 typedef struct
Chris@87 44 {
Chris@87 45 PyObject_HEAD /* a pure abstract base class */
Chris@87 46 } PyDateTime_TZInfo;
Chris@87 47
Chris@87 48
Chris@87 49 /* The datetime and time types have hashcodes, and an optional tzinfo member,
Chris@87 50 * present if and only if hastzinfo is true.
Chris@87 51 */
Chris@87 52 #define _PyTZINFO_HEAD \
Chris@87 53 PyObject_HEAD \
Chris@87 54 long hashcode; \
Chris@87 55 char hastzinfo; /* boolean flag */
Chris@87 56
Chris@87 57 /* No _PyDateTime_BaseTZInfo is allocated; it's just to have something
Chris@87 58 * convenient to cast to, when getting at the hastzinfo member of objects
Chris@87 59 * starting with _PyTZINFO_HEAD.
Chris@87 60 */
Chris@87 61 typedef struct
Chris@87 62 {
Chris@87 63 _PyTZINFO_HEAD
Chris@87 64 } _PyDateTime_BaseTZInfo;
Chris@87 65
Chris@87 66 /* All time objects are of PyDateTime_TimeType, but that can be allocated
Chris@87 67 * in two ways, with or without a tzinfo member. Without is the same as
Chris@87 68 * tzinfo == None, but consumes less memory. _PyDateTime_BaseTime is an
Chris@87 69 * internal struct used to allocate the right amount of space for the
Chris@87 70 * "without" case.
Chris@87 71 */
Chris@87 72 #define _PyDateTime_TIMEHEAD \
Chris@87 73 _PyTZINFO_HEAD \
Chris@87 74 unsigned char data[_PyDateTime_TIME_DATASIZE];
Chris@87 75
Chris@87 76 typedef struct
Chris@87 77 {
Chris@87 78 _PyDateTime_TIMEHEAD
Chris@87 79 } _PyDateTime_BaseTime; /* hastzinfo false */
Chris@87 80
Chris@87 81 typedef struct
Chris@87 82 {
Chris@87 83 _PyDateTime_TIMEHEAD
Chris@87 84 PyObject *tzinfo;
Chris@87 85 } PyDateTime_Time; /* hastzinfo true */
Chris@87 86
Chris@87 87
Chris@87 88 /* All datetime objects are of PyDateTime_DateTimeType, but that can be
Chris@87 89 * allocated in two ways too, just like for time objects above. In addition,
Chris@87 90 * the plain date type is a base class for datetime, so it must also have
Chris@87 91 * a hastzinfo member (although it's unused there).
Chris@87 92 */
Chris@87 93 typedef struct
Chris@87 94 {
Chris@87 95 _PyTZINFO_HEAD
Chris@87 96 unsigned char data[_PyDateTime_DATE_DATASIZE];
Chris@87 97 } PyDateTime_Date;
Chris@87 98
Chris@87 99 #define _PyDateTime_DATETIMEHEAD \
Chris@87 100 _PyTZINFO_HEAD \
Chris@87 101 unsigned char data[_PyDateTime_DATETIME_DATASIZE];
Chris@87 102
Chris@87 103 typedef struct
Chris@87 104 {
Chris@87 105 _PyDateTime_DATETIMEHEAD
Chris@87 106 } _PyDateTime_BaseDateTime; /* hastzinfo false */
Chris@87 107
Chris@87 108 typedef struct
Chris@87 109 {
Chris@87 110 _PyDateTime_DATETIMEHEAD
Chris@87 111 PyObject *tzinfo;
Chris@87 112 } PyDateTime_DateTime; /* hastzinfo true */
Chris@87 113
Chris@87 114
Chris@87 115 /* Apply for date and datetime instances. */
Chris@87 116 #define PyDateTime_GET_YEAR(o) ((((PyDateTime_Date*)o)->data[0] << 8) | \
Chris@87 117 ((PyDateTime_Date*)o)->data[1])
Chris@87 118 #define PyDateTime_GET_MONTH(o) (((PyDateTime_Date*)o)->data[2])
Chris@87 119 #define PyDateTime_GET_DAY(o) (((PyDateTime_Date*)o)->data[3])
Chris@87 120
Chris@87 121 #define PyDateTime_DATE_GET_HOUR(o) (((PyDateTime_DateTime*)o)->data[4])
Chris@87 122 #define PyDateTime_DATE_GET_MINUTE(o) (((PyDateTime_DateTime*)o)->data[5])
Chris@87 123 #define PyDateTime_DATE_GET_SECOND(o) (((PyDateTime_DateTime*)o)->data[6])
Chris@87 124 #define PyDateTime_DATE_GET_MICROSECOND(o) \
Chris@87 125 ((((PyDateTime_DateTime*)o)->data[7] << 16) | \
Chris@87 126 (((PyDateTime_DateTime*)o)->data[8] << 8) | \
Chris@87 127 ((PyDateTime_DateTime*)o)->data[9])
Chris@87 128
Chris@87 129 /* Apply for time instances. */
Chris@87 130 #define PyDateTime_TIME_GET_HOUR(o) (((PyDateTime_Time*)o)->data[0])
Chris@87 131 #define PyDateTime_TIME_GET_MINUTE(o) (((PyDateTime_Time*)o)->data[1])
Chris@87 132 #define PyDateTime_TIME_GET_SECOND(o) (((PyDateTime_Time*)o)->data[2])
Chris@87 133 #define PyDateTime_TIME_GET_MICROSECOND(o) \
Chris@87 134 ((((PyDateTime_Time*)o)->data[3] << 16) | \
Chris@87 135 (((PyDateTime_Time*)o)->data[4] << 8) | \
Chris@87 136 ((PyDateTime_Time*)o)->data[5])
Chris@87 137
Chris@87 138
Chris@87 139 /* Define structure for C API. */
Chris@87 140 typedef struct {
Chris@87 141 /* type objects */
Chris@87 142 PyTypeObject *DateType;
Chris@87 143 PyTypeObject *DateTimeType;
Chris@87 144 PyTypeObject *TimeType;
Chris@87 145 PyTypeObject *DeltaType;
Chris@87 146 PyTypeObject *TZInfoType;
Chris@87 147
Chris@87 148 /* constructors */
Chris@87 149 PyObject *(*Date_FromDate)(int, int, int, PyTypeObject*);
Chris@87 150 PyObject *(*DateTime_FromDateAndTime)(int, int, int, int, int, int, int,
Chris@87 151 PyObject*, PyTypeObject*);
Chris@87 152 PyObject *(*Time_FromTime)(int, int, int, int, PyObject*, PyTypeObject*);
Chris@87 153 PyObject *(*Delta_FromDelta)(int, int, int, int, PyTypeObject*);
Chris@87 154
Chris@87 155 /* constructors for the DB API */
Chris@87 156 PyObject *(*DateTime_FromTimestamp)(PyObject*, PyObject*, PyObject*);
Chris@87 157 PyObject *(*Date_FromTimestamp)(PyObject*, PyObject*);
Chris@87 158
Chris@87 159 } PyDateTime_CAPI;
Chris@87 160
Chris@87 161 #define PyDateTime_CAPSULE_NAME "datetime.datetime_CAPI"
Chris@87 162
Chris@87 163
Chris@87 164 /* "magic" constant used to partially protect against developer mistakes. */
Chris@87 165 #define DATETIME_API_MAGIC 0x414548d5
Chris@87 166
Chris@87 167 #ifdef Py_BUILD_CORE
Chris@87 168
Chris@87 169 /* Macros for type checking when building the Python core. */
Chris@87 170 #define PyDate_Check(op) PyObject_TypeCheck(op, &PyDateTime_DateType)
Chris@87 171 #define PyDate_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DateType)
Chris@87 172
Chris@87 173 #define PyDateTime_Check(op) PyObject_TypeCheck(op, &PyDateTime_DateTimeType)
Chris@87 174 #define PyDateTime_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DateTimeType)
Chris@87 175
Chris@87 176 #define PyTime_Check(op) PyObject_TypeCheck(op, &PyDateTime_TimeType)
Chris@87 177 #define PyTime_CheckExact(op) (Py_TYPE(op) == &PyDateTime_TimeType)
Chris@87 178
Chris@87 179 #define PyDelta_Check(op) PyObject_TypeCheck(op, &PyDateTime_DeltaType)
Chris@87 180 #define PyDelta_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DeltaType)
Chris@87 181
Chris@87 182 #define PyTZInfo_Check(op) PyObject_TypeCheck(op, &PyDateTime_TZInfoType)
Chris@87 183 #define PyTZInfo_CheckExact(op) (Py_TYPE(op) == &PyDateTime_TZInfoType)
Chris@87 184
Chris@87 185 #else
Chris@87 186
Chris@87 187 /* Define global variable for the C API and a macro for setting it. */
Chris@87 188 static PyDateTime_CAPI *PyDateTimeAPI = NULL;
Chris@87 189
Chris@87 190 #define PyDateTime_IMPORT \
Chris@87 191 PyDateTimeAPI = (PyDateTime_CAPI *)PyCapsule_Import(PyDateTime_CAPSULE_NAME, 0)
Chris@87 192
Chris@87 193 /* Macros for type checking when not building the Python core. */
Chris@87 194 #define PyDate_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateType)
Chris@87 195 #define PyDate_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateType)
Chris@87 196
Chris@87 197 #define PyDateTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateTimeType)
Chris@87 198 #define PyDateTime_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateTimeType)
Chris@87 199
Chris@87 200 #define PyTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TimeType)
Chris@87 201 #define PyTime_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->TimeType)
Chris@87 202
Chris@87 203 #define PyDelta_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DeltaType)
Chris@87 204 #define PyDelta_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DeltaType)
Chris@87 205
Chris@87 206 #define PyTZInfo_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TZInfoType)
Chris@87 207 #define PyTZInfo_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->TZInfoType)
Chris@87 208
Chris@87 209 /* Macros for accessing constructors in a simplified fashion. */
Chris@87 210 #define PyDate_FromDate(year, month, day) \
Chris@87 211 PyDateTimeAPI->Date_FromDate(year, month, day, PyDateTimeAPI->DateType)
Chris@87 212
Chris@87 213 #define PyDateTime_FromDateAndTime(year, month, day, hour, min, sec, usec) \
Chris@87 214 PyDateTimeAPI->DateTime_FromDateAndTime(year, month, day, hour, \
Chris@87 215 min, sec, usec, Py_None, PyDateTimeAPI->DateTimeType)
Chris@87 216
Chris@87 217 #define PyTime_FromTime(hour, minute, second, usecond) \
Chris@87 218 PyDateTimeAPI->Time_FromTime(hour, minute, second, usecond, \
Chris@87 219 Py_None, PyDateTimeAPI->TimeType)
Chris@87 220
Chris@87 221 #define PyDelta_FromDSU(days, seconds, useconds) \
Chris@87 222 PyDateTimeAPI->Delta_FromDelta(days, seconds, useconds, 1, \
Chris@87 223 PyDateTimeAPI->DeltaType)
Chris@87 224
Chris@87 225 /* Macros supporting the DB API. */
Chris@87 226 #define PyDateTime_FromTimestamp(args) \
Chris@87 227 PyDateTimeAPI->DateTime_FromTimestamp( \
Chris@87 228 (PyObject*) (PyDateTimeAPI->DateTimeType), args, NULL)
Chris@87 229
Chris@87 230 #define PyDate_FromTimestamp(args) \
Chris@87 231 PyDateTimeAPI->Date_FromTimestamp( \
Chris@87 232 (PyObject*) (PyDateTimeAPI->DateType), args)
Chris@87 233
Chris@87 234 #endif /* Py_BUILD_CORE */
Chris@87 235
Chris@87 236 #ifdef __cplusplus
Chris@87 237 }
Chris@87 238 #endif
Chris@87 239 #endif