Browse Source

clean up view code

Evan Almloff 2 years ago
parent
commit
3279068569
2 changed files with 13 additions and 49 deletions
  1. 8 10
      packages/native-core/src/passes.rs
  2. 5 39
      packages/native-core/src/tree.rs

+ 8 - 10
packages/native-core/src/passes.rs

@@ -374,8 +374,8 @@ pub fn resolve_passes<V: FromAnyValue + Send + Sync>(
     while !pass_indexes_remaining.is_empty() {
         let mut currently_in_use = FxHashSet::<TypeId>::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<V: FromAnyValue + Send + Sync>(
                     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;
                 }

+ 5 - 39
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<Item = TypeId>,
         mutable: impl IntoIterator<Item = TypeId>,
-        mut f: impl FnMut(TreeStateView),
-    ) {
+    ) -> TreeStateView<'_, 'a> {
         let nodes_data = self.node_slab();
-        let nodes_data: &SlabStorage<Node> = &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<SlabStorage<Node>> {
@@ -244,7 +240,7 @@ impl<'a, 'b> AnyMapLike<'a> for TreeStateViewEntry<'a, 'b> {
 }
 
 pub struct TreeStateView<'a, 'b> {
-    nodes_data: &'a SlabStorage<Node>,
+    nodes_data: MappedRwLockReadGuard<'a, SlabStorage<Node>>,
     nodes: FxHashMap<TypeId, MaybeRead<'a, 'b>>,
 }
 
@@ -441,36 +437,6 @@ fn deletion() {
     assert_eq!(tree.read::<i32>(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::<i32>();
-//     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<T> {
     data: Vec<Option<T>>,