48#define max_line_length 500
50#define max_num_lines 1000
51#define max_code_length max_line_length *max_num_lines
52#define max_variable_length 100
61typedef PyObject *(*T_PyFloat_FromDouble)(double);
65typedef PyObject *(*T_PyImport_AddModule)(
const char *);
79typedef const char *(*T_PyUnicode_AsUTF8)(
PyObject *);
83typedef PyObject *(*T_PyLong_FromLong)(
long int);
84typedef PyObject *(*T_PyLong_FromVoidPtr)(
void *);
85typedef PyObject *(*T_PyUnicode_FromString)(
const char *);
93 func_ptr =
reinterpret_cast<T
>(GetProcAddress(
handle, func_name.c_str()));
94 if (func_ptr ==
nullptr)
106 func_ptr =
reinterpret_cast<T
>(dlsym(h, func_name.c_str()));
107 if (func_ptr ==
nullptr)
109 const char *dlsym_error = dlerror();
110 std::cout <<
"Could not load " << func_name <<
": " << dlsym_error << std::endl;
241 if (lhs.second == rhs.second) {
242 return lhs.first < rhs.first;
244 return std::string(lhs.second) < std::string(rhs.second);
251 if (
n >= keywordPairs.size()) {
252 std::cout<<
"ERROR: Out of range access in elemental value for Python function."<<std::endl;
253 std::cout<<
"Index: "<<
n<<
" Size: "<<keywordPairs.size()<<std::endl;
255 auto it = std::next(keywordPairs.begin(),
n);
PyObject *(* T_PyUnicode_FromString)(const char *)
int(* T_PyRun_SimpleString)(const char *)
T_PyModule_GetDict MyModule_GetDict
PyObject *(* T_PyFloat_FromDouble)(double)
PyObject *(* T_PyLong_FromLong)(long int)
T_PyErr_Display MyErr_Display
double(* T_PyFloat_AsDouble)(PyObject *)
PyObject *(* T_PyErr_Occurred)()
int(* T_PyTuple_SetItem)(PyObject *, My_ssize_t, PyObject *)
void(* T_Py_IncRef)(PyObject *)
T_PyTuple_SetItem MyTuple_SetItem
T_PyCallable_Check MyCallable_Check
T_PyLong_FromLong MyLong_FromLong
PyObject *(* T_PyDict_GetItemString)(PyObject *, const char *)
T_PyLong_FromVoidPtr MyLong_FromVoidPtr
PyObject *(* T_PyModule_GetDict)(PyObject *)
void(* T_PyErr_Display)(PyObject *, PyObject *, PyObject *)
void(* T_Py_Initialize)()
int(* T_Py_IsInitialized)()
int(* T_PyCallable_Check)(PyObject *)
PyObject *(* T_PyList_New)(My_ssize_t)
constexpr std::array< const char *, 89 > ELEMENT_KEYWORDS
T_PyUnicode_FromString MyUnicode_FromString
T_PyUnicode_AsUTF8 MyUnicode_AsUTF8
T_PyDict_GetItemString MyDict_GetItemString
void(* T_PyErr_Fetch)(PyObject **, PyObject **, PyObject **)
PyObject *(* T_PyTuple_New)(My_ssize_t)
KeywordPair get_keyword_pair(const KeywordPairs &keywordPairs, size_t n)
T_PyErr_Clear MyErr_Clear
std::pair< int, const char * > KeywordPair
int(* T_PyDict_SetItemString)(PyObject *, const char *, PyObject *)
T_PyErr_Occurred MyErr_Occurred
T_Py_IsInitialized My_IsInitialized
int(* T_PyList_SetItem)(PyObject *, My_ssize_t, PyObject *)
T_Py_Initialize My_Initialize
void(* T_Py_DecRef)(PyObject *)
PyObject *(* T_PyImport_AddModule)(const char *)
T_PyErr_Fetch MyErr_Fetch
T_Py_Finalize My_Finalize
PyObject *(* T_PyDict_New)()
T_PyFloat_AsDouble MyFloat_AsDouble
T_PyImport_AddModule MyImport_AddModule
constexpr int sensor_result_size
std::set< std::pair< int, const char * >, ComparePairs > KeywordPairs
PyObject *(* T_PyObject_Str)(PyObject *)
void load_function(void *h, const std::string &func_name, T &func_ptr, bool &python_initialized)
PyObject *(* T_PyLong_FromVoidPtr)(void *)
T_PyDict_SetItemString MyDict_SetItemString
T_PyTuple_New MyTuple_New
const char *(* T_PyUnicode_AsUTF8)(PyObject *)
T_PyRun_SimpleString MyRun_SimpleString
T_PyList_SetItem MyList_SetItem
PyObject *(* T_PyObject_CallObject)(PyObject *, PyObject *)
T_PyObject_CallObject MyObject_CallObject
T_PyObject_Str MyObject_Str
T_PyFloat_FromDouble MyFloat_FromDouble
bool operator()(const KeywordPair &lhs, const KeywordPair &rhs) const