From dbb81e6c7a841b97af3728c47380cbb6e4b7ce1f Mon Sep 17 00:00:00 2001 From: Kalabasa Date: Mon, 1 Feb 2016 22:09:08 +0800 Subject: [PATCH] Added more functionality to the Queue class. --- mods/defense/Queue.lua | 45 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/mods/defense/Queue.lua b/mods/defense/Queue.lua index 2b09342..3cec856 100644 --- a/mods/defense/Queue.lua +++ b/mods/defense/Queue.lua @@ -1,6 +1,6 @@ Queue = {} function Queue.new () - return {first = 0, last = -1} + return {first = 1, last = 0} end function Queue.push (queue, value) @@ -15,9 +15,52 @@ function Queue.pop (queue) local value = queue[first] queue[first] = nil queue.first = first + 1 + + -- resize internal array + first = queue.first + local last = queue.last + if first * 2 > last then + for i = first,last do + queue[i - first + 1] = queue[i] + queue[i] = nil + end + queue.first = 1 + queue.last = last - first + 1 + end + return value end +function Queue.push_back (queue, value) + local first = queue.first + if first > 1 then + first = first - 1 + queue.first = first + queue[first] = value + else + -- shift elements to right + local last = queue.last + for i = last,first,-1 do + queue[i + 1] = queue[i] + end + + queue[1] = value + queue.first = 1 + queue.last = last + 1 + end +end + +function Queue.remove (queue, index) + local last = queue.last - 1 + queue.last = last + + for i = index,last-1 do + queue[i] = queue[i + 1] + end + + queue[last + 1] = nil +end + function Queue.size (queue) return queue.last - queue.first + 1 end \ No newline at end of file