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