Browse Source

Added rvalue push to Queue

Paul-Louis Ageneau 5 years ago
parent
commit
1df2fa559c
1 changed files with 5 additions and 2 deletions
  1. 5 2
      include/rtc/queue.hpp

+ 5 - 2
include/rtc/queue.hpp

@@ -39,6 +39,7 @@ public:
 	bool empty() const;
 	bool empty() const;
 	size_t size() const;
 	size_t size() const;
 	void push(const T &element);
 	void push(const T &element);
+	void push(T &&element);
 	std::optional<T> pop();
 	std::optional<T> pop();
 	std::optional<T> tryPop();
 	std::optional<T> tryPop();
 	void wait();
 	void wait();
@@ -74,11 +75,13 @@ template <typename T> size_t Queue<T>::size() const {
 	return mQueue.size();
 	return mQueue.size();
 }
 }
 
 
-template <typename T> void Queue<T>::push(const T &element) {
+template <typename T> void Queue<T>::push(const T &element) { push(T{element}); }
+
+template <typename T> void Queue<T>::push(T &&element) {
 	std::unique_lock<std::mutex> lock(mMutex);
 	std::unique_lock<std::mutex> lock(mMutex);
 	mPushCondition.wait(lock, [this]() { return !mLimit || mQueue.size() < mLimit || mStopping; });
 	mPushCondition.wait(lock, [this]() { return !mLimit || mQueue.size() < mLimit || mStopping; });
 	if (!mStopping) {
 	if (!mStopping) {
-		mQueue.push(element);
+		mQueue.emplace(std::move(element));
 		mPopCondition.notify_one();
 		mPopCondition.notify_one();
 	}
 	}
 }
 }