Make tick list even faster
This commit is contained in:
parent
3672b9c3ac
commit
6b3e80b629
@ -19,6 +19,8 @@ class TickList : ITickable {
|
|||||||
var ticks = 0
|
var ticks = 0
|
||||||
private set
|
private set
|
||||||
|
|
||||||
|
private var nothingToDo = true
|
||||||
|
|
||||||
inner class Timer(val timerTicks: Int, val runnable: Runnable) {
|
inner class Timer(val timerTicks: Int, val runnable: Runnable) {
|
||||||
val ringAt = ticks + timerTicks
|
val ringAt = ticks + timerTicks
|
||||||
|
|
||||||
@ -26,6 +28,8 @@ class TickList : ITickable {
|
|||||||
private set
|
private set
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
nothingToDo = false
|
||||||
|
|
||||||
if (timers.isEmpty()) {
|
if (timers.isEmpty()) {
|
||||||
timers.addLast(this)
|
timers.addLast(this)
|
||||||
} else {
|
} else {
|
||||||
@ -68,6 +72,7 @@ class TickList : ITickable {
|
|||||||
conditionalValveTime.add(ticker)
|
conditionalValveTime.add(ticker)
|
||||||
} else {
|
} else {
|
||||||
conditional.addFirst(ticker)
|
conditional.addFirst(ticker)
|
||||||
|
nothingToDo = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,6 +90,7 @@ class TickList : ITickable {
|
|||||||
onceValveTime.add(ticker)
|
onceValveTime.add(ticker)
|
||||||
} else {
|
} else {
|
||||||
once.addFirst(ticker)
|
once.addFirst(ticker)
|
||||||
|
nothingToDo = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,6 +108,7 @@ class TickList : ITickable {
|
|||||||
alwaysValveTime.add(ticker)
|
alwaysValveTime.add(ticker)
|
||||||
} else {
|
} else {
|
||||||
always.add(ticker)
|
always.add(ticker)
|
||||||
|
nothingToDo = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,6 +138,10 @@ class TickList : ITickable {
|
|||||||
IConditionalTickable.wrap(tickerCondition, ticker), condition, reason)
|
IConditionalTickable.wrap(tickerCondition, ticker), condition, reason)
|
||||||
|
|
||||||
override fun tick() {
|
override fun tick() {
|
||||||
|
if (nothingToDo) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (inTicker) {
|
if (inTicker) {
|
||||||
throw ConcurrentModificationException("Already ticking")
|
throw ConcurrentModificationException("Already ticking")
|
||||||
}
|
}
|
||||||
@ -139,6 +150,15 @@ class TickList : ITickable {
|
|||||||
inTicker = true
|
inTicker = true
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
var nothingToDo = true
|
||||||
|
val conditional = conditional
|
||||||
|
val once = once
|
||||||
|
val always = always
|
||||||
|
val alwaysValveTime = alwaysValveTime
|
||||||
|
val conditionalValveTime = conditionalValveTime
|
||||||
|
val onceValveTime = onceValveTime
|
||||||
|
val timers = timers
|
||||||
|
|
||||||
if (conditional.isNotEmpty()) {
|
if (conditional.isNotEmpty()) {
|
||||||
val iterator = conditional.iterator()
|
val iterator = conditional.iterator()
|
||||||
|
|
||||||
@ -147,6 +167,7 @@ class TickList : ITickable {
|
|||||||
iterator.remove()
|
iterator.remove()
|
||||||
} else {
|
} else {
|
||||||
ticker.tick()
|
ticker.tick()
|
||||||
|
nothingToDo = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -163,11 +184,14 @@ class TickList : ITickable {
|
|||||||
for (ticker in always) {
|
for (ticker in always) {
|
||||||
ticker.tick()
|
ticker.tick()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nothingToDo = false
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alwaysValveTime.isNotEmpty()) {
|
if (alwaysValveTime.isNotEmpty()) {
|
||||||
always.addAll(alwaysValveTime)
|
always.addAll(alwaysValveTime)
|
||||||
alwaysValveTime.clear()
|
alwaysValveTime.clear()
|
||||||
|
nothingToDo = false
|
||||||
}
|
}
|
||||||
|
|
||||||
if (conditionalValveTime.isNotEmpty()) {
|
if (conditionalValveTime.isNotEmpty()) {
|
||||||
@ -176,6 +200,7 @@ class TickList : ITickable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
conditionalValveTime.clear()
|
conditionalValveTime.clear()
|
||||||
|
nothingToDo = false
|
||||||
}
|
}
|
||||||
|
|
||||||
if (onceValveTime.isNotEmpty()) {
|
if (onceValveTime.isNotEmpty()) {
|
||||||
@ -184,9 +209,11 @@ class TickList : ITickable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onceValveTime.clear()
|
onceValveTime.clear()
|
||||||
|
nothingToDo = false
|
||||||
}
|
}
|
||||||
|
|
||||||
while (timers.isNotEmpty()) {
|
while (timers.isNotEmpty()) {
|
||||||
|
nothingToDo = false
|
||||||
val head = timers.first()
|
val head = timers.first()
|
||||||
|
|
||||||
if (head.ringAt <= ticks) {
|
if (head.ringAt <= ticks) {
|
||||||
@ -196,6 +223,8 @@ class TickList : ITickable {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.nothingToDo = nothingToDo
|
||||||
} finally {
|
} finally {
|
||||||
inTicker = false
|
inTicker = false
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user