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

模拟服务器

开发平台:

C/C++

  1. /********************************************************************
  2. created: 2003/02/14
  3. file base: NodeList
  4. file ext: h
  5. author: liupeng
  6. purpose: Data struct and define
  7. *********************************************************************/
  8. #ifndef __INCLUDE_NODELIST_H__
  9. #define __INCLUDE_NODELIST_H__
  10. #if defined (_MSC_VER) && (_MSC_VER >= 1020)
  11. #pragma once
  12. #endif
  13. #include <wtypes.h>
  14. /*
  15.  * namespace OnlineGameLib
  16.  */
  17. namespace OnlineGameLib {
  18. /*
  19.  * CNodeList
  20.  */
  21. class CNodeList
  22. {
  23. public:
  24. /*
  25.  * Node
  26.  */
  27. class Node
  28. {
  29. public:
  30. Node *Next() const;
  31. void Next( Node *pNext );
  32. void AddToList( CNodeList *pList );
  33. void RemoveFromList();
  34. protected:
  35. Node();
  36. ~Node();
  37. private:
  38. friend class CNodeList;
  39. void Unlink();
  40. Node *m_pNext;
  41. Node *m_pPrev;
  42. CNodeList *m_pList;
  43. };
  44. CNodeList();
  45. void PushNode( Node *pNode );
  46. Node *PopNode();
  47. Node *Head() const;
  48. size_t Count() const;
  49. bool Empty() const;
  50. private :
  51. friend void Node::RemoveFromList();
  52. void RemoveNode( Node *pNode );
  53. Node *m_pHead;
  54. size_t m_numNodes;
  55. };
  56. /*
  57.  * TNodeList {template class}
  58.  */
  59. template <class T>
  60. class TNodeList : public CNodeList
  61. {
  62. public:
  63. void PushNode( T *pNode );
  64. T *PopNode();
  65. T *Head() const;
  66. static T *Next( const T *pNode );
  67. };
  68. template <class T>
  69. void TNodeList<T>::PushNode( T *pNode )
  70. {
  71. CNodeList::PushNode( pNode );
  72. }
  73. template <class T>
  74. T *TNodeList<T>::PopNode()
  75. {
  76. return static_cast<T *>( CNodeList::PopNode() );
  77. }
  78. template <class T>
  79. T *TNodeList<T>::Head() const
  80. {
  81. return static_cast<T *>( CNodeList::Head() );
  82. }
  83. template <class T>
  84. T *TNodeList<T>::Next( const T *pNode )
  85. {
  86. return static_cast<T *>( pNode->Next() );
  87. }
  88. } // End of namespace OnlineGameLib
  89. #endif