mirror of
https://github.com/DioxusLabs/dioxus
synced 2025-02-17 06:08:26 +00:00
clean up view code
This commit is contained in:
parent
4738352955
commit
3279068569
2 changed files with 13 additions and 49 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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>>,
|
||||
|
|
Loading…
Add table
Reference in a new issue