aboutsummaryrefslogtreecommitdiffstats
path: root/PySide/QtCore/qhash_conversions.h
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2009-09-16 12:02:10 -0300
committerMarcelo Lira <marcelo.lira@openbossa.org>2009-09-16 13:16:33 -0300
commit342b03d340f1a26232ddeabfc7df801a4f040f4c (patch)
tree1b8278c2552254fc511888b3ce3117b6eb80343e /PySide/QtCore/qhash_conversions.h
parenta52c12000eaaf6ead140af1e8158aad9a6af4872 (diff)
added converters for QHash container
Diffstat (limited to 'PySide/QtCore/qhash_conversions.h')
-rw-r--r--PySide/QtCore/qhash_conversions.h40
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> > {};