X-Git-Url: https://scm.cri.ensmp.fr/git/linpy.git/blobdiff_plain/26837dbbeb8e37f8ee393115e879e6d94a1a79e5..2b3c6f898db2c17e3be955707629645bbeff91c0:/pypol/_islhelper.c diff --git a/pypol/_islhelper.c b/pypol/_islhelper.c index eaacc67..37e7c31 100644 --- a/pypol/_islhelper.c +++ b/pypol/_islhelper.c @@ -120,9 +120,46 @@ static PyObject * isl_set_basic_sets(PyObject *self, PyObject *args) { } +static int pointer_list_append_point(isl_point *point, void *user) { + PyObject *pointers, *value; + + pointers = (PyObject *) user; + value = PyLong_FromVoidPtr(point); + if (value == NULL) { + return -1; + } + return PyList_Append(pointers, value); +} + +static PyObject * isl_set_points(PyObject *self, PyObject *args) { + long ptr; + isl_set *set; + int n; + PyObject *pointers; + + if (!PyArg_ParseTuple(args, "l", &ptr)) { + return NULL; + } + set = (isl_set *) ptr; + pointers = PyList_New(0); + if (pointers == NULL) { + return NULL; + } + n = isl_set_foreach_point(set, pointer_list_append_point, pointers); + if (n == -1) { + PyErr_SetString(PyExc_RuntimeError, + "an error occurred in isl_set_foreach_point"); + Py_DECREF(pointers); + return NULL; + } + return pointers; +} + + static PyMethodDef _islhelper_methods[] = { {"isl_basic_set_constraints", isl_basic_set_constraints, METH_VARARGS, NULL}, {"isl_set_basic_sets", isl_set_basic_sets, METH_VARARGS, NULL}, + {"isl_set_points", isl_set_points, METH_VARARGS, NULL}, {NULL, NULL, 0, NULL} };