|
@@ -32,6 +32,7 @@
|
|
|
|
|
|
#include <atomic>
|
|
|
#include <mutex>
|
|
|
+#include <iostream>
|
|
|
|
|
|
#define _DefaultValue (m_isUseDefaultValue.load() ? m_defaultValue : T{})
|
|
|
|
|
@@ -55,8 +56,8 @@ public:
|
|
|
|
|
|
|
|
|
/* 入队 */
|
|
|
- T&& push(const T& value);
|
|
|
- T&& push(T&& value);
|
|
|
+ T push(const T& value);
|
|
|
+ T push(T&& value);
|
|
|
|
|
|
/* 获取队列中第一个值,但是不出队,
|
|
|
* 非阻塞的方式获取,如果队列为空,会返回一个默认值 */
|
|
@@ -215,16 +216,18 @@ RingQueueManualMutex<T>::~RingQueueManualMutex()
|
|
|
|
|
|
/*************** 入队 *******************/
|
|
|
template<typename T>
|
|
|
-T&& RingQueueManualMutex<T>::push(const T& value)
|
|
|
+T RingQueueManualMutex<T>::push(const T& value)
|
|
|
{
|
|
|
T ret = _DefaultValue; // 默认值
|
|
|
if(_isFull())
|
|
|
{
|
|
|
+ // std::cout << "RingQueueManualMutex is full, pop one element." << std::endl;
|
|
|
/* 队列已满,先出队一个元素 */
|
|
|
ret = std::move(m_queue[m_front]);
|
|
|
/* 出队后,前进一个位置 */
|
|
|
m_front = (m_front + 1) % m_capacity;
|
|
|
}
|
|
|
+ // std::cout << "m_front: " << m_front << " m_rear: " << m_rear << std::endl;
|
|
|
if(m_rear == -1)
|
|
|
{
|
|
|
m_front = 0;
|
|
@@ -233,11 +236,11 @@ T&& RingQueueManualMutex<T>::push(const T& value)
|
|
|
m_queue[m_rear] = value;
|
|
|
m_rear = (m_rear + 1) % m_capacity;
|
|
|
|
|
|
- return std::move(ret);
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
template<typename T>
|
|
|
-T&& RingQueueManualMutex<T>::push(T&& value)
|
|
|
+T RingQueueManualMutex<T>::push(T&& value)
|
|
|
{
|
|
|
T ret = _DefaultValue; // 默认值
|
|
|
if(_isFull())
|
|
@@ -255,7 +258,7 @@ T&& RingQueueManualMutex<T>::push(T&& value)
|
|
|
m_queue[m_rear] = std::move(value);
|
|
|
m_rear = (m_rear + 1) % m_capacity;
|
|
|
|
|
|
- return std::move(ret);
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
|