/*
* C API functions
*/
#define PyBSP_Sync_RET void
#define PyBSP_Sync_PROTO Py_PROTO((void))
#define PyBSP_Sync_NUM 0
#define PyBSP_SetTagSize_RET void
#define PyBSP_SetTagSize_PROTO Py_PROTO((int *tag_nbytes))
#define PyBSP_SetTagSize_NUM 1
#define PyBSP_Send_RET void
#define PyBSP_Send_PROTO Py_PROTO((int pid, const void *tag, const void *payload, int payload_nbytes))
#define PyBSP_Send_NUM 2
#define PyBSP_QSize_RET void
#define PyBSP_QSize_PROTO Py_PROTO((int *nmessages, int *accum_nbytes))
#define PyBSP_QSize_NUM 3
#define PyBSP_GetTag_RET void
#define PyBSP_GetTag_PROTO Py_PROTO((int *status, void *tag))
#define PyBSP_GetTag_NUM 4
#define PyBSP_Move_RET void
#define PyBSP_Move_PROTO Py_PROTO((void *payload, int reception_nbytes))
#define PyBSP_Move_NUM 5
#define PyBSP_HPMove_RET int
#define PyBSP_HPMove_PROTO Py_PROTO((void **tag_ptr, void **payload_ptr))
#define PyBSP_HPMove_NUM 6
#define PyBSP_SendString_RET int
#define PyBSP_SendString_PROTO Py_PROTO((PyStringObject *string, int dest_pid))
#define PyBSP_SendString_NUM 7
#define PyBSP_SendArray_RET int
#define PyBSP_SendArray_PROTO Py_PROTO((PyArrayObject *array, int dest_pid))
#define PyBSP_SendArray_NUM 8
#define PyBSP_NumberOfObjects_RET int
#define PyBSP_NumberOfObjects_PROTO Py_PROTO((void))
#define PyBSP_NumberOfObjects_NUM 9
#define PyBSP_ReceiveObject_RET PyObject *
#define PyBSP_ReceiveObject_PROTO Py_PROTO((void))
#define PyBSP_ReceiveObject_NUM 10
#define PyBSP_API_pointers 11
#ifdef _BSP_MODULE
static PyBSP_Sync_RET PyBSP_Sync PyBSP_Sync_PROTO;
static PyBSP_SetTagSize_RET PyBSP_SetTagSize PyBSP_SetTagSize_PROTO;
static PyBSP_Send_RET PyBSP_Send PyBSP_Send_PROTO;
static PyBSP_QSize_RET PyBSP_QSize PyBSP_QSize_PROTO;
static PyBSP_GetTag_RET PyBSP_GetTag PyBSP_GetTag_PROTO;
static PyBSP_Move_RET PyBSP_Move PyBSP_Move_PROTO;
static PyBSP_HPMove_RET PyBSP_HPMove PyBSP_HPMove_PROTO;
static PyBSP_SendString_RET PyBSP_SendString PyBSP_SendString_PROTO;
static PyBSP_SendArray_RET PyBSP_SendArray PyBSP_SendArray_PROTO;
static PyBSP_NumberOfObjects_RET PyBSP_NumberOfObjects PyBSP_NumberOfObjects_PROTO;
static PyBSP_ReceiveObject_RET PyBSP_ReceiveObject PyBSP_ReceiveObject_PROTO;
#define set_PyBSP_API_pointers(){ \
PyBSP_API[PyBSP_Sync_NUM] = (void *)&PyBSP_Sync; \
PyBSP_API[PyBSP_SetTagSize_NUM] = (void *)&PyBSP_SetTagSize; \
PyBSP_API[PyBSP_Send_NUM] = (void *)&PyBSP_Send; \
PyBSP_API[PyBSP_QSize_NUM] = (void *)&PyBSP_QSize; \
PyBSP_API[PyBSP_GetTag_NUM] = (void *)&PyBSP_GetTag; \
PyBSP_API[PyBSP_Move_NUM] = (void *)&PyBSP_Move; \
PyBSP_API[PyBSP_HPMove_NUM] = (void *)&PyBSP_HPMove; \
PyBSP_API[PyBSP_SendString_NUM] = (void *)&PyBSP_SendString; \
PyBSP_API[PyBSP_SendArray_NUM] = (void *)&PyBSP_SendArray; \
PyBSP_API[PyBSP_NumberOfObjects_NUM] = (void *)&PyBSP_NumberOfObjects; \
PyBSP_API[PyBSP_ReceiveObject_NUM] = (void *)&PyBSP_ReceiveObject; \
}
#else
static void **PyBSP_API;
#define PyBSP_Sync \
(*(PyBSP_Sync_RET (*)PyBSP_Sync_PROTO) \
PyBSP_API[PyBSP_Sync_NUM])
#define PyBSP_SetTagSize \
(*(PyBSP_SetTagSize_RET (*)PyBSP_SetTagSize_PROTO) \
PyBSP_API[PyBSP_SetTagSize_NUM])
#define PyBSP_Send \
(*(PyBSP_Send_RET (*)PyBSP_Send_PROTO) \
PyBSP_API[PyBSP_Send_NUM])
#define PyBSP_QSize \
(*(PyBSP_QSize_RET (*)PyBSP_QSize_PROTO) \
PyBSP_API[PyBSP_QSize_NUM])
#define PyBSP_GetTag \
(*(PyBSP_GetTag_RET (*)PyBSP_GetTag_PROTO) \
PyBSP_API[PyBSP_GetTag_NUM])
#define PyBSP_Move \
(*(PyBSP_Move_RET (*)PyBSP_Move_PROTO) \
PyBSP_API[PyBSP_Move_NUM])
#define PyBSP_HPMove \
(*(PyBSP_HPMove_RET (*)PyBSP_HPMove_PROTO) \
PyBSP_API[PyBSP_HPMove_NUM])
#define PyBSP_SendString \
(*(PyBSP_SendString_RET (*)PyBSP_SendString_PROTO) \
PyBSP_API[PyBSP_SendString_NUM])
#define PyBSP_SendArray \
(*(PyBSP_SendArray_RET (*)PyBSP_SendArray_PROTO) \
PyBSP_API[PyBSP_SendArray_NUM])
#define PyBSP_NumberOfObjects \
(*(PyBSP_NumberOfObjects_RET (*)PyBSP_NumberOfObjects_PROTO) \
PyBSP_API[PyBSP_NumberOfObjects_NUM])
#define PyBSP_ReceiveObject \
(*(PyBSP_ReceiveObject_RET (*)PyBSP_ReceiveObject_PROTO) \
PyBSP_API[PyBSP_ReceiveObject_NUM])
#define import_bsplib() \
{ \
PyObject *module = PyImport_ImportModule("Scientific.BSPlib"); \
if (module != NULL) { \
PyObject *module_dict = PyModule_GetDict(module); \
PyObject *c_api_object = PyDict_GetItemString(module_dict, "_C_API"); \
if (PyCObject_Check(c_api_object)) { \
PyBSP_API = (void **)PyCObject_AsVoidPtr(c_api_object); \
} \
} \
}
#endif
syntax highlighted by Code2HTML, v. 0.9.1