From 4376f441f71c0d98176497b05c01ee05668eaeae Mon Sep 17 00:00:00 2001 From: sfc-gh-tclinkenbeard Date: Thu, 11 Jun 2020 08:44:02 -0700 Subject: [PATCH] Added comment for Deque copy ctor --- flow/Deque.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/flow/Deque.h b/flow/Deque.h index a80ed006fd..56e174d89d 100644 --- a/flow/Deque.h +++ b/flow/Deque.h @@ -50,6 +50,9 @@ public: if (r.end < r.capacity()) { std::copy(r.arr + r.begin, r.arr + r.begin + r.size(), arr); } else { + // Mask is used for wrapping, so r.end is always >= r.begin, + // but if r.end >= r.capacity(), the deque wraps around so the + // copy must be performed in two parts auto partOneSize = r.capacity() - r.begin; std::copy(r.arr + r.begin, r.arr + r.begin + partOneSize, arr); std::copy(r.arr, r.arr + (r.end & r.mask), arr + partOneSize); @@ -71,6 +74,9 @@ public: if (r.end < r.capacity()) { std::copy(r.arr + r.begin, r.arr + r.begin + r.size(), arr); } else { + // Mask is used for wrapping, so r.end is always >= r.begin, + // but if r.end >= r.capacity(), the deque wraps around so the + // copy must be performed in two parts auto partOneSize = r.capacity() - r.begin; std::copy(r.arr + r.begin, r.arr + r.begin + partOneSize, arr); std::copy(r.arr, r.arr + (r.end & r.mask), arr + partOneSize);