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

模拟服务器

开发平台:

C/C++

  1. //---------------------------------------------------------------------------
  2. // Sword3 Engine (c) 1999-2000 by Kingsoft
  3. //
  4. // File: KList.h
  5. // Date: 2000.08.08
  6. // Code: WangWei(Daphnis)
  7. // Desc: Header File
  8. //---------------------------------------------------------------------------
  9. #ifndef KList_H
  10. #define KList_H
  11. //---------------------------------------------------------------------------
  12. #include "KDebug.h"
  13. #include "KNode.h"
  14. //---------------------------------------------------------------------------
  15. class KList
  16. {
  17. public:
  18. KNode m_ListHead; // 头节点(不是第一个节点)
  19. KNode m_ListTail; // 尾节点(不是最后的节点)
  20. public:
  21. KList(void);
  22. KNode* GetHead(void); // 取得第一个节点
  23. KNode* GetTail(void); // 取得最后一个节点
  24. void AddHead(KNode *pNode); // 在最前面增加一个节点
  25. void AddTail(KNode *pNode); // 在最后面增加一个节点
  26. KNode* RemoveHead(void); // 删除第一个节点
  27. KNode* RemoveTail(void); // 删除最后一个节点
  28. BOOL IsEmpty(void); // 是否是个空的链表
  29. LONG GetNodeCount(void);
  30. };
  31. //---------------------------------------------------------------------------
  32. //---------------------------------------------------------------------------
  33. // 函数: KList
  34. // 功能: 构造
  35. // 参数: void
  36. // 返回: void
  37. //---------------------------------------------------------------------------
  38. inline KList::KList(void)
  39. {
  40. m_ListHead.m_pNext = &m_ListTail;
  41. m_ListTail.m_pPrev = &m_ListHead;
  42. }
  43. //-------------------------------------------------------------------------
  44. // 函数: IsEmpty
  45. // 功能: 是否为空
  46. // 参数: void
  47. // 返回: BOOL
  48. //---------------------------------------------------------------------------
  49. inline BOOL KList::IsEmpty(void)
  50. {
  51. return (m_ListHead.GetNext() == NULL);
  52. }
  53. //-------------------------------------------------------------------------
  54. // 函数: GetHead
  55. // 功能: 取得链表的头
  56. // 参数: void
  57. // 返回: KNode*
  58. //---------------------------------------------------------------------------
  59. inline KNode* KList::GetHead(void)
  60. {
  61. return m_ListHead.GetNext();
  62. }
  63. //-------------------------------------------------------------------------
  64. // 函数: GetTail
  65. // 功能: 取得链表的尾
  66. // 参数: void
  67. // 返回: KNode*
  68. //---------------------------------------------------------------------------
  69. inline KNode* KList::GetTail(void)
  70. {
  71. return m_ListTail.GetPrev();
  72. }
  73. //-------------------------------------------------------------------------
  74. // 函数: AddHead
  75. // 功能: 在头部增加一个节点
  76. // 参数: KNode*
  77. // 返回: BOOL
  78. //---------------------------------------------------------------------------
  79. inline void KList::AddHead(KNode *pNode)
  80. {
  81. m_ListHead.InsertAfter(pNode);
  82. }
  83. //-------------------------------------------------------------------------
  84. // 函数: AddTail
  85. // 功能: 在末尾增加一个节点
  86. // 参数: KNode*
  87. // 返回: void
  88. //---------------------------------------------------------------------------
  89. inline void KList::AddTail(KNode *pNode)
  90. {
  91. m_ListTail.InsertBefore(pNode);
  92. }
  93. //-------------------------------------------------------------------------
  94. // 函数: RemoveHead
  95. // 功能: 删除第一个节点
  96. // 参数: void
  97. // 返回: KNode*
  98. //---------------------------------------------------------------------------
  99. inline KNode* KList::RemoveHead(void)
  100. {
  101. KNode* pNode = m_ListHead.GetNext();
  102. if (pNode)
  103. pNode->Remove();
  104. return pNode;
  105. }
  106. //-------------------------------------------------------------------------
  107. // 函数: RemoveTail
  108. // 功能: 删除最后一个节点
  109. // 参数: void
  110. // 返回: KNode*
  111. //---------------------------------------------------------------------------
  112. inline KNode* KList::RemoveTail(void)
  113. {
  114. KNode* pNode = m_ListTail.GetPrev();
  115. if (pNode)
  116. pNode->Remove();
  117. return pNode;
  118. }
  119. //-------------------------------------------------------------------------
  120. // 函数: GetNodeCount
  121. // 功能: 取得节点个数
  122. // 参数: void
  123. // 返回: LONG
  124. //---------------------------------------------------------------------------
  125. inline LONG KList::GetNodeCount(void)
  126. {
  127. long nNode = 0;
  128. KNode* pNode = GetHead();
  129. while (pNode)
  130. {
  131. pNode = pNode->GetNext();
  132. nNode++;
  133. }
  134. return nNode;
  135. }
  136. //-------------------------------------------------------------------------
  137. #endif