aboutsummaryrefslogtreecommitdiff
path: root/src/app/stack.tpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/stack.tpp')
-rw-r--r--src/app/stack.tpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/app/stack.tpp b/src/app/stack.tpp
new file mode 100644
index 0000000..bcdafc0
--- /dev/null
+++ b/src/app/stack.tpp
@@ -0,0 +1,45 @@
+#pragma once
+
+#include "stack.hpp"
+
+#include <iostream>
+#include <stdexcept>
+
+template <typename Item>
+Stack<Item>::Stack(uint64_t capacity)
+{
+ _items.reserve(capacity);
+}
+
+template <typename Item>
+void Stack<Item>::push(Item item)
+{
+ if (_items.size() == _items.capacity())
+ {
+ throw std::overflow_error("Tried to push when stack is full");
+ }
+
+ _items.push_back(item);
+}
+
+template <typename Item>
+void Stack<Item>::pop()
+{
+ if (_items.empty())
+ {
+ throw std::underflow_error("Tried to pop when stack size is 0");
+ }
+
+ _items.pop_back();
+}
+
+template <typename Item>
+Item Stack<Item>::peek()
+{
+ if (_items.empty())
+ {
+ throw std::underflow_error("Tried to peek when stack size is 0");
+ }
+
+ return _items.back();
+}