Files
Pyarmor-Static-Unpack-1shot/FastStack.h
2009-07-26 10:07:13 +00:00

48 lines
1.0 KiB
C++

#ifndef _PYC_FASTSTACK_H
#define _PYC_FASTSTACK_H
#include "ASTNode.h"
#include <stack>
class FastStack {
public:
FastStack(int size) : m_size(size), m_ptr(-1)
{ m_stack = new PycRef<ASTNode>[m_size]; }
FastStack(const FastStack& copy) : m_size(copy.m_size), m_ptr(copy.m_ptr)
{
m_stack = new PycRef<ASTNode>[m_size];
for (int i=0; i<m_size; i++)
m_stack[i] = copy.m_stack[i];
}
~FastStack()
{ delete[] m_stack; }
void push(PycRef<ASTNode> node)
{ m_stack[++m_ptr] = node; }
void pop()
{ m_stack[m_ptr--] = Node_NULL; }
PycRef<ASTNode> top() const
{ return m_stack[m_ptr]; }
void replace(const FastStack& copy)
{
for (int i=0; i<=copy.m_ptr; i++)
m_stack[i] = copy.m_stack[i];
for (int i=copy.m_ptr+1; i<=m_ptr; i++)
m_stack[i] = Node_NULL;
m_ptr = copy.m_ptr;
}
private:
PycRef<ASTNode>* m_stack;
int m_size, m_ptr;
};
typedef std::stack<FastStack> stackhist_t;
#endif