Avoid some unnecessary detachments in memory provider

Should speed up the provider slightly and also refs #14559 (I can
no longer reproduce that crash with this change)
This commit is contained in:
Nyall Dawson 2016-03-30 08:25:16 +11:00
parent f7c28f60ef
commit 59d4b85c73

View File

@ -93,7 +93,7 @@ bool QgsMemoryFeatureIterator::nextFeatureUsingList( QgsFeature& feature )
if ( !mRequest.filterRect().isNull() && mRequest.flags() & QgsFeatureRequest::ExactIntersect ) if ( !mRequest.filterRect().isNull() && mRequest.flags() & QgsFeatureRequest::ExactIntersect )
{ {
// do exact check in case we're doing intersection // do exact check in case we're doing intersection
if ( mSource->mFeatures[*mFeatureIdListIterator].geometry() && mSource->mFeatures[*mFeatureIdListIterator].geometry()->intersects( mSelectRectGeom ) ) if ( mSource->mFeatures.value( *mFeatureIdListIterator ).constGeometry() && mSource->mFeatures.value( *mFeatureIdListIterator ).constGeometry()->intersects( mSelectRectGeom ) )
hasFeature = true; hasFeature = true;
} }
else else
@ -101,7 +101,7 @@ bool QgsMemoryFeatureIterator::nextFeatureUsingList( QgsFeature& feature )
if ( mSubsetExpression ) if ( mSubsetExpression )
{ {
mSource->mExpressionContext.setFeature( mSource->mFeatures[*mFeatureIdListIterator] ); mSource->mExpressionContext.setFeature( mSource->mFeatures.value( *mFeatureIdListIterator ) );
if ( !mSubsetExpression->evaluate( &mSource->mExpressionContext ).toBool() ) if ( !mSubsetExpression->evaluate( &mSource->mExpressionContext ).toBool() )
hasFeature = false; hasFeature = false;
} }
@ -115,7 +115,7 @@ bool QgsMemoryFeatureIterator::nextFeatureUsingList( QgsFeature& feature )
// copy feature // copy feature
if ( hasFeature ) if ( hasFeature )
{ {
feature = mSource->mFeatures[*mFeatureIdListIterator]; feature = mSource->mFeatures.value( *mFeatureIdListIterator );
++mFeatureIdListIterator; ++mFeatureIdListIterator;
} }
else else