From 3e2eb9c757051c9c42f94a09079cadb1c7e07277 Mon Sep 17 00:00:00 2001 From: GnomedDev Date: Tue, 13 Feb 2024 17:02:23 +0000 Subject: [PATCH] Avoid overallocating or growing Vec in Clone --- src/lib.rs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index ad2b321a..51f3ca70 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -94,17 +94,13 @@ pub struct DashMap { impl Clone for DashMap { fn clone(&self) -> Self { - let mut inner_shards = Vec::new(); - - for shard in self.shards.iter() { - let shard = shard.read(); - - inner_shards.push(CachePadded::new(RwLock::new((*shard).clone()))); + fn clone_rwlock(lock: &CachePadded>) -> CachePadded> { + CachePadded::new(RwLock::new(lock.read().clone())) } Self { shift: self.shift, - shards: inner_shards.into_boxed_slice(), + shards: self.shards.iter().map(clone_rwlock).collect(), hasher: self.hasher.clone(), } }