this repo has no description
at trunk 135 lines 5.1 kB view raw
1// Copyright (c) Facebook, Inc. and its affiliates. (http://www.facebook.com) 2#include "cpython-func.h" 3 4#include "capi.h" 5#include "datetime.h" 6#include "globals.h" 7#include "handles-decl.h" 8#include "handles.h" 9#include "runtime.h" 10#include "thread.h" 11 12using namespace py; 13 14PY_EXPORT void* PyDateTimeAPI_Func(void) { 15 PyObject* module = PyState_FindModule(&datetimemodule); 16 if (module == nullptr) return nullptr; 17 return &(datetime_state(module)->CAPI); 18} 19 20PY_EXPORT int PyDateTime_Check_Func(PyObject* obj) { 21 return PyObject_TypeCheck(obj, datetime_global(CAPI.DateTimeType)); 22} 23 24PY_EXPORT int PyDateTime_DATE_GET_HOUR_Func(PyObject* obj) { 25 DCHECK(PyDateTime_Check(obj), "expected datetime object"); 26 return reinterpret_cast<PyDateTime_DateTime*>(obj)->data[4]; 27} 28 29PY_EXPORT int PyDateTime_DATE_GET_MICROSECOND_Func(PyObject* obj) { 30 DCHECK(PyDateTime_Check(obj), "expected datetime object"); 31 return (reinterpret_cast<PyDateTime_DateTime*>(obj)->data[7] << 16) | 32 (reinterpret_cast<PyDateTime_DateTime*>(obj)->data[8] << 8) | 33 reinterpret_cast<PyDateTime_DateTime*>(obj)->data[9]; 34} 35 36PY_EXPORT int PyDateTime_DATE_GET_MINUTE_Func(PyObject* obj) { 37 DCHECK(PyDateTime_Check(obj), "expected datetime object"); 38 return reinterpret_cast<PyDateTime_DateTime*>(obj)->data[5]; 39} 40 41PY_EXPORT int PyDateTime_DATE_GET_SECOND_Func(PyObject* obj) { 42 DCHECK(PyDateTime_Check(obj), "expected datetime object"); 43 return reinterpret_cast<PyDateTime_DateTime*>(obj)->data[6]; 44} 45 46PY_EXPORT int PyDateTime_DELTA_GET_DAYS_Func(PyObject* obj) { 47 DCHECK(PyDelta_Check(obj), "expected delta object"); 48 return reinterpret_cast<PyDateTime_Delta*>(obj)->days; 49} 50 51PY_EXPORT int PyDateTime_DELTA_GET_MICROSECONDS_Func(PyObject* obj) { 52 DCHECK(PyDelta_Check(obj), "expected delta object"); 53 return reinterpret_cast<PyDateTime_Delta*>(obj)->microseconds; 54} 55 56PY_EXPORT int PyDateTime_DELTA_GET_SECONDS_Func(PyObject* obj) { 57 DCHECK(PyDelta_Check(obj), "expected delta object"); 58 return reinterpret_cast<PyDateTime_Delta*>(obj)->seconds; 59} 60 61PY_EXPORT PyObject* PyDateTime_FromDateAndTime_Func(int year, int month, 62 int day, int hour, int min, 63 int sec, int usec) { 64 return datetime_global(CAPI.DateTime_FromDateAndTime)( 65 year, month, day, hour, min, sec, usec, Py_None, 66 datetime_global(CAPI.DateTimeType)); 67} 68 69PY_EXPORT int PyDateTime_GET_DAY_Func(PyObject* obj) { 70 DCHECK(PyDate_Check(obj) || PyDateTime_Check(obj), "expected date object"); 71 return reinterpret_cast<PyDateTime_Date*>(obj)->data[3]; 72} 73 74PY_EXPORT int PyDateTime_GET_MONTH_Func(PyObject* obj) { 75 DCHECK(PyDate_Check(obj) || PyDateTime_Check(obj), "expected date object"); 76 return reinterpret_cast<PyDateTime_Date*>(obj)->data[2]; 77} 78 79PY_EXPORT int PyDateTime_GET_YEAR_Func(PyObject* obj) { 80 DCHECK(PyDate_Check(obj) || PyDateTime_Check(obj), "expected date object"); 81 return (reinterpret_cast<PyDateTime_Date*>(obj)->data[0] << 8) | 82 reinterpret_cast<PyDateTime_Date*>(obj)->data[1]; 83} 84 85PY_EXPORT void PyDateTime_IMPORT_Func(void) { 86 Thread* thread = Thread::current(); 87 HandleScope scope(thread); 88 Str name(&scope, Runtime::internStrFromCStr(thread, "_datetime")); 89 CHECK(!moduleInitBuiltinExtension(thread, name).isErrorException(), 90 "failed to initialize _datetime module"); 91} 92 93PY_EXPORT int PyDateTime_TIME_GET_HOUR_Func(PyObject* obj) { 94 DCHECK(PyTime_Check(obj), "expected time object"); 95 return reinterpret_cast<PyDateTime_Time*>(obj)->data[0]; 96} 97 98PY_EXPORT int PyDateTime_TIME_GET_MICROSECOND_Func(PyObject* obj) { 99 DCHECK(PyTime_Check(obj), "expected time object"); 100 return (reinterpret_cast<PyDateTime_Time*>(obj)->data[3] << 16) | 101 (reinterpret_cast<PyDateTime_Time*>(obj)->data[4] << 8) | 102 reinterpret_cast<PyDateTime_Time*>(obj)->data[5]; 103} 104 105PY_EXPORT int PyDateTime_TIME_GET_MINUTE_Func(PyObject* obj) { 106 DCHECK(PyTime_Check(obj), "expected time object"); 107 return reinterpret_cast<PyDateTime_Time*>(obj)->data[1]; 108} 109 110PY_EXPORT int PyDateTime_TIME_GET_SECOND_Func(PyObject* obj) { 111 DCHECK(PyTime_Check(obj), "expected time object"); 112 return reinterpret_cast<PyDateTime_Time*>(obj)->data[2]; 113} 114 115PY_EXPORT int PyDate_Check_Func(PyObject* obj) { 116 return PyObject_TypeCheck(obj, datetime_global(CAPI.DateType)); 117} 118 119PY_EXPORT PyObject* PyDate_FromDate_Func(int year, int month, int day) { 120 return datetime_global(CAPI.Date_FromDate)(year, month, day, 121 datetime_global(CAPI.DateType)); 122} 123 124PY_EXPORT int PyDelta_Check_Func(PyObject* obj) { 125 return PyObject_TypeCheck(obj, datetime_global(CAPI.DeltaType)); 126} 127 128PY_EXPORT PyObject* PyDelta_FromDSU_Func(int days, int seconds, int useconds) { 129 return datetime_global(CAPI.Delta_FromDelta)(days, seconds, useconds, 1, 130 datetime_global(CAPI.DeltaType)); 131} 132 133PY_EXPORT int PyTime_Check_Func(PyObject* obj) { 134 return PyObject_TypeCheck(obj, datetime_global(CAPI.TimeType)); 135}