📄 qtemplatebase.h
字号:
#ifndef QTemplateBaseH
#define QTemplateBaseH
#include "../QSystem/QSystem.h"
#include <queue>
#include <vector>
//---------------------------------------------------------------------------
template<class T> class QBasicMsg
{
public:
void send(const T& msg);
bool recv(T* msg);
unsigned int size(); //因为是Critical因此不能写const了
void clear();
private:
CriticalLock m_lock;
std::queue<T> m_que;
};
//---------------------------------------------------------------------------
template<class T> void QBasicMsg<T>::send(const T& msg)
{
m_lock.Lock();
m_que.push( msg );
m_lock.Free();
}
//---------------------------------------------------------------------------
template<class T> bool QBasicMsg<T>::recv(T* msg)
{
m_lock.Lock();
if( m_que.empty() ){
m_lock.Free();
return false;
}
*msg = m_que.front();
m_que.pop();
m_lock.Free();
return true;
}
//---------------------------------------------------------------------------
template<class T> unsigned int QBasicMsg<T>::size()
{
m_lock.Lock();
unsigned int ret = m_que.size();
m_lock.Free();
return ret;
}
template<class T> void QBasicMsg<T>::clear()
{
m_lock.Lock();
m_que = std::queue<T>();
m_lock.Free();
}
//===========================================================================
//---------------------------------------------------------------------------
template<class T> class QDefaultStack
{
public:
void push(const T& v);
T pop(void);
T back(void)const;
unsigned int size()const;
void clear();
private:
std::vector<T> m_vec;
};
//---------------------------------------------------------------------------
template<class T> void QDefaultStack<T>::push(const T& v)
{
m_vec.push_back(v);
}
//---------------------------------------------------------------------------
template<class T> T QDefaultStack<T>::pop(void)
{
T ret;
if (m_vec.empty())
return ret;
ret = m_vec.back();
m_vec.pop_back();
return ret;
}
//---------------------------------------------------------------------------
template<class T> T QDefaultStack<T>::back(void)const
{
T ret;
if (m_vec.empty())
return ret;
return m_vec.back();
}
//---------------------------------------------------------------------------
template<class T> unsigned int QDefaultStack<T>::size()const
{
return m_vec.size();
}
//---------------------------------------------------------------------------
template<class T> void QDefaultStack<T>::clear()
{
m_vec.clear();
}
//===========================================================================
//---------------------------------------------------------------------------
template<class T> class QWeakQueue //非线程安全
{
public:
void send(const T& msg);
bool recv(T* msg);
unsigned int size()const;
void clear();
private:
std::queue<T> m_que;
};
//---------------------------------------------------------------------------
template<class T> void QWeakQueue<T>::send(const T& msg)
{
m_que.push( msg );
}
//---------------------------------------------------------------------------
template<class T> bool QWeakQueue<T>::recv(T* msg)
{
if( m_que.empty() ){
return false;
}
*msg = m_que.front();
m_que.pop();
return true;
}
//---------------------------------------------------------------------------
template<class T> unsigned int QWeakQueue<T>::size()const
{
return m_que.size();
}
template<class T> void QWeakQueue<T>::clear()
{
m_que = std::queue<T>();
}
//===========================================================================
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -