this repo has no description
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}