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

模拟服务器

开发平台:

C/C++

  1. //-----------------------------------------//
  2. //                                         //
  3. //  File : S3PList.cpp    //
  4. // Author : Yang Xiaodong            //
  5. // Modified : 2/9/2002            //
  6. //                                         //
  7. //-----------------------------------------//
  8. #include "S3PList.h"
  9. S3PList::S3PList()
  10. {
  11. Init();
  12. }
  13. S3PList::~S3PList()
  14. {
  15. }
  16. void S3PList::Init()
  17. {
  18. m_lpHead = NULL;
  19. m_lpTail = NULL;
  20. m_pFreeDataFun = NULL;
  21. }
  22. BOOL S3PList::FreeData( FREEDATAPROC pFreeDataFun, DWORD data )
  23. {
  24. BOOL bRet = FALSE;
  25. if ( NULL == pFreeDataFun )
  26. {
  27. bRet = FALSE;
  28. }
  29. else
  30. {
  31. bRet = pFreeDataFun( data );
  32. }
  33. return bRet;
  34. }
  35. void S3PList::AddTail( _LPS3PLISTNODE lpNewTail )
  36. {
  37. if ( NULL == lpNewTail )
  38. {
  39. return;
  40. }
  41. if ( NULL == m_lpTail )
  42. {
  43. m_lpTail = lpNewTail;
  44. m_lpHead = m_lpTail;
  45. }
  46. else
  47. {
  48. m_lpTail->lpNext = lpNewTail;
  49. lpNewTail->lpPrev = m_lpTail;
  50. m_lpTail = lpNewTail;
  51. m_lpTail->lpNext = NULL;
  52. }
  53. }
  54. void S3PList::AddHead( _LPS3PLISTNODE lpNewHead )
  55. {
  56. if ( NULL == lpNewHead )
  57. {
  58. return;
  59. }
  60. if ( NULL == m_lpHead )
  61. {
  62. m_lpHead = lpNewHead;
  63. m_lpTail = m_lpHead;
  64. }
  65. else
  66. {
  67. m_lpHead->lpPrev = lpNewHead;
  68. lpNewHead->lpNext = m_lpHead;
  69. m_lpHead = lpNewHead;
  70. m_lpHead->lpPrev = NULL;
  71. }
  72. }
  73. void S3PList::NeedFreeData( FREEDATAPROC pFreeDataFun )
  74. {
  75. m_pFreeDataFun = pFreeDataFun;
  76. }
  77. BOOL S3PList::GetTail( DWORD& data )
  78. {
  79. BOOL bRet = FALSE;
  80. if ( NULL != m_lpTail )
  81. {
  82. bRet = TRUE;
  83. data = m_lpTail->data;
  84. }
  85. return bRet;
  86. }
  87. BOOL S3PList::GetHead( DWORD& data )
  88. {
  89. BOOL bRet = FALSE;
  90. if ( NULL != m_lpHead )
  91. {
  92. bRet = TRUE;
  93. data = m_lpHead->data;
  94. }
  95. return bRet;
  96. }
  97. void S3PList::RemoveAll()
  98. {
  99. _LPS3PLISTNODE lpAt = m_lpHead;
  100. while ( lpAt )
  101. {
  102. _LPS3PLISTNODE lpNext = lpAt->lpNext;
  103. FreeData( m_pFreeDataFun, lpAt->data );
  104. delete lpAt;
  105. lpAt = lpNext;
  106. }
  107. m_lpHead = NULL;
  108. m_lpTail = NULL;
  109. }
  110. void S3PList::RemoveHead()
  111. {
  112. if ( NULL == m_lpHead )
  113. {
  114. return;
  115. }
  116. if ( m_lpHead == m_lpTail )
  117. {
  118. FreeData( m_pFreeDataFun, m_lpHead->data );
  119. delete m_lpHead;
  120. m_lpHead = NULL;
  121. m_lpTail = NULL;
  122. }
  123. else
  124. {
  125. _LPS3PLISTNODE lpNext = m_lpHead->lpNext;
  126. lpNext->lpPrev = NULL;
  127. FreeData( m_pFreeDataFun, m_lpHead->data );
  128. delete m_lpHead;
  129. m_lpHead = lpNext;
  130. }
  131. }
  132. void S3PList::RemoveTail()
  133. {
  134. if ( NULL == m_lpTail )
  135. {
  136. return;
  137. }
  138. if ( m_lpTail == m_lpHead )
  139. {
  140. FreeData( m_pFreeDataFun, m_lpTail->data );
  141. delete m_lpTail;
  142. m_lpTail = NULL;
  143. m_lpHead = NULL;
  144. }
  145. else
  146. {
  147. _LPS3PLISTNODE lpPrev = m_lpTail->lpPrev;
  148. lpPrev->lpNext = NULL;
  149. FreeData( m_pFreeDataFun, m_lpTail->data );
  150. delete m_lpTail;
  151. m_lpTail = lpPrev;
  152. }
  153. }
  154. BOOL S3PList::AddHead( DWORD data )
  155. {
  156. BOOL bRet = FALSE;
  157. _LPS3PLISTNODE lpNewHead = new _S3PLISTNODE;
  158. if ( NULL != lpNewHead )
  159. {
  160. memset( lpNewHead, 0, sizeof( _S3PLISTNODE ) );
  161. lpNewHead->data = data;
  162. AddHead( lpNewHead );
  163. bRet = TRUE;
  164. }
  165. return bRet;
  166. }
  167. BOOL S3PList::AddTail( DWORD data )
  168. {
  169. BOOL bRet = FALSE;
  170. _LPS3PLISTNODE lpNewTail = new _S3PLISTNODE;
  171. if ( NULL != lpNewTail )
  172. {
  173. memset( lpNewTail, 0, sizeof( _S3PLISTNODE ) );
  174. lpNewTail->data = data;
  175. AddTail( lpNewTail );
  176. bRet = TRUE;
  177. }
  178. return bRet;
  179. }
  180. BOOL S3PList::IsEmpty()
  181. {
  182. BOOL bRet = FALSE;
  183. if ( ( NULL == m_lpHead )
  184. && ( NULL == m_lpTail ) )
  185. {
  186. bRet = TRUE;
  187. }
  188. return bRet;
  189. }