clean up view code

This commit is contained in:
Evan Almloff committed 2023-01-22 21:06:59 -06:00
1 parent 4738352955
commit 3279068569
2 files changed
+13 -49

No files matched your search

+8 -10
View File
@@ -374,8 +374,8 @@ pub fn resolve_passes<V: FromAnyValue + Send + Sync>(
while !pass_indexes_remaining.is_empty() { while !pass_indexes_remaining.is_empty() {
let mut currently_in_use = FxHashSet::<TypeId>::default(); let mut currently_in_use = FxHashSet::<TypeId>::default();
std::thread::scope(|_| { std::thread::scope(|_| {
let mut i = 0;
let dynamically_borrowed_tree = tree.tree.dynamically_borrowed(); let dynamically_borrowed_tree = tree.tree.dynamically_borrowed();
let mut i = 0;
while i < pass_indexes_remaining.len() { while i < pass_indexes_remaining.len() {
let passes_idx = pass_indexes_remaining[i]; let passes_idx = pass_indexes_remaining[i];
let pass = &passes[passes_idx]; let pass = &passes[passes_idx];
@@ -387,18 +387,16 @@ pub fn resolve_passes<V: FromAnyValue + Send + Sync>(
pass_indexes_remaining.remove(i); pass_indexes_remaining.remove(i);
resolving.push(pass_id); resolving.push(pass_id);
currently_in_use.insert(pass.this_type_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.combined_dependancy_type_ids.iter().copied(),
[pass.this_type_id], [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 { } else {
i += 1; i += 1;
} }
+5 -39
View File
@@ -198,14 +198,12 @@ pub(crate) struct DynamicallyBorrowedTree<'a> {
} }
impl<'a> DynamicallyBorrowedTree<'a> { impl<'a> DynamicallyBorrowedTree<'a> {
pub fn with_view( pub fn view(
&self, &self,
immutable: impl IntoIterator<Item = TypeId>, immutable: impl IntoIterator<Item = TypeId>,
mutable: 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 = self.node_slab();
let nodes_data: &SlabStorage<Node> = &nodes_data;
let mut nodes = FxHashMap::default(); let mut nodes = FxHashMap::default();
for id in immutable { for id in immutable {
nodes.insert(id, MaybeRead::Read(self.nodes.get_slab(id).unwrap())); nodes.insert(id, MaybeRead::Read(self.nodes.get_slab(id).unwrap()));
@@ -213,10 +211,8 @@ impl<'a> DynamicallyBorrowedTree<'a> {
for id in mutable { for id in mutable {
nodes.insert(id, MaybeRead::Write(self.nodes.get_slab_mut(id).unwrap())); nodes.insert(id, MaybeRead::Write(self.nodes.get_slab_mut(id).unwrap()));
} }
{
let view = TreeStateView { nodes_data, nodes }; TreeStateView { nodes_data, nodes }
f(view)
}
} }
fn node_slab(&self) -> MappedRwLockReadGuard<SlabStorage<Node>> { 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> { pub struct TreeStateView<'a, 'b> {
nodes_data: &'a SlabStorage<Node>, nodes_data: MappedRwLockReadGuard<'a, SlabStorage<Node>>,
nodes: FxHashMap<TypeId, MaybeRead<'a, 'b>>, nodes: FxHashMap<TypeId, MaybeRead<'a, 'b>>,
} }
@@ -441,36 +437,6 @@ fn deletion() {
assert_eq!(tree.read::<i32>(after), None); 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)] #[derive(Debug)]
pub(crate) struct SlabStorage<T> { pub(crate) struct SlabStorage<T> {
data: Vec<Option<T>>, data: Vec<Option<T>>,