-- ----------------------------------------------------------------------- -- dng -- ------------------------------------------------------------------------ -- Copyright (c) 2022 Steph Enders -- -- This software is provided 'as-is', without any express or implied -- warranty. In no event will the authors be held liable for any damages -- arising from the use of this software. -- -- Permission is granted to anyone to use this software for any purpose, -- including commercial applications, and to alter it and redistribute it -- freely, subject to the following restrictions: -- -- 1. The origin of this software must not be misrepresented; you must not -- claim that you wrote the original software. If you use this software -- in a product, an acknowledgment in the product documentation would -- be appreciated but is not required. -- -- 2. Altered source versions must be plainly marked as such, and must not -- be misrepresented as being the original software. -- -- 3. This notice may not be removed or altered from any source -- distribution. -- -- ----------------------------------------------------------------------- Queue = {} function Queue:new() o = { first = 1, top = 0, data = {} } self.__index = self return setmetatable(o, self) end function Queue:push(val) local top = self.top + 1 self.top = top self.data[top] = val end function Queue:pop() if self:empty() then return nil end local val = self.data[self.first] self.data[self.first] = nil self.first = self.first + 1 return val end function Queue:empty() return self.top < self.first end return Queue