improved Stack<>, use LifetimeCallback
This commit is contained in:
parent
fda1a60df7
commit
e1f6ee9b12
@ -135,7 +135,7 @@ namespace hgl
|
|||||||
if(data_array[read_index].GetCount()>read_offset) //还有没读完的,需要清掉
|
if(data_array[read_index].GetCount()>read_offset) //还有没读完的,需要清掉
|
||||||
|
|
||||||
dlc->Clear(data_array[read_index].GetData()+read_offset,
|
dlc->Clear(data_array[read_index].GetData()+read_offset,
|
||||||
data_array[read_index].GetCount()-read_offset);
|
data_array[read_index].GetCount()-read_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
data_array[0].Clear();
|
data_array[0].Clear();
|
||||||
@ -158,10 +158,7 @@ namespace hgl
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
using Queue<T *>::Queue;
|
using Queue<T *>::Queue;
|
||||||
virtual ~ObjectQueue()
|
virtual ~ObjectQueue() override { Free(); }
|
||||||
{
|
|
||||||
Free();
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual bool Push(T *obj)
|
virtual bool Push(T *obj)
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include<hgl/type/DataArray.h>
|
#include<hgl/type/DataArray.h>
|
||||||
|
#include<hgl/type/LifetimeCallback.h>
|
||||||
namespace hgl
|
namespace hgl
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -75,8 +76,19 @@ namespace hgl
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
virtual void Clear (){data_array.Clear();} ///<清除所有数据
|
virtual void Clear (DataLifetimeCallback<T> *dlc=nullptr) ///<清除所有数据
|
||||||
virtual void Free (){data_array.Free();} ///<清除所有数据并释放内存
|
{
|
||||||
|
if(dlc)
|
||||||
|
dlc->Clear(data_array.GetData(),data_array.GetCount());
|
||||||
|
|
||||||
|
data_array.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void Free (DataLifetimeCallback<T> *dlc=nullptr) ///<清除所有数据并释放内存
|
||||||
|
{
|
||||||
|
Clear(dlc);
|
||||||
|
data_array.Free();
|
||||||
|
}
|
||||||
|
|
||||||
virtual void operator =(const DataArray<T> &da) ///<复制一个堆栈
|
virtual void operator =(const DataArray<T> &da) ///<复制一个堆栈
|
||||||
{
|
{
|
||||||
@ -90,9 +102,7 @@ namespace hgl
|
|||||||
|
|
||||||
template<typename T> class ObjectStack:public Stack<T *> ///堆栈对象
|
template<typename T> class ObjectStack:public Stack<T *> ///堆栈对象
|
||||||
{
|
{
|
||||||
protected:
|
DefaultObjectLifetimeCallback<T> default_olc;
|
||||||
|
|
||||||
virtual void DeleteObject(T *obj){if(obj)delete obj;}
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -116,17 +126,17 @@ namespace hgl
|
|||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Clear()
|
void Clear(ObjectLifetimeCallback<T> *olc=nullptr)
|
||||||
{
|
{
|
||||||
for(T *obj:data_array)
|
if(!olc)
|
||||||
DeleteObject(obj);
|
olc=&default_olc;
|
||||||
|
|
||||||
data_array.Clear();
|
Stack<T *>::Clear(olc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Free()
|
void Free(ObjectLifetimeCallback<T> *olc=nullptr)
|
||||||
{
|
{
|
||||||
ObjectStack<T>::Clear();
|
ObjectStack<T>::Clear(olc);
|
||||||
|
|
||||||
data_array.Free();
|
data_array.Free();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user