From 32790685697f5c49f95df80daf22d9f949b86785 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Sun, 22 Jan 2023 21:06:59 -0600 Subject: [PATCH] clean up view code --- packages/native-core/src/passes.rs | 18 ++++++------ packages/native-core/src/tree.rs | 44 ++++-------------------------- 2 files changed, 13 insertions(+), 49 deletions(-) diff --git a/packages/native-core/src/passes.rs b/packages/native-core/src/passes.rs index cb21cc696..b8cf5031f 100644 --- a/packages/native-core/src/passes.rs +++ b/packages/native-core/src/passes.rs @@ -374,8 +374,8 @@ pub fn resolve_passes( while !pass_indexes_remaining.is_empty() { let mut currently_in_use = FxHashSet::::default(); std::thread::scope(|_| { - let mut i = 0; let dynamically_borrowed_tree = tree.tree.dynamically_borrowed(); + let mut i = 0; while i < pass_indexes_remaining.len() { let passes_idx = pass_indexes_remaining[i]; let pass = &passes[passes_idx]; @@ -387,18 +387,16 @@ pub fn resolve_passes( pass_indexes_remaining.remove(i); resolving.push(pass_id); currently_in_use.insert(pass.this_type_id); - dynamically_borrowed_tree.with_view( + let tree_view = dynamically_borrowed_tree.view( pass.combined_dependancy_type_ids.iter().copied(), [pass.this_type_id], - |tree_view| { - let dirty_nodes = dirty_nodes.clone(); - let nodes_updated = nodes_updated.clone(); - let ctx = ctx.clone(); - // s.spawn(move || { - pass.resolve(tree_view, &dirty_nodes, &nodes_updated, &ctx); - // }); - }, ); + let dirty_nodes = dirty_nodes.clone(); + let nodes_updated = nodes_updated.clone(); + let ctx = ctx.clone(); + // s.spawn(move || { + pass.resolve(tree_view, &dirty_nodes, &nodes_updated, &ctx); + // }); } else { i += 1; } diff --git a/packages/native-core/src/tree.rs b/packages/native-core/src/tree.rs index bb550c5c4..a5bef626c 100644 --- a/packages/native-core/src/tree.rs +++ b/packages/native-core/src/tree.rs @@ -198,14 +198,12 @@ pub(crate) struct DynamicallyBorrowedTree<'a> { } impl<'a> DynamicallyBorrowedTree<'a> { - pub fn with_view( + pub fn view( &self, immutable: impl IntoIterator, mutable: impl IntoIterator, - mut f: impl FnMut(TreeStateView), - ) { + ) -> TreeStateView<'_, 'a> { let nodes_data = self.node_slab(); - let nodes_data: &SlabStorage = &nodes_data; let mut nodes = FxHashMap::default(); for id in immutable { nodes.insert(id, MaybeRead::Read(self.nodes.get_slab(id).unwrap())); @@ -213,10 +211,8 @@ impl<'a> DynamicallyBorrowedTree<'a> { for id in mutable { nodes.insert(id, MaybeRead::Write(self.nodes.get_slab_mut(id).unwrap())); } - { - let view = TreeStateView { nodes_data, nodes }; - f(view) - } + + TreeStateView { nodes_data, nodes } } fn node_slab(&self) -> MappedRwLockReadGuard> { @@ -244,7 +240,7 @@ impl<'a, 'b> AnyMapLike<'a> for TreeStateViewEntry<'a, 'b> { } pub struct TreeStateView<'a, 'b> { - nodes_data: &'a SlabStorage, + nodes_data: MappedRwLockReadGuard<'a, SlabStorage>, nodes: FxHashMap>, } @@ -441,36 +437,6 @@ fn deletion() { assert_eq!(tree.read::(after), None); } -// #[test] -// fn traverse_depth_first() { -// let mut tree = Tree::new(); -// let parent = tree.root(); -// tree.insert(parent, 0); -// let mut child1 = tree.create_node(); -// child1.insert(1); -// let child1 = child1.id(); -// tree.add_child(parent, child1); -// let mut grandchild1 = tree.create_node(); -// grandchild1.insert(2); -// let grandchild1 = grandchild1.id(); -// tree.add_child(child1, grandchild1); -// let mut child2 = tree.create_node(); -// child2.insert(3); -// let child2 = child2.id(); -// tree.add_child(parent, child2); -// let mut grandchild2 = tree.create_node(); -// grandchild2.insert(4); -// let grandchild2 = grandchild2.id(); -// tree.add_child(child2, grandchild2); - -// let view = tree.state_view::(); -// let mut node_count = 0; -// view.traverse_depth_first(move |node| { -// assert_eq!(*node, node_count); -// node_count += 1; -// }); -// } - #[derive(Debug)] pub(crate) struct SlabStorage { data: Vec>,