123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #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
|