Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local Stack = {
- new = function(...)
- local data = {...}
- local obj = setmetatable({}, {
- __newindex = function(self, key, value)
- if type(value) == "function" then
- local func = setmetatable({}, {
- __call = function(_, ...)
- if rawequal(self, ({...})[1]) then
- return value(...)
- end
- return value(self, ...)
- end;
- })
- rawset(self, key, func)
- else
- rawset(self, key, value)
- end
- end;
- })
- function obj.push(self, value)
- data[#data+1] = value
- return self
- end
- function obj.pop(self)
- assert(not self.isEmpty(), "stack underflow")
- return table.remove(data)
- end
- function obj.size(self)
- return #data
- end
- function obj.isEmpty(self)
- return self.size() == 0
- end
- function obj.top(self)
- assert(not self.isEmpty(), "stack underflow")
- return data[#data]
- end
- return obj
- end
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement