#ifndef STACK_H #define STACK_H #include "utils/List.h" template class Stack final { List data; public: bool push(const T& t) { return data.add(t); } bool push(T&& t) { return data.add(std::move(t)); } template bool push(Args&&... args) { return data.add(std::forward(args)...); } void clear() { data.clear(); } bool pop() { return data.remove(data.getLength() - 1); } bool isEmpty() const { return data.getLength() == 0; } T& peek() { return data[data.getLength() - 1]; } const T& peek() const { return data[data.getLength() - 1]; } template void toString(StringBuffer& s) const { s.append(data); } }; #endif