summaryrefslogtreecommitdiff
path: root/src/StaticStack.h
diff options
context:
space:
mode:
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];
+}