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 | |
parent | a52c12000eaaf6ead140af1e8158aad9a6af4872 (diff) |
added converters for QHash container
Diffstat (limited to 'PySide')
-rw-r--r-- | PySide/QtCore/qhash_conversions.h | 40 | ||||
-rw-r--r-- | PySide/QtCore/typesystem_core.xml | 5 |
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"/> |