Skip to content

Instantly share code, notes, and snippets.

@nicloay
Last active January 18, 2017 12:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nicloay/276920005d20b1fa3e4f0f8732a9950d to your computer and use it in GitHub Desktop.
Save nicloay/276920005d20b1fa3e4f0f8732a9950d to your computer and use it in GitHub Desktop.
local Queue = {}
Queue.__index = Queue
function Queue.new()
local self = setmetatable({}, Queue)
self.first = 0
self.last = -1
self.queue = {}
return self
end
function Queue:is_empty()
return self.first > self.last
end
function Queue:pushleft (value)
self.first = self.first - 1
self.queue[first] = value
end
function Queue:pushright (value)
self.last = self.last + 1
self.queue[self.last] = value
end
function Queue:popleft ()
if self:is_empty() then
return nil
end
local value = self.queue[self.first]
self.queue[self.first] = nil -- to allow garbage collection
self.first = self.first + 1
return value
end
function Queue.popright ()
if self:is_empty() then
return nil
end
local value = self.queue[self.last]
self.queue[self.last] = nil -- to allow garbage collection
self.last = self.last - 1
return value
end
return Queue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment