Support slice operator into QStringList.
Reviewed by Hugo Parente Lima <hugo.lima@openbossa.org>
This commit is contained in:
parent
a2f9d30a4d
commit
942c774827
2 changed files with 71 additions and 2 deletions
|
|
@ -1036,6 +1036,11 @@
|
||||||
return !result ? -1 : 0;
|
return !result ? -1 : 0;
|
||||||
</inject-code>
|
</inject-code>
|
||||||
</add-function>
|
</add-function>
|
||||||
|
<add-function signature="__getslice__">
|
||||||
|
<inject-code class="target" position="beginning">
|
||||||
|
<insert-template name="get_slice"/>
|
||||||
|
</inject-code>
|
||||||
|
</add-function>
|
||||||
</value-type>
|
</value-type>
|
||||||
<value-type name="QLatin1String" />
|
<value-type name="QLatin1String" />
|
||||||
<value-type name="QStringRef">
|
<value-type name="QStringRef">
|
||||||
|
|
@ -1511,8 +1516,6 @@
|
||||||
</value-type>
|
</value-type>
|
||||||
<value-type name="QStringList">
|
<value-type name="QStringList">
|
||||||
<modify-function signature="fromVector(QVector<QString>)" remove="all" />
|
<modify-function signature="fromVector(QVector<QString>)" remove="all" />
|
||||||
<modify-function signature="operator<<(const QString&)" remove="all"/>
|
|
||||||
<modify-function signature="operator<<(const QStringList&)" remove="all"/>
|
|
||||||
<add-function signature="__len__">
|
<add-function signature="__len__">
|
||||||
<inject-code class="target" position="beginning">
|
<inject-code class="target" position="beginning">
|
||||||
return %CPPSELF.count();
|
return %CPPSELF.count();
|
||||||
|
|
@ -1536,6 +1539,48 @@
|
||||||
return !result ? -1 : 0;
|
return !result ? -1 : 0;
|
||||||
</inject-code>
|
</inject-code>
|
||||||
</add-function>
|
</add-function>
|
||||||
|
<add-function signature="__getslice__">
|
||||||
|
<inject-code class="target" position="beginning">
|
||||||
|
<insert-template name="get_slice"/>
|
||||||
|
</inject-code>
|
||||||
|
</add-function>
|
||||||
|
<add-function signature="__setslice__">
|
||||||
|
<inject-code class="target" position="beginning">
|
||||||
|
<!--
|
||||||
|
PyObject* result = 0;
|
||||||
|
Py_ssize_t start, end;
|
||||||
|
Py_ssize_t len = %CPPSELF->count();
|
||||||
|
|
||||||
|
if (_i1 > len)
|
||||||
|
start = len;
|
||||||
|
else if (_i1 < 0)
|
||||||
|
start = 0;
|
||||||
|
else
|
||||||
|
start = _i1;
|
||||||
|
|
||||||
|
if (_i2 > len)
|
||||||
|
end = len;
|
||||||
|
else if (_i2 < 0)
|
||||||
|
end = 0;
|
||||||
|
else
|
||||||
|
end = _i2;
|
||||||
|
|
||||||
|
if (start < end) {
|
||||||
|
Py_ssize_t i;
|
||||||
|
for (Py_ssize_t i = _value->count(); i > -1; i++) {
|
||||||
|
PyObject* args = Py_BuildValue("(nO)", start, %CPPSELF->at(i));
|
||||||
|
result = SbkQStringList_insert(self, args);
|
||||||
|
Py_XDECREF(args);
|
||||||
|
Py_XDECREF(result);
|
||||||
|
}
|
||||||
|
for (i = start; i < end; i++)
|
||||||
|
SbkQStringList_removeAt(self, Py_BuildValue("(n)", i));
|
||||||
|
}
|
||||||
|
return !result ? -1 : 0;
|
||||||
|
-->
|
||||||
|
return 0;
|
||||||
|
</inject-code>
|
||||||
|
</add-function>
|
||||||
</value-type>
|
</value-type>
|
||||||
<object-type name="QAbstractListModel">
|
<object-type name="QAbstractListModel">
|
||||||
<extra-includes>
|
<extra-includes>
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,30 @@
|
||||||
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&ok_, %1);
|
%RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(&ok_, %1);
|
||||||
%PYARG_0 = PyTuple_Pack(2, %CONVERTTOPYTHON[%RETURN_TYPE](retval_), %CONVERTTOPYTHON[%RETURN_TYPE](ok_));
|
%PYARG_0 = PyTuple_Pack(2, %CONVERTTOPYTHON[%RETURN_TYPE](retval_), %CONVERTTOPYTHON[%RETURN_TYPE](ok_));
|
||||||
</template>
|
</template>
|
||||||
|
<template name="get_slice">
|
||||||
|
%TYPE* sequence;
|
||||||
|
Py_ssize_t start, end;
|
||||||
|
Py_ssize_t len = %CPPSELF->count();
|
||||||
|
|
||||||
|
if (_i1 > len)
|
||||||
|
start = len;
|
||||||
|
else if (_i1 < 0)
|
||||||
|
start = 0;
|
||||||
|
else
|
||||||
|
start = _i1;
|
||||||
|
|
||||||
|
if (_i2 > len)
|
||||||
|
end = len;
|
||||||
|
else if (_i2 < 0)
|
||||||
|
end = 0;
|
||||||
|
else
|
||||||
|
end = _i2;
|
||||||
|
|
||||||
|
sequence = new %TYPE();
|
||||||
|
for (Py_ssize_t i = start; i < end; i++)
|
||||||
|
sequence->append(%CPPSELF->at(i));
|
||||||
|
|
||||||
|
return %CONVERTTOPYTHON[%TYPE](*sequence);
|
||||||
|
</template>
|
||||||
</typesystem>
|
</typesystem>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue