diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2009-09-16 12:02:10 -0300 |
---|---|---|
committer | Marcelo Lira <marcelo.lira@openbossa.org> | 2009-09-16 13:16:33 -0300 |
commit | 342b03d340f1a26232ddeabfc7df801a4f040f4c (patch) | |
tree | 1b8278c2552254fc511888b3ce3117b6eb80343e /PySide/QtCore/qhash_conversions.h | |
parent | a52c12000eaaf6ead140af1e8158aad9a6af4872 (diff) |
added converters for QHash container
Diffstat (limited to 'PySide/QtCore/qhash_conversions.h')
-rw-r--r-- | PySide/QtCore/qhash_conversions.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/PySide/QtCore/qhash_conversions.h b/PySide/QtCore/qhash_conversions.h new file mode 100644 index 000000000..1f5e506dd --- /dev/null +++ b/PySide/QtCore/qhash_conversions.h @@ -0,0 +1,40 @@ +template <typename qhash> +struct Converter_qhash +{ + static PyObject* toPython(qhash hash) + { + PyObject* result = PyDict_New(); + + QHashIterator<typename qhash::key_type, typename qhash::mapped_type> it(hash); + while (it.hasNext()) { + it.next(); + PyDict_SetItem(result, + Converter<typename qhash::key_type>::toPython(it.key()), + Converter<typename qhash::mapped_type>::toPython(it.value())); + } + + return result; + } + static qhash toCpp(PyObject* pyobj) + { + qhash result; + + PyObject* key; + PyObject* value; + Py_ssize_t pos = 0; + + Py_INCREF(pyobj); + + while (PyDict_Next(pyobj, &pos, &key, &value)) { + result.insert(Converter<typename qhash::key_type>::toCpp(key), + Converter<typename qhash::mapped_type>::toCpp(value)); + } + + Py_DECREF(pyobj); + + return result; + } +}; + +template<typename KT, typename VT> +struct Converter<QHash<KT, VT> > : Converter_qhash<QHash<KT, VT> > {}; |