[FIR] Optimize TowerGroup

This commit is contained in:
simon.ogorodnik
2020-02-11 14:35:49 +03:00
parent d775852781
commit 4a1451ab63
@@ -41,9 +41,9 @@ sealed class TowerGroupKind(private val index: Int) : Comparable<TowerGroupKind>
} }
@Suppress("FunctionName", "unused", "PropertyName") @Suppress("FunctionName", "unused", "PropertyName")
class TowerGroup private constructor(private val list: List<TowerGroupKind>) : Comparable<TowerGroup> { class TowerGroup private constructor(private val kinds: Array<TowerGroupKind>) : Comparable<TowerGroup> {
companion object { companion object {
private fun kindOf(kind: TowerGroupKind): TowerGroup = TowerGroup(listOf(kind)) private fun kindOf(kind: TowerGroupKind): TowerGroup = TowerGroup(arrayOf(kind))
val Start = kindOf(TowerGroupKind.Start) val Start = kindOf(TowerGroupKind.Start)
@@ -64,7 +64,7 @@ class TowerGroup private constructor(private val list: List<TowerGroupKind>) : C
val Last = kindOf(TowerGroupKind.Last) val Last = kindOf(TowerGroupKind.Last)
} }
private fun kindOf(kind: TowerGroupKind): TowerGroup = TowerGroup(list + kind) private fun kindOf(kind: TowerGroupKind): TowerGroup = TowerGroup(kinds + kind)
fun Weakened(depth: Int) = kindOf(TowerGroupKind.Weakened(depth)) fun Weakened(depth: Int) = kindOf(TowerGroupKind.Weakened(depth))
@@ -82,15 +82,15 @@ class TowerGroup private constructor(private val list: List<TowerGroupKind>) : C
override fun compareTo(other: TowerGroup): Int { override fun compareTo(other: TowerGroup): Int {
var index = 0 var index = 0
while (index < list.size) { while (index < kinds.size) {
if (index >= other.list.size) return 1 if (index >= other.kinds.size) return 1
when { when {
list[index] < other.list[index] -> return -1 kinds[index] < other.kinds[index] -> return -1
list[index] > other.list[index] -> return 1 kinds[index] > other.kinds[index] -> return 1
} }
index++ index++
} }
if (index < other.list.size) return -1 if (index < other.kinds.size) return -1
return 0 return 0
} }
} }