-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPythonCore.h
More file actions
131 lines (99 loc) · 2.22 KB
/
PythonCore.h
File metadata and controls
131 lines (99 loc) · 2.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#pragma once
#undef _DEBUG
#undef _module
#ifdef X_PY_VERSION
#define STR(x) #x
#define XSTR(x) STR(x)
/* here's the magic */
#define _CONCAT(x,y) x##y
#define CONCAT(x,y) _CONCAT(x,y)
#define PYTHON_LIB_PATH CONCAT(./PythonLibs/python, X_PY_VERSION).lib
#define AUTO_INCLUDE_LIB
#ifdef AUTO_INCLUDE_LIB
#pragma comment(lib, XSTR(PYTHON_LIB_PATH))
#endif
#undef _CONCAT
#undef CONCAT
#undef XSTR
#undef STR
#endif // PY_VERSION
#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include "./PythonCore.h"
//#include "./Utils.h"
#include "./Module.h"
#include "./String.h"
namespace xpo {
namespace python {
struct Python final {
private:
struct SystemInfo {
char const* version() const {
return Py_GetVersion();
}
char const* platform() const {
return Py_GetPlatform();
}
char const* copyright() const {
return Py_GetCopyright();
}
char const* compiler() const {
return Py_GetCompiler();
}
char const* build_info() const {
return Py_GetBuildInfo();
}
};
public:
~Python() {
if (is_running()) {
stop();
}
}
public:
void start() {
Py_Initialize();
}
void start(bool initSignals) {
Py_InitializeEx(initSignals);
}
void stop() {
Py_Finalize();
}
bool is_running() const {
return Py_IsInitialized();
}
void add_module(char const* name, PyObject* (*module_init)()) {
PyImport_AppendInittab(name, module_init);
}
Module main_module() {
return Module(PyImport_AddModule("__main__"));
}
void set_global(char const* name, Object object) {
main_module().set_attribute(name, object);
}
Object get_global(char const* name) {
return main_module().get_attribute(name);
}
void add_module_search_path(char const* path) {
PyList_Append(PySys_GetObject("path"), String(path));
}
int run_string(char const* str) {
return PyRun_SimpleString(str);
}
int run_file(char const* filePath) {
int result = -1;
auto file = _Py_fopen(filePath, "rb");
if (file) {
result = PyRun_AnyFileEx(file, filePath, 1);
}
return result;
}
SystemInfo const& system_info() const {
return m_systemInfo;
}
private:
SystemInfo m_systemInfo;
};
}
}