QgsGrassFeatureIterator::QgsGrassFeatureIterator( QgsGrassFeatureSource* source, bool ownSource, const QgsFeatureRequest& request ) : QgsAbstractFeatureIteratorFromSource<QgsGrassFeatureSource>( source, ownSource, request ) { sMutex.lock(); // Init structures mPoints = Vect_new_line_struct(); mCats = Vect_new_cats_struct(); mList = Vect_new_list(); // Create selection array allocateSelection( mSource->mMap ); resetSelection( 1 ); if ( request.filterType() == QgsFeatureRequest::FilterRect ) { setSelectionRect( request.filterRect(), request.flags() & QgsFeatureRequest::ExactIntersect ); } else { // TODO: implement fast lookup by feature id //no filter - use all features resetSelection( 1 ); } }
QgsGrassFeatureIterator::QgsGrassFeatureIterator( QgsGrassProvider* p, const QgsFeatureRequest& request ) : QgsAbstractFeatureIterator( request ), P( p ) { // make sure that only one iterator is active if ( P->mActiveIterator ) { QgsMessageLog::logMessage( QObject::tr( "Already active iterator on this provider was closed." ), QObject::tr( "GRASS" ) ); P->mActiveIterator->close(); } P->mActiveIterator = this; // check if outdated and update if necessary P->ensureUpdated(); // Init structures mPoints = Vect_new_line_struct(); mCats = Vect_new_cats_struct(); mList = Vect_new_list(); // Create selection array allocateSelection( P->mMap ); resetSelection( 1 ); if ( request.filterType() == QgsFeatureRequest::FilterRect ) { setSelectionRect( request.filterRect(), request.flags() & QgsFeatureRequest::ExactIntersect ); } else { // TODO: implement fast lookup by feature id //no filter - use all features resetSelection( 1 ); } }