112 lines
3.6 KiB
C++
112 lines
3.6 KiB
C++
#include "CKAll.h"
|
|
#include "PFUtils.h"
|
|
#include "NodeLinker.h"
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// IndoorLink
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
IndoorLink::IndoorLink()
|
|
{
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// IndoorLink
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
IndoorLink::~IndoorLink()
|
|
{
|
|
m_ListSameGrid.Clear();
|
|
m_ListSameGridCoast.Clear();
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// NodeLinker
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
NodeLinker::NodeLinker(int maxParallelContext, int numLayer)
|
|
: m_Pos(0),
|
|
m_TypeCase(tc_door),
|
|
m_Occupy(FALSE)
|
|
{
|
|
int i;
|
|
m_NumParallelContext = maxParallelContext;
|
|
m_ArrayContextInfo.Resize(maxParallelContext);
|
|
m_DynNodeLinker.Resize(maxParallelContext);
|
|
m_DynNodeLinkerCoast.Resize(maxParallelContext);
|
|
|
|
for (i = 0; i < maxParallelContext; i++)
|
|
{
|
|
m_ArrayContextInfo[i] = new LinkerContext();
|
|
m_DynNodeLinker[i] = 0;
|
|
}
|
|
|
|
m_NumLayer = numLayer;
|
|
if (numLayer > 0)
|
|
m_ArrayIndoor = new IndoorLink[numLayer];
|
|
else
|
|
m_ArrayIndoor = 0;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// ~NodeLinker
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
NodeLinker::~NodeLinker()
|
|
{
|
|
if (m_Pos)
|
|
delete m_Pos;
|
|
for (int i = 0; i < m_ArrayContextInfo.Size(); i++)
|
|
delete m_ArrayContextInfo[i];
|
|
if (m_ArrayIndoor)
|
|
delete [] m_ArrayIndoor;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// ClearConnected
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
void NodeLinker::ClearConnected()
|
|
{
|
|
m_ListConnected.Clear();
|
|
for (int i = 0; i < m_NumLayer; i++)
|
|
{
|
|
m_ArrayIndoor[i].m_ListSameGrid.Clear();
|
|
m_ArrayIndoor[i].m_ListSameGridCoast.Clear();
|
|
m_ArrayIndoor[i].m_ListSameGridLayerCoast.Clear();
|
|
m_ArrayIndoor[i].m_ListSameGridMaxLayerCoast.Clear();
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// ClearDynConnected
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
void NodeLinker::ClearDynConnected()
|
|
{
|
|
for (int i = 0; i < m_NumParallelContext; i++)
|
|
m_DynNodeLinker[i] = 0;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// SetPos
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
void NodeLinker::SetPos(VxVector &pos)
|
|
{
|
|
m_Pos = new VxVector(pos);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// SetPos
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
void NodeLinker::ResizeParallelContext(int numberContext)
|
|
{
|
|
int oldNumberContext = m_ArrayContextInfo.Size();
|
|
|
|
m_ArrayContextInfo.Resize(numberContext);
|
|
m_DynNodeLinker.Resize(numberContext);
|
|
m_DynNodeLinkerCoast.Resize(numberContext);
|
|
if (numberContext > oldNumberContext)
|
|
for (int i = oldNumberContext; i < numberContext; i++)
|
|
{
|
|
m_ArrayContextInfo[i] = new LinkerContext();
|
|
m_DynNodeLinker[i] = 0;
|
|
}
|
|
}
|
|
|
|
|