From 870a09636cb8cddde42b5252dc7788f2b0cd629b Mon Sep 17 00:00:00 2001 From: Mica White Date: Wed, 13 Mar 2024 21:55:35 -0400 Subject: Sort pointers before comparison --- src/collection/collection.rs | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) (limited to 'src/collection/collection.rs') diff --git a/src/collection/collection.rs b/src/collection/collection.rs index ae9f3f6..22a2d11 100644 --- a/src/collection/collection.rs +++ b/src/collection/collection.rs @@ -6,16 +6,9 @@ use super::{LockCollection, LockGuard}; /// returns `true` if the list contains a duplicate #[must_use] -fn contains_duplicates(l: &[usize]) -> bool { - for i in 0..l.len() { - for j in (i + 1)..l.len() { - if l[i] == l[j] { - return true; - } - } - } - - false +fn contains_duplicates(l: &mut [usize]) -> bool { + l.sort_unstable(); + l.windows(2).any(|w| w[0] == w[1]) } impl<'a, L: OwnedLockable<'a>> From for LockCollection { @@ -183,8 +176,8 @@ impl<'a, L: Lockable<'a>> LockCollection { /// ``` #[must_use] pub fn try_new(data: L) -> Option { - let ptrs = data.get_ptrs(); - if contains_duplicates(&ptrs) { + let mut ptrs = data.get_ptrs(); + if contains_duplicates(&mut ptrs) { return None; } -- cgit v1.2.3