19#ifndef QgsVectorLayerCache_H
20#define QgsVectorLayerCache_H
23#include <unordered_set>
57 class CORE_EXPORT QgsCachedFeature
70 , mAllAttributesFetched( allAttributesFetched )
71 , mGeometryFetched( geometryFetched )
73 mFeature = std::make_unique<QgsFeature>( feat );
80 mCache->featureRemoved( mFeature->id() );
83 inline const QgsFeature *feature() {
return mFeature.get(); }
85 bool allAttributesFetched()
const;
87 bool geometryFetched()
const;
90 std::unique_ptr<QgsFeature> mFeature;
92 bool mAllAttributesFetched =
true;
93 bool mGeometryFetched =
false;
96 Q_DISABLE_COPY( QgsCachedFeature )
157 void setCacheAddedAttributes(
bool cacheAddedAttributes );
172 void setFullCache(
bool fullCache );
318 sipRes = sipCpp->featureCount();
322 int __bool__()
const;
333 long long featureCount()
const;
416 void onAttributeValueChanged(
QgsFeatureId fid,
int field,
const QVariant &value );
417 void onJoinAttributeValueChanged(
QgsFeatureId fid,
int field,
const QVariant &value );
420 void attributeAdded(
int field );
421 void attributeDeleted(
int field );
427 void connectJoinedLayers()
const;
429 inline void cacheFeature(
QgsFeature &feat,
bool allAttributesFetched,
bool geometryFetched =
false )
431 QgsCachedFeature *cachedFeature =
new QgsCachedFeature( feat,
this, allAttributesFetched, geometryFetched || mCacheGeometry );
432 mCache.insert( feat.
id(), cachedFeature );
433 if ( mCacheUnorderedKeys.find( feat.
id() ) == mCacheUnorderedKeys.end() )
435 mCacheUnorderedKeys.insert( feat.
id() );
436 mCacheOrderedKeys.emplace_back( feat.
id() );
440 QgsVectorLayer *mLayer =
nullptr;
441 QCache< QgsFeatureId, QgsCachedFeature > mCache;
446 std::unordered_set< QgsFeatureId > mCacheUnorderedKeys;
447 std::deque< QgsFeatureId > mCacheOrderedKeys;
449 bool mCacheGeometry =
true;
450 bool mFullCache =
false;
451 QList<QgsAbstractCacheIndex *> mCacheIndices;
457 friend class QgsCachedFeature;
WkbType
The WKB type describes the number of dimensions a geometry has.
Abstract base class for cache indices.
Delivers features from the cache.
Represents a coordinate reference system (CRS).
Wrapper for iterator of features from vector data provider or vector layer.
Wraps a request for features to a vector layer (or directly its vector data provider).
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Container of fields for a vector layer.
A geometry is the spatial representation of a feature.
A rectangle specified with double values.
bool hasFullCache() const
Returns true if the cache is complete, ie it contains all features.
QgsFeatureIterator getFeatures(const QString &expression)
Query the layer for features matching a given expression.
void finished()
When filling the cache, this signal gets emitted once the cache is fully initialized.
void invalidated()
The cache has been invalidated and cleared.
void setCacheSize(int cacheSize)
Sets the maximum number of features to keep in the cache.
QgsFeatureIterator getFeatures(const QgsRectangle &rectangle)
Query the layer for the features which intersect the specified rectangle.
void featureAdded(QgsFeatureId fid)
Emitted when a new feature has been added to the layer and this cache.
QgsFeatureIterator getFeatures(const QgsFeatureIds &fids)
Query the layer for the features with the given ids.
QgsFeature getFeature(QgsFeatureId fid)
Query the layer for the feature with the given id.
void cachedLayerDeleted()
Is emitted when the cached layer is deleted.
friend class QgsCachedFeatureWriterIterator
void attributeValueChanged(QgsFeatureId fid, int field, const QVariant &value)
Emitted when an attribute is changed.
void progress(int i, bool &cancel)
When filling the cache, this signal gets emitted periodically to notify about the progress and to be ...
friend class TestVectorLayerCache
QgsVectorLayer * layer()
Returns the layer to which this cache belongs.
bool cacheGeometry() const
Returns true if the cache will fetch and cache feature geometries.
int cacheSize()
Returns the maximum number of features this cache will hold.
friend class QgsCachedFeatureIterator
QgsVectorLayerCache(QgsVectorLayer *layer, int cacheSize, QObject *parent=nullptr)
void setCacheGeometry(bool cacheGeometry)
Enable or disable the caching of geometries.
QgsFeatureIterator getFeatures(const QgsFeatureRequest &featureRequest=QgsFeatureRequest())
Query this VectorLayerCache for features.
Represents a vector layer which manages a vector based dataset.
QSet< QgsFeatureId > QgsFeatureIds
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
QList< int > QgsAttributeList