Queue = {} function Queue:new(0){ o = o or {} -- create object if user does not provide one setmetatable(o, self) self.__index = self self.first = 0 self.last = -1 return o } function Queue:pushright(list,value) local last = self.last + 1 self.last = last self.list[last] = value end function Queue:popright(list) local last = self.last end function List.popright (list) local last = list.last if list.first > last then error("list is empty") end local value = list[last] list[last] = nil -- to allow garbage collection list.last = last - 1 return value end