⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tmstack.h

📁 1.小型编译器 2。支持整数
💻 H
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -