📄 cdatabase.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 + -