diff --git a/inc/hgl/type/List.h b/inc/hgl/type/List.h index c053c57..87bf5cc 100644 --- a/inc/hgl/type/List.h +++ b/inc/hgl/type/List.h @@ -129,7 +129,7 @@ namespace hgl * @param data 要删除的数据项 * @return 是否成功 */ - virtual bool DeleteByValue(const T &data) + virtual bool DeleteByValue(T &data) { const int pos=Find(data); @@ -142,7 +142,7 @@ namespace hgl * @param n 要删除的数据个数 * @return 成功删除的数据个数 */ - virtual int DeleteByValue(const T *data,int n) + virtual int DeleteByValue(T *data,int n) { int result=0; @@ -188,12 +188,12 @@ namespace hgl virtual void operator = (const DataArray &da){data_array=da;} ///<操作符重载复制一个列表 virtual void operator = (const std::initializer_list &l){data_array=l;} ///<操作符重载复制一个列表 - virtual void operator += (const T &obj){Add(obj);} ///<操作符重载添加一个数据 - virtual void operator << (const T &obj){Add(obj);} ///<操作符重载添加一个数据 - virtual void operator -= (const T &obj){DeleteByValue(obj);} ///<操作符重载删除一个数据 + virtual void operator += (T &obj){Add(obj);} ///<操作符重载添加一个数据 + virtual void operator << (T &obj){Add(obj);} ///<操作符重载添加一个数据 + virtual void operator -= (T &obj){DeleteByValue(obj);} ///<操作符重载删除一个数据 - T * At(const int index) {return data_array.At(index);} ///<取得指定序列号数据的索引 - const T * At(const int index)const{return data_array.At(index);} ///<取得指定序列号数据的索引 + T * At(const int index) {return data_array.At(index);} ///<取得指定序列号数据的索引 + const T * At(const int index)const{return data_array.At(index);} ///<取得指定序列号数据的索引 bool Get(int index, T &data)const {return data_array.ReadAt (data,index);} ///<取得指定索引处的数据 virtual bool Set(int index,const T &data) {return data_array.WriteAt(data,index);} ///<设置指定索引处的数据 diff --git a/inc/hgl/type/Map.h b/inc/hgl/type/Map.h index ee8e3aa..e1b2d4d 100644 --- a/inc/hgl/type/Map.h +++ b/inc/hgl/type/Map.h @@ -351,7 +351,7 @@ namespace hgl public: - ObjectMap():ObjectMapTemplate(&DefaultOLM){}; + ObjectMap():ObjectMapTemplate>(&DefaultOLM){}; virtual ~ObjectMap()=default; };//template class ObjectMap:public ObjectMapTemplate> }//namespace hgl diff --git a/inc/hgl/type/ObjectList.h b/inc/hgl/type/ObjectList.h index d0c5150..a64f2bf 100644 --- a/inc/hgl/type/ObjectList.h +++ b/inc/hgl/type/ObjectList.h @@ -1,6 +1,7 @@ #pragma once #include +#include namespace hgl { @@ -11,7 +12,7 @@ namespace hgl { protected: - DataLifecycleManager *dlm; ///<数据生命周期回调函数 + ObjectLifecycleManager *dlm; ///<数据生命周期回调函数 public: @@ -19,7 +20,7 @@ namespace hgl public: //方法 - ObjectListTemplate(DataLifecycleManager *_dlm):List(){dlm=_dlm;} + ObjectListTemplate(ObjectLifecycleManager *_dlm):List(){dlm=_dlm;} virtual ~ObjectListTemplate(){Free();} public: @@ -53,8 +54,8 @@ namespace hgl virtual bool Unlink(int index){return List::Delete(index);} ///<将指定索引处的数据与列表断开 virtual bool UnlinkMove(int index){return List::DeleteMove(index);} ///<将指定索引处的数据与列表断开,将前移后面的数据 virtual bool Unlink(int start,int number){return List::Delete(start,number);} ///<将指定索引处的数据与列表断开 - virtual bool UnlinkByValue(const ItemPointer &ip){return List::DeleteByValue(ip);} ///<将一个指定数据与列表断开 - virtual void UnlinkByValue(const ItemPointer *ip,int n){List::DeleteByValue(ip,n);} ///<将一批指定数据与列表断开 + virtual bool UnlinkByValue(ItemPointer &ip){return List::DeleteByValue(ip);} ///<将一个指定数据与列表断开 + virtual void UnlinkByValue(ItemPointer *ip,int n){List::DeleteByValue(ip,n);} ///<将一批指定数据与列表断开 virtual void UnlinkAll(){List::Clear();} ///<断开所有数据 private: @@ -103,7 +104,7 @@ namespace hgl return List::DeleteMove(index,num); } - virtual bool DeleteByValue(const ItemPointer &obj) override ///<删除指定的一个数据 + virtual bool DeleteByValue(ItemPointer &obj) override ///<删除指定的一个数据 { if(!obj)return(false); @@ -112,7 +113,7 @@ namespace hgl return List::DeleteByValue(obj); } - virtual int DeleteByValue(const ItemPointer *obj_list,int num) override ///<删除指定的一批数据 + virtual int DeleteByValue(ItemPointer *obj_list,int num) override ///<删除指定的一批数据 { if(!obj_list||num<=0)return(-1); diff --git a/inc/hgl/type/ObjectManage.h b/inc/hgl/type/ObjectManage.h index c9a5877..e2ac5d6 100644 --- a/inc/hgl/type/ObjectManage.h +++ b/inc/hgl/type/ObjectManage.h @@ -217,7 +217,7 @@ namespace hgl public: - ObjectManage():ObjectManageTemplate(&DefaultOLM){} + ObjectManage():ObjectManageTemplate(&DefaultOLM){} virtual ~ObjectManage()=default; };//template class ObjectManage:public ObjectManageTemplate diff --git a/inc/hgl/type/Pool.h b/inc/hgl/type/Pool.h index 52336f8..fb5d2a5 100644 --- a/inc/hgl/type/Pool.h +++ b/inc/hgl/type/Pool.h @@ -63,11 +63,6 @@ namespace hgl Clear(); //有一些数据需要特别的Clear处理,所以不能依赖Active/InActive模板本身的自晰构 } - virtual void SetDataLifetimeCallback(DataLifecycleManager *cb) ///<设定数据生命周期回调函数 - { - dlm=cb; - } - virtual void PreAlloc(int count,bool set_to_max=false) ///<预分配空间 { Active.PreAlloc(count); @@ -101,12 +96,10 @@ namespace hgl if(IsFull()) return(false); - if(!dlm)return(false); - if(!dlm->Create(&value)) return(false); } - else if(dlm) + else { dlm->OnActive(&value); } @@ -121,8 +114,7 @@ namespace hgl if(!Idle.Pop(value)) return(false); - if(dlm) - dlm->OnActive(&value); + dlm->OnActive(&value); Active.Add(value); return(true); @@ -158,8 +150,7 @@ namespace hgl if(!Idle.Push(value)) return(false); - if(dlm) - dlm->OnIdle(&value); + dlm->OnIdle(&value); return(true); } @@ -185,8 +176,7 @@ namespace hgl virtual void ReleaseActive() ///<释放所有活跃数据 { - if(dlm) - dlm->OnIdle(Active.GetData(),Active.GetCount()); + dlm->OnIdle(Active.GetData(),Active.GetCount()); Idle.Push(Active.GetData(),Active.GetCount()); Active.Clear(); @@ -194,15 +184,14 @@ namespace hgl virtual void ClearActive() { - if(dlm) - dlm->Clear(Active.GetData(),Active.GetCount()); + dlm->Clear(Active.GetData(),Active.GetCount()); Active.Clear(); } virtual void ClearIdle() ///<清除所有非活跃数据 { - Idle.Clear(dlm); + Idle.Clear(); } virtual void Clear() ///<清除所有数据 @@ -218,7 +207,7 @@ namespace hgl public: - PoolWithDLM():PoolTemplate(&DefaultLifecycleManager){} + PoolWithDLM():PoolTemplate(&DefaultLifecycleManager){} virtual ~PoolWithDLM()=default; };//template class PoolWithDLM:public PoolTemplate diff --git a/inc/hgl/type/Queue.h b/inc/hgl/type/Queue.h index e743715..2d887f3 100644 --- a/inc/hgl/type/Queue.h +++ b/inc/hgl/type/Queue.h @@ -134,15 +134,12 @@ namespace hgl virtual void Clear () ///<清除所有数据 { - if(dlm) - { - if(data_array[read_index].GetCount()>read_offset) //还有没读完的,需要清掉 - dlm->Clear(data_array[read_index].GetData()+read_offset, - data_array[read_index].GetCount()-read_offset); + if(data_array[read_index].GetCount()>read_offset) //还有没读完的,需要清掉 + dlm->Clear( data_array[read_index].GetData()+read_offset, + data_array[read_index].GetCount()-read_offset); - dlm->Clear(data_array[write_index].GetData(), - data_array[write_index].GetCount()); - } + dlm->Clear( data_array[write_index].GetData(), + data_array[write_index].GetCount()); data_array[0].Clear(); data_array[1].Clear(); @@ -150,7 +147,7 @@ namespace hgl virtual void Free () ///<清除所有数据并释放内存 { - Clear(dlm); + Clear(); data_array[0].Free(); data_array[1].Free(); @@ -165,7 +162,7 @@ namespace hgl public: - Queue():QueueTemplate(&DefaultDLM){}; + Queue():QueueTemplate(&DefaultDLM){}; virtual ~Queue()=default; };//template class Queue:public QueueTemplate @@ -175,28 +172,28 @@ namespace hgl public: - ObjectQueue():QueueTemplate(&DefaultOLM){} + ObjectQueue():QueueTemplate(&DefaultOLM){} virtual ~ObjectQueue() override { Free(); } virtual bool Push(T *obj) { if(!obj)return(false); - return Queue::Push(obj); + return QueueTemplate::Push(obj); } virtual bool Push(T **obj_list,int count) { if(!obj_list)return(false); - return Queue::Push(obj_list,count); + return QueueTemplate::Push(obj_list,count); } - T *Pop() + T *PopObject() { T *obj; - if(!Queue::Pop(obj)) + if(!QueueTemplate::Pop(obj)) return(nullptr); return obj; @@ -204,7 +201,7 @@ namespace hgl void Free() { - ObjectQueue::Clear(); + QueueTemplate::Clear(); this->data_array[0].Free(); this->data_array[1].Free(); diff --git a/inc/hgl/type/Stack.h b/inc/hgl/type/Stack.h index 4618f89..6de72a1 100644 --- a/inc/hgl/type/Stack.h +++ b/inc/hgl/type/Stack.h @@ -98,7 +98,7 @@ namespace hgl virtual void Free () ///<清除所有数据并释放内存 { - Clear(dlm); + Clear(); data_array.Free(); } @@ -109,7 +109,7 @@ namespace hgl data_array.WriteAt(da.GetData(),0,da.GetCount()); } - virtual void operator =(const Stack &s){this->operator=(s.data_array);} + virtual void operator =(const StackTemplate &s){this->operator=(s.data_array);} };//template class StackTemplate template class Stack:public StackTemplate @@ -120,7 +120,7 @@ namespace hgl public: - Stack():StackTemplate(&DefaultDLM){}; + Stack():StackTemplate(&DefaultDLM){}; virtual ~Stack()=default; };//template class Stack:public StackTemplate @@ -130,7 +130,7 @@ namespace hgl public: - ObjectStack():StackTemplate(&DefaultOLM){} + ObjectStack():StackTemplate(&DefaultOLM){} virtual ~ObjectStack() override {Free();} virtual bool Push(T *obj)