NodeList.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:2k
源码类别:

模拟服务器

开发平台:

C/C++

  1. #include "NodeList.h"
  2. /*
  3.  * namespace OnlineGameLib
  4.  */
  5. namespace OnlineGameLib {
  6. /*
  7.  * CNodeList
  8.  */
  9. CNodeList::CNodeList() : m_pHead(0), m_numNodes(0) 
  10. {
  11. }
  12. void CNodeList::PushNode( Node *pNode )
  13. {
  14. pNode->AddToList( this );
  15. pNode->Next( m_pHead );
  16. m_pHead = pNode;
  17. ++m_numNodes;
  18. }
  19. CNodeList::Node *CNodeList::PopNode()
  20. {
  21. Node *pNode = m_pHead;
  22. if ( pNode )
  23. {
  24. RemoveNode( pNode );
  25. }
  26. return pNode;
  27. }
  28. CNodeList::Node *CNodeList::Head() const
  29. {
  30. return m_pHead;
  31. }
  32. size_t CNodeList::Count() const
  33. {
  34. return m_numNodes;
  35. }
  36. bool CNodeList::Empty() const
  37. {
  38. return ( 0 == m_numNodes );
  39. }
  40. void CNodeList::RemoveNode( Node *pNode )
  41. {
  42. if ( pNode == m_pHead )
  43. {
  44. /*
  45.  * Possible use of null pointer 
  46.  */
  47. m_pHead = pNode->Next();
  48. }
  49. /*
  50.  * Possible use of null pointer 
  51.  */
  52. pNode->Unlink();
  53. --m_numNodes;
  54. }
  55. /*
  56.  * CNodeList::Node
  57.  */
  58. CNodeList::Node::Node() 
  59. : m_pNext(0), m_pPrev(0), m_pList(0) 
  60. {
  61. }
  62. CNodeList::Node::~Node() 
  63. {
  64. try
  65. {
  66. RemoveFromList();   
  67. }
  68. catch(...)
  69. {
  70. }
  71. m_pNext = 0;
  72. m_pPrev = 0;
  73. m_pList = 0;
  74. }
  75. CNodeList::Node *CNodeList::Node::Next() const
  76. {
  77. return m_pNext;
  78. }
  79. void CNodeList::Node::Next( Node *pNext )
  80. {
  81. m_pNext = pNext;
  82. if ( pNext )
  83. {
  84. pNext->m_pPrev = this;
  85. }
  86. }
  87. void CNodeList::Node::AddToList( CNodeList *pList )
  88. {
  89. m_pList = pList;
  90. }
  91. void CNodeList::Node::RemoveFromList()
  92. {
  93. if ( m_pList )
  94. {
  95. m_pList->RemoveNode( this );
  96. }
  97. }
  98. void CNodeList::Node::Unlink()
  99. {
  100. if ( m_pPrev )
  101. {
  102. m_pPrev->m_pNext = m_pNext;
  103. }
  104. if ( m_pNext )
  105. {
  106. m_pNext->m_pPrev = m_pPrev;
  107. }
  108. m_pNext = 0;
  109. m_pPrev = 0;
  110. m_pList = 0;
  111. }
  112. } // End of namespace OnlineGameLib