Skip to content
Permalink
Browse files
PtrList reversed
  • Loading branch information
CookiePLMonster committed Aug 9, 2014
1 parent 1fdd836 commit 04784fdd85a7b2e4266583e4503179fc8e2c9171
Showing with 176 additions and 29 deletions.
  1. +167 −0 VCS PC/PtrList.h
  2. +1 −0 VCS PC/VCS PC.vcxproj
  3. +3 −0 VCS PC/VCS PC.vcxproj.filters
  4. +2 −2 VCS PC/World.cpp
  5. +3 −27 VCS PC/World.h
@@ -0,0 +1,167 @@
#ifndef __PTRLIST
#define __PTRLIST

class CPtrNode
{
public:
void* m_pPtr;
union
{
class CPtrNodeSingleLink* m_psNext;
class CPtrNodeDoubleLink* m_pdNext;

class CPtrNode* m_pNext; // for CPtrList methods
};

public:
CPtrNode(void* pItem)
: m_pPtr(pItem)
{
}
};

class CPtrNodeSingleLink : public CPtrNode
{
public:
CPtrNodeSingleLink(void* pItem)
: CPtrNode(pItem)
{
}
};

class CPtrNodeDoubleLink : public CPtrNode
{
public:
CPtrNodeDoubleLink* m_pdPrev;

public:
CPtrNodeDoubleLink(void* pItem)
: CPtrNode(pItem)
{
}
};

class CPtrList
{
public:
union
{
CPtrNodeSingleLink* m_psNodes;
CPtrNodeDoubleLink* m_pdNodes;

CPtrNode* m_pNodes; // for CPtrList methods
};

bool IsMemberOfList(void* pItem)
{
if ( CPtrNode* pCurNode = m_pNodes )
{
while ( pCurNode->m_pPtr != pItem )
{
pCurNode->m_pNext;
if ( !pCurNode )
return false;
}
return true;
}
return false;
};

int CountElements()
{
CPtrNode* pCurMode = m_pNodes;
int nCount = 0;

while ( pCurMode )
{
++nCount;
pCurMode = pCurMode->m_pNext;
}
return nCount;
};
};

class CPtrListSingleLink : public CPtrList
{
public:
// TODO: NEEDS NEW/DELETE OVERLOADS & FLUSH METHOD
CPtrNodeSingleLink* AddItem(void* pItem)
{
CPtrNodeSingleLink* pNewLink = new CPtrNodeSingleLink(pItem);

pNewLink->m_psNext = m_psNodes;
m_psNodes = pNewLink;

return pNewLink;
}

void DeleteItem(void* pItem)
{
CPtrNodeSingleLink* pCurNode = m_psNodes;
CPtrNodeSingleLink* pPrevNode = nullptr;

if ( pCurNode )
{
while ( pCurNode->m_pPtr != pItem )
{
pPrevNode = pCurNode;
pCurNode = pCurNode->m_psNext;
if ( !pCurNode )
return;
}

if ( m_psNodes == pCurNode )
m_psNodes = pCurNode->m_psNext;
else if ( pPrevNode )
pPrevNode->m_psNext = pCurNode->m_psNext;

delete pCurNode;
}
}
};

class CPtrListDoubleLink : public CPtrList
{
public:
// TODO: NEEDS NEW/DELETE OVERLOADS & FLUSH METHOD
CPtrNodeDoubleLink* AddItem(void* pItem)
{
CPtrNodeDoubleLink* pNewLink = new CPtrNodeDoubleLink(pItem);

pNewLink->m_pdNext = m_pdNodes;
pNewLink->m_pdPrev = nullptr;

if ( m_pdNodes )
m_pdNodes->m_pdPrev = pNewLink;
m_pdNodes = pNewLink;

return pNewLink;
}

void DeleteItem(void* pItem)
{
CPtrNodeDoubleLink* pCurNode = m_pdNodes;

if ( pCurNode )
{
while ( pCurNode->m_pPtr != pItem )
{
pCurNode = pCurNode->m_pdNext;
if ( !pCurNode )
return;
}

if ( m_pdNodes == pCurNode )
m_pdNodes = pCurNode->m_pdNext;
if ( pCurNode->m_pdPrev )
pCurNode->m_pdPrev->m_pdNext = pCurNode->m_pdNext;
if ( pCurNode->m_pdNext )
pCurNode->m_pdNext->m_pdPrev = pCurNode->m_pdPrev;

delete pCurNode;
}
}
};


#endif
@@ -452,6 +452,7 @@ popd</Command>
<ClInclude Include="Pools.h" /> <ClInclude Include="Pools.h" />
<ClInclude Include="PostEffects.h" /> <ClInclude Include="PostEffects.h" />
<ClInclude Include="Project2dfx.h" /> <ClInclude Include="Project2dfx.h" />
<ClInclude Include="PtrList.h" />
<ClInclude Include="Queue.h" /> <ClInclude Include="Queue.h" />
<ClInclude Include="RealTimeShadowMgr.h" /> <ClInclude Include="RealTimeShadowMgr.h" />
<ClInclude Include="Replay.h" /> <ClInclude Include="Replay.h" />
@@ -494,6 +494,9 @@
<ClInclude Include="PostEffects.h"> <ClInclude Include="PostEffects.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="PtrList.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="LoadVars.inc"> <None Include="LoadVars.inc">
@@ -19,8 +19,8 @@ void CWorld::ClearForRestart()
// Clear shadows from CBuildings // Clear shadows from CBuildings
for ( int i = 0; i < 14400; i++ ) for ( int i = 0; i < 14400; i++ )
{ {
for ( auto it = ms_aSectors[i].building.sNode; it; it = it->next ) for ( auto it = ms_aSectors[i].building.m_psNodes; it; it = it->m_psNext )
static_cast<CBuilding*>(it->entity)->ClearForRestart(); static_cast<CBuilding*>(it->m_pPtr)->ClearForRestart();
} }
} }


@@ -3,39 +3,15 @@


#include "General.h" #include "General.h"
#include "PlayerInfo.h" #include "PlayerInfo.h"
#include "PtrList.h"


#define NUM_PLAYERS 2; #define NUM_PLAYERS 2;


class CPtrNodeSingle
{
public:
CEntity* entity;
CPtrNodeSingle* next;
};

class CPtrNodeDouble
{
public:
CEntity* entity;
CPtrNodeDouble* next;
CPtrNodeDouble* prev;
};

class CPtrList
{
public:
union
{
CPtrNodeSingle* sNode;
CPtrNodeDouble* dNode;
};
};

class CSector class CSector
{ {
public: public:
CPtrList building; CPtrListSingleLink building;
CPtrList dummy; CPtrListSingleLink dummy;
}; };




0 comments on commit 04784fd

Please sign in to comment.