bool QgsAbstractFeatureIterator::nextFeature( QgsFeature& f ) { bool dataOk = false; switch ( mRequest.filterType() ) { case QgsFeatureRequest::FilterExpression: dataOk = nextFeatureFilterExpression( f ); break; case QgsFeatureRequest::FilterFids: dataOk = nextFeatureFilterFids( f ); break; default: dataOk = fetchFeature( f ); break; } // simplify the geometry using the simplifier configured if ( dataOk && mLocalSimplification ) { QgsGeometry* geometry = f.geometry(); if ( geometry ) simplify( f ); } return dataOk; }
bool QgsAbstractFeatureIterator::nextFeature( QgsFeature& f ) { bool dataOk = false; if ( mRequest.limit() >= 0 && mFetchedCount >= mRequest.limit() ) { return false; } if ( mUseCachedFeatures ) { if ( mFeatureIterator != mCachedFeatures.constEnd() ) { f = mFeatureIterator->mFeature; ++mFeatureIterator; dataOk = true; } else { dataOk = false; // even the zombie dies at this point... mZombie = false; } } else { switch ( mRequest.filterType() ) { case QgsFeatureRequest::FilterExpression: dataOk = nextFeatureFilterExpression( f ); break; case QgsFeatureRequest::FilterFids: dataOk = nextFeatureFilterFids( f ); break; default: dataOk = fetchFeature( f ); break; } } // simplify the geometry using the simplifier configured if ( dataOk && mLocalSimplification ) { if ( f.constGeometry() ) simplify( f ); } if ( dataOk ) mFetchedCount++; return dataOk; }