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

模拟服务器

开发平台:

C/C++

  1. //---------------------------------------------------------------------------
  2. // Sword3 Engine (c) 1999-2000 by Kingsoft
  3. //
  4. // File: KNode.h
  5. // Date: 2000.08.08
  6. // Code: WangWei(Daphnis)
  7. // Desc: Header File
  8. //---------------------------------------------------------------------------
  9. #ifndef KNode_H
  10. #define KNode_H
  11. //---------------------------------------------------------------------------
  12. #include "KDebug.h"
  13. #pragma warning(disable: 4275)
  14. #pragma warning(disable: 4251)
  15. class KNode
  16. {
  17. public:
  18. KNode* m_pNext;
  19. KNode* m_pPrev;
  20. public:
  21. KNode(void);
  22. virtual ~KNode(){};
  23. KNode* GetNext(void);
  24. KNode* GetPrev(void);
  25. void InsertBefore(KNode* pNode);
  26. void InsertAfter(KNode* pNode);
  27. void Remove(void);
  28. BOOL IsLinked(void);
  29. };
  30. //---------------------------------------------------------------------------
  31. //---------------------------------------------------------------------------
  32. // 函数: Knode
  33. // 功能: 构造
  34. // 参数: void
  35. // 返回: void
  36. //---------------------------------------------------------------------------
  37. inline KNode::KNode(void)
  38. {
  39. m_pNext = NULL;
  40. m_pPrev = NULL;
  41. }
  42. //---------------------------------------------------------------------------
  43. // 函数: GetNext
  44. // 功能: 下一个结点
  45. // 参数: void
  46. // 返回: KNode*
  47. //---------------------------------------------------------------------------
  48. inline KNode* KNode::GetNext(void)
  49. {
  50. if (m_pNext->m_pNext)
  51. return m_pNext;
  52. return NULL;
  53. }
  54. //---------------------------------------------------------------------------
  55. // 函数: GetPrev
  56. // 功能: 前一个结点
  57. // 参数: void
  58. // 返回: KNode*
  59. //---------------------------------------------------------------------------
  60. inline KNode* KNode::GetPrev(void)
  61. {
  62. if (m_pPrev->m_pPrev)
  63. return m_pPrev;
  64. return NULL;
  65. }
  66. //----------------------------------------------------------------------------
  67. // 函数: InsertBefore
  68. // 功能: 在前面插入一个结点
  69. // 参数: KNode*
  70. // 返回: void
  71. //---------------------------------------------------------------------------
  72. inline void KNode::InsertBefore(KNode *pNode)
  73. {
  74. KASSERT(m_pPrev);
  75. if (!pNode || !m_pPrev)
  76. return;
  77. pNode->m_pPrev = m_pPrev;
  78. pNode->m_pNext = this;
  79. m_pPrev->m_pNext = pNode;
  80. m_pPrev = pNode;
  81. }
  82. //---------------------------------------------------------------------------
  83. // 函数: InsertAfter
  84. // 功能: 在后面插入一个结点
  85. // 参数: KNode*
  86. // 返回: void
  87. //---------------------------------------------------------------------------
  88. inline void KNode::InsertAfter(KNode *pNode)
  89. {
  90. KASSERT(m_pNext);
  91. if (!pNode || !m_pNext)
  92. return;
  93. pNode->m_pPrev = this;
  94. pNode->m_pNext = m_pNext;
  95. m_pNext->m_pPrev = pNode;
  96. m_pNext = pNode;
  97. }
  98. //---------------------------------------------------------------------------
  99. // 函数: Remove the node
  100. // 功能: 删除这个结点
  101. // 参数: void
  102. // 返回: KNode*
  103. //---------------------------------------------------------------------------
  104. inline void KNode::Remove(void)
  105. {
  106. KASSERT(m_pPrev);
  107. KASSERT(m_pNext);
  108. if (m_pPrev)
  109. m_pPrev->m_pNext = m_pNext;
  110. if (m_pNext)
  111. m_pNext->m_pPrev = m_pPrev;
  112. m_pPrev = NULL;
  113. m_pNext = NULL;
  114. }
  115. //---------------------------------------------------------------------------
  116. // 函数: IsLinked
  117. // 功能: 这个节点是否链接
  118. // 参数: void
  119. // 返回: bool
  120. //---------------------------------------------------------------------------
  121. inline BOOL KNode::IsLinked(void)
  122. {
  123. return (m_pPrev && m_pNext);
  124. }
  125. //--------------------------------------------------------------------------------
  126. #endif