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 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
/*
* 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
|