import std.dsa.collection.Collection
class Stack<T> is Collection<T> {
list<T> items
func len() returns int {
return self.items.size()
}
func is_empty() returns bool {
return self.items.is_empty()
}
func clear() returns void {
while !self.items.is_empty() {
self.items.pop_back()
}
return
}
func to_list() returns list<T> {
return self.items
}
func push(T value) returns void {
self.items.push_back(value)
return
}
func pop() returns optional<T> {
return self.items.pop_back()
}
func peek() returns optional<T> {
if self.items.is_empty() {
return none
}
return self.items.get(self.items.size() - 1)
}
func contains(T value) returns bool {
int i = 0
while i < self.items.size() {
if self.items[i] == value {
return true
}
i = i + 1
}
return false
}
common func from_list(list<T> values) returns Stack<T> {
auto out = Stack<T>.new()
out.items = values
return out
}
}