Skip to content

Commit

Permalink
Protect base data provider classes
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Dec 16, 2022
1 parent 3374480 commit ada0c69
Show file tree
Hide file tree
Showing 8 changed files with 323 additions and 9 deletions.
18 changes: 17 additions & 1 deletion src/core/mesh/qgsmeshdataprovider.cpp
Expand Up @@ -19,6 +19,7 @@
#include "qgsmeshdataprovider.h"
#include "qgsmeshdataprovidertemporalcapabilities.h"
#include "qgsrectangle.h"
#include "qgsthreadingutils.h"

QgsMeshDataProvider::QgsMeshDataProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options,
QgsDataProvider::ReadFlags flags )
Expand All @@ -28,29 +29,42 @@ QgsMeshDataProvider::QgsMeshDataProvider( const QString &uri, const QgsDataProvi

QgsMeshDataProviderTemporalCapabilities *QgsMeshDataProvider::temporalCapabilities()
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return mTemporalCapabilities.get();
}

const QgsMeshDataProviderTemporalCapabilities *QgsMeshDataProvider::temporalCapabilities() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return mTemporalCapabilities.get();
}

void QgsMeshDataProvider::setTemporalUnit( QgsUnitTypes::TemporalUnit unit )
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

const QgsUnitTypes::TemporalUnit oldUnit = mTemporalCapabilities->temporalUnit();
mTemporalCapabilities->setTemporalUnit( unit );
if ( oldUnit != unit )
reloadData();
}

QgsMeshDriverMetadata QgsMeshDataProvider::driverMetadata() const { return QgsMeshDriverMetadata();}
QgsMeshDriverMetadata QgsMeshDataProvider::driverMetadata() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return QgsMeshDriverMetadata();
}

QgsMeshDatasetIndex QgsMeshDatasetSourceInterface::datasetIndexAtTime(
const QDateTime &referenceTime,
int groupIndex, qint64 time,
QgsMeshDataProviderTemporalCapabilities::MatchingTemporalDatasetMethod method ) const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

const QDateTime requestDateTime = referenceTime.addMSecs( time );
qint64 providerTime;
const QDateTime providerReferenceTime = mTemporalCapabilities->referenceTime();
Expand All @@ -74,6 +88,8 @@ QgsMeshDatasetIndex QgsMeshDatasetSourceInterface::datasetIndexAtTime(

QList<QgsMeshDatasetIndex> QgsMeshDatasetSourceInterface::datasetIndexInTimeInterval( const QDateTime &referenceTime, int groupIndex, qint64 time1, qint64 time2 ) const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

const QDateTime requestDateTime = referenceTime.addMSecs( time1 );
qint64 providerTime1;
qint64 providerTime2;
Expand Down
30 changes: 29 additions & 1 deletion src/core/pointcloud/qgspointclouddataprovider.cpp
Expand Up @@ -22,6 +22,7 @@
#include "qgspointcloudrequest.h"
#include "qgsgeometryengine.h"
#include "qgspointcloudstatscalculator.h"
#include "qgsthreadingutils.h"

#include <mutex>
#include <QDebug>
Expand All @@ -41,27 +42,37 @@ QgsPointCloudDataProvider::~QgsPointCloudDataProvider() = default;

QgsPointCloudDataProvider::Capabilities QgsPointCloudDataProvider::capabilities() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return QgsPointCloudDataProvider::NoCapabilities;
}

bool QgsPointCloudDataProvider::hasValidIndex() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

QgsPointCloudIndex *lIndex = index();
return lIndex && lIndex->isValid();
}

QgsGeometry QgsPointCloudDataProvider::polygonBounds() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return QgsGeometry::fromRect( extent() );
}

QVariantMap QgsPointCloudDataProvider::originalMetadata() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return QVariantMap();
}

QgsPointCloudRenderer *QgsPointCloudDataProvider::createRenderer( const QVariantMap & ) const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return nullptr;
}

Expand Down Expand Up @@ -173,11 +184,15 @@ QMap<int, QString> QgsPointCloudDataProvider::translatedDataFormatIds()

bool QgsPointCloudDataProvider::hasStatisticsMetadata() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return index() && index()->hasStatisticsMetadata();
}

QVariant QgsPointCloudDataProvider::metadataStatistic( const QString &attribute, QgsStatisticalSummary::Statistic statistic ) const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

QgsPointCloudIndex *pcIndex = index();
if ( pcIndex )
{
Expand All @@ -188,6 +203,8 @@ QVariant QgsPointCloudDataProvider::metadataStatistic( const QString &attribute,

QVariantList QgsPointCloudDataProvider::metadataClasses( const QString &attribute ) const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

QgsPointCloudIndex *pcIndex = index();
if ( pcIndex )
{
Expand All @@ -198,6 +215,8 @@ QVariantList QgsPointCloudDataProvider::metadataClasses( const QString &attribut

QVariant QgsPointCloudDataProvider::metadataClassStatistic( const QString &attribute, const QVariant &value, QgsStatisticalSummary::Statistic statistic ) const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

QgsPointCloudIndex *pcIndex = index();
if ( pcIndex )
{
Expand All @@ -206,9 +225,10 @@ QVariant QgsPointCloudDataProvider::metadataClassStatistic( const QString &attri
return QVariant();
}


QgsPointCloudStatistics QgsPointCloudDataProvider::metadataStatistics()
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

QgsPointCloudIndex *pcIndex = index();
if ( pcIndex )
{
Expand Down Expand Up @@ -277,6 +297,8 @@ QVector<QVariantMap> QgsPointCloudDataProvider::identify(
const QgsGeometry &extentGeometry,
const QgsDoubleRange &extentZRange, int pointsLimit )
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

QVector<QVariantMap> acceptedPoints;

QgsPointCloudIndex *index = this->index();
Expand Down Expand Up @@ -307,6 +329,8 @@ QVector<IndexedPointCloudNode> QgsPointCloudDataProvider::traverseTree(
const QgsGeometry &extentGeometry,
const QgsDoubleRange &extentZRange )
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

QVector<IndexedPointCloudNode> nodes;

const QgsDoubleRange nodeZRange = pc->nodeZRange( n );
Expand Down Expand Up @@ -334,6 +358,8 @@ QVector<IndexedPointCloudNode> QgsPointCloudDataProvider::traverseTree(

bool QgsPointCloudDataProvider::setSubsetString( const QString &subset, bool updateFeatureCount )
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

Q_UNUSED( updateFeatureCount )
const auto i = index();
if ( !i )
Expand All @@ -348,6 +374,8 @@ bool QgsPointCloudDataProvider::setSubsetString( const QString &subset, bool upd

QString QgsPointCloudDataProvider::subsetString() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return mSubsetString;
}

24 changes: 24 additions & 0 deletions src/core/providers/copc/qgscopcprovider.cpp
Expand Up @@ -25,6 +25,8 @@
#include "qgsapplication.h"
#include "qgsprovidersublayerdetails.h"
#include "qgsproviderutils.h"
#include "qgsthreadingutils.h"

#include <QIcon>

///@cond PRIVATE
Expand Down Expand Up @@ -59,21 +61,29 @@ QgsCopcProvider::~QgsCopcProvider() = default;

QgsCoordinateReferenceSystem QgsCopcProvider::crs() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return mIndex->crs();
}

QgsRectangle QgsCopcProvider::extent() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return mIndex->extent();
}

QgsPointCloudAttributeCollection QgsCopcProvider::attributes() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return mIndex->attributes();
}

bool QgsCopcProvider::isValid() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

if ( !mIndex.get() )
{
return false;
Expand All @@ -83,26 +93,36 @@ bool QgsCopcProvider::isValid() const

QString QgsCopcProvider::name() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return QStringLiteral( "copc" );
}

QString QgsCopcProvider::description() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return QStringLiteral( "Point Clouds COPC" );
}

QgsPointCloudIndex *QgsCopcProvider::index() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return mIndex.get();
}

qint64 QgsCopcProvider::pointCount() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return mIndex->pointCount();
}

void QgsCopcProvider::loadIndex( )
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

// Index already loaded -> no need to load
if ( mIndex->isValid() )
return;
Expand All @@ -111,11 +131,15 @@ void QgsCopcProvider::loadIndex( )

QVariantMap QgsCopcProvider::originalMetadata() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return mIndex->originalMetadata();
}

void QgsCopcProvider::generateIndex()
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

//no-op, index is always generated
}

Expand Down
23 changes: 23 additions & 0 deletions src/core/providers/ept/qgseptprovider.cpp
Expand Up @@ -25,6 +25,7 @@
#include "qgsapplication.h"
#include "qgsprovidersublayerdetails.h"
#include "qgsproviderutils.h"
#include "qgsthreadingutils.h"

#include <QFileInfo>
#include <QIcon>
Expand Down Expand Up @@ -56,46 +57,64 @@ QgsEptProvider::~QgsEptProvider() = default;

QgsCoordinateReferenceSystem QgsEptProvider::crs() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return mIndex->crs();
}

QgsRectangle QgsEptProvider::extent() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return mIndex->extent();
}

QgsPointCloudAttributeCollection QgsEptProvider::attributes() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return mIndex->attributes();
}

bool QgsEptProvider::isValid() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return mIndex->isValid();
}

QString QgsEptProvider::name() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return QStringLiteral( "ept" );
}

QString QgsEptProvider::description() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return QStringLiteral( "Point Clouds EPT" );
}

QgsPointCloudIndex *QgsEptProvider::index() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return mIndex.get();
}

qint64 QgsEptProvider::pointCount() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return mIndex->pointCount();
}

void QgsEptProvider::loadIndex( )
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

if ( mIndex->isValid() )
return;

Expand All @@ -104,11 +123,15 @@ void QgsEptProvider::loadIndex( )

QVariantMap QgsEptProvider::originalMetadata() const
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

return mIndex->originalMetadata();
}

void QgsEptProvider::generateIndex()
{
QGIS_PROTECT_QOBJECT_THREAD_ACCESS

//no-op, index is always generated
}

Expand Down

0 comments on commit ada0c69

Please sign in to comment.