From 6c94dc9632baff9f47443c7e439a34297f06e9ce Mon Sep 17 00:00:00 2001 From: Song Minjae Date: Sun, 22 Jan 2017 14:20:24 +0900 Subject: [PATCH] iterative circular array for slightly better performance (test might be wrong tho) Former-commit-id: 95c4e576efca6e12af68c184ed5effa4b115d8c4 Former-commit-id: bbd74994f90f582d0643ebbbca58f40d097e2f82 --- src/net/torvald/terrarum/CircularArray.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/net/torvald/terrarum/CircularArray.kt b/src/net/torvald/terrarum/CircularArray.kt index 1452f6cb6..a84ce0777 100644 --- a/src/net/torvald/terrarum/CircularArray.kt +++ b/src/net/torvald/terrarum/CircularArray.kt @@ -27,11 +27,21 @@ class CircularArray(val size: Int) { } fun forEach(action: (T) -> Unit) { - if (tail >= head) { // queue not full + /*if (tail >= head) { // queue not full (head..tail - 1).map { buffer[it] }.forEach { action(it) } } else { // queue full (0..size - 1).map { buffer[(it + head) % size] }.forEach { action(it) } + }*/ + + // has slightly better iteration performance than lambda + if (tail >= head) { + for (i in head..tail - 1) + action(buffer[i]) + } + else { + for (i in 0..size - 1) + action(buffer[(i + head) % size]) } }