diff options
author | Riku Isokoski <riksu9000@gmail.com> | 2022-10-02 21:58:04 +0300 |
---|---|---|
committer | JF <JF002@users.noreply.github.com> | 2023-01-05 15:13:05 +0100 |
commit | 5ef3c0d3be58b6741a9e443e6d2151de2b3a59bc (patch) | |
tree | 7976755030d9d7db436c0dc2bc0a3c1dbcb2f8ef /src/StaticStack.h | |
parent | 361756979578c3cc9de7a8c9b999c78ba48eec88 (diff) |
Implement a return app stack
Each opened app (screen) is pushed on a stack, which is then popped from
when returning instead of hard coded "previous apps". Return swipe and
refresh directions are automatically determined from the app transition.
Diffstat (limited to 'src/StaticStack.h')
-rw-r--r-- | src/StaticStack.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/StaticStack.h b/src/StaticStack.h new file mode 100644 index 00000000..64886604 --- /dev/null +++ b/src/StaticStack.h @@ -0,0 +1,38 @@ +#include <array> +#include <cstddef> + +template <typename T, size_t N> class StaticStack { +public: + T Pop(); + void Push(T element); + void Reset(); + T Top(); + +private: + std::array<T, N> elementArray; + // Number of elements in stack, points to the next empty slot + size_t stackPointer = 0; +}; + +// Returns random data when popping from empty array. +template <typename T, size_t N> T StaticStack<T, N>::Pop() { + if (stackPointer > 0) { + stackPointer--; + } + return elementArray[stackPointer]; +} + +template <typename T, size_t N> void StaticStack<T, N>::Push(T element) { + if (stackPointer < elementArray.size()) { + elementArray[stackPointer] = element; + stackPointer++; + } +} + +template <typename T, size_t N> void StaticStack<T, N>::Reset() { + stackPointer = 0; +} + +template <typename T, size_t N> T StaticStack<T, N>::Top() { + return elementArray[stackPointer - 1]; +} |