From b754121da73c48376391a49173ddc1d0152dd76e Mon Sep 17 00:00:00 2001 From: Lenny Maiorani Date: Fri, 15 Jan 2021 15:51:50 -0700 Subject: [PATCH] Queue: Correctly pass args to enqueue Problem: - Using regular functions rather than function templates results in the arguments not being deduced. This then requires the same function to be written multiple times and for `move` to be used rather than `forward`. Solution: - Collapse multiple function overloads to a single function template with a deduced argument. This allows the argument to be a forwarding reference and bind to either an l-value or r-value and forward the value. --- AK/Queue.h | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/AK/Queue.h b/AK/Queue.h index a7b88eb6b3..80fd00109d 100644 --- a/AK/Queue.h +++ b/AK/Queue.h @@ -41,19 +41,15 @@ public: size_t size() const { return m_size; } bool is_empty() const { return m_size == 0; } - void enqueue(T&& value) + template + void enqueue(U&& value) { if (m_segments.is_empty() || m_segments.last()->size() >= segment_size) m_segments.append(make>()); - m_segments.last()->append(move(value)); + m_segments.last()->append(forward(value)); ++m_size; } - void enqueue(const T& value) - { - enqueue(T(value)); - } - T dequeue() { ASSERT(!is_empty());