From 7f2b98be17758bcdd50845ed22bc228b37f3f1c4 Mon Sep 17 00:00:00 2001 From: yairm210 Date: Wed, 3 Apr 2024 09:15:38 +0300 Subject: [PATCH] Add cache for terrain filter results --- core/src/com/unciv/models/ruleset/tile/Terrain.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/core/src/com/unciv/models/ruleset/tile/Terrain.kt b/core/src/com/unciv/models/ruleset/tile/Terrain.kt index 8bcc92b4ac..ab43d6090e 100644 --- a/core/src/com/unciv/models/ruleset/tile/Terrain.kt +++ b/core/src/com/unciv/models/ruleset/tile/Terrain.kt @@ -144,8 +144,15 @@ class Terrain : RulesetStatsObject() { return textList } + /** Terrain filter matching is "pure" - input always returns same output, and it's called a bajillion times */ + val cachedMatchesFilterResult = HashMap() + fun matchesFilter(filter: String): Boolean { - return MultiFilter.multiFilter(filter, { matchesSingleFilter(it) }) + val cachedAnswer = cachedMatchesFilterResult[filter] + if (cachedAnswer != null) return cachedAnswer + val newAnswer = MultiFilter.multiFilter(filter, { matchesSingleFilter(it) }) + cachedMatchesFilterResult[filter] = newAnswer + return newAnswer } /** Implements [UniqueParameterType.TerrainFilter][com.unciv.models.ruleset.unique.UniqueParameterType.TerrainFilter] */