/****************************************************************************** Copyright(C):2015~2018 hzleaper FileName:QZkMutexList.h Author:zhikun wu Email:zk.wu@hzleaper.com Tools:vs2010 pc on company Created:2015/04/15 History:15:4:2015 16:44 *******************************************************************************/ #ifndef QZKMUTEXLIST_H #define QZKMUTEXLIST_H #include #include template class QZkMutexList : public QList { public: typedef void(*cbfunc_list_param)(T& value, void* pData); QZkMutexList(bool bUseMutex = true) : m_mutex(QMutex::Recursive) { m_bUseMutex = bUseMutex; } ~QZkMutexList() {} void clear() { QList::clear(); } void clear(cbfunc_list_param pfb, void* pData = NULL) { QMutexLocker locker(&m_mutex); if( NULL != pfb ) { for(Iterator it = begin(); it != end(); ++it) { pfb(*it, pData); } } QList::clear(); } void append(const T &t) { QMutexLocker locker(&m_mutex); QList::append(t); } void appendOnce(const T & value) { if( !QList::contains(value) ) { QList::append(value); } } T takeFirst(const T & defaultV = NULL) { QMutexLocker locker(&m_mutex); if( QList::isEmpty() ) { return defaultV; } else { return QList::takeFirst(); } } T takeLast(const T & defaultV = NULL) { QMutexLocker locker(&m_mutex); if( QList::isEmpty() ) { return defaultV; } else { return QList::takeLast(); } } int removeAll(const T &t) { QMutexLocker locker(&m_mutex); return QList::removeAll(t); } bool removeOne(const T &t) { QMutexLocker locker(&m_mutex); return QList::removeOne(t); } void iterateCall(cbfunc_list_param pfb, void* pData) { if( NULL == pfb ) { return; } QMutexLocker locker(&m_mutex); for(Iterator it = begin(); it != end(); ++it) { pfb(*it, pData); } } private: QMutex m_mutex; bool m_bUseMutex; }; #endif // QZKMUTEXLIST_H