module(... or "Queue",package.seeall) --Initializes a new queue --@return Index table function new () return {head = 0, tail = -1} end --Adds element to the queue --Inserts are FIFO --@param queue Queue --@param value Value of new element function add (queue, value) local last = queue.tail + 1 queue.tail = last queue[last] = value end --Removes element from queue --Deletions are FIFO --@param queue Queue --@return True if operation was succesfull --@return Error string function remove (queue) local first = queue.head if first > queue.tail then return false, "Queue is empty" end local value = queue[first] queue[first] = nil queue.head = first + 1 return true, value end --Returns true if queue is empty --@param queue Queue --@return True if given queue is empty function is_empty(queue) if queue.head > queue.tail then return true end return false end