⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oshashtable.h

📁 本源码为移动公司话费查询中间件TUXEDO使用的实例
💻 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 + -