mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-24 12:05:54 -04:00
Perf: Yet more caching ruleset objects' filter results
This commit is contained in:
parent
12f0a80732
commit
18db0d4f2e
@ -504,9 +504,16 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
val cachedMatchesFilterResult = HashMap<String, Boolean>()
|
||||||
|
|
||||||
/** Implements [UniqueParameterType.BuildingFilter] */
|
/** Implements [UniqueParameterType.BuildingFilter] */
|
||||||
fun matchesFilter(filter: String): Boolean {
|
fun matchesFilter(filter: String): Boolean {
|
||||||
return MultiFilter.multiFilter(filter, ::matchesSingleFilter)
|
val cachedAnswer = cachedMatchesFilterResult[filter]
|
||||||
|
if (cachedAnswer != null) return cachedAnswer
|
||||||
|
val newAnswer = MultiFilter.multiFilter(filter, { matchesSingleFilter(it) })
|
||||||
|
cachedMatchesFilterResult[filter] = newAnswer
|
||||||
|
return newAnswer
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun matchesSingleFilter(filter: String): Boolean {
|
private fun matchesSingleFilter(filter: String): Boolean {
|
||||||
|
@ -12,11 +12,7 @@ import com.unciv.models.ruleset.RejectionReason
|
|||||||
import com.unciv.models.ruleset.RejectionReasonType
|
import com.unciv.models.ruleset.RejectionReasonType
|
||||||
import com.unciv.models.ruleset.Ruleset
|
import com.unciv.models.ruleset.Ruleset
|
||||||
import com.unciv.models.ruleset.RulesetObject
|
import com.unciv.models.ruleset.RulesetObject
|
||||||
import com.unciv.models.ruleset.unique.Conditionals
|
import com.unciv.models.ruleset.unique.*
|
||||||
import com.unciv.models.ruleset.unique.StateForConditionals
|
|
||||||
import com.unciv.models.ruleset.unique.Unique
|
|
||||||
import com.unciv.models.ruleset.unique.UniqueTarget
|
|
||||||
import com.unciv.models.ruleset.unique.UniqueType
|
|
||||||
import com.unciv.models.stats.Stat
|
import com.unciv.models.stats.Stat
|
||||||
import com.unciv.ui.components.extensions.getNeedMoreAmountString
|
import com.unciv.ui.components.extensions.getNeedMoreAmountString
|
||||||
import com.unciv.ui.components.extensions.toPercent
|
import com.unciv.ui.components.extensions.toPercent
|
||||||
@ -360,9 +356,16 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction {
|
|||||||
else ruleset.units[replaces!!]!!
|
else ruleset.units[replaces!!]!!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
val cachedMatchesFilterResult = HashMap<String, Boolean>()
|
||||||
|
|
||||||
/** Implements [UniqueParameterType.BaseUnitFilter][com.unciv.models.ruleset.unique.UniqueParameterType.BaseUnitFilter] */
|
/** Implements [UniqueParameterType.BaseUnitFilter][com.unciv.models.ruleset.unique.UniqueParameterType.BaseUnitFilter] */
|
||||||
fun matchesFilter(filter: String): Boolean {
|
fun matchesFilter(filter: String): Boolean {
|
||||||
return MultiFilter.multiFilter(filter, ::matchesSingleFilter)
|
val cachedAnswer = cachedMatchesFilterResult[filter]
|
||||||
|
if (cachedAnswer != null) return cachedAnswer
|
||||||
|
val newAnswer = MultiFilter.multiFilter(filter, { matchesSingleFilter(it) })
|
||||||
|
cachedMatchesFilterResult[filter] = newAnswer
|
||||||
|
return newAnswer
|
||||||
}
|
}
|
||||||
|
|
||||||
fun matchesSingleFilter(filter: String): Boolean {
|
fun matchesSingleFilter(filter: String): Boolean {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user