X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=bindings%2Fpython%2Fbt2%2Fbt2%2Fnative_bt.i;h=ad22797384b44c84e4683ec485f57d9dcfce5f6f;hb=dc43190b29953dd4aa2bbcdc86b34fb47d76a62c;hp=59595a3117965a5bb432d39b2819d7236a8ef614;hpb=e893886e9fca66a3dccf1493aaee1dbb443748f7;p=babeltrace.git diff --git a/bindings/python/bt2/bt2/native_bt.i b/bindings/python/bt2/bt2/native_bt.i index 59595a31..ad227973 100644 --- a/bindings/python/bt2/bt2/native_bt.i +++ b/bindings/python/bt2/bt2/native_bt.i @@ -192,6 +192,43 @@ typedef int bt_bool; $result = $1; } +%{ +static enum bt_notification_type *bt_py3_notif_types_from_py_list( + PyObject *py_notif_types) +{ + enum bt_notification_type *notification_types = NULL; + size_t i; + + assert(!PyErr_Occurred()); + + if (py_notif_types == Py_None) { + goto end; + } + + assert(PyList_Check(py_notif_types)); + notification_types = g_new0(enum bt_notification_type, + PyList_Size(py_notif_types) + 1); + assert(notification_types); + notification_types[PyList_Size(py_notif_types)] = + BT_NOTIFICATION_TYPE_SENTINEL; + + for (i = 0; i < PyList_Size(py_notif_types); i++) { + PyObject *item = PyList_GetItem(py_notif_types, i); + long value; + int overflow; + + assert(item); + assert(PyLong_Check(item)); + value = PyLong_AsLongAndOverflow(item, &overflow); + assert(overflow == 0); + notification_types[i] = value; + } + +end: + return notification_types; +} +%} + /* Per-module interface files */ %include "native_btccpriomap.i" %include "native_btclockclass.i"