aboutsummaryrefslogtreecommitdiffstats
path: root/src/utility
diff options
context:
space:
mode:
authorFinlay Davidson <finlay.davidson@coderclass.nl>2023-03-16 21:49:44 +0100
committerRiku Isokoski <riksu9000@gmail.com>2023-03-27 22:12:32 +0000
commit47931f41d579371c9c78ae7061317bf28848db2f (patch)
treea7f2668f902c4c71cac56035b5f6fbf67919cb7b /src/utility
parent2ba8b179679aa92be46ac7688542b68f2695e04d (diff)
staticstack: Move to src/utility
Diffstat (limited to 'src/utility')
-rw-r--r--src/utility/StaticStack.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/utility/StaticStack.h b/src/utility/StaticStack.h
new file mode 100644
index 00000000..40df9354
--- /dev/null
+++ b/src/utility/StaticStack.h
@@ -0,0 +1,47 @@
+#include <array>
+#include <cstddef>
+
+namespace Pinetime {
+ namespace Utility {
+ 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];
+ }
+ }
+}