redefine template Map
This commit is contained in:
parent
dcaf7f8960
commit
081c7fd931
@ -8,8 +8,8 @@ namespace hgl
|
||||
* @param flag 数据标识
|
||||
* @return 数据所在索引,-1表示不存在
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair>
|
||||
int _Map<F,T,DataPair>::Find(const F &flag)const
|
||||
template<typename K,typename V,typename DataPair>
|
||||
int _Map<K,V,DataPair>::Find(const K &flag)const
|
||||
{
|
||||
int left=0,right=data_list.GetCount()-1; //使用left,right而不使用min,max是为了让代码能够更好的阅读。
|
||||
int mid;
|
||||
@ -41,8 +41,8 @@ namespace hgl
|
||||
return(-1);
|
||||
}
|
||||
|
||||
template<typename F,typename T,typename DataPair>
|
||||
bool _Map<F,T,DataPair>::FindPos(const F &flag,int &pos)const
|
||||
template<typename K,typename V,typename DataPair>
|
||||
bool _Map<K,V,DataPair>::FindPos(const K &flag,int &pos)const
|
||||
{
|
||||
int left=0,right=data_list.GetCount()-1;
|
||||
int mid;
|
||||
@ -124,8 +124,8 @@ namespace hgl
|
||||
return(false);
|
||||
}
|
||||
|
||||
template<typename F,typename T,typename DataPair>
|
||||
int _Map<F,T,DataPair>::FindByValue(const T &data)const
|
||||
template<typename K,typename V,typename DataPair>
|
||||
int _Map<K,V,DataPair>::FindByValue(const V &data)const
|
||||
{
|
||||
const int count=data_list.GetCount();
|
||||
|
||||
@ -148,51 +148,33 @@ namespace hgl
|
||||
* @param data 数据
|
||||
* @return 新创建好的数据结构
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair>
|
||||
DataPair *_Map<F,T,DataPair>::Add(const F &flag,const T &data)
|
||||
template<typename K,typename V,typename DataPair>
|
||||
DataPair *_Map<K,V,DataPair>::Add(const K &flag,const V &data)
|
||||
{
|
||||
DataPair *ds=data_pool.Acquire();
|
||||
DataPair *dp;
|
||||
|
||||
if(!data_pool.Acquire(dp))
|
||||
return(nullptr);
|
||||
|
||||
ds->left=flag;
|
||||
ds->right=data;
|
||||
dp->left=flag;
|
||||
dp->right=data;
|
||||
|
||||
int pos;
|
||||
|
||||
if(FindPos(flag,pos))
|
||||
return(nullptr);
|
||||
|
||||
data_list.Insert(pos,ds);
|
||||
data_list.Insert(pos,dp);
|
||||
|
||||
return(ds);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加一个数据
|
||||
* @param flag 数据标识
|
||||
* @return 创建好的数据
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair>
|
||||
T &_Map<F,T,DataPair>::Add(const F &flag)
|
||||
{
|
||||
DataPair *ds=data_pool.Acquire();
|
||||
|
||||
ds->left=flag;
|
||||
|
||||
int pos;
|
||||
|
||||
FindPos(flag,pos);
|
||||
|
||||
data_list.Insert(pos,ds);
|
||||
|
||||
return ds->right;
|
||||
return(dp);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加一个数据
|
||||
* @param obj 数据
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair>
|
||||
void _Map<F,T,DataPair>::Add(DataPair *obj)
|
||||
template<typename K,typename V,typename DataPair>
|
||||
void _Map<K,V,DataPair>::Add(DataPair *obj)
|
||||
{
|
||||
data_list.Insert(FindPos(obj->left),obj);
|
||||
}
|
||||
@ -203,8 +185,8 @@ namespace hgl
|
||||
* @param data 数据存放处
|
||||
* @return 是否取得成功
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair>
|
||||
bool _Map<F,T,DataPair>::Get(const F &flag,T &data) const
|
||||
template<typename K,typename V,typename DataPair>
|
||||
bool _Map<K,V,DataPair>::Get(const K &flag,V &data) const
|
||||
{
|
||||
int index=Find(flag);
|
||||
|
||||
@ -218,8 +200,8 @@ namespace hgl
|
||||
return(true);
|
||||
}
|
||||
|
||||
template<typename F,typename T,typename DataPair>
|
||||
bool _Map<F,T,DataPair>::Check(const F &key,const T &value) const
|
||||
template<typename K,typename V,typename DataPair>
|
||||
bool _Map<K,V,DataPair>::Check(const K &key,const V &value) const
|
||||
{
|
||||
int index=Find(key);
|
||||
|
||||
@ -238,8 +220,8 @@ namespace hgl
|
||||
* @param t 数据存放处
|
||||
* @return 是否取得成功
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair>
|
||||
bool _Map<F,T,DataPair>::GetBySerial(int index,F &f,T &t) const
|
||||
template<typename K,typename V,typename DataPair>
|
||||
bool _Map<K,V,DataPair>::GetBySerial(int index,K &f,V &t) const
|
||||
{
|
||||
if(index<0||index>=data_list.GetCount())return(false);
|
||||
|
||||
@ -257,8 +239,8 @@ namespace hgl
|
||||
* @param f 数据索引存放处
|
||||
* @return 是否取得成功
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair>
|
||||
bool _Map<F,T,DataPair>::GetKey(int index,F &f)
|
||||
template<typename K,typename V,typename DataPair>
|
||||
bool _Map<K,V,DataPair>::GetKey(int index,K &f)
|
||||
{
|
||||
if(index<0||index>=data_list.GetCount())return(false);
|
||||
|
||||
@ -275,8 +257,8 @@ namespace hgl
|
||||
* @param t 数据存放处
|
||||
* @return 是否取得成功
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair>
|
||||
bool _Map<F,T,DataPair>::GetValue(int index,T &t)
|
||||
template<typename K,typename V,typename DataPair>
|
||||
bool _Map<K,V,DataPair>::GetValue(int index,V &t)
|
||||
{
|
||||
if(index<0||index>=data_list.GetCount())return(false);
|
||||
|
||||
@ -294,8 +276,8 @@ namespace hgl
|
||||
* @param index 数据序号
|
||||
* @param t 数据
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair>
|
||||
bool _Map<F,T,DataPair>::SetValueBySerial(int index,T &t)
|
||||
template<typename K,typename V,typename DataPair>
|
||||
bool _Map<K,V,DataPair>::SetValueBySerial(int index,V &t)
|
||||
{
|
||||
if(index<0||index>=data_list.GetCount())return(false);
|
||||
|
||||
@ -310,8 +292,8 @@ namespace hgl
|
||||
* @param data 数据存放位处
|
||||
* @return 是否成功
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair>
|
||||
bool _Map<F,T,DataPair>::Delete(const F &flag,T &data)
|
||||
template<typename K,typename V,typename DataPair>
|
||||
bool _Map<K,V,DataPair>::Delete(const K &flag,V &data)
|
||||
{
|
||||
int index=Find(flag);
|
||||
|
||||
@ -333,8 +315,8 @@ namespace hgl
|
||||
* @param flag 索引
|
||||
* @return 是否成功
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair>
|
||||
bool _Map<F,T,DataPair>::DeleteByKey(const F &flag)
|
||||
template<typename K,typename V,typename DataPair>
|
||||
bool _Map<K,V,DataPair>::DeleteByKey(const K &flag)
|
||||
{
|
||||
return DeleteBySerial(Find(flag));
|
||||
}
|
||||
@ -345,8 +327,8 @@ namespace hgl
|
||||
* @param count 索引数量
|
||||
* @return 是否成功
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair>
|
||||
int _Map<F,T,DataPair>::DeleteByKey(const F *fp,const int count)
|
||||
template<typename K,typename V,typename DataPair>
|
||||
int _Map<K,V,DataPair>::DeleteByKey(const K *fp,const int count)
|
||||
{
|
||||
if(!fp||count<=0)return(0);
|
||||
|
||||
@ -369,8 +351,8 @@ namespace hgl
|
||||
* @param data 数据
|
||||
* @return 是否成功
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair>
|
||||
bool _Map<F,T,DataPair>::DeleteByValue(const T &data)
|
||||
template<typename K,typename V,typename DataPair>
|
||||
bool _Map<K,V,DataPair>::DeleteByValue(const V &data)
|
||||
{
|
||||
return DeleteBySerial(FindByValue(data));
|
||||
}
|
||||
@ -380,8 +362,8 @@ namespace hgl
|
||||
* @param index 序号
|
||||
* @return 是否成功
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair>
|
||||
bool _Map<F,T,DataPair>::DeleteBySerial(int index)
|
||||
template<typename K,typename V,typename DataPair>
|
||||
bool _Map<K,V,DataPair>::DeleteBySerial(int index)
|
||||
{
|
||||
if(index<0
|
||||
||index>=data_list.GetCount())return(false);
|
||||
@ -398,8 +380,8 @@ namespace hgl
|
||||
* @param number 数量
|
||||
* @return 是否成功
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair>
|
||||
bool _Map<F,T,DataPair>::DeleteBySerial(int start,int number)
|
||||
template<typename K,typename V,typename DataPair>
|
||||
bool _Map<K,V,DataPair>::DeleteBySerial(int start,int number)
|
||||
{
|
||||
DataPair **dp=data_list.GetData()+start;
|
||||
|
||||
@ -417,27 +399,35 @@ namespace hgl
|
||||
* @param flag 数据标识
|
||||
* @param data 新的数据内容
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair>
|
||||
void _Map<F,T,DataPair>::Update(const F &flag,const T &data)
|
||||
template<typename K,typename V,typename DataPair>
|
||||
bool _Map<K,V,DataPair>::Update(const K &flag,const V &data)
|
||||
{
|
||||
int result;
|
||||
DataPair *dp;
|
||||
|
||||
if(FindPos(flag,result))
|
||||
{
|
||||
DataPair *dp=GetListObject(data_list,result);
|
||||
dp=GetListObject(data_list,result);
|
||||
|
||||
if(dp)
|
||||
{
|
||||
dp->right=data;
|
||||
return(true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DataPair *ds=data_pool.Acquire();
|
||||
if(data_pool.Acquire(dp))
|
||||
{
|
||||
dp->left=flag;
|
||||
dp->right=data;
|
||||
|
||||
ds->left=flag;
|
||||
ds->right=data;
|
||||
|
||||
data_list.Insert(result,ds);
|
||||
data_list.Insert(result,dp);
|
||||
return(true);
|
||||
}
|
||||
}
|
||||
|
||||
return(false);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -446,8 +436,8 @@ namespace hgl
|
||||
* @param data 新的数据内容
|
||||
* @param return 是否更改成功
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair>
|
||||
bool _Map<F,T,DataPair>::Change(const F &flag,const T &data)
|
||||
template<typename K,typename V,typename DataPair>
|
||||
bool _Map<K,V,DataPair>::Change(const K &flag,const V &data)
|
||||
{
|
||||
DataPair *dp=GetListObject(data_list,Find(flag));
|
||||
|
||||
@ -461,8 +451,8 @@ namespace hgl
|
||||
/**
|
||||
* 清除所有数据
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair>
|
||||
void _Map<F,T,DataPair>::Clear()
|
||||
template<typename K,typename V,typename DataPair>
|
||||
void _Map<K,V,DataPair>::Clear()
|
||||
{
|
||||
data_pool.ClearAll();
|
||||
data_list.Clear();
|
||||
@ -471,15 +461,15 @@ namespace hgl
|
||||
/**
|
||||
* 清除所有数据,但不释放内存
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair>
|
||||
void _Map<F,T,DataPair>::ClearData()
|
||||
template<typename K,typename V,typename DataPair>
|
||||
void _Map<K,V,DataPair>::ClearData()
|
||||
{
|
||||
data_pool.ReleaseAll();
|
||||
data_list.ClearData();
|
||||
}
|
||||
|
||||
template<typename F,typename T,typename DataPair>
|
||||
void _Map<F,T,DataPair>::operator=(const _Map<F,T,DataPair> &ftd)
|
||||
template<typename K,typename V,typename DataPair>
|
||||
void _Map<K,V,DataPair>::operator=(const _Map<K,V,DataPair> &ftd)
|
||||
{
|
||||
Clear();
|
||||
|
||||
@ -491,11 +481,13 @@ namespace hgl
|
||||
if(count<=0)
|
||||
return;
|
||||
|
||||
IDItem **obj=ftd.data_list.GetData();
|
||||
DataPair **obj=ftd.data_list.GetData();
|
||||
DataPair *new_obj;
|
||||
|
||||
for(int i=0;i<count;i++)
|
||||
{
|
||||
IDItem *new_obj=data_pool.Acquire();
|
||||
if(!data_pool.Acquire(new_obj))
|
||||
break;
|
||||
|
||||
new_obj->left=(*obj)->left;
|
||||
new_obj->right=(*obj)->right;
|
||||
@ -506,15 +498,15 @@ namespace hgl
|
||||
}
|
||||
}
|
||||
|
||||
template<typename F,typename T,typename DataPair>
|
||||
void _Map<F,T,DataPair>::Enum(void (*enum_func)(const F &,T))
|
||||
template<typename K,typename V,typename DataPair>
|
||||
void _Map<K,V,DataPair>::Enum(void (*enum_func)(const K &,V))
|
||||
{
|
||||
const int count=data_list.GetCount();
|
||||
|
||||
if(count<=0)
|
||||
return;
|
||||
|
||||
IDItem **idp=data_list.GetData();
|
||||
DataPair **idp=data_list.GetData();
|
||||
|
||||
for(int i=0;i<count;i++)
|
||||
{
|
||||
@ -524,15 +516,15 @@ namespace hgl
|
||||
}
|
||||
}
|
||||
|
||||
template<typename F,typename T,typename DataPair>
|
||||
void _Map<F,T,DataPair>::EnumKey(void (*enum_func)(const F &))
|
||||
template<typename K,typename V,typename DataPair>
|
||||
void _Map<K,V,DataPair>::EnumKey(void (*enum_func)(const K &))
|
||||
{
|
||||
const int count=data_list.GetCount();
|
||||
|
||||
if(count<=0)
|
||||
return;
|
||||
|
||||
IDItem **idp=data_list.GetData();
|
||||
DataPair **idp=data_list.GetData();
|
||||
|
||||
for(int i=0;i<count;i++)
|
||||
{
|
||||
@ -542,15 +534,15 @@ namespace hgl
|
||||
}
|
||||
}
|
||||
|
||||
template<typename F,typename T,typename DataPair>
|
||||
void _Map<F,T,DataPair>::EnumAllValue(void (*enum_func)(T))
|
||||
template<typename K,typename V,typename DataPair>
|
||||
void _Map<K,V,DataPair>::EnumAllValue(void (*enum_func)(V))
|
||||
{
|
||||
const int count=data_list.GetCount();
|
||||
|
||||
if(count<=0)
|
||||
return;
|
||||
|
||||
IDItem **idp=data_list.GetData();
|
||||
DataPair **idp=data_list.GetData();
|
||||
|
||||
for(int i=0;i<count;i++)
|
||||
{
|
||||
@ -560,15 +552,15 @@ namespace hgl
|
||||
}
|
||||
}
|
||||
|
||||
template<typename F,typename T,typename DataPair>
|
||||
void _Map<F,T,DataPair>::EnumValue(bool (*enum_func)(T))
|
||||
template<typename K,typename V,typename DataPair>
|
||||
void _Map<K,V,DataPair>::EnumValue(bool (*enum_func)(V))
|
||||
{
|
||||
const int count=data_list.GetCount();
|
||||
|
||||
if(count<=0)
|
||||
return;
|
||||
|
||||
IDItem **idp=data_list.GetData();
|
||||
DataPair **idp=data_list.GetData();
|
||||
|
||||
for(int i=0;i<count;i++)
|
||||
{
|
||||
|
@ -10,18 +10,14 @@ namespace hgl
|
||||
/**
|
||||
* 索引数据模板
|
||||
*/
|
||||
template<typename F,typename T,typename DataPair> class _Map
|
||||
template<typename K,typename V,typename DataPair> class _Map
|
||||
{
|
||||
public:
|
||||
|
||||
using IDItem=DataPair;
|
||||
|
||||
protected:
|
||||
|
||||
ObjectPool<IDItem> data_pool;
|
||||
List<IDItem *> data_list;
|
||||
ObjectPool<DataPair> data_pool;
|
||||
List<DataPair *> data_list;
|
||||
|
||||
using this_calss=_Map<F,T,IDItem>;
|
||||
using this_calss=_Map<K,V,DataPair>;
|
||||
|
||||
public: //方法
|
||||
|
||||
@ -30,40 +26,39 @@ namespace hgl
|
||||
|
||||
const int GetCount()const{return data_list.GetCount();} ///<取得数据总量
|
||||
|
||||
IDItem * Add(const F &,const T &); ///<添加一个数据,数果索引已存在,返回nullptr
|
||||
T & Add(const F &); ///<添加一个数据
|
||||
void Add(IDItem *); ///<添加一个数据
|
||||
bool FindPos(const F &,int &)const; ///<查找数据如果插入后,会所在的位置,返回是否存在这个数据
|
||||
int FindPos(const F &flag)const{int pos;FindPos(flag,pos);return(pos);} ///<查找数据如果插入后,会所在的位置
|
||||
int Find(const F &)const; ///<查找数据是否存在,返回-1表示数据不存在
|
||||
int FindByValue(const T &)const; ///<查找数据是否存在,返回-1表示数据不存在
|
||||
bool KeyExist(const F &key)const{return(Find(key)!=-1);} ///<确认这个数据是否存在
|
||||
bool ValueExist(const T &value)const{return(FindByValue(value)!=-1);} ///<确认这个数据是否存在
|
||||
bool Check(const F &key,const T &value)const; ///<确认数据是否是这个
|
||||
virtual bool Get(const F &,T &) const; ///<取得数据
|
||||
virtual bool Delete(const F &,T &); ///<将指定数据从列表中移除,并获得这个数据
|
||||
virtual bool DeleteByKey(const F &); ///<根据索引将指定数据从列表中移除
|
||||
virtual int DeleteByKey(const F *,const int); ///<根据索引将指定数据从列表中批量移除
|
||||
virtual bool DeleteByValue(const T &); ///<根据数据将指定数据从列表中移除
|
||||
DataPair * Add(const K &,const V &); ///<添加一个数据,数果索引已存在,返回nullptr
|
||||
void Add(DataPair *); ///<添加一个数据
|
||||
bool FindPos(const K &,int &)const; ///<查找数据如果插入后,会所在的位置,返回是否存在这个数据
|
||||
int FindPos(const K &flag)const{int pos;FindPos(flag,pos);return(pos);} ///<查找数据如果插入后,会所在的位置
|
||||
int Find(const K &)const; ///<查找数据是否存在,返回-1表示数据不存在
|
||||
int FindByValue(const V &)const; ///<查找数据是否存在,返回-1表示数据不存在
|
||||
bool KeyExist(const K &key)const{return(Find(key)!=-1);} ///<确认这个数据是否存在
|
||||
bool ValueExist(const V &value)const{return(FindByValue(value)!=-1);} ///<确认这个数据是否存在
|
||||
bool Check(const K &key,const V &value)const; ///<确认数据是否是这个
|
||||
virtual bool Get(const K &,V &) const; ///<取得数据
|
||||
virtual bool Delete(const K &,V &); ///<将指定数据从列表中移除,并获得这个数据
|
||||
virtual bool DeleteByKey(const K &); ///<根据索引将指定数据从列表中移除
|
||||
virtual int DeleteByKey(const K *,const int); ///<根据索引将指定数据从列表中批量移除
|
||||
virtual bool DeleteByValue(const V &); ///<根据数据将指定数据从列表中移除
|
||||
virtual bool DeleteBySerial(int); ///<根据序号将指定数据从列表中移除
|
||||
virtual bool DeleteBySerial(int,int); ///<根据序号将指定数据从列表中移除
|
||||
virtual void Update(const F &,const T &); ///<更新一个数据的内容(如不存在则添加)
|
||||
virtual bool Change(const F &,const T &); ///<更改一个数据的内容(如不存在则更改失效)
|
||||
virtual bool Update(const K &,const V &); ///<更新一个数据的内容(如不存在则添加)
|
||||
virtual bool Change(const K &,const V &); ///<更改一个数据的内容(如不存在则更改失效)
|
||||
virtual void Clear(); ///<清除所有数据
|
||||
virtual void ClearData(); ///<清除所有数据,但不释放内存
|
||||
|
||||
List<IDItem *> &GetList(){return data_list;} ///<取得线性列表
|
||||
IDItem ** GetDataList()const{return data_list.GetData();} ///<取得纯数据线性列表
|
||||
List<DataPair *> & GetList(){return data_list;} ///<取得线性列表
|
||||
DataPair ** GetDataList()const{return data_list.GetData();} ///<取得纯数据线性列表
|
||||
|
||||
template<typename IT>
|
||||
int GetKey(IT &il_list) ///<取得所有索引合集
|
||||
int GetKey(IT &il_list) ///<取得所有索引合集
|
||||
{
|
||||
const int count=data_list.GetCount();
|
||||
|
||||
if(count<=0)
|
||||
return count;
|
||||
|
||||
IDItem **idp=data_list.GetData();
|
||||
DataPair **idp=data_list.GetData();
|
||||
|
||||
for(int i=0;i<count;i++)
|
||||
{
|
||||
@ -82,7 +77,7 @@ namespace hgl
|
||||
if(count<=0)
|
||||
return count;
|
||||
|
||||
IDItem **idp=data_list.GetData();
|
||||
DataPair **idp=data_list.GetData();
|
||||
|
||||
for(int i=0;i<count;i++)
|
||||
{
|
||||
@ -93,22 +88,22 @@ namespace hgl
|
||||
return count;
|
||||
}
|
||||
|
||||
IDItem *GetItem(int n){return GetListObject(data_list,n);} ///<取指定序号的数据
|
||||
bool GetBySerial(int,F &,T &) const; ///<取指定序号的数据
|
||||
bool GetKey(int,F &); ///<取指定序号的索引
|
||||
bool GetValue(int,T &); ///<取指定序号的数据
|
||||
DataPair * GetItem(int n){return GetListObject(data_list,n);} ///<取指定序号的数据
|
||||
bool GetBySerial(int,K &,V &) const; ///<取指定序号的数据
|
||||
bool GetKey(int,K &); ///<取指定序号的索引
|
||||
bool GetValue(int,V &); ///<取指定序号的数据
|
||||
|
||||
bool SetValueBySerial(int,T &); ///<根据序号设置数据
|
||||
bool SetValueBySerial(int,V &); ///<根据序号设置数据
|
||||
|
||||
void operator=(const _Map<F,T,IDItem> &); ///<操作符重载,复制一个列表
|
||||
void operator=(const _Map<K,V,DataPair> &); ///<操作符重载,复制一个列表
|
||||
|
||||
void Enum(void (*enum_func)(const F &,T)); ///<枚举所有数据项
|
||||
void EnumKey(void (*enum_func)(const F &)); ///<枚举所有索引
|
||||
void EnumAllValue(void (*enum_func)(T)); ///<枚举所有数值
|
||||
void EnumValue(bool (*enum_func)(T)); ///<枚举所有数值(返回true/false表示是否继续)
|
||||
void Enum(void (*enum_func)(const K &,V)); ///<枚举所有数据项
|
||||
void EnumKey(void (*enum_func)(const K &)); ///<枚举所有索引
|
||||
void EnumAllValue(void (*enum_func)(V)); ///<枚举所有数值
|
||||
void EnumValue(bool (*enum_func)(V)); ///<枚举所有数值(返回true/false表示是否继续)
|
||||
};//class _Map
|
||||
|
||||
template<typename F,typename T> class Map:public _Map<F,T,Pair<F,T> >
|
||||
template<typename K,typename V> class Map:public _Map<K,V,Pair<K,V> >
|
||||
{
|
||||
public:
|
||||
|
||||
@ -126,13 +121,13 @@ namespace hgl
|
||||
return result;
|
||||
}
|
||||
|
||||
template<typename F,typename T,typename DataPair> class _MapObject:public _Map<F,T *,DataPair>
|
||||
template<typename K,typename V,typename DataPair> class _MapObject:public _Map<K,V *,DataPair>
|
||||
{
|
||||
protected:
|
||||
|
||||
typedef _Map<F,T *,DataPair> SuperClass;
|
||||
typedef _Map<K,V *,DataPair> SuperClass;
|
||||
|
||||
virtual void DeleteObject(const F &,T *)=0; ///<删除一个数据
|
||||
virtual void DeleteObject(const K &,V *)=0; ///<删除一个数据
|
||||
void DeleteObject(DataPair *ds)
|
||||
{
|
||||
if(!ds)return;
|
||||
@ -163,7 +158,7 @@ namespace hgl
|
||||
* @param flag 要断开的数据标识
|
||||
* @return 是否断开成功
|
||||
*/
|
||||
bool UnlinkByKey(const F &flag)
|
||||
bool UnlinkByKey(const K &flag)
|
||||
{
|
||||
return UnlinkBySerial(SuperClass::Find(flag));
|
||||
}
|
||||
@ -173,7 +168,7 @@ namespace hgl
|
||||
* @param tp 要断开的数据
|
||||
* @return 是否断开成功
|
||||
*/
|
||||
bool UnlinkByValue(T *tp)
|
||||
bool UnlinkByValue(V *tp)
|
||||
{
|
||||
return UnlinkBySerial(this->FindByValue(tp));
|
||||
}
|
||||
@ -205,7 +200,7 @@ namespace hgl
|
||||
* @param flag 要删除的数据标识
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
bool DeleteByKey(const F &flag)
|
||||
bool DeleteByKey(const K &flag)
|
||||
{
|
||||
return DeleteBySerial(SuperClass::Find(flag));
|
||||
}
|
||||
@ -215,7 +210,7 @@ namespace hgl
|
||||
* @param tp 要删除的数据
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
bool DeleteByValue(T *tp)
|
||||
bool DeleteByValue(V *tp)
|
||||
{
|
||||
return DeleteBySerial(this->FindByValue(tp));
|
||||
}
|
||||
@ -245,7 +240,7 @@ namespace hgl
|
||||
while(n--)
|
||||
DeleteObject(n);
|
||||
|
||||
_Map<F,T *,DataPair>::Clear();
|
||||
_Map<K,V *,DataPair>::Clear();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -253,7 +248,7 @@ namespace hgl
|
||||
* @param flag 数据标识
|
||||
* @param data 新的数据内容
|
||||
*/
|
||||
void Update(const F &flag,T *data)
|
||||
void Update(const K &flag,V *data)
|
||||
{
|
||||
int index=this->Find(flag);
|
||||
|
||||
@ -278,7 +273,7 @@ namespace hgl
|
||||
* @param data 新的数据内容
|
||||
* @param return 是否更改成功
|
||||
*/
|
||||
bool Change(const F &flag,T *data)
|
||||
bool Change(const K &flag,V *data)
|
||||
{
|
||||
int index=this->Find(flag);
|
||||
|
||||
@ -301,33 +296,33 @@ namespace hgl
|
||||
void Clear(){DeleteAll();}
|
||||
};//class _MapObject
|
||||
|
||||
template<typename F,typename T,typename DataPair> class CusMapObject:public _MapObject<F,T,DataPair>
|
||||
template<typename K,typename V,typename DataPair> class CusMapObject:public _MapObject<K,V,DataPair>
|
||||
{
|
||||
protected:
|
||||
|
||||
//virtual T * CreateObject(const F &){return(new T);} ///<创建一个数据
|
||||
virtual void DeleteObject(const F &,T *obj){delete obj;} ///<删除一个数据
|
||||
virtual void DeleteObject(const K &,V *obj){delete obj;} ///<删除一个数据
|
||||
|
||||
public:
|
||||
|
||||
CusMapObject()=default;
|
||||
virtual ~CusMapObject()
|
||||
{
|
||||
_MapObject<F,T,DataPair>::Clear();
|
||||
_MapObject<K,V,DataPair>::Clear();
|
||||
}
|
||||
};//class CusMapObject
|
||||
|
||||
template<typename F,typename T> class MapObject:public CusMapObject<F,T,Pair<F,T *> >
|
||||
template<typename K,typename V> class MapObject:public CusMapObject<K,V,Pair<K,V *> >
|
||||
{
|
||||
public:
|
||||
|
||||
MapObject()=default;
|
||||
virtual ~MapObject()
|
||||
{
|
||||
CusMapObject<F,T,Pair<F,T *> >::Clear();
|
||||
CusMapObject<K,V,Pair<K,V *> >::Clear();
|
||||
}
|
||||
|
||||
T *operator[](const F &index)const
|
||||
V *operator[](const K &index)const
|
||||
{
|
||||
auto *obj=GetListObject(this->data_list,this->Find(index));
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user