From: Vivien Maisonneuve Date: Fri, 4 Jul 2014 08:53:29 +0000 (+0200) Subject: Add helper function islhelper.isl_set_points() X-Git-Tag: 1.0~151 X-Git-Url: https://scm.cri.ensmp.fr/git/linpy.git/commitdiff_plain/2b3c6f898db2c17e3be955707629645bbeff91c0?ds=inline Add helper function islhelper.isl_set_points() --- 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} }; diff --git a/pypol/islhelper.py b/pypol/islhelper.py index 539a33f..e796618 100644 --- a/pypol/islhelper.py +++ b/pypol/islhelper.py @@ -1,7 +1,7 @@ import ctypes, ctypes.util from . import _islhelper -from ._islhelper import isl_basic_set_constraints, isl_set_basic_sets +from ._islhelper import * __all__ = [ @@ -11,6 +11,7 @@ __all__ = [ 'isl_val_to_int', 'isl_basic_set_to_str', 'isl_basic_set_constraints', 'isl_set_to_str', 'isl_set_basic_sets', + 'isl_set_points', ]