Added more functionality to the Queue class.

master
Kalabasa 2016-02-01 22:09:08 +08:00
parent 7a9318b02e
commit dbb81e6c7a
1 changed files with 44 additions and 1 deletions

View File

@ -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