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

模拟服务器

开发平台:

C/C++

  1. #include "KWin32.h"
  2. #include "KEngine.h"
  3. #include "KLinkArray.h"
  4. KLinkArray::~KLinkArray()
  5. {
  6.  if (pNode) 
  7.  {
  8.  delete [] pNode;
  9.  pNode = NULL;
  10.  }
  11. }
  12. void KLinkArray::Init(int nSize)
  13. {
  14. if (pNode)
  15. {
  16. delete [] pNode;
  17. pNode = NULL;
  18. nCount = 0;
  19. }
  20. pNode = new KLinkNode[nSize];
  21. }
  22. void KLinkArray::Remove(int nIdx)
  23. {
  24. if (!nIdx)
  25. return;
  26. if ((pNode[nIdx].nNext == 0 && pNode[0].nPrev != nIdx) || (pNode[nIdx].nPrev == 0 && pNode[0].nNext != nIdx))
  27. {
  28. g_DebugLog("[error]Node:%d Remove twice", nIdx);
  29. return;
  30. }
  31. pNode[pNode[nIdx].nPrev].nNext = pNode[nIdx].nNext;
  32. pNode[pNode[nIdx].nNext].nPrev = pNode[nIdx].nPrev;
  33. pNode[nIdx].nNext = 0;
  34. pNode[nIdx].nPrev = 0;
  35. nCount--;
  36. }
  37. void KLinkArray::Insert(int nIdx)
  38. {
  39. if (!nIdx)
  40. return;
  41. if (pNode[nIdx].nNext != 0 || pNode[nIdx].nPrev != 0)
  42. {
  43. g_DebugLog("[error]Node:%d Insert twice", nIdx);
  44. return;
  45. }
  46. pNode[nIdx].nNext = pNode[0].nNext;
  47. pNode[pNode[0].nNext].nPrev = nIdx;
  48. pNode[0].nNext = nIdx;
  49. pNode[nIdx].nPrev = 0;
  50. nCount++;
  51. }