Files
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

180 lines
3.2 KiB
C++

//-----------------------------------------------------------------------------+
// Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd.
// = FileName : TGraphNode.cpp
// = Version : ver2.0
// = Author : xlc
// = CreateDate : 2002-09-09
// = Description: 类的定义
// = Maintainers:
//
//-----------------------------------------------------------------------------+
#include "StdAfx.h"
#include "TGraphNode.h"
#include "TWPushVar.h"
TGraphNode* TGraphNode::s_pStartNode = NULL;
TGraphNode::~TGraphNode()
{
UnConnect();
}
void TGraphNode::ClearArc()
{
TDualPtrList<TGraphArc*> temp;
temp.Conbine(m_allArc);
}
bool TGraphNode::IsAloneNode()const
{
return m_allArc.IsEmpty();
}
bool TGraphNode::IsEndNode()const
{
return m_allArc.GetLength() == 1;
}
long TGraphNode::GetArcNum()const
{
return m_allArc.GetLength();
}
TGraphArc* TGraphNode::GetArc(long i)const
{
return m_allArc.GetAt(i);
}
long TGraphNode::FindArc(TGraphArc*pArc)const
{
return m_allArc.Find(pArc);
}
int TGraphNode::CmpNode(const TGraphNode&n)const
{
return (int)(this-(&n));
}
bool TGraphNode::operator == (const TGraphNode&n)const
{
return CmpNode(n) == 0;
}
bool TGraphNode::operator != (const TGraphNode&n)const
{
return CmpNode(n) != 0;
}
bool TGraphNode::operator> (const TGraphNode&n)const
{
return CmpNode(n)>0;
}
bool TGraphNode::operator< (const TGraphNode&n)const
{
return CmpNode(n)<0;
}
void TGraphNode::UnConnect()
{
for (m_allArc.MoveToFirst();!m_allArc.IsOut();m_allArc.MoveToNext())
{
TGraphArc *pArc=m_allArc.GetCurData();
if (pArc->GetNode(0) == this)
{
pArc->SetNode(0,NULL);
}
if (pArc->GetNode(1) == this)
{
pArc->SetNode(1,NULL);
}
}
ClearArc();
}
bool TGraphNode::AppendArc(TGraphArc*pArc)
{
TWPushVar<TGraphNode*> vTemp(s_pStartNode,this);
return m_allArc.SortIn(pArc);
}
bool TGraphNode::RemoveArc(TGraphArc*pArc)
{
if (m_allArc.FindTo(pArc))
{
m_allArc.FetchCur();
return true;
}
else
{
return false;
}
}
void TGraphNode::Conbine(TGraphNode*pNode)
{
for (long i = 0;i<pNode->GetArcNum();i++)
{
TGraphArc *pArc = pNode->GetArc(i);
if (pArc->GetNode(0) == pNode)
{
pArc->SetNode(0,this);
}
if (pArc->GetNode(1) == pNode)
{
pArc->SetNode(1,this);
}
AppendArc(pArc);
}
pNode->ClearArc();
}
TGraphArc* TGraphNode::FindNextArc(TGraphArc*pArc)
{
if (GetArcNum()>1 && m_allArc.FindTo(pArc))
{
long iCur = m_allArc.GetCur();
return m_allArc[(iCur + 1) % m_allArc.GetLength()];
}
else
{
return NULL;
}
}
TGraphArc* TGraphNode::FindPreArc(TGraphArc*pArc)
{
if (GetArcNum()>1 && m_allArc.FindTo(pArc))
{
long iCur = m_allArc.GetCur();
return m_allArc[(iCur - 1 + m_allArc.GetLength()) % m_allArc.GetLength()];
}
else
{
return NULL;
}
}
void TGraphNode::GetArcOut(TTable<TGraphArc*> &lstArc)
{
for (m_allArc.MoveToFirst();!m_allArc.IsOut();m_allArc.MoveToNext())
{
TGraphArc* pArc = m_allArc.GetCurData();
if (pArc->GetNode(0) == this)
{
lstArc<<pArc;
}
}
}
void TGraphNode::GetArcIn(TTable<TGraphArc*> &lstArc)
{
for (m_allArc.MoveToFirst();!m_allArc.IsOut();m_allArc.MoveToNext())
{
TGraphArc* pArc = m_allArc.GetCurData();
if (pArc->GetNode(1) == this)
{
lstArc<<pArc;
}
}
}