From bb5848a033be811400ec2a4b6e20d7492ca84c0c Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Tue, 21 Jul 2015 22:43:02 -0700 Subject: [PATCH] ConcurrentQueue: Add emplace function. Also use std::forward for rvalue push. --- src/support/ConcurrentQueue.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/support/ConcurrentQueue.h b/src/support/ConcurrentQueue.h index fa310c5ec7..fa99477511 100644 --- a/src/support/ConcurrentQueue.h +++ b/src/support/ConcurrentQueue.h @@ -53,7 +53,15 @@ class ConcurrentQueue { void push(T&& item) { std::unique_lock mlock(mutex_); - queue_.push(std::move(item)); + queue_.push(std::forward(item)); + mlock.unlock(); + cond_.notify_one(); + } + + template + void emplace(Args&&... args) { + std::unique_lock mlock(mutex_); + queue_.emplace(std::forward(args)...); mlock.unlock(); cond_.notify_one(); }