QGIS API Documentation  2.7.0-Master
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
qgsvectorlayercache.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsvectorlayercache.h
3  Cache features of a vector layer
4  -------------------
5  begin : January 2013
6  copyright : (C) Matthias Kuhn
7  email : matthias dot kuhn at gmx dot ch
8 
9  ***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 
19 #ifndef QgsVectorLayerCache_H
20 #define QgsVectorLayerCache_H
21 
22 #include <QCache>
23 
24 #include "qgsvectorlayer.h"
25 
28 
38 class CORE_EXPORT QgsVectorLayerCache : public QObject
39 {
40  Q_OBJECT
41 
42  private:
48  class QgsCachedFeature
49  {
50  public:
57  QgsCachedFeature( const QgsFeature& feat, QgsVectorLayerCache* vlCache )
58  : mCache( vlCache )
59  {
60  mFeature = new QgsFeature( feat );
61  }
62 
63  ~QgsCachedFeature()
64  {
65  // That's the reason we need this wrapper:
66  // Inform the cache that this feature has been removed
67  mCache->featureRemoved( mFeature->id() );
68  delete mFeature;
69  }
70 
71  inline const QgsFeature* feature() { return mFeature; }
72 
73  private:
74  QgsFeature* mFeature;
75  QgsVectorLayerCache* mCache;
76 
77  friend class QgsVectorLayerCache;
78  Q_DISABLE_COPY( QgsCachedFeature )
79  };
80 
81  public:
82  QgsVectorLayerCache( QgsVectorLayer* layer, int cacheSize, QObject* parent = NULL );
84 
91  void setCacheSize( int cacheSize );
92 
100  int cacheSize();
101 
107  void setCacheGeometry( bool cacheGeometry );
108 
109 
115  void setCacheSubsetOfAttributes( const QgsAttributeList& attributes );
116 
123  void setCacheAddedAttributes( bool cacheAddedAttributes );
124 
135  void setFullCache( bool fullCache );
136 
145  void addCacheIndex( QgsAbstractCacheIndex *cacheIndex );
146 
157 
163  bool isFidCached( const QgsFeatureId fid );
164 
172  bool featureAtId( QgsFeatureId featureId, QgsFeature &feature, bool skipCache = false );
173 
179  bool removeCachedFeature( QgsFeatureId fid );
180 
185 
186  protected:
195  void requestCompleted( QgsFeatureRequest featureRequest, QgsFeatureIds fids );
196 
204  void featureRemoved( QgsFeatureId fid );
205 
216  bool checkInformationCovered( const QgsFeatureRequest& featureRequest );
217 
218 
219  signals:
220 
230  void progress( int i, bool& cancel );
231 
235  void finished();
236 
242  void cachedLayerDeleted();
243 
248  void attributeValueChanged( const QgsFeatureId& fid, const int& field, const QVariant &value );
249 
257  void featureAdded( QgsFeatureId fid );
258 
259  private slots:
260  void onAttributeValueChanged( QgsFeatureId fid, int field, const QVariant& value );
261  void featureDeleted( QgsFeatureId fid );
262  void onFeatureAdded( QgsFeatureId fid );
263  void attributeAdded( int field );
264  void attributeDeleted( int field );
265  void geometryChanged( QgsFeatureId fid, QgsGeometry& geom );
266  void layerDeleted();
267  void updatedFields();
268 
269  private:
270 
271  inline void cacheFeature( QgsFeature& feat )
272  {
273  QgsCachedFeature* cachedFeature = new QgsCachedFeature( feat, this );
274  mCache.insert( feat.id(), cachedFeature );
275  }
276 
277  QgsVectorLayer* mLayer;
278  QCache< QgsFeatureId, QgsCachedFeature > mCache;
279 
280  bool mCacheGeometry;
281  bool mFullCache;
282  QList<QgsAbstractCacheIndex*> mCacheIndices;
283 
284  QgsAttributeList mCachedAttributes;
285 
288  friend class QgsCachedFeature;
289 };
290 #endif // QgsVectorLayerCache_H
QgsFeatureId id() const
Get the feature id for this feature.
Definition: qgsfeature.cpp:100
Wrapper for iterator of features from vector data provider or vector layer.
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeature.h:317
bool removeCachedFeature(QgsFeatureId fid)
Removes the feature identified by fid from the cache if present.
bool isFidCached(const QgsFeatureId fid)
Check if a certain feature id is cached.
QgsVectorLayer * layer()
Returns the layer to which this cache belongs.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Definition: qgsfeature.h:113
void setCacheSubsetOfAttributes(const QgsAttributeList &attributes)
Set the subset of attributes to be cached.
void featureAdded(QgsFeatureId fid)
Is emitted, when a new feature has been added to the layer and this cache.
Uses another iterator as backend and writes features to the cache.
void progress(int i, bool &cancel)
When filling the cache, this signal gets emitted periodically to notify about the progress and to be ...
This class wraps a request for features to a vector layer (or directly its vector data provider)...
QList< int > QgsAttributeList
void cachedLayerDeleted()
Is emitted when the cached layer is deleted.
bool checkInformationCovered(const QgsFeatureRequest &featureRequest)
Checks if the information required to complete the request is cached.
This class caches features of a given QgsVectorLayer.
void attributeValueChanged(const QgsFeatureId &fid, const int &field, const QVariant &value)
Is emitted when an attribute is changed.
Abstract base class for cache indices.
Definition: qgscacheindex.h:29
void setCacheGeometry(bool cacheGeometry)
Enable or disable the caching of geometries.
void setFullCache(bool fullCache)
This enables or disables full caching.
bool featureAtId(QgsFeatureId featureId, QgsFeature &feature, bool skipCache=false)
Gets the feature at the given feature id.
void setCacheSize(int cacheSize)
Sets the maximum number of features to keep in the cache.
void requestCompleted(QgsFeatureRequest featureRequest, QgsFeatureIds fids)
Gets called, whenever the full list of feature ids for a certain request is known.
qint64 QgsFeatureId
Definition: qgsfeature.h:30
QgsVectorLayerCache(QgsVectorLayer *layer, int cacheSize, QObject *parent=NULL)
Delivers features from the cache.
void featureRemoved(QgsFeatureId fid)
Gets called, whenever a feature has been removed.
int cacheSize()
Returns the maximum number of features this cache will hold.
void addCacheIndex(QgsAbstractCacheIndex *cacheIndex)
Adds a QgsAbstractCacheIndex to this cache.
Represents a vector layer which manages a vector based data sets.
QgsFeatureIterator getFeatures(const QgsFeatureRequest &featureRequest=QgsFeatureRequest())
Query this VectorLayerCache for features.
void finished()
When filling the cache, this signal gets emitted once the cache is fully initialized.
void setCacheAddedAttributes(bool cacheAddedAttributes)
If this is enabled, the subset of cached attributes will automatically be extended to also include ne...