Table Stack

i
-- Table (implementation-dependant, in practice array list) based stack
-- Worst-case linear time for basic operations, in practice amortized constant time and significantly less overhead
-- Merely a OOP wrapper for Lua's table library
local table_stack = {}

function table_stack.new()
	return {}
end

function table_stack:empty()
	return self[1] == nil
end

function table_stack:push(value)
	table.insert(self, value)
end

function table_stack:top()
	return self[#self]
end

function table_stack:pop()
	return table.remove(self)
end

return require("class")(table_stack)