From 81e665e9d8b8af91c188ddedfaab7312912a0210 Mon Sep 17 00:00:00 2001 From: Graham Date: Sun, 16 May 2021 13:04:50 +0100 Subject: [PATCH] Add UniqueQueue Signed-off-by: Graham --- .../org/openrs2/util/collect/UniqueQueue.kt | 25 +++++++++++++++++++ .../openrs2/util/collect/UniqueQueueTest.kt | 21 ++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 util/src/main/kotlin/org/openrs2/util/collect/UniqueQueue.kt create mode 100644 util/src/test/kotlin/org/openrs2/util/collect/UniqueQueueTest.kt diff --git a/util/src/main/kotlin/org/openrs2/util/collect/UniqueQueue.kt b/util/src/main/kotlin/org/openrs2/util/collect/UniqueQueue.kt new file mode 100644 index 00000000..85ab246b --- /dev/null +++ b/util/src/main/kotlin/org/openrs2/util/collect/UniqueQueue.kt @@ -0,0 +1,25 @@ +package org.openrs2.util.collect + +public class UniqueQueue { + private val queue = ArrayDeque() + private val set = mutableSetOf() + + public fun add(v: T): Boolean { + if (set.add(v)) { + queue.addLast(v) + return true + } + + return false + } + + public fun poll(): T? { + val v = queue.removeFirstOrNull() + if (v != null) { + set.remove(v) + return v + } + + return null + } +} diff --git a/util/src/test/kotlin/org/openrs2/util/collect/UniqueQueueTest.kt b/util/src/test/kotlin/org/openrs2/util/collect/UniqueQueueTest.kt new file mode 100644 index 00000000..09302967 --- /dev/null +++ b/util/src/test/kotlin/org/openrs2/util/collect/UniqueQueueTest.kt @@ -0,0 +1,21 @@ +package org.openrs2.util.collect + +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertNull +import kotlin.test.assertTrue + +class UniqueQueueTest { + @Test + fun testAddPoll() { + val queue = UniqueQueue() + assertTrue(queue.add("a")) + assertTrue(queue.add("b")) + assertFalse(queue.add("a")) + + assertEquals("a", queue.poll()) + assertEquals("b", queue.poll()) + assertNull(queue.poll()) + } +}