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

📄 cdatabase.h

📁 一个个人开发的rpg游戏<亚特兰蒂斯传奇>的源码
💻 H
字号:
//数据库类
//作者:吴振华(kylinx)(中国科大01级11系)
//E-mail:game-diy@163.com
//创建于:2003/6/17 by Kylinx
//全面修正于2003/7/23 by Kylinx
#ifndef LOA_DATA_BASE_H_
#define LOA_DATA_BASE_H_
#include<windows.h>
template<class T>
class IDataBase
{
public:
	virtual BOOL AddData(int ID,T* data)=0;
	virtual BOOL Delete(int ID)=0;
	virtual BOOL FindData(int id,T ** data)=0;
	virtual unsigned long GetCount() const=0;
	virtual void Release()=0;

	static IDataBase<T>* ForeCreate();
};
//////////////////////////////////////////////////////////////////////////////////////////////
template<class T>
class IDataBaseChild:private IDataBase<T>
{
	template<class T>
	class IDataBaseNode
	{
	public:
		int m_nID;
		T *m_pData;
		IDataBaseNode<T>*m_pNext;

		IDataBaseNode(int id,T * pData,IDataBaseNode<T>*next=NULL)
		{
			m_nID=id;
			m_pData=pData;
			m_pNext=next;
		}
		~IDataBaseNode(){delete m_pData;}
	};

	IDataBaseNode<T>	*m_pHead;
	IDataBaseNode<T>	*m_pTail;
	IDataBaseNode<T>	*m_pCur;
	unsigned long m_dwNodeCount;

	virtual BOOL AddData(int ID,T* data);
	virtual BOOL Delete(int ID);
	virtual BOOL FindData(int id,T ** data);
	virtual unsigned long GetCount() const {return m_dwNodeCount;}
	virtual void Release();
public:
	IDataBaseChild();
	virtual ~IDataBaseChild();
};
template<class T>
IDataBase<T>*IDataBase<T>::ForeCreate()
{
	return new IDataBaseChild<T>();
}

template<class T>
IDataBaseChild<T>::IDataBaseChild()
{
	m_pHead=NULL;
	m_pCur=NULL;
	m_pTail=NULL;
	m_dwNodeCount=0;
}
template<class T>
IDataBaseChild<T>::~IDataBaseChild()
{
	Release();
}
template<class T>
void IDataBaseChild<T>::Release()
{
	IDataBaseNode<T>*pTemp;
	while(m_pHead)
	{
		pTemp=m_pHead;
		m_pHead=m_pHead->m_pNext;
		delete pTemp;
	}
	m_pTail=NULL;
	m_dwNodeCount=0;
	m_pCur=NULL;
}
template<class T>
BOOL IDataBaseChild<T>::FindData(int id,T ** data)
{
	IDataBaseNode<T>*pTemp=m_pHead;
	while(pTemp)
	{
		if(pTemp->m_nID==id)
		{
			if(data)
				*data=pTemp->m_pData;
			return true;
		}
		pTemp=pTemp->m_pNext;
	}
	return false;
}
 
template<class T>
BOOL IDataBaseChild<T>::AddData(int ID,T * data)
{
	IDataBaseNode<T>*pNodeInsert=new IDataBaseNode<T>(ID,data,NULL);
	if(!pNodeInsert)
		return false;
	
	m_dwNodeCount++;

	if(!m_pHead)
	{
		m_pHead=pNodeInsert;
		m_pTail=pNodeInsert;
		return true;
	}
	if(!m_pHead->m_pNext)
	{
		m_pHead->m_pNext=pNodeInsert;
		m_pTail=m_pHead->m_pNext;
		return true;
	}
	m_pTail->m_pNext=pNodeInsert;
	m_pTail=m_pTail->m_pNext;

	return true;
}
template<class T>
BOOL IDataBaseChild<T>::Delete(int ID)
{
	if(m_pHead)
	{
		if(m_pHead->m_nID==ID)
		{
			if(m_pTail==m_pHead)
			{
				m_pTail=m_pHead->m_pNext;
			}
			IDataBaseNode<T>*pTemp=m_pHead;
			m_pHead=m_pHead->m_pNext;
			delete pTemp;

			m_dwNodeCount--;
			return true;
		}
	}
	IDataBaseNode<T>*pTemp=m_pHead->m_pNext;
	IDataBaseNode<T>*pNodePrev=m_pHead;
	
	while(pTemp)
	{
		if(pTemp->m_nID==ID)
		{
			 if(pTemp==m_pTail)
			 {
				 m_pTail=pNodePrev;
			 }
			 pNodePrev->m_pNext=pTemp->m_pNext;
			 delete pTemp;
		
			 m_dwNodeCount--;
			 return true;
		}
		pNodePrev=pTemp;
		pTemp=pTemp->m_pNext;
	}
	return false;
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -