blob: 183f2ce06cb0da0a0abd344e3976d5e759919b0f (
plain)
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
|
template <typename qset>
struct Converter_qset
{
static bool isConvertible(PyObject* pyobj) {
return PyIter_Check(pyobj);
}
static PyObject* toPython(const qset& set)
{
PyObject* result = PySet_New(NULL);
foreach(typename qset::value_type x, set) {
PyObject *pyObj = Converter<typename qset::value_type>::toPython(x);
PySet_Add(result, pyObj);
Py_DECREF(pyObj);
}
return result;
}
static qset toCpp(PyObject* pyobj)
{
qset result;
PyObject *iterator = PyObject_GetIter(pyobj);
if (iterator == NULL)
return NULL;
PyObject *pyItem = NULL;
while (pyItem = PyIter_Next(iterator)) {
result.insert(Converter<typename qset::value_type>::toCpp(pyItem));
Py_DECREF(pyItem);
}
Py_XDECREF(iterator);
if (PyErr_Occurred())
return NULL;
return result;
}
};
template<typename T>
struct Converter<QSet<T> > : Converter_qset<QSet<T> > {};
|