From ca2f74e918eeaf962a3fd751cec1160486103d05 Mon Sep 17 00:00:00 2001 From: mrh0057 Date: Sat, 4 Apr 2020 14:45:47 -0500 Subject: [PATCH] Deleted the node since we don't need it. Switched to using remove instead of get_mut() to make it so we don't need to do a full scan. Issue #479 --- src/virtual_dom/vlist.rs | 26 +++++--------------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/src/virtual_dom/vlist.rs b/src/virtual_dom/vlist.rs index 8d8c216fbf5..01934f7a45e 100644 --- a/src/virtual_dom/vlist.rs +++ b/src/virtual_dom/vlist.rs @@ -124,26 +124,17 @@ impl VDiff for VList { let mut rights_lookup = HashMap::with_capacity(rights.len()); let mut i = 0 as usize; for r in rights.drain(..) { - rights_lookup.insert( - r.key().to_owned(), - RightNode { - node: Some(r), - pos: i, - }, - ); + rights_lookup.insert(r.key().to_owned(), r); i += 1; } loop { match lefts.next() { Some(left) => { - let right = rights_lookup.get_mut(&left.key()); + let mut right = rights_lookup.remove(&left.key()); match right { Some(right) => { - previous_sibling = left.apply( - parent, - previous_sibling.as_ref(), - right.node.take(), - ); + previous_sibling = + left.apply(parent, previous_sibling.as_ref(), Some(right)); } None => { previous_sibling = @@ -155,9 +146,7 @@ impl VDiff for VList { } } for right in rights_lookup.values_mut() { - if let Some(mut right) = right.node.take() { - right.detach(parent); - } + right.detach(parent); } previous_sibling } else { @@ -183,11 +172,6 @@ impl VDiff for VList { } } -struct RightNode { - pos: usize, - node: Option, -} - #[cfg(test)] mod tests { use crate::{html, Component, ComponentLink, Html, ShouldRender};