⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qtemplatebase.h

📁 BCB下的高效开发包。包含大并发的网络库
💻 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 + -