From e928b885fbfd057e13e7fc242cb3665cde51da9a Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Fri, 31 Jan 2025 11:12:36 +1000 Subject: [PATCH] [pal] Always iterate through labeled layers in original layer order Ensures that labeling solutions are deterministic --- src/core/pal/pal.cpp | 9 +++++++-- src/core/pal/pal.h | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/core/pal/pal.cpp b/src/core/pal/pal.cpp index dda39bd116bf..83d3b4831238 100644 --- a/src/core/pal/pal.cpp +++ b/src/core/pal/pal.cpp @@ -88,11 +88,16 @@ Layer *Pal::addLayer( QgsAbstractLabelProvider *provider, const QString &layerNa { mMutex.lock(); - Q_ASSERT( mLayers.find( provider ) == mLayers.end() ); +#ifdef QGISDEBUG + for ( const auto &it : mLayers ) + { + Q_ASSERT( it.first != provider ); + } +#endif std::unique_ptr< Layer > layer = std::make_unique< Layer >( provider, layerName, arrangement, defaultPriority, active, toLabel, this ); Layer *res = layer.get(); - mLayers.insert( std::pair>( provider, std::move( layer ) ) ); + mLayers.emplace_back( std::make_pair( provider, std::move( layer ) ) ); mMutex.unlock(); // cppcheck-suppress returnDanglingLifetime diff --git a/src/core/pal/pal.h b/src/core/pal/pal.h index 0f8a2192b351..dc9c5991a5c7 100644 --- a/src/core/pal/pal.h +++ b/src/core/pal/pal.h @@ -279,7 +279,7 @@ namespace pal private: - std::unordered_map< QgsAbstractLabelProvider *, std::unique_ptr< Layer > > mLayers; + std::vector< std::pair< QgsAbstractLabelProvider *, std::unique_ptr< Layer > > > mLayers; QList< QgsAbstractLabelingEngineRule * > mRules;