86 lines
1.6 KiB
C++
86 lines
1.6 KiB
C++
#ifndef _MBASE_QUEUELIST_H_
|
||
#define _MBASE_QUEUELIST_H_
|
||
|
||
#include "LockList.h"
|
||
|
||
namespace wylib
|
||
{
|
||
namespace container
|
||
{
|
||
template <typename T>
|
||
class CQueueList :
|
||
public CLockList<T>
|
||
{
|
||
public:
|
||
typedef CLockList<T> Inherited;
|
||
typedef CQueueList<T> ListClass;
|
||
private:
|
||
CBaseList<T> m_AppendList; //数据追加列表
|
||
public:
|
||
//添加数据,数据将在调用flush或tryFlush是被提交到自身列表中
|
||
inline void append(const T& data)
|
||
{
|
||
Inherited::lock();
|
||
m_AppendList.add(data);
|
||
Inherited::unlock();
|
||
}
|
||
inline void appendList(CBaseList<T> &list)
|
||
{
|
||
Inherited::lock();
|
||
m_AppendList.addArray(list, list.count());
|
||
Inherited::unlock();
|
||
}
|
||
inline void appendArray(T* data, INT_PTR length)
|
||
{
|
||
Inherited::lock();
|
||
m_AppendList.addArray(data, length);
|
||
Inherited::unlock();
|
||
}
|
||
//获取追加数据数量
|
||
inline INT_PTR appendCount()
|
||
{
|
||
return m_AppendList.count();
|
||
}
|
||
//提交由append调用添加的数据
|
||
inline void flush()
|
||
{
|
||
|
||
if ( m_AppendList.count() > 0 )
|
||
{
|
||
Inherited::lock();
|
||
Inherited::addList(m_AppendList);
|
||
m_AppendList.trunc(0);
|
||
Inherited::unlock();
|
||
}
|
||
|
||
}
|
||
//尝试提交由append调用添加的数据,如果获取锁失败,则无法提交
|
||
inline BOOL tryFlush()
|
||
{
|
||
if ( m_AppendList.count() > 0 )
|
||
{
|
||
if ( Inherited::trylock() )
|
||
{
|
||
Inherited::addList(m_AppendList);
|
||
m_AppendList.trunc(0);
|
||
Inherited::unlock();
|
||
return TRUE;
|
||
}
|
||
else
|
||
{
|
||
return FALSE;
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
return TRUE;
|
||
}
|
||
}
|
||
};
|
||
};
|
||
};
|
||
|
||
#endif
|
||
|