[core] Switch to ankerl::unordered_dense

Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
This commit is contained in:
x7z4w
2025-11-24 17:34:56 +00:00
parent 03132c6877
commit ef6522ed28
282 changed files with 4386 additions and 1456 deletions

View File

@@ -196,7 +196,15 @@ m2::PointF GetOffset(int offsetX, int offsetY)
bool IsSymbolRoadShield(ftypes::RoadShield const & shield)
{
return shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Green || shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Blue || shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Red || shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Turkey || shield.m_type == ftypes::RoadShieldType::US_Interstate || shield.m_type == ftypes::RoadShieldType::US_Highway || shield.m_type == ftypes::RoadShieldType::Italy_Autostrada || shield.m_type == ftypes::RoadShieldType::Hungary_Green || shield.m_type == ftypes::RoadShieldType::Hungary_Blue;
return shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Green ||
shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Blue ||
shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Red ||
shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Turkey ||
shield.m_type == ftypes::RoadShieldType::US_Interstate ||
shield.m_type == ftypes::RoadShieldType::US_Highway ||
shield.m_type == ftypes::RoadShieldType::Italy_Autostrada ||
shield.m_type == ftypes::RoadShieldType::Hungary_Green ||
shield.m_type == ftypes::RoadShieldType::Hungary_Blue;
}
std::string GetRoadShieldSymbolName(ftypes::RoadShield const & shield, double fontScale)
@@ -232,8 +240,7 @@ std::string GetRoadShieldSymbolName(ftypes::RoadShield const & shield, double fo
bool IsColoredRoadShield(ftypes::RoadShield const & shield)
{
return shield.m_type == ftypes::RoadShieldType::Default ||
shield.m_type == ftypes::RoadShieldType::Generic_White ||
return shield.m_type == ftypes::RoadShieldType::Default || shield.m_type == ftypes::RoadShieldType::Generic_White ||
shield.m_type == ftypes::RoadShieldType::Generic_Green ||
shield.m_type == ftypes::RoadShieldType::Generic_Blue ||
shield.m_type == ftypes::RoadShieldType::Generic_Red ||
@@ -337,11 +344,15 @@ dp::Color GetRoadShieldTextColor(dp::Color const & baseColor, ftypes::RoadShield
float GetRoadShieldOutlineWidth(float baseWidth, ftypes::RoadShield const & shield)
{
if (shield.m_type == ftypes::RoadShieldType::Generic_White || shield.m_type == ftypes::RoadShieldType::Generic_Green ||
shield.m_type == ftypes::RoadShieldType::Generic_Blue || shield.m_type == ftypes::RoadShieldType::Generic_Red ||
shield.m_type == ftypes::RoadShieldType::Generic_Orange || shield.m_type == ftypes::RoadShieldType::Generic_Pill_White || shield.m_type == ftypes::RoadShieldType::Generic_Pill_Green ||
shield.m_type == ftypes::RoadShieldType::Generic_Pill_Blue || shield.m_type == ftypes::RoadShieldType::Generic_Pill_Red ||
shield.m_type == ftypes::RoadShieldType::Generic_Pill_Orange || shield.m_type == ftypes::RoadShieldType::UK_Highway)
if (shield.m_type == ftypes::RoadShieldType::Generic_White ||
shield.m_type == ftypes::RoadShieldType::Generic_Green || shield.m_type == ftypes::RoadShieldType::Generic_Blue ||
shield.m_type == ftypes::RoadShieldType::Generic_Red || shield.m_type == ftypes::RoadShieldType::Generic_Orange ||
shield.m_type == ftypes::RoadShieldType::Generic_Pill_White ||
shield.m_type == ftypes::RoadShieldType::Generic_Pill_Green ||
shield.m_type == ftypes::RoadShieldType::Generic_Pill_Blue ||
shield.m_type == ftypes::RoadShieldType::Generic_Pill_Red ||
shield.m_type == ftypes::RoadShieldType::Generic_Pill_Orange ||
shield.m_type == ftypes::RoadShieldType::UK_Highway)
return 0.0f;
return baseWidth;

View File

@@ -9,9 +9,10 @@
#include <mutex>
#include <string>
#include <unordered_map>
#include <vector>
#include "3party/ankerl/unordered_dense.h"
namespace df
{
struct DrapeApiLineData
@@ -52,7 +53,7 @@ struct DrapeApiLineData
class DrapeApi
{
public:
using TLines = std::unordered_map<std::string, DrapeApiLineData>;
using TLines = ankerl::unordered_dense::map<std::string, DrapeApiLineData>;
DrapeApi() = default;

View File

@@ -10,7 +10,7 @@
#include "platform/settings.hpp"
#include <unordered_map>
#include "3party/ankerl/unordered_dense.h"
namespace df
{
@@ -240,7 +240,7 @@ void DrapeEngine::UpdateUserMarks(UserMarksProvider * provider, bool firstTime)
auto justCreatedIdCollection = make_unique_dp<IDCollections>();
auto removedIdCollection = make_unique_dp<IDCollections>();
std::unordered_map<kml::MarkGroupId, drape_ptr<IDCollections>> groupsVisibleIds;
ankerl::unordered_dense::map<kml::MarkGroupId, drape_ptr<IDCollections>> groupsVisibleIds;
auto const groupFilter = [&](kml::MarkGroupId groupId)
{ return provider->IsGroupVisible(groupId) && (provider->GetBecameVisibleGroupIds().count(groupId) == 0); };

View File

@@ -15,9 +15,10 @@
#include <memory>
#include <mutex>
#include <numeric>
#include <unordered_map>
#include <vector>
#include "3party/ankerl/unordered_dense.h"
namespace df
{
class DrapeMeasurer
@@ -183,7 +184,7 @@ private:
uint32_t m_minFPS = std::numeric_limits<uint32_t>::max();
double m_totalFPS = 0.0;
uint32_t m_totalFPSCount = 0;
std::unordered_map<uint32_t, uint32_t> m_fpsDistribution;
ankerl::unordered_dense::map<uint32_t, uint32_t> m_fpsDistribution;
std::chrono::time_point<std::chrono::steady_clock> m_startImmediateRenderingTime;
uint32_t m_immediateRenderingMinFps = std::numeric_limits<uint32_t>::max();

View File

@@ -1821,8 +1821,8 @@ void FrontendRenderer::BuildOverlayTree(ScreenBase const & modelView)
BeginUpdateOverlayTree(modelView);
for (auto const layerId :
{DepthLayer::OverlayUnderBuildingLayer, DepthLayer::OverlayLayer, DepthLayer::RoutingBottomMarkLayer, DepthLayer::RoutingMarkLayer})
for (auto const layerId : {DepthLayer::OverlayUnderBuildingLayer, DepthLayer::OverlayLayer,
DepthLayer::RoutingBottomMarkLayer, DepthLayer::RoutingMarkLayer})
{
RenderLayer & overlay = m_layers[static_cast<size_t>(layerId)];
overlay.Sort(make_ref(m_overlayTree));
@@ -2512,7 +2512,9 @@ void FrontendRenderer::UpdateScene(ScreenBase const & modelView)
uint32_t constexpr kMaxGenerationRange = 5;
TileKey const & key = group->GetTileKey();
return ((GetDepthLayer(group->GetState()) == DepthLayer::OverlayLayer || GetDepthLayer(group->GetState()) == DepthLayer::OverlayUnderBuildingLayer) && key.m_zoomLevel > GetCurrentZoom()) ||
return ((GetDepthLayer(group->GetState()) == DepthLayer::OverlayLayer ||
GetDepthLayer(group->GetState()) == DepthLayer::OverlayUnderBuildingLayer) &&
key.m_zoomLevel > GetCurrentZoom()) ||
(m_maxGeneration - key.m_generation > kMaxGenerationRange) ||
(group->IsUserMark() && (m_maxUserMarksGeneration - key.m_userMarksGeneration > kMaxGenerationRange));
};

View File

@@ -11,11 +11,12 @@
#include <functional>
#include <string>
#include <unordered_set>
#include "3party/ankerl/unordered_dense.h"
namespace gui
{
using TAlphabet = std::unordered_set<strings::UniChar>;
using TAlphabet = ankerl::unordered_dense::set<strings::UniChar>;
class StaticLabel
{

View File

@@ -16,12 +16,14 @@
#include <set>
#include <vector>
#include "3party/ankerl/unordered_dense.h"
namespace
{
struct MetalineData
{
std::vector<FeatureID> m_features;
std::set<FeatureID> m_reversed;
ankerl::unordered_dense::set<FeatureID> m_reversed;
};
std::vector<MetalineData> ReadMetalinesFromFile(MwmSet::MwmId const & mwmId)
@@ -58,12 +60,12 @@ std::vector<MetalineData> ReadMetalinesFromFile(MwmSet::MwmId const & mwmId)
}
}
std::map<FeatureID, std::vector<m2::PointD>> ReadPoints(df::MapDataProvider & model, MetalineData const & metaline)
ankerl::unordered_dense::map<FeatureID, std::vector<m2::PointD>> ReadPoints(df::MapDataProvider & model,
MetalineData const & metaline)
{
auto features = metaline.m_features;
std::sort(features.begin(), features.end());
std::map<FeatureID, std::vector<m2::PointD>> result;
ankerl::unordered_dense::map<FeatureID, std::vector<m2::PointD>> result;
model.ReadFeatures([&metaline, &result](FeatureType & ft)
{
ft.ParseGeometry(FeatureType::BEST_GEOMETRY);
@@ -89,7 +91,7 @@ std::map<FeatureID, std::vector<m2::PointD>> ReadPoints(df::MapDataProvider & mo
return result;
}
std::vector<m2::PointD> MergePoints(std::map<FeatureID, std::vector<m2::PointD>> && points,
std::vector<m2::PointD> MergePoints(ankerl::unordered_dense::map<FeatureID, std::vector<m2::PointD>> && points,
std::vector<FeatureID> const & featuresOrder)
{
if (points.size() == 1)
@@ -164,8 +166,10 @@ bool ReadMetalineTask::UpdateCache(MetalineCache & cache)
if (m_metalines.empty())
return false;
cache.merge(m_metalines);
m_metalines.clear();
// Merge maps
auto data = std::move(m_metalines).extract();
cache.insert(std::make_move_iterator(data.begin()), std::make_move_iterator(data.end()));
return true;
}

View File

@@ -5,13 +5,14 @@
#include "geometry/spline.hpp"
#include <atomic>
#include <map>
#include "3party/ankerl/unordered_dense.h"
namespace df
{
class MapDataProvider;
using MetalineCache = std::map<FeatureID, m2::SharedSpline>;
using MetalineCache = ankerl::unordered_dense::map<FeatureID, m2::SharedSpline>;
class ReadMetalineTask
{

View File

@@ -7,12 +7,17 @@ namespace
using namespace df;
std::array<RenderStateExtension, static_cast<size_t>(DepthLayer::LayersCount)> kStateExtensions = {
RenderStateExtension(DepthLayer::GeometryLayer), RenderStateExtension(DepthLayer::Geometry3dLayer),
RenderStateExtension(DepthLayer::UserLineLayer), RenderStateExtension(DepthLayer::OverlayLayer),
RenderStateExtension(DepthLayer::TransitSchemeLayer), RenderStateExtension(DepthLayer::UserMarkLayer),
RenderStateExtension(DepthLayer::RoutingBottomMarkLayer), RenderStateExtension(DepthLayer::RoutingMarkLayer),
RenderStateExtension(DepthLayer::SearchMarkLayer), RenderStateExtension(DepthLayer::GuiLayer),
RenderStateExtension(DepthLayer::OverlayUnderBuildingLayer)};
RenderStateExtension(DepthLayer::GeometryLayer),
RenderStateExtension(DepthLayer::Geometry3dLayer),
RenderStateExtension(DepthLayer::UserLineLayer),
RenderStateExtension(DepthLayer::OverlayLayer),
RenderStateExtension(DepthLayer::TransitSchemeLayer),
RenderStateExtension(DepthLayer::UserMarkLayer),
RenderStateExtension(DepthLayer::RoutingBottomMarkLayer),
RenderStateExtension(DepthLayer::RoutingMarkLayer),
RenderStateExtension(DepthLayer::SearchMarkLayer),
RenderStateExtension(DepthLayer::GuiLayer),
RenderStateExtension(DepthLayer::OverlayUnderBuildingLayer)};
struct RenderStateExtensionFactory
{

View File

@@ -10,9 +10,10 @@
#include "geometry/polyline2d.hpp"
#include <functional>
#include <unordered_map>
#include <vector>
#include "3party/ankerl/unordered_dense.h"
namespace dp
{
class TextureManager;
@@ -48,6 +49,6 @@ private:
m2::PolylineD m_polyline;
double m_baseDepthIndex = 0.0;
};
std::unordered_map<dp::DrapeID, RouteCacheData> m_routeCache;
ankerl::unordered_dense::map<dp::DrapeID, RouteCacheData> m_routeCache;
};
} // namespace df

View File

@@ -14,10 +14,10 @@
#include <chrono>
#include <functional>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include "3party/ankerl/unordered_dense.h"
namespace df
{
extern std::string const kRouteColor;
@@ -119,13 +119,13 @@ private:
double m_distanceFromBegin;
bool m_followingEnabled;
Subroutes m_subroutes;
std::unordered_set<dp::DrapeID> m_hiddenSubroutes;
ankerl::unordered_dense::set<dp::DrapeID> m_hiddenSubroutes;
PreviewPointsRequestCallback m_previewPointsRequest;
std::vector<drape_ptr<CirclesPackRenderData>> m_previewRenderData;
std::vector<std::pair<CirclesPackHandle *, size_t>> m_previewHandlesCache;
bool m_waitForPreviewRenderData;
std::unordered_map<dp::DrapeID, PreviewInfo> m_previewSegments;
ankerl::unordered_dense::map<dp::DrapeID, PreviewInfo> m_previewSegments;
m2::PointD m_previewPivot = m2::PointD::Zero();
};
} // namespace df

View File

@@ -363,7 +363,9 @@ void RuleDrawer::ProcessLineStyle(FeatureType & f, Stylist const & s, TInsertSha
df::RoadClass m_roadClass;
};
static Checker const checkers[] = {
{{HighwayClass::Motorway, HighwayClass::Trunk, HighwayClass::Primary}, kRoadClass0ZoomLevel, df::RoadClass::Class0},
{{HighwayClass::Motorway, HighwayClass::Trunk, HighwayClass::Primary},
kRoadClass0ZoomLevel,
df::RoadClass::Class0},
{{HighwayClass::Secondary, HighwayClass::Tertiary}, kRoadClass1ZoomLevel, df::RoadClass::Class1},
{{HighwayClass::LivingStreet, HighwayClass::Service, HighwayClass::ServiceMinor},
kRoadClass2ZoomLevel,

View File

@@ -17,7 +17,8 @@
#include <functional>
#include <map>
#include <string>
#include <unordered_set>
#include "3party/ankerl/unordered_dense.h"
class FeatureType;
@@ -69,7 +70,7 @@ private:
ref_ptr<EngineContext> m_context;
CustomFeaturesContextPtr m_customFeaturesContext;
int8_t m_deviceLang;
std::unordered_set<m2::Spline const *> m_usedMetalines;
ankerl::unordered_dense::set<m2::Spline const *> m_usedMetalines;
m2::RectD m_globalRect;
double m_currentScaleGtoP;

View File

@@ -60,15 +60,17 @@ void CaptionDescription::Init(FeatureType & f, int8_t deviceLang, int zoomLevel,
f.GetReadableName(true /* allowTranslit */, deviceLang, out);
}
m_mainText = out.GetPrimary();
if (ftypes::IsPublicTransportStopChecker::Instance()(feature::TypesHolder(f))) {
if (ftypes::IsPublicTransportStopChecker::Instance()(feature::TypesHolder(f)))
{
auto const lRef = f.GetMetadata(feature::Metadata::FMD_LOCAL_REF);
if (!m_mainText.empty() && !lRef.empty()) {
//m_mainText.append(" (").append(lRef).append(")");
if (!m_mainText.empty() && !lRef.empty())
{
// m_mainText.append(" (").append(lRef).append(")");
m_auxText = lRef;
}
}
ASSERT(m_auxText.empty() || !m_mainText.empty(), ("auxText without mainText"));
uint8_t constexpr kLongCaptionsMaxZoom = 4;

View File

@@ -19,9 +19,10 @@
#include <array>
#include <functional>
#include <map>
#include <unordered_map>
#include <vector>
#include "3party/ankerl/unordered_dense.h"
namespace dp
{
class GraphicsContext;
@@ -150,7 +151,7 @@ struct TrafficCircleStaticVertex
TTexCoord m_colorTexCoord;
};
using TrafficTexCoords = std::unordered_map<size_t, glsl::vec2>;
using TrafficTexCoords = ankerl::unordered_dense::map<size_t, glsl::vec2>;
class TrafficGenerator final
{

View File

@@ -654,7 +654,7 @@ void TransitSchemeBuilder::CollectShapesPT(TransitDisplayInfo const & transitDis
CHECK_EQUAL(transitDisplayInfo.m_transitVersion, ::transit::TransitVersion::AllPublicTransport, ());
float curDepth = kBaseLineDepth;
std::unordered_map<std::string, float> routeColorToDepth;
ankerl::unordered_dense::map<std::string, float> routeColorToDepth;
for (auto const & [lineId, metaData] : transitDisplayInfo.m_linesMetadataPT)
{

View File

@@ -112,7 +112,7 @@ struct StopNodeParamsPT
std::map<::transit::TransitId, StopInfo> m_stopsInfo;
};
using IdToIdSet = std::unordered_map<::transit::TransitId, ::transit::IdSet>;
using IdToIdSet = ankerl::unordered_dense::map<::transit::TransitId, ::transit::IdSet>;
struct RouteSegment
{

View File

@@ -53,7 +53,7 @@ private:
MarksIDGroups const & indexesGroups, ref_ptr<dp::TextureManager> textures,
dp::Batcher & batcher) const;
std::unordered_set<kml::MarkGroupId> m_groupsVisibility;
ankerl::unordered_dense::set<kml::MarkGroupId> m_groupsVisibility;
MarksIDGroups m_groups;
UserMarksRenderCollection m_marks;

View File

@@ -10,7 +10,8 @@
#include <limits>
#include <memory>
#include <unordered_map>
#include "3party/ankerl/unordered_dense.h"
namespace df
{
@@ -65,8 +66,8 @@ struct UserLineRenderParams
std::vector<m2::SharedSpline> m_splines;
};
using UserMarksRenderCollection = std::unordered_map<kml::MarkId, drape_ptr<UserMarkRenderParams>>;
using UserLinesRenderCollection = std::unordered_map<kml::MarkId, drape_ptr<UserLineRenderParams>>;
using UserMarksRenderCollection = ankerl::unordered_dense::map<kml::MarkId, drape_ptr<UserMarkRenderParams>>;
using UserLinesRenderCollection = ankerl::unordered_dense::map<kml::MarkId, drape_ptr<UserLineRenderParams>>;
struct UserMarkRenderData
{