diff options
| author | Finlay Davidson <finlay.davidson@coderclass.nl> | 2023-03-16 21:49:44 +0100 |
|---|---|---|
| committer | Riku Isokoski <riksu9000@gmail.com> | 2023-03-27 22:12:32 +0000 |
| commit | 47931f41d579371c9c78ae7061317bf28848db2f (patch) | |
| tree | a7f2668f902c4c71cac56035b5f6fbf67919cb7b /src/utility/StaticStack.h | |
| parent | 2ba8b179679aa92be46ac7688542b68f2695e04d (diff) | |
staticstack: Move to src/utility
Diffstat (limited to 'src/utility/StaticStack.h')
| -rw-r--r-- | src/utility/StaticStack.h | 47 |
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]; + } + } +} |
