diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2009-09-15 17:00:19 -0300 |
---|---|---|
committer | Marcelo Lira <marcelo.lira@openbossa.org> | 2009-09-15 17:00:44 -0300 |
commit | 50678706032259f37942eea03429e86af685eedb (patch) | |
tree | 396f7f0149f2bf50b99bbb16a6000c549ae932ec /PySide/QtCore/qmap_conversions.h | |
parent | d9b029098c0aee475310841f2d2746c3739b99f7 (diff) |
added conversion rules for QVector and QMap containers
Diffstat (limited to 'PySide/QtCore/qmap_conversions.h')
-rw-r--r-- | PySide/QtCore/qmap_conversions.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/PySide/QtCore/qmap_conversions.h b/PySide/QtCore/qmap_conversions.h new file mode 100644 index 000000000..c1c262405 --- /dev/null +++ b/PySide/QtCore/qmap_conversions.h @@ -0,0 +1,40 @@ +template <typename qmap> +struct Converter_qmap +{ + static PyObject* toPython(qmap map) + { + PyObject* result = PyDict_New(); + + QMapIterator<typename qmap::key_type, typename qmap::mapped_type> it(map); + while (it.hasNext()) { + it.next(); + PyDict_SetItem(result, + Converter<typename qmap::key_type>::toPython(it.key()), + Converter<typename qmap::mapped_type>::toPython(it.value())); + } + + return result; + } + static qmap toCpp(PyObject* pyobj) + { + qmap result; + + PyObject* key; + PyObject* value; + Py_ssize_t pos = 0; + + Py_INCREF(pyobj); + + while (PyDict_Next(pyobj, &pos, &key, &value)) { + result.insert(Converter<typename qmap::key_type>::toCpp(key), + Converter<typename qmap::mapped_type>::toCpp(value)); + } + + Py_DECREF(pyobj); + + return result; + } +}; + +template<typename KT, typename VT> +struct Converter<QMap<KT, VT> > : Converter_qmap<QMap<KT, VT> > {}; |