Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Drop the cached coordinate sequence from abstract geometries
This cache was added to speed up expensive QgsAbstractGeometry::coordinateSequence
calls, when we were relying on coordinateSequence() for a whole
bunch of stuff like counting the number of points in a geometry.

Now it's used almost no-where in the code, so this cache is unlikely
to get filled and just makes geometries more memory heavy than
they need to be.
  • Loading branch information
nyalldawson committed Nov 14, 2017
1 parent 0c35dde commit 507a93c
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 33 deletions.
13 changes: 5 additions & 8 deletions src/core/geometry/qgscurve.cpp
Expand Up @@ -45,14 +45,12 @@ bool QgsCurve::isRing() const

QgsCoordinateSequence QgsCurve::coordinateSequence() const
{
if ( !mCoordinateSequence.isEmpty() )
return mCoordinateSequence;
QgsCoordinateSequence sequence;
sequence.append( QgsRingSequence() );
sequence.back().append( QgsPointSequence() );
points( sequence.back().back() );

mCoordinateSequence.append( QgsRingSequence() );
mCoordinateSequence.back().append( QgsPointSequence() );
points( mCoordinateSequence.back().back() );

return mCoordinateSequence;
return sequence;
}

bool QgsCurve::nextVertex( QgsVertexId &id, QgsPoint &vertex ) const
Expand Down Expand Up @@ -191,7 +189,6 @@ QPolygonF QgsCurve::asQPolygonF() const
void QgsCurve::clearCache() const
{
mBoundingBox = QgsRectangle();
mCoordinateSequence.clear();
QgsAbstractGeometry::clearCache();
}

Expand Down
1 change: 0 additions & 1 deletion src/core/geometry/qgscurve.h
Expand Up @@ -203,7 +203,6 @@ class CORE_EXPORT QgsCurve: public QgsAbstractGeometry
private:

mutable QgsRectangle mBoundingBox;
mutable QgsCoordinateSequence mCoordinateSequence;
};

#endif // QGSCURVEV2_H
19 changes: 7 additions & 12 deletions src/core/geometry/qgscurvepolygon.cpp
Expand Up @@ -724,32 +724,27 @@ void QgsCurvePolygon::transform( const QTransform &t )

QgsCoordinateSequence QgsCurvePolygon::coordinateSequence() const
{
if ( !mCoordinateSequence.isEmpty() )
return mCoordinateSequence;

mCoordinateSequence.append( QgsRingSequence() );
QgsCoordinateSequence sequence;
sequence.append( QgsRingSequence() );

if ( mExteriorRing )
{
mCoordinateSequence.back().append( QgsPointSequence() );
mExteriorRing->points( mCoordinateSequence.back().back() );
sequence.back().append( QgsPointSequence() );
mExteriorRing->points( sequence.back().back() );
}

QList<QgsCurve *>::const_iterator it = mInteriorRings.constBegin();
for ( ; it != mInteriorRings.constEnd(); ++it )
{
mCoordinateSequence.back().append( QgsPointSequence() );
( *it )->points( mCoordinateSequence.back().back() );
sequence.back().append( QgsPointSequence() );
( *it )->points( sequence.back().back() );
}

return mCoordinateSequence;
return sequence;
}

int QgsCurvePolygon::nCoordinates() const
{
if ( !mCoordinateSequence.isEmpty() )
return QgsAbstractGeometry::nCoordinates();

int count = 0;

if ( mExteriorRing )
Expand Down
12 changes: 3 additions & 9 deletions src/core/geometry/qgsgeometrycollection.cpp
Expand Up @@ -421,15 +421,12 @@ QgsRectangle QgsGeometryCollection::calculateBoundingBox() const
void QgsGeometryCollection::clearCache() const
{
mBoundingBox = QgsRectangle();
mCoordinateSequence.clear();
QgsAbstractGeometry::clearCache();
}

QgsCoordinateSequence QgsGeometryCollection::coordinateSequence() const
{
if ( !mCoordinateSequence.isEmpty() )
return mCoordinateSequence;

QgsCoordinateSequence sequence;
QVector< QgsAbstractGeometry * >::const_iterator geomIt = mGeometries.constBegin();
for ( ; geomIt != mGeometries.constEnd(); ++geomIt )
{
Expand All @@ -438,18 +435,15 @@ QgsCoordinateSequence QgsGeometryCollection::coordinateSequence() const
QgsCoordinateSequence::const_iterator cIt = geomCoords.constBegin();
for ( ; cIt != geomCoords.constEnd(); ++cIt )
{
mCoordinateSequence.push_back( *cIt );
sequence.push_back( *cIt );
}
}

return mCoordinateSequence;
return sequence;
}

int QgsGeometryCollection::nCoordinates() const
{
if ( !mCoordinateSequence.isEmpty() )
return QgsAbstractGeometry::nCoordinates();

int count = 0;

QVector< QgsAbstractGeometry * >::const_iterator geomIt = mGeometries.constBegin();
Expand Down
1 change: 0 additions & 1 deletion src/core/geometry/qgsgeometrycollection.h
Expand Up @@ -185,7 +185,6 @@ class CORE_EXPORT QgsGeometryCollection: public QgsAbstractGeometry
private:

mutable QgsRectangle mBoundingBox;
mutable QgsCoordinateSequence mCoordinateSequence;
};

// clazy:excludeall=qstring-allocations
Expand Down
3 changes: 1 addition & 2 deletions src/core/geometry/qgssurface.h
Expand Up @@ -75,9 +75,8 @@ class CORE_EXPORT QgsSurface: public QgsAbstractGeometry
#endif
protected:

virtual void clearCache() const override { mBoundingBox = QgsRectangle(); mCoordinateSequence.clear(); QgsAbstractGeometry::clearCache(); }
virtual void clearCache() const override { mBoundingBox = QgsRectangle(); QgsAbstractGeometry::clearCache(); }

mutable QgsCoordinateSequence mCoordinateSequence;
mutable QgsRectangle mBoundingBox;
};

Expand Down

0 comments on commit 507a93c

Please sign in to comment.