From ade6f0b57ced6261f2d06173843598adc79569cf Mon Sep 17 00:00:00 2001 From: Half-Shot Date: Wed, 7 Feb 2024 10:54:49 +0000 Subject: [PATCH] Make shuffle function much cheaper --- src/util/mod.rs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/util/mod.rs b/src/util/mod.rs index 3fd9dff2..43408573 100644 --- a/src/util/mod.rs +++ b/src/util/mod.rs @@ -97,14 +97,10 @@ impl QueueWithBackoff { #[napi] pub fn shuffle(&mut self) { let mut rng = rand::thread_rng(); - let old_queue = self.queue.clone(); - self.queue.clear(); - for item in old_queue { - if rng.gen_bool(0.5) { - self.queue.push_front(item); - } else { - self.queue.push_back(item); - } + let items = self.queue.drain(..); + let len = items.len(); + for item in items.choose_multiple(&mut rng, len) { + self.queue.push_front(item); } } }