diff --git a/inc/hgl/type/ResManage.cpp b/inc/hgl/type/ResManage.cpp index a6c4f185..85684093 100644 --- a/inc/hgl/type/ResManage.cpp +++ b/inc/hgl/type/ResManage.cpp @@ -87,6 +87,43 @@ namespace hgl return(nullptr); } + /** + * 确认指定数据是否存在 + */ + template + bool ResManage::ValueExist(T *value) + { + return(items.FindByValue(value)!=-1); + } + + /** + * 获取指定数据的Key和引用计数 + * @param value 数据 + * @param key Key存放地址 + * @param ref_count 引用计数存放地址 + * @param 是否增加引用计数 + */ + template + bool ResManage::GetKeyByValue(T *value,F *key,uint *ref_count,bool inc_ref_count) + { + int index=items.FindByValue(value); + + if(index==-1)return(false); + + ResItem *obj=items.GetItem(index); + + if(inc_ref_count) + ++obj->count; + + if(key) + *key=obj->left; + + if(ref_count) + *key=obj->count; + + return(true); + } + template void ResManage::ReleaseBySerial(int index,bool zero_clear) { diff --git a/inc/hgl/type/ResManage.h b/inc/hgl/type/ResManage.h index a101c8d7..ad3e5a87 100644 --- a/inc/hgl/type/ResManage.h +++ b/inc/hgl/type/ResManage.h @@ -46,6 +46,9 @@ namespace hgl virtual T * Find(const F &); ///<查找一个数据 virtual T * Get(const F &); ///<取得一个数据 + virtual bool ValueExist(T *); ///<确认这个数据是否存在 + virtual bool GetKeyByValue(T *,F *,uint *,bool inc_ref_count=false); ///<取得一个数据的Key和引用次数 + virtual void Release(const F &,bool zero_clear=false); ///<释放一个数据 virtual void Release(T *,bool zero_clear=false); ///<释放一个数据 };//template class ResManage @@ -65,6 +68,15 @@ namespace hgl virtual F Add(T *value) { if(!value)return(-1); + + { + F key; + uint count; + + if(ResManage::GetKeyByValue(value,&key,&count,true)) + return key; + } + if(!ResManage::Add(id_count,value)) return(-1);