Stack.h 970 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #ifndef STACK_H
  2. #define STACK_H
  3. #include "utils/List.h"
  4. template<typename T, int N>
  5. class Stack final {
  6. List<T> data;
  7. public:
  8. Stack& push(const T& t) {
  9. data.add(t);
  10. return *this;
  11. }
  12. Stack& push(T&& t) {
  13. data.add(std::move(t));
  14. return *this;
  15. }
  16. template<typename... Args>
  17. Stack& push(Args&&... args) {
  18. data.add(std::forward<Args>(args)...);
  19. return *this;
  20. }
  21. void clear() {
  22. data.clear();
  23. }
  24. bool pop() {
  25. if(data.getLength() <= 0) {
  26. return true;
  27. }
  28. data.remove(data.getLength() - 1);
  29. return false;
  30. }
  31. bool isEmpty() const {
  32. return data.getLength() == 0;
  33. }
  34. T& peek() {
  35. return data[data.getLength() - 1];
  36. }
  37. const T& peek() const {
  38. return data[data.getLength() - 1];
  39. }
  40. template<int L>
  41. void toString(StringBuffer<L>& s) const {
  42. s.append(data);
  43. }
  44. };
  45. #endif