Spaces:
Runtime error
Runtime error
| /* datetime.h | |
| */ | |
| extern "C" { | |
| /* Fields are packed into successive bytes, each viewed as unsigned and | |
| * big-endian, unless otherwise noted: | |
| * | |
| * byte offset | |
| * 0 year 2 bytes, 1-9999 | |
| * 2 month 1 byte, 1-12 | |
| * 3 day 1 byte, 1-31 | |
| * 4 hour 1 byte, 0-23 | |
| * 5 minute 1 byte, 0-59 | |
| * 6 second 1 byte, 0-59 | |
| * 7 usecond 3 bytes, 0-999999 | |
| * 10 | |
| */ | |
| /* # of bytes for year, month, and day. */ | |
| /* # of bytes for hour, minute, second, and usecond. */ | |
| /* # of bytes for year, month, day, hour, minute, second, and usecond. */ | |
| typedef struct | |
| { | |
| PyObject_HEAD | |
| Py_hash_t 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 class */ | |
| } PyDateTime_TZInfo; | |
| /* The datetime and time types have hashcodes, and an optional tzinfo member, | |
| * present if and only if hastzinfo is true. | |
| */ | |
| /* 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. | |
| */ | |
| typedef struct | |
| { | |
| _PyDateTime_TIMEHEAD | |
| } _PyDateTime_BaseTime; /* hastzinfo false */ | |
| typedef struct | |
| { | |
| _PyDateTime_TIMEHEAD | |
| unsigned char fold; | |
| PyObject *tzinfo; | |
| } PyDateTime_Time; /* hastzinfo true */ | |
| /* All datetime objects are of PyDateTime_DateTimeType, but that can be | |
| * allocated in two ways too, just like for time objects above. In addition, | |
| * the plain date type is a base class for datetime, so it must also have | |
| * a hastzinfo member (although it's unused there). | |
| */ | |
| typedef struct | |
| { | |
| _PyTZINFO_HEAD | |
| unsigned char data[_PyDateTime_DATE_DATASIZE]; | |
| } PyDateTime_Date; | |
| typedef struct | |
| { | |
| _PyDateTime_DATETIMEHEAD | |
| } _PyDateTime_BaseDateTime; /* hastzinfo false */ | |
| typedef struct | |
| { | |
| _PyDateTime_DATETIMEHEAD | |
| unsigned char fold; | |
| PyObject *tzinfo; | |
| } PyDateTime_DateTime; /* hastzinfo true */ | |
| /* Apply for date and datetime instances. */ | |
| // o is a pointer to a time or a datetime object. | |
| /* Apply for time instances. */ | |
| /* Apply for time delta instances */ | |
| /* Define structure for C API. */ | |
| typedef struct { | |
| /* type objects */ | |
| PyTypeObject *DateType; | |
| PyTypeObject *DateTimeType; | |
| PyTypeObject *TimeType; | |
| PyTypeObject *DeltaType; | |
| PyTypeObject *TZInfoType; | |
| /* singletons */ | |
| PyObject *TimeZone_UTC; | |
| /* constructors */ | |
| PyObject *(*Date_FromDate)(int, int, int, PyTypeObject*); | |
| PyObject *(*DateTime_FromDateAndTime)(int, int, int, int, int, int, int, | |
| PyObject*, PyTypeObject*); | |
| PyObject *(*Time_FromTime)(int, int, int, int, PyObject*, PyTypeObject*); | |
| PyObject *(*Delta_FromDelta)(int, int, int, int, PyTypeObject*); | |
| PyObject *(*TimeZone_FromTimeZone)(PyObject *offset, PyObject *name); | |
| /* constructors for the DB API */ | |
| PyObject *(*DateTime_FromTimestamp)(PyObject*, PyObject*, PyObject*); | |
| PyObject *(*Date_FromTimestamp)(PyObject*, PyObject*); | |
| /* PEP 495 constructors */ | |
| PyObject *(*DateTime_FromDateAndTimeAndFold)(int, int, int, int, int, int, int, | |
| PyObject*, int, PyTypeObject*); | |
| PyObject *(*Time_FromTimeAndFold)(int, int, int, int, PyObject*, int, PyTypeObject*); | |
| } PyDateTime_CAPI; | |
| /* This block is only used as part of the public API and should not be | |
| * included in _datetimemodule.c, which does not use the C API capsule. | |
| * See bpo-35081 for more details. | |
| * */ | |
| /* Define global variable for the C API and a macro for setting it. */ | |
| static PyDateTime_CAPI *PyDateTimeAPI = NULL; | |
| /* Macro for access to the UTC singleton */ | |
| /* Macros for type checking when not building the Python core. */ | |
| /* Macros for accessing constructors in a simplified fashion. */ | |
| /* Macros supporting the DB API. */ | |
| } | |