summaryrefslogtreecommitdiff
path: root/src/StaticStack.h
diff options
context:
space:
mode:
authorRiku Isokoski <riksu9000@gmail.com>2022-10-02 21:58:04 +0300
committerJF <JF002@users.noreply.github.com>2023-01-05 15:13:05 +0100
commit5ef3c0d3be58b6741a9e443e6d2151de2b3a59bc (patch)
tree7976755030d9d7db436c0dc2bc0a3c1dbcb2f8ef /src/StaticStack.h
parent361756979578c3cc9de7a8c9b999c78ba48eec88 (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.h38
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];
+}