DynamicArray.cpp
上传用户:tt_chan
上传日期:2009-12-03
资源大小:4523k
文件大小:1k
源码类别:

模拟服务器

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. CWHDynamicArray::CWHDynamicArray()
  3. {
  4. InitializeCriticalSection(&m_cs);
  5. m_nLastRemoveIndex = 0;
  6. m_nLastInsertIndex = 0;
  7. for (int i = 0; i < _MAX_USER_ARRAY; i++)
  8. m_Elements[i] = NULL;
  9. }
  10. CWHDynamicArray::~CWHDynamicArray()
  11. {
  12. DeleteCriticalSection(&m_cs);
  13. }
  14. int CWHDynamicArray::AttachData(VOID *pElement)
  15. {
  16. int nIndex = -1;
  17. EnterCriticalSection(&m_cs);
  18. __try
  19. {
  20. nIndex = m_nLastRemoveIndex;
  21. if (m_Elements[nIndex] == NULL)
  22. {
  23. m_Elements[nIndex] = pElement;
  24. __leave;
  25. }
  26. for (int i = m_nLastInsertIndex; i < _MAX_USER_ARRAY; i++)
  27. {
  28. if (m_Elements[nIndex] == NULL)
  29. {
  30. m_Elements[nIndex] = pElement;
  31. m_nLastInsertIndex = nIndex;
  32. __leave;
  33. }
  34. }
  35. for (i = 0; i < m_nLastInsertIndex; i++)
  36. {
  37. if (m_Elements[nIndex] == NULL)
  38. {
  39. m_Elements[nIndex] = pElement;
  40. m_nLastInsertIndex = nIndex;
  41. break;
  42. }
  43. }
  44. }
  45. __finally
  46. {
  47. LeaveCriticalSection(&m_cs);
  48. }
  49. return nIndex;
  50. }
  51. void CWHDynamicArray::DettachData(int nIndex)
  52. {
  53. EnterCriticalSection(&m_cs);
  54. __try
  55. {
  56. m_Elements[nIndex] = NULL;
  57. m_nLastRemoveIndex = nIndex;
  58. }
  59. __finally
  60. {
  61. LeaveCriticalSection(&m_cs);
  62. }
  63. }