summaryrefslogtreecommitdiffstats
path: root/memory-classes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'memory-classes.cpp')
-rw-r--r--memory-classes.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/memory-classes.cpp b/memory-classes.cpp
new file mode 100644
index 0000000..19d17e9
--- /dev/null
+++ b/memory-classes.cpp
@@ -0,0 +1,53 @@
+#include "memory-classes.hpp"
+
+#include <iostream>
+
+
+lifo::lifo(std::size_t max_size_) : max_size(max_size_) {
+ m_storage = new int[max_size];
+}
+
+lifo::~lifo() {
+ if (m_storage != nullptr)
+ delete m_storage;
+}
+
+void lifo::push(int v) {
+ if (m_top >= max_size)
+ return;
+
+ m_storage[m_top++] = v;
+}
+
+int lifo::pop() {
+ if (m_top <= 0)
+ return 0;
+
+ return m_storage[--m_top];
+}
+
+
+int main(int argc, char *argv[]) {
+
+ // the lifo allocates a memory buffer
+ lifo stack(5);
+
+ stack.push(1);
+ stack.push(2);
+ stack.push(3);
+ stack.push(4);
+ stack.push(5);
+
+ std::cout << stack.pop() << std::endl;
+ std::cout << stack.pop() << std::endl;
+ std::cout << stack.pop() << std::endl;
+ std::cout << stack.pop() << std::endl;
+ std::cout << stack.pop() << std::endl;
+
+ return 0;
+
+ // here, when the scope ends the stack object is destroyed
+ // as it goes *out of scope*, and so the destructor is called
+ // which frees the memory
+
+}