aboutsummaryrefslogtreecommitdiffstats
path: root/PySide
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
parenta52c12000eaaf6ead140af1e8158aad9a6af4872 (diff)
added converters for QHash container
Diffstat (limited to 'PySide')
-rw-r--r--PySide/QtCore/qhash_conversions.h40
-rw-r--r--PySide/QtCore/typesystem_core.xml5
2 files changed, 44 insertions, 1 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> > {};
diff --git a/PySide/QtCore/typesystem_core.xml b/PySide/QtCore/typesystem_core.xml
index 9496ed0f6..42fb8d172 100644
--- a/PySide/QtCore/typesystem_core.xml
+++ b/PySide/QtCore/typesystem_core.xml
@@ -354,7 +354,10 @@
<container-type name="QQueue" type="queue"/>
<rejection class="QQueue" function-name="head"/>
- <container-type name="QHash" type="hash"/>
+ <container-type name="QHash" type="hash">
+ <conversion-rule file="qhash_conversions.h"/>
+ <include file-name="QHash" location="global"/>
+ </container-type>
<container-type name="QLinkedList" type="linked-list"/>
<container-type name="QMap" type="map">
<conversion-rule file="qmap_conversions.h"/>