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

📄 statusedge.h

📁 正则表达式由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字
💻 H
字号:
#ifndef STATUSEDGE_H
#define STATUSEDGE_H

#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include "Set.h"

using namespace std;

class EdgeMatchContent
{
public:
	Set<int> Data;

	EdgeMatchContent();
	void Add(const int MatchContent);
	void Add(Set<int>& MatchContent);
};

class NfaStatusNumber
{
public:
	static int StaticStatusNumber;
	int StatusNumber;

	NfaStatusNumber();
};

class DfaStatusNumber
{
public:
	Set<int> StatusNumber;
	static int StaticStatusNumber;
	int Number;

	DfaStatusNumber();
	void Add(const int Temp_StatusNumber);
};

template<typename StatusNumber, typename EdgeContent>
class StatusBase
{
public:
	class EdgeBase
	{
	public:
		EdgeContent Data;
		static Link<EdgeBase*> AllEdge;
		StatusBase* From;
		StatusBase* To;

		EdgeBase()
		{
			From=0;
			To=0;
		}

		static void ReleaseEdge()
		{
			Node<EdgeBase*>* Temp=AllEdge.Head;
			while (Temp)
			{
				delete Temp->Data;
				Temp=Temp->Next;
			}
		}
	};

	Link<EdgeBase*> InEdges;
	Link<EdgeBase*> OutEdges;
	static Link<StatusBase*> AllStatus;
	bool FinalStatus;
	StatusNumber Data;

	StatusBase()
	{
		FinalStatus=0;
	}

	static void ReleaseStatus()
	{
		Node<StatusBase*>* Temp=AllStatus.Head;
		while (Temp)
		{
			delete Temp->Data;
			Temp=Temp->Next;
		}
	}
};

template<typename StatusData, typename EdgeData>
class Status
{
public:
	class Edge
	{
	public:
		EdgeData* Data;

		Edge()
		{
			Data=0;
		}

		Edge(EdgeData* Object)
		{
			Data=Object;
		}

		void New()
		{
			Data=new EdgeData;
			EdgeData::AllEdge.AddLast()->Data=Data;
		}

		void Connect(Status& FromStatus, Status& ToStatus)
		{
			New();
			FromStatus.Data->OutEdges.AddLast()->Data=Data;
			ToStatus.Data->InEdges.AddLast()->Data=Data;
			Data->From=FromStatus.Data;
			Data->To=ToStatus.Data;
		}

		void Connect(StatusData* FromStatusBase, StatusData* ToStatusBase)
		{
			New();
			FromStatusBase->OutEdges.AddLast()->Data=Data;
			ToStatusBase->InEdges.AddLast()->Data=Data;
			Data->From=FromStatusBase;
			Data->To=ToStatusBase;
		}

		void CutOff()
		{
			Node<EdgeData*>* Temp=Data->From->OutEdges.Find(Data);
			Temp->Data=0;
			Data->From->OutEdges.Delete(Temp);

			Temp=Data->To->InEdges.Find(Data);
			Temp->Data=0;
			Data->To->InEdges.Delete(Temp);
		}

	};

	StatusData* Data;

	Status()
	{
		Data=0;
	}

	Status(StatusData* Object)
	{
		Data=Object;
	}

	void New()
	{
		Data=new StatusData;
		StatusData::AllStatus.AddLast()->Data=Data;
	}
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -