From 9e34fb9f57941066efddb400eb01474629c178df Mon Sep 17 00:00:00 2001 From: Moritz Hoffmann Date: Wed, 8 Nov 2023 21:01:49 -0500 Subject: [PATCH] Remove push_unchecked On recent Rust compilers, it produces the same assembly as `Vec::push`, so there is no benefit in keeping the function around, besides that it avoids occasionally nerd-sniping people in trying to understand Rust's UB and how to write the function correctly. Signed-off-by: Moritz Hoffmann --- src/trace/implementations/merge_batcher.rs | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/src/trace/implementations/merge_batcher.rs b/src/trace/implementations/merge_batcher.rs index 6815e8072..9fc2fb14e 100644 --- a/src/trace/implementations/merge_batcher.rs +++ b/src/trace/implementations/merge_batcher.rs @@ -121,15 +121,6 @@ where } } - -#[inline] -unsafe fn push_unchecked(vec: &mut Vec, element: T) { - debug_assert!(vec.len() < vec.capacity()); - let idx = vec.len(); - vec.set_len(idx + 1); - ::std::ptr::write(vec.get_unchecked_mut(idx), element); -} - pub struct MergeSorter { queue: Vec>>, // each power-of-two length list of allocations. stash: Vec>, @@ -242,14 +233,14 @@ impl MergeSorter { (&x.0, &x.1).cmp(&(&y.0, &y.1)) }; match cmp { - Ordering::Less => { unsafe { push_unchecked(&mut result, head1.pop_front().unwrap()); } } - Ordering::Greater => { unsafe { push_unchecked(&mut result, head2.pop_front().unwrap()); } } + Ordering::Less => result.push(head1.pop_front().unwrap()), + Ordering::Greater => result.push(head2.pop_front().unwrap()), Ordering::Equal => { let (data1, time1, mut diff1) = head1.pop_front().unwrap(); let (_data2, _time2, diff2) = head2.pop_front().unwrap(); diff1.plus_equals(&diff2); if !diff1.is_zero() { - unsafe { push_unchecked(&mut result, (data1, time1, diff1)); } + result.push((data1, time1, diff1)); } } }