Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsmemoryfeatureiterator.h 3 : : --------------------- 4 : : begin : Juli 2012 5 : : copyright : (C) 2012 by Martin Dobias 6 : : email : wonder dot sk at gmail dot com 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : #ifndef QGSMEMORYFEATUREITERATOR_H 16 : : #define QGSMEMORYFEATUREITERATOR_H 17 : : 18 : : #define SIP_NO_FILE 19 : : 20 : : #include "qgsfeatureiterator.h" 21 : : #include "qgsexpressioncontext.h" 22 : : #include "qgsfields.h" 23 : : #include "qgsgeometry.h" 24 : : 25 : : ///@cond PRIVATE 26 : : 27 : : class QgsMemoryProvider; 28 : : 29 : : typedef QMap<QgsFeatureId, QgsFeature> QgsFeatureMap; 30 : : 31 : : class QgsSpatialIndex; 32 : : 33 : : 34 : 134 : class QgsMemoryFeatureSource final: public QgsAbstractFeatureSource 35 : : { 36 : : public: 37 : : explicit QgsMemoryFeatureSource( const QgsMemoryProvider *p ); 38 : : 39 : : QgsFeatureIterator getFeatures( const QgsFeatureRequest &request ) override; 40 : : 41 : : QgsExpressionContext *expressionContext(); 42 : : 43 : : private: 44 : : QgsFields mFields; 45 : : QgsFeatureMap mFeatures; 46 : : std::unique_ptr< QgsSpatialIndex > mSpatialIndex; 47 : : QString mSubsetString; 48 : : std::unique_ptr< QgsExpressionContext > mExpressionContext; 49 : : QgsCoordinateReferenceSystem mCrs; 50 : : 51 : : friend class QgsMemoryFeatureIterator; 52 : : }; 53 : : 54 : : 55 : : class QgsMemoryFeatureIterator final: public QgsAbstractFeatureIteratorFromSource<QgsMemoryFeatureSource> 56 : : { 57 : : public: 58 : : QgsMemoryFeatureIterator( QgsMemoryFeatureSource *source, bool ownSource, const QgsFeatureRequest &request ); 59 : : 60 : : ~QgsMemoryFeatureIterator() override; 61 : : 62 : : bool rewind() override; 63 : : bool close() override; 64 : : 65 : : protected: 66 : : 67 : : bool fetchFeature( QgsFeature &feature ) override; 68 : : 69 : : private: 70 : : bool nextFeatureUsingList( QgsFeature &feature ); 71 : : bool nextFeatureTraverseAll( QgsFeature &feature ); 72 : : 73 : : QgsGeometry mSelectRectGeom; 74 : : std::unique_ptr< QgsGeometryEngine > mSelectRectEngine; 75 : : QgsRectangle mFilterRect; 76 : : QgsFeatureMap::const_iterator mSelectIterator; 77 : : bool mUsingFeatureIdList = false; 78 : : QList<QgsFeatureId> mFeatureIdList; 79 : : QList<QgsFeatureId>::const_iterator mFeatureIdListIterator; 80 : : std::unique_ptr< QgsExpression > mSubsetExpression; 81 : : QgsCoordinateTransform mTransform; 82 : : 83 : : }; 84 : : 85 : : ///@endcond PRIVATE 86 : : 87 : : #endif // QGSMEMORYFEATUREITERATOR_H