Distribution_Service/CC_SDK/Include/TL/Queue.h

76 lines
2.3 KiB
C
Raw Normal View History

2025-11-11 17:46:19 +08:00
#ifndef SDK_TL_QUEUE_H
#define SDK_TL_QUEUE_H
#include "mutex"
#include "AutoDestruct.h"
#include "deque"
namespace CTL{
template<typename T>
class Queue{
private:
//--------------------------------------------------------------------------------------------------------------
std::mutex _mutex;
std::deque<T> _deque;
//--------------------------------------------------------------------------------------------------------------
public:
//--------------------------------------------------------------------------------------------------------------
Queue() = default;
~Queue() = default;
//--------------------------------------------------------------------------------------------------------------
void Add(const T& data){
_mutex.lock();
_deque.push_back(std::move(data));
_mutex.unlock();
}
void AddFirst(const T& data){
_mutex.lock();
_deque.push_front(std::move(data));
_mutex.unlock();
}
AutoDestruct<T> Poll(){
_mutex.lock();
if(_deque.empty()){
_mutex.unlock();
return nullptr;
}
T* data = new T(_deque.front());
_deque.pop_front();
_mutex.unlock();
return data;
}
AutoDestruct<T> PollBack(){
_mutex.lock();
if(_deque.empty()){
_mutex.unlock();
return nullptr;
}
T* data = new T(_deque.back());
_deque.pop_back();
_mutex.unlock();
return data;
}
bool IsEmpty(){
_mutex.lock();
bool empty = _deque.empty();
_mutex.unlock();
return empty;
}
int Size(){
_mutex.lock();
int size = _deque.size();
_mutex.unlock();
return size;
}
2025-12-04 18:12:54 +08:00
std::vector<T> values(){
2025-12-03 18:08:23 +08:00
_mutex.lock();
2025-12-04 18:12:54 +08:00
std::vector<T> vector(_deque.begin(),_deque.end());
2025-12-03 18:08:23 +08:00
_mutex.unlock();
return vector;
}
2025-11-11 17:46:19 +08:00
//--------------------------------------------------------------------------------------------------------------
};
}
#endif