Simplify and optimise python list->QgsAttributes conversion

This commit is contained in:
Nyall Dawson 2018-01-29 17:35:26 +10:00
parent 22de251156
commit 878fb951a8
2 changed files with 18 additions and 18 deletions

View File

@ -71,19 +71,20 @@ typedef QVector<QVariant> QgsAttributes;
} }
QgsAttributes *qv = new QgsAttributes; QgsAttributes *qv = new QgsAttributes;
SIP_SSIZE_T listSize = PyList_GET_SIZE( sipPy );
qv->reserve( listSize );
for ( SIP_SSIZE_T i = 0; i < PyList_GET_SIZE( sipPy ); ++i ) for ( SIP_SSIZE_T i = 0; i < listSize; ++i )
{ {
int state;
PyObject *obj = PyList_GET_ITEM( sipPy, i ); PyObject *obj = PyList_GET_ITEM( sipPy, i );
QVariant *t;
if ( obj == Py_None ) if ( obj == Py_None )
{ {
t = new QVariant( QVariant::Int ); qv->append( QVariant( QVariant::Int ) );
} }
else else
{ {
t = reinterpret_cast<QVariant *>( sipConvertToType( obj, sipType_QVariant, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr ) ); int state;
QVariant *t = reinterpret_cast<QVariant *>( sipConvertToType( obj, sipType_QVariant, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr ) );
if ( *sipIsErr ) if ( *sipIsErr )
{ {
@ -92,12 +93,11 @@ typedef QVector<QVariant> QgsAttributes;
delete qv; delete qv;
return 0; return 0;
} }
}
qv->append( *t ); qv->append( *t );
sipReleaseType( t, sipType_QVariant, state ); sipReleaseType( t, sipType_QVariant, state );
} }
}
*sipCppPtr = qv; *sipCppPtr = qv;

View File

@ -175,19 +175,20 @@ typedef QVector<QVariant> QgsAttributes;
} }
QgsAttributes *qv = new QgsAttributes; QgsAttributes *qv = new QgsAttributes;
SIP_SSIZE_T listSize = PyList_GET_SIZE( sipPy );
qv->reserve( listSize );
for ( SIP_SSIZE_T i = 0; i < PyList_GET_SIZE( sipPy ); ++i ) for ( SIP_SSIZE_T i = 0; i < listSize; ++i )
{ {
int state;
PyObject *obj = PyList_GET_ITEM( sipPy, i ); PyObject *obj = PyList_GET_ITEM( sipPy, i );
QVariant *t;
if ( obj == Py_None ) if ( obj == Py_None )
{ {
t = new QVariant( QVariant::Int ); qv->append( QVariant( QVariant::Int ) );
} }
else else
{ {
t = reinterpret_cast<QVariant *>( sipConvertToType( obj, sipType_QVariant, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr ) ); int state;
QVariant *t = reinterpret_cast<QVariant *>( sipConvertToType( obj, sipType_QVariant, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr ) );
if ( *sipIsErr ) if ( *sipIsErr )
{ {
@ -196,12 +197,11 @@ typedef QVector<QVariant> QgsAttributes;
delete qv; delete qv;
return 0; return 0;
} }
}
qv->append( *t ); qv->append( *t );
sipReleaseType( t, sipType_QVariant, state ); sipReleaseType( t, sipType_QVariant, state );
} }
}
*sipCppPtr = qv; *sipCppPtr = qv;