local Queue ={}
function Queue:new()
local t = {firstId = -1, lastId = 0}
setmetatable(t, self)
self.__index = self
return t
end
function Queue:pushFirst(data)
local newFirstId = self.firstId + 1
self.firstId = newFirstId
self[newFirstId] = data
end
function Queue:pushLast(data)
local newLastId = self.lastId - 1
self.lastId = newLastId
self[newLastId] = data
end
function Queue:popFirst()
if self.firstId < self.lastId then
error("Queue is empty")
end
local data = self[self.firstId]
self[self.firstId] = nil
self.firstId = self.firstId - 1
return data
end
function Queue:popLast()
if self.firstId < self.lastId then
error("Queue is empty")
end
local data = self[self.lastId]
self[self.lastId] = nil
self.lastId = self.lastId + 1
return data
end