aiassert.cpp

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

CPP
105
字号
#include "stdafx.h"
#include "AiAssert.h"

#include "AiMt.h"
#include "AiWffs.h"

IMPLEMENT_SERIAL(AiAssert,CObject,0)

int* AiAssert::gm_numAssert;
AiMention* AiAssert::gm_mention;
void AiAssert::SetAssertNumTo(int* pNumAssert )
{
	gm_numAssert = pNumAssert;
}

void AiAssert::SetAssertMentionTo(AiMention* pMention )
{
	gm_mention = pMention;
}
void AiAssert::EndSetAssert()
{
	gm_mention = NULL;
	gm_numAssert = NULL;
}
AiAssert::AiAssert(CString Tstr,CString Fstr)
{ 
	ASSERT(gm_numAssert!=NULL && gm_mention!=NULL);
	m_id = *gm_numAssert;
	m_sign = NeedNotVersa;
	(*gm_numAssert)++;
	ASSERT(*gm_numAssert>0 && *gm_numAssert<MaxNum);
	gm_mention[m_id].SetMention(Tstr,Fstr);
	char temp[4];
	itoa(m_id,temp,10);
	char str[10];
	strcpy(str,"#");
	strcat(str,temp);
	gm_mention[m_id].SetAbbreviation(str);
}

AiAssert::AiAssert()
{
	m_id = 0;
	m_sign = 0;
}

AiAssert::AiAssert(AiAssert& assert)
{
	m_id = assert.m_id;
	m_sign = assert.m_sign;//?
}

AiMt AiAssert::operator & (AiAssert mtSrc)
{
	AiMt* mt1 = new AiMt;
	AiMt* mt2 = new AiMt;
	mt1->SetId(this->GetId());
	mt1->SetSign(this->GetSign());
	//don't set wff1's pre
	//假设&运算符从左到右结合
	mt2->SetId(mtSrc.GetId());
	mt2->SetSign(mtSrc.GetSign());
	mt2->SetPre(mt1);
	return *mt2;
}
AiMt AiAssert::operator & (AiMt mtSrc)
{
	AiMt* mt1 = new AiMt;
	AiMt* mt2 = new AiMt;
	mt1->SetId(this->GetId());
	mt1->SetSign(this->GetSign());
	//don't set wff1's pre
	//假设&运算符从左到右结合
	mt2->SetId(mtSrc.GetId());
	mt2->SetSign(mtSrc.GetSign());
	mt2->SetPre(mt1);
	return *mt2;
}

AiMt AiAssert::operator ! ()
{
	AiMt* mt = new AiMt;
	mt->SetId(this->GetId());
	mt->SetSign(NeedVersa);
	mt->SetPre(NULL);
	return (AiMt)*mt;
}

void AiAssert::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{	ar<<m_id;}
	else
	{	ar>>m_id;}
}
int AiAssert::GetId()
{
	return m_id;
}

int AiAssert::GetSign()
{
	return m_sign;
}

⌨️ 快捷键说明

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