From e28ea6cab1f19fb8c52e3e4b8e1eff867196f511 Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Mon, 8 Jul 2024 15:57:06 +0200 Subject: [PATCH] Recast: add path compression to disjoint set algorithm Improve performance for future lookups. --- .../recast/Detour/Include/DetourNavMeshBuilder.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/thirdparty/recast/Detour/Include/DetourNavMeshBuilder.h b/src/thirdparty/recast/Detour/Include/DetourNavMeshBuilder.h index 309b6f0f..eb1f5c65 100644 --- a/src/thirdparty/recast/Detour/Include/DetourNavMeshBuilder.h +++ b/src/thirdparty/recast/Detour/Include/DetourNavMeshBuilder.h @@ -136,12 +136,14 @@ public: return newId; } - inline int find(const int id) const + int find(const int id) const { - if (parent[id] != id) - return find(parent[id]); + int& parentRef = parent[id]; - return id; + if (parentRef != id) + parentRef = find(parentRef); + + return parentRef; } void setUnion(const int x, const int y) { @@ -166,7 +168,7 @@ public: private: rdIntArray rank; - rdIntArray parent; + mutable rdIntArray parent; }; /// Builds navigation mesh disjoint poly groups from the provided navmesh.