tmstack.h
来自「1.小型编译器 2。支持整数」· C头文件 代码 · 共 135 行
H
135 行
#ifndef _TM_STACK_H
#define _TM_STACK_H
#include "Globals.h"
class NoMem{
public:
NoMem(){printf("NoMem\n");};
};
class OutOfBounds{
public:
OutOfBounds(){printf("OutOfBounds\n");};
};
class TmStack{
public:
TmStack(int MaxTmStackSize = 1024);
~TmStack () {}
bool IsEmpty() const {return m_nTop == 0; }
bool IsFull() const {return m_nTop == m_nMaxTop ; }
int Top() const;
double TopD() const;
void Push(const int x);
void PushC(const char x);
void PushD(const double x);
int Pop();
double PopD();
char PopC();
private :
int m_nTop; // 栈顶
int m_nMaxTop; // 最大的栈顶值
BYTE m_sStack[DADDR_SIZE];
} ;
TmStack::TmStack(int MaxTmStackSize)
{
m_nMaxTop = MaxTmStackSize;
m_nTop = 0;
}
int TmStack::Top() const
{
static int x;
// 返回栈顶元素
if (IsEmpty())
throw OutOfBounds();
else {
memcpy(&x, &m_sStack[m_nTop-4],sizeofint);
return x;
}
}
double TmStack::TopD() const
{
static double x;
// 返回栈顶元素
if (IsEmpty())
throw OutOfBounds();
else {
memcpy(&x, &m_sStack[m_nTop-8],sizeofdouble);
return x;
}
}
void TmStack::Push(const int x)
{
//添加元素x
if (IsFull())
throw NoMem();
memcpy(&m_sStack[m_nTop], &x, sizeofint);
m_nTop += 4;
return ;
}
void TmStack::PushD(const double x)
{
//添加元素x
if (IsFull())
throw NoMem();
memcpy(&m_sStack[m_nTop], &x, sizeofdouble);
m_nTop += 8;
return ;
}
void TmStack::PushC(const char x)
{
//添加元素x
if (IsFull())
throw NoMem();
memcpy(&m_sStack[m_nTop], &x, sizeofchar);
m_nTop += 1;
return ;
}
int TmStack::Pop()
{
static int x;
// 删除栈顶元素,并将其送入x
if (IsEmpty())
throw OutOfBounds();
m_nTop -= 4;
memcpy(&x, &m_sStack[m_nTop], sizeofint);
return x;
}
double TmStack::PopD()
{
static double x;
// 删除栈顶元素,并将其送入x
if (IsEmpty())
throw OutOfBounds();
m_nTop -= 8;
memcpy(&x, &m_sStack[m_nTop], sizeofdouble);
return x;
}
char TmStack::PopC()
{
static char x;
// 删除栈顶元素,并将其送入x
if (IsEmpty())
throw OutOfBounds();
m_nTop -= 1;
memcpy(&x, &m_sStack[m_nTop], sizeofchar);
return x;
}
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?