- Visual C++源码
- Visual Basic源码
- C++ Builder源码
- Java源码
- Delphi源码
- C/C++源码
- PHP源码
- Perl源码
- Python源码
- Asm源码
- Pascal源码
- Borland C++源码
- Others源码
- SQL源码
- VBScript源码
- JavaScript源码
- ASP/ASPX源码
- C#源码
- Flash/ActionScript源码
- matlab源码
- PowerBuilder源码
- LabView源码
- Flex源码
- MathCAD源码
- VBA源码
- IDL源码
- Lisp/Scheme源码
- VHDL源码
- Objective-C源码
- Fortran源码
- tcl/tk源码
- QT源码
- #include "stdafx.h"
- #include "NodeList.h"
- #include "Macro.h"
- /*
- * namespace OnlineGameLib
- */
- namespace OnlineGameLib {
- /*
- * CNodeList
- */
- CNodeList::CNodeList()
- : m_pHead( 0 ),
- m_numNodes( 0 )
- {
- }
- void CNodeList::PushNode( Node *pNode )
- {
- ASSERT( pNode );
- pNode->AddToList( this );
- pNode->Next( m_pHead );
- m_pHead = pNode;
- ++ m_numNodes;
- }
- CNodeList::Node *CNodeList::PopNode()
- {
- Node *pNode = m_pHead;
- if ( pNode )
- {
- RemoveNode( pNode );
- }
- return pNode;
- }
- void CNodeList::RemoveNode( Node *pNode )
- {
- ASSERT( pNode );
- if ( pNode == m_pHead )
- {
- m_pHead = pNode->Next();
- }
- pNode->Unlink();
- -- m_numNodes;
- }
- /*
- * CNodeList::Node
- */
- CNodeList::Node::Node()
- : m_pNext( 0 ),
- m_pPrev( 0 ),
- m_pList( 0 )
- {
- }
- CNodeList::Node::~Node()
- {
- try
- {
- RemoveFromList();
- }
- catch( ... )
- {
- TRACE( "CNodeList::Node::~Node() exception!" );
- }
- m_pNext = 0;
- m_pPrev = 0;
- m_pList = 0;
- }
- void CNodeList::Node::AddToList( CNodeList *pList )
- {
- m_pList = pList;
- }
- void CNodeList::Node::RemoveFromList()
- {
- if ( m_pList )
- {
- m_pList->RemoveNode( this );
- }
- }
- void CNodeList::Node::Unlink()
- {
- if ( m_pPrev )
- {
- m_pPrev->m_pNext = m_pNext;
- }
- if ( m_pNext )
- {
- m_pNext->m_pPrev = m_pPrev;
- }
- m_pNext = 0;
- m_pPrev = 0;
- m_pList = 0;
- }
- } // End of namespace OnlineGameLib