From 96b5dd1d028d90cb6f75c07da64288123447dc8f Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Wed, 9 Oct 2019 15:39:37 -0700 Subject: [PATCH] Modernize and simplify FastStack with a vector. --- FastStack.h | 67 ++++++++++++++--------------------------------------- 1 file changed, 18 insertions(+), 49 deletions(-) diff --git a/FastStack.h b/FastStack.h index edb06d2..dd39464 100644 --- a/FastStack.h +++ b/FastStack.h @@ -6,36 +6,30 @@ class FastStack { public: - FastStack(int size) : m_size(size), m_ptr(-1) { - m_stack = new PycRef[m_size]; - } + FastStack(int size) : m_ptr(-1) { m_stack.resize(size); } - FastStack(const FastStack& copy) : m_size(copy.m_size), m_ptr(copy.m_ptr) { - m_stack = new PycRef[m_size]; + FastStack(const FastStack& copy) + : m_stack(copy.m_stack), m_ptr(copy.m_ptr) { } - for (int i = 0; i <= m_ptr; i++) - m_stack[i] = copy.m_stack[i]; - } - - ~FastStack() { - delete[] m_stack; - } - - FastStack& operator=(const FastStack& copy) { - replace(copy); + FastStack& operator=(const FastStack& copy) + { + m_stack = copy.m_stack; + m_ptr = copy.m_ptr; return *this; } - void push(PycRef node) { - if (m_size == m_ptr + 1) - grow(1); + void push(PycRef node) + { + if (static_cast(m_stack.size()) == m_ptr + 1) + m_stack.emplace_back(nullptr); - m_stack[++m_ptr] = node; + m_stack[++m_ptr] = std::move(node); } - void pop() { + void pop() + { if (m_ptr > -1) - m_stack[m_ptr--] = NULL; + m_stack[m_ptr--] = nullptr; } PycRef top() const @@ -43,37 +37,12 @@ public: if (m_ptr > -1) return m_stack[m_ptr]; else - return NULL; - } - - void replace(const FastStack& copy) - { - if (© == this) - return; - delete[] m_stack; - - m_size = copy.m_size; - m_ptr = copy.m_ptr; - m_stack = new PycRef[m_size]; - for (int i = 0; i <= m_ptr; i++) - m_stack[i] = copy.m_stack[i]; - } - - void grow(int inc) - { - m_size += inc; - PycRef* tmp = new PycRef[m_size]; - - for (int i = 0; i <= m_ptr; i++) - tmp[i] = m_stack[i]; - - delete[] m_stack; - m_stack = tmp; + return nullptr; } private: - PycRef* m_stack; - int m_size, m_ptr; + std::vector> m_stack; + int m_ptr; }; typedef std::stack stackhist_t;