summaryrefslogtreecommitdiff
path: root/src/collection
diff options
context:
space:
mode:
authorMica White <botahamec@outlook.com>2024-03-13 21:55:35 -0400
committerMica White <botahamec@outlook.com>2024-03-13 21:55:35 -0400
commit870a09636cb8cddde42b5252dc7788f2b0cd629b (patch)
tree90c4ab448e024493812e51b7cfb12701e610b8fc /src/collection
parent7c6f49b6570669098938dc332a4f3e85dd3d217d (diff)
Sort pointers before comparison
Diffstat (limited to 'src/collection')
-rw-r--r--src/collection/collection.rs17
1 files changed, 5 insertions, 12 deletions
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<L> for LockCollection<L> {
@@ -183,8 +176,8 @@ impl<'a, L: Lockable<'a>> LockCollection<L> {
/// ```
#[must_use]
pub fn try_new(data: L) -> Option<Self> {
- let ptrs = data.get_ptrs();
- if contains_duplicates(&ptrs) {
+ let mut ptrs = data.get_ptrs();
+ if contains_duplicates(&mut ptrs) {
return None;
}