Changeset 388 for python/vendor/current/Include/datetime.h
- Timestamp:
- Mar 19, 2014, 11:11:30 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
python/vendor/current/Include/datetime.h
r2 r388 12 12 * 13 13 * byte offset 14 * 0 15 * 2 16 * 3 17 * 4 18 * 5 19 * 6 20 * 7 14 * 0 year 2 bytes, 1-9999 15 * 2 month 1 byte, 1-12 16 * 3 day 1 byte, 1-31 17 * 4 hour 1 byte, 0-23 18 * 5 minute 1 byte, 0-59 19 * 6 second 1 byte, 0-59 20 * 7 usecond 3 bytes, 0-999999 21 21 * 10 22 22 */ … … 34 34 typedef struct 35 35 { 36 37 long hashcode;/* -1 when unknown */38 int days;/* -MAX_DELTA_DAYS <= days <= MAX_DELTA_DAYS */39 int seconds;/* 0 <= seconds < 24*3600 is invariant */40 int microseconds;/* 0 <= microseconds < 1000000 is invariant */36 PyObject_HEAD 37 long hashcode; /* -1 when unknown */ 38 int days; /* -MAX_DELTA_DAYS <= days <= MAX_DELTA_DAYS */ 39 int seconds; /* 0 <= seconds < 24*3600 is invariant */ 40 int microseconds; /* 0 <= microseconds < 1000000 is invariant */ 41 41 } PyDateTime_Delta; 42 42 43 43 typedef struct 44 44 { 45 PyObject_HEAD /* a pure abstract base clase*/45 PyObject_HEAD /* a pure abstract base class */ 46 46 } PyDateTime_TZInfo; 47 47 … … 50 50 * present if and only if hastzinfo is true. 51 51 */ 52 #define _PyTZINFO_HEAD 53 PyObject_HEAD\54 long hashcode;\55 char hastzinfo;/* boolean flag */52 #define _PyTZINFO_HEAD \ 53 PyObject_HEAD \ 54 long hashcode; \ 55 char hastzinfo; /* boolean flag */ 56 56 57 57 /* No _PyDateTime_BaseTZInfo is allocated; it's just to have something … … 61 61 typedef struct 62 62 { 63 63 _PyTZINFO_HEAD 64 64 } _PyDateTime_BaseTZInfo; 65 65 … … 70 70 * "without" case. 71 71 */ 72 #define _PyDateTime_TIMEHEAD 73 _PyTZINFO_HEAD\74 75 76 typedef struct 77 { 78 79 } _PyDateTime_BaseTime; 80 81 typedef struct 82 { 83 84 85 } PyDateTime_Time; 72 #define _PyDateTime_TIMEHEAD \ 73 _PyTZINFO_HEAD \ 74 unsigned char data[_PyDateTime_TIME_DATASIZE]; 75 76 typedef struct 77 { 78 _PyDateTime_TIMEHEAD 79 } _PyDateTime_BaseTime; /* hastzinfo false */ 80 81 typedef struct 82 { 83 _PyDateTime_TIMEHEAD 84 PyObject *tzinfo; 85 } PyDateTime_Time; /* hastzinfo true */ 86 86 87 87 … … 93 93 typedef struct 94 94 { 95 96 95 _PyTZINFO_HEAD 96 unsigned char data[_PyDateTime_DATE_DATASIZE]; 97 97 } PyDateTime_Date; 98 98 99 #define _PyDateTime_DATETIMEHEAD 100 _PyTZINFO_HEAD\101 102 103 typedef struct 104 { 105 106 } _PyDateTime_BaseDateTime; 107 108 typedef struct 109 { 110 111 112 } PyDateTime_DateTime; 99 #define _PyDateTime_DATETIMEHEAD \ 100 _PyTZINFO_HEAD \ 101 unsigned char data[_PyDateTime_DATETIME_DATASIZE]; 102 103 typedef struct 104 { 105 _PyDateTime_DATETIMEHEAD 106 } _PyDateTime_BaseDateTime; /* hastzinfo false */ 107 108 typedef struct 109 { 110 _PyDateTime_DATETIMEHEAD 111 PyObject *tzinfo; 112 } PyDateTime_DateTime; /* hastzinfo true */ 113 113 114 114 115 115 /* Apply for date and datetime instances. */ 116 116 #define PyDateTime_GET_YEAR(o) ((((PyDateTime_Date*)o)->data[0] << 8) | \ 117 117 ((PyDateTime_Date*)o)->data[1]) 118 118 #define PyDateTime_GET_MONTH(o) (((PyDateTime_Date*)o)->data[2]) 119 119 #define PyDateTime_GET_DAY(o) (((PyDateTime_Date*)o)->data[3]) … … 122 122 #define PyDateTime_DATE_GET_MINUTE(o) (((PyDateTime_DateTime*)o)->data[5]) 123 123 #define PyDateTime_DATE_GET_SECOND(o) (((PyDateTime_DateTime*)o)->data[6]) 124 #define PyDateTime_DATE_GET_MICROSECOND(o) 125 ((((PyDateTime_DateTime*)o)->data[7] << 16) |\126 (((PyDateTime_DateTime*)o)->data[8] << 8) |\127 124 #define PyDateTime_DATE_GET_MICROSECOND(o) \ 125 ((((PyDateTime_DateTime*)o)->data[7] << 16) | \ 126 (((PyDateTime_DateTime*)o)->data[8] << 8) | \ 127 ((PyDateTime_DateTime*)o)->data[9]) 128 128 129 129 /* Apply for time instances. */ … … 131 131 #define PyDateTime_TIME_GET_MINUTE(o) (((PyDateTime_Time*)o)->data[1]) 132 132 #define PyDateTime_TIME_GET_SECOND(o) (((PyDateTime_Time*)o)->data[2]) 133 #define PyDateTime_TIME_GET_MICROSECOND(o) 134 ((((PyDateTime_Time*)o)->data[3] << 16) |\135 (((PyDateTime_Time*)o)->data[4] << 8) |\136 133 #define PyDateTime_TIME_GET_MICROSECOND(o) \ 134 ((((PyDateTime_Time*)o)->data[3] << 16) | \ 135 (((PyDateTime_Time*)o)->data[4] << 8) | \ 136 ((PyDateTime_Time*)o)->data[5]) 137 137 138 138 … … 149 149 PyObject *(*Date_FromDate)(int, int, int, PyTypeObject*); 150 150 PyObject *(*DateTime_FromDateAndTime)(int, int, int, int, int, int, int, 151 151 PyObject*, PyTypeObject*); 152 152 PyObject *(*Time_FromTime)(int, int, int, int, PyObject*, PyTypeObject*); 153 153 PyObject *(*Delta_FromDelta)(int, int, int, int, PyTypeObject*); … … 159 159 } PyDateTime_CAPI; 160 160 161 #define PyDateTime_CAPSULE_NAME "datetime.datetime_CAPI" 162 161 163 162 164 /* "magic" constant used to partially protect against developer mistakes. */ … … 184 186 185 187 /* Define global variable for the C API and a macro for setting it. */ 186 static PyDateTime_CAPI *PyDateTimeAPI ;188 static PyDateTime_CAPI *PyDateTimeAPI = NULL; 187 189 188 190 #define PyDateTime_IMPORT \ 189 PyDateTimeAPI = (PyDateTime_CAPI*) PyCObject_Import("datetime", \ 190 "datetime_CAPI") 191 192 /* This macro would be used if PyCObject_ImportEx() was created. 193 #define PyDateTime_IMPORT \ 194 PyDateTimeAPI = (PyDateTime_CAPI*) PyCObject_ImportEx("datetime", \ 195 "datetime_CAPI", \ 196 DATETIME_API_MAGIC) 197 */ 191 PyDateTimeAPI = (PyDateTime_CAPI *)PyCapsule_Import(PyDateTime_CAPSULE_NAME, 0) 198 192 199 193 /* Macros for type checking when not building the Python core. */ … … 215 209 /* Macros for accessing constructors in a simplified fashion. */ 216 210 #define PyDate_FromDate(year, month, day) \ 217 211 PyDateTimeAPI->Date_FromDate(year, month, day, PyDateTimeAPI->DateType) 218 212 219 213 #define PyDateTime_FromDateAndTime(year, month, day, hour, min, sec, usec) \ 220 221 214 PyDateTimeAPI->DateTime_FromDateAndTime(year, month, day, hour, \ 215 min, sec, usec, Py_None, PyDateTimeAPI->DateTimeType) 222 216 223 217 #define PyTime_FromTime(hour, minute, second, usecond) \ 224 225 218 PyDateTimeAPI->Time_FromTime(hour, minute, second, usecond, \ 219 Py_None, PyDateTimeAPI->TimeType) 226 220 227 221 #define PyDelta_FromDSU(days, seconds, useconds) \ 228 229 222 PyDateTimeAPI->Delta_FromDelta(days, seconds, useconds, 1, \ 223 PyDateTimeAPI->DeltaType) 230 224 231 225 /* Macros supporting the DB API. */ 232 226 #define PyDateTime_FromTimestamp(args) \ 233 234 227 PyDateTimeAPI->DateTime_FromTimestamp( \ 228 (PyObject*) (PyDateTimeAPI->DateTimeType), args, NULL) 235 229 236 230 #define PyDate_FromTimestamp(args) \ 237 238 239 240 #endif 231 PyDateTimeAPI->Date_FromTimestamp( \ 232 (PyObject*) (PyDateTimeAPI->DateType), args) 233 234 #endif /* Py_BUILD_CORE */ 241 235 242 236 #ifdef __cplusplus
Note:
See TracChangeset
for help on using the changeset viewer.