aimt.cpp

来自「一个面向对象的产生式推理模型」· C++ 代码 · 共 116 行

CPP
116
字号
#include "stdafx.h"
#include "AIMt.h"
#include "AiAssert.h"
#include "AiWffs.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


IMPLEMENT_SERIAL(AiMt,CObject,0)

AiMt::AiMt()
{
	m_id = 0;
	m_sign = NeedNotVersa;
	m_pre = NULL;
}
AiMt::AiMt(AiMt& mt)
{
	m_id = mt.m_id;
	m_sign = mt.m_sign;
	m_pre = mt.m_pre;
}
AiMt::~AiMt()
{
}
AiMt::AiMt(int id,int sign,AiMt* pre)
{
	m_id = id;
	m_sign = sign;
	m_pre = pre;
}

AiMt::AiMt(AiAssert& assert)
{
	m_id = assert.GetId();
	m_pre = NULL;
	m_sign = assert.m_sign;
}

AiMt::AiMt(int id,AiMt* pre)
{
	m_id=id;
	m_pre = pre;
}
int AiMt::GetId()
{
	return m_id;
}

int AiMt::GetSign()
{
	return m_sign;
}
const AiMt& AiMt::operator = (const AiMt& mtSrc)
{
	m_id = mtSrc.m_id;
	m_pre = mtSrc.m_pre;
	m_sign = mtSrc.m_sign;
	return *this;
}
AiMt& AiMt::operator ! ()
{
	if (m_sign==NeedVersa)
		m_sign=NeedNotVersa;
	else
		m_sign=NeedVersa;
	return *this;
}
AiMt AiMt::operator & (AiMt mt)
{
	AiMt* mt1 = new AiMt;
	AiMt* mt2 = new AiMt;
	mt1->SetId(this->GetId());
	mt1->SetSign(this->GetSign());
	mt1->SetPre( (this->GetPre()) );
	//don't set wff1's pre
	//假设&运算符从左到右结合
	mt2->SetId(mt.GetId());
	mt2->SetSign(mt.GetSign());
	mt2->SetPre(mt1);
	return *mt2;
}

void AiMt::SetId(int id)
{
	m_id = id;
}

void AiMt::SetSign(int sign)
{
	m_sign = sign;
}

void AiMt::SetPre(AiMt * pmt)
{
	m_pre = pmt;
}

AiMt* AiMt::GetPre()
{
	return m_pre;
}

void AiMt::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{	ar<<m_id<<m_sign;
	}
	else
	{	ar>>m_id>>m_sign;}
}

⌨️ 快捷键说明

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