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

模拟服务器

开发平台:

Visual C++

  1. /*
  2. IndexMap
  3. Date:
  4. 2001/02/05
  5. Note:
  6. 鉴雀(Traverse) 加档甫 刘啊矫虐扁 困秦 郴何利栏肺 List甫 荤侩茄促.
  7. 拱沸, 牢郸胶甫 荤侩窍扁 锭巩俊 火涝/昏力矫 粱歹 腹篮 CPU Time苞 皋葛府啊 鞘夸窍促.
  8. 府胶飘狼 Key 沥纺篮 窍瘤 臼绰促.
  9. */
  10. #ifndef __ORZ_DATASTRUCTURE_INDEX_MAP__
  11. #define __ORZ_DATASTRUCTURE_INDEX_MAP__
  12. #include "list.h"
  13. #include "map.h"
  14. template< class T >
  15. class CIndexMap : public CMap< T >
  16. {
  17. protected:
  18. CList< T > m_Index;
  19. public:
  20. CIndexMap();
  21. virtual ~CIndexMap();
  22. virtual bool InitHashTable( int nDemandSize, int nFlags = IHT_UNTOUCH );
  23. virtual void UninitHashTable( bool bDeleteData = true, bool bDeleteArray = false );
  24. bool Insert( T *pData );
  25. T *  Remove( T *pKey );
  26. CListNode< T > * GetHead();
  27. CListNode< T > * GetNext( CListNode< T > *pNode );
  28. };
  29. template< class T >
  30. CIndexMap< T >::CIndexMap()
  31. {
  32. }
  33. template< class T >
  34. CIndexMap< T >::~CIndexMap()
  35. {
  36. }
  37. template< class T >
  38. bool CIndexMap< T >::InitHashTable( int nDemandSize, int nFlags )
  39. {
  40. m_Index.SetCompareFunction( __cbCmpString, this );
  41. return CMap< T >::InitHashTable( nDemandSize, nFlags );
  42. }
  43. template< class T >
  44. void CIndexMap< T >::UninitHashTable( bool bDeleteData, bool bDeleteArray )
  45. {
  46. m_Index.ClearAll( false );
  47. CMap< T >::UninitHashTable( bDeleteData, bDeleteArray );
  48. }
  49. template< class T >
  50. bool CIndexMap< T >::Insert( T *pData )
  51. {
  52. if ( CMap< T >::Insert( pData ) )
  53. return m_Index.Insert( pData );
  54. return false;
  55. }
  56. template< class T >
  57. T * CIndexMap< T >::Remove( T *pKey )
  58. {
  59. if ( CMap< T >::Remove( pKey ) )
  60. return m_Index.Remove( pKey );
  61. return NULL;
  62. }
  63. template< class T >
  64. CListNode< T > * CIndexMap< T >::GetHead()
  65. {
  66. return m_Index.GetHead();
  67. }
  68. template< class T >
  69. CListNode< T > * CIndexMap< T >::GetNext( CListNode< T > *pNode )
  70. {
  71. return m_Index.GetNext( pNode );
  72. }
  73. #endif