clean up view code

This commit is contained in:
Evan Almloff 2023-01-22 21:06:59 -06:00
parent 4738352955
commit 3279068569
2 changed files with 13 additions and 49 deletions

View file

@ -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;
}

View file

@ -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>>,