📄 oshashtable.h
字号:
/*************************************
* file name : OSHashTable.h
* Date : 2001.8.02
* 描述:定义模板来管理不同类的内存
*
***************************************/
#if !defined(_OSHASHTABLE_H_LINYOUHAI)
#define _OSHASHTABLE_H_LINYOUHAI
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
template<class T, class K> class COSHashTable
{//
public:
COSHashTable(){ m_nNumEntries = 0; m_pHead = NULL; m_pTail = NULL; }
~COSHashTable()
{
Stream *pNext;
while(m_pHead)
{
pNext = m_pHead;
m_pHead = pNext->pNext;
delete pNext->entry;
delete pNext;
}
}
struct Stream{
T *entry;
K *key;
Stream* pNext;
};//管理内存使用的结构
//在链的末尾增加一个
void Add(T* pt,K* pk)
{
Stream *pNew = new Stream;
if(pNew == NULL)
return;
pNew->entry = pt;
pNew->key = pk;
pNew->pNext = NULL;
if(m_pHead == NULL)
{
m_pHead = pNew;
m_pTail = m_pHead;
}
else
{
m_pTail->pNext = pNew;
m_pTail = pNew ;
}
m_nNumEntries++;
}
//删除类指针pKey或主键指针为pKey
void Remove(K* pKey)
{
if(m_pHead == NULL)
return;
Stream *pNext = m_pHead;
Stream *pTemp;
pTemp = pNext;
while(pNext)
{
//内存指针相等
if(pNext->key == pKey)
break;
pTemp = pNext;
pNext = pNext->pNext;
}
if(pNext == m_pHead)
m_pHead = m_pHead->pNext;
pTemp = pNext->pNext;
delete pNext;
m_nNumEntries--;
}
//查找映射主键pKey,并返回T
T* Map(K* pKey)
{
Stream *pNext = m_pHead;
while(pNext)
{
//要求映射主键类有 "==" 操作符
if((*pNext->key) == (*pKey))
break;
pNext = pNext->pNext;
}
if(pNext == NULL)
return NULL;
return pNext->entry;
}
// 获取链的个数
int GetNumEntries() { return m_nNumEntries; }
//获取链中第i个的T指针;
T* GetTableEntry(int i )
{
if(i > m_nNumEntries)
return NULL;
Stream *pNext = m_pHead;
for(int t = 0 ;t < i;t++)
pNext = pNext->pNext;
return pNext->entry;
}
protected:
Stream *m_pHead; //头指针
Stream *m_pTail; //末尾指针
int m_nNumEntries; //链的总个数(结点数)
};
#endif //defined(_OSHASHTABLE_H_LINYOUHAI)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -