aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-03-01 18:56:47 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2021-03-02 19:53:51 +0100
commit7032afbb5e7b3580fbe5185b651b86c2fe3145c1 (patch)
tree4531abd378e15e3d6bc5004ed55a5490af0caa7d
parent79676495d188359b805c04ce4e983078772f4ca5 (diff)
Modernize sequence conversions
- Use correct size types - Use const iterators - Avoid repeated invocation of end()/size() Task-number: PYSIDE-1438 Change-Id: I7d30a5c87d0867400134be96ee61ff1ab6129435 Reviewed-by: Christian Tismer <tismer@stackless.com>
-rw-r--r--sources/pyside6/PySide6/templates/core_common.xml12
-rw-r--r--sources/shiboken6/tests/minimalbinding/typesystem_minimal.xml15
-rw-r--r--sources/shiboken6/tests/samplebinding/typesystem_sample.xml14
3 files changed, 21 insertions, 20 deletions
diff --git a/sources/pyside6/PySide6/templates/core_common.xml b/sources/pyside6/PySide6/templates/core_common.xml
index a7c9eca3d..b173684ba 100644
--- a/sources/pyside6/PySide6/templates/core_common.xml
+++ b/sources/pyside6/PySide6/templates/core_common.xml
@@ -285,9 +285,9 @@
</template>
<template name="cpplist_to_pylist_conversion">
- PyObject* %out = PyList_New((int) %in.size());
- %INTYPE::const_iterator it = %in.begin();
- for (int idx = 0; it != %in.end(); ++it, ++idx) {
+ PyObject *%out = PyList_New(Py_ssize_t(%in.size()));
+ Py_ssize_t idx = 0;
+ for (auto it = %in.cbegin(), end = %in.cend(); it != end; ++it, ++idx) {
%INTYPE_0 cppItem(*it);
PyList_SET_ITEM(%out, idx, %CONVERTTOPYTHON[%INTYPE_0](cppItem));
}
@@ -312,9 +312,9 @@
<template name="cppvector_to_pylist_conversion">
%INTYPE::size_type vectorSize = %in.size();
- PyObject* %out = PyList_New((int) vectorSize);
+ PyObject *%out = PyList_New(Py_ssize_t(vectorSize));
for (%INTYPE::size_type idx = 0; idx &lt; vectorSize; ++idx) {
- %INTYPE_0 cppItem(%in[idx]);
+ %INTYPE_0 cppItem(%in.at(idx));
PyList_SET_ITEM(%out, idx, %CONVERTTOPYTHON[%INTYPE_0](cppItem));
}
return %out;
@@ -349,7 +349,7 @@
<template name="cppmap_to_pymap_conversion">
PyObject *%out = PyDict_New();
- for (%INTYPE::const_iterator it = %in.begin(), end = %in.end(); it != end; ++it) {
+ for (auto it = %in.cbegin(), end = %in.cend(); it != end; ++it) {
%INTYPE_0 key = it.key();
%INTYPE_1 value = it.value();
PyObject *pyKey = %CONVERTTOPYTHON[%INTYPE_0](key);
diff --git a/sources/shiboken6/tests/minimalbinding/typesystem_minimal.xml b/sources/shiboken6/tests/minimalbinding/typesystem_minimal.xml
index 03b88a970..625615fa1 100644
--- a/sources/shiboken6/tests/minimalbinding/typesystem_minimal.xml
+++ b/sources/shiboken6/tests/minimalbinding/typesystem_minimal.xml
@@ -21,9 +21,9 @@
<include file-name="list" location="global"/>
<conversion-rule>
<native-to-target>
- PyObject* %out = PyList_New((int) %in.size());
- %INTYPE::const_iterator it = %in.begin();
- for (int idx = 0; it != %in.end(); ++it, ++idx) {
+ PyObject* %out = PyList_New(Py_ssize_t(%in.size()));
+ Py_ssize_t idx = 0;
+ for (auto it = %in.cbegin(), end = %in.cend(); it != end; ++it, ++idx) {
%INTYPE_0 cppItem(*it);
PyList_SET_ITEM(%out, idx, %CONVERTTOPYTHON[%INTYPE_0](cppItem));
}
@@ -32,7 +32,8 @@
<target-to-native>
<add-conversion type="PySequence">
Shiboken::AutoDecRef seq(PySequence_Fast(%in, 0));
- for (int i = 0; i &lt; PySequence_Fast_GET_SIZE(seq.object()); i++) {
+ const Py_ssize_t size = PySequence_Fast_GET_SIZE(seq.object());
+ for (Py_ssize_t i = 0; i &lt; size; ++i) {
PyObject* pyItem = PySequence_Fast_GET_ITEM(seq.object(), i);
%OUTTYPE_0 cppItem = %CONVERTTOCPP[%OUTTYPE_0](pyItem);
%out.push_back(cppItem);
@@ -54,7 +55,7 @@
<conversion-rule>
<native-to-target>
%INTYPE::size_type vectorSize = %in.size();
- PyObject* %out = PyList_New((int) vectorSize);
+ PyObject* %out = PyList_New(Py_ssize_t(vectorSize));
for (%INTYPE::size_type idx = 0; idx &lt; vectorSize; ++idx) {
%INTYPE_0 cppItem(%in[idx]);
PyList_SET_ITEM(%out, idx, %CONVERTTOPYTHON[%INTYPE_0](cppItem));
@@ -64,9 +65,9 @@
<target-to-native>
<add-conversion type="PySequence">
Shiboken::AutoDecRef seq(PySequence_Fast(%in, 0));
- int vectorSize = PySequence_Fast_GET_SIZE(seq.object());
+ const Py_ssize_t vectorSize = PySequence_Fast_GET_SIZE(seq.object());
%out.reserve(vectorSize);
- for (int idx = 0; idx &lt; vectorSize; ++idx ) {
+ for (Py_ssize_t idx = 0; idx &lt; vectorSize; ++idx ) {
PyObject* pyItem = PySequence_Fast_GET_ITEM(seq.object(), idx);
%OUTTYPE_0 cppItem = %CONVERTTOCPP[%OUTTYPE_0](pyItem);
%out.push_back(cppItem);
diff --git a/sources/shiboken6/tests/samplebinding/typesystem_sample.xml b/sources/shiboken6/tests/samplebinding/typesystem_sample.xml
index 20fa61334..a8b7b3b11 100644
--- a/sources/shiboken6/tests/samplebinding/typesystem_sample.xml
+++ b/sources/shiboken6/tests/samplebinding/typesystem_sample.xml
@@ -388,9 +388,9 @@
</conversion-rule>
</container-type>
<template name="cpplist_to_pylist_convertion">
- PyObject* %out = PyList_New((int) %in.size());
- %INTYPE::const_iterator it = %in.begin();
- for (int idx = 0; it != %in.end(); ++it, ++idx) {
+ PyObject *%out = PyList_New(Py_ssize_t(%in.size()));
+ Py_ssize_t idx = 0;
+ for (auto it = %in.cbegin(), end = %in.cend(); it != end; ++it, ++idx) {
%INTYPE_0 cppItem(*it);
PyList_SET_ITEM(%out, idx, %CONVERTTOPYTHON[%INTYPE_0](cppItem));
}
@@ -398,7 +398,8 @@
</template>
<template name="pyseq_to_cpplist_convertion">
Shiboken::AutoDecRef seq(PySequence_Fast(%in, 0));
- for (int i = 0; i &lt; PySequence_Fast_GET_SIZE(seq.object()); i++) {
+ const Py_ssize_t size = PySequence_Fast_GET_SIZE(seq.object());
+ for (Py_ssize_t i = 0; i &lt; size; ++i) {
PyObject* pyItem = PySequence_Fast_GET_ITEM(seq.object(), i);
%OUTTYPE_0 cppItem = %CONVERTTOCPP[%OUTTYPE_0](pyItem);
%out.push_back(cppItem);
@@ -435,8 +436,7 @@
<conversion-rule>
<native-to-target>
PyObject* %out = PyDict_New();
- %INTYPE::const_iterator it = %in.begin();
- for (; it != %in.end(); ++it) {
+ for (auto it = %in.cbegin(), end = %in.cend(); it != end; ++it) {
%INTYPE_0 key = it->first;
%INTYPE_1 value = it->second;
PyDict_SetItem(%out,
@@ -453,7 +453,7 @@
while (PyDict_Next(%in, &amp;pos, &amp;key, &amp;value)) {
%OUTTYPE_0 cppKey = %CONVERTTOCPP[%OUTTYPE_0](key);
%OUTTYPE_1 cppValue = %CONVERTTOCPP[%OUTTYPE_1](value);
- %out.insert(%OUTTYPE::value_type(cppKey, cppValue));
+ %out.insert({cppKey, cppValue});
}
</add-conversion>
</target-to-native>