Skip to content

Commit 00c9807

Browse files
committed
[00251] Change ViewTree API from Box<dyn View> to Arc<dyn View>
1 parent f5aa3f3 commit 00c9807

3 files changed

Lines changed: 22 additions & 22 deletions

File tree

rusty/src/core/runtime.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ impl Runtime {
3939
pub fn new(root: impl View) -> Self {
4040
let (event_tx, event_rx) = mpsc::channel(2048);
4141
let (rebuild_tx, rebuild_rx) = mpsc::channel(256);
42-
let view_tree = ViewTree::new(Box::new(root));
42+
let view_tree = ViewTree::new(Arc::new(root));
4343
Runtime {
4444
view_tree,
4545
tree: Arc::new(RwLock::new(None)),
@@ -543,9 +543,9 @@ mod tests {
543543
let cleanup_called_clone = cleanup_called.clone();
544544

545545
// Create a view tree with a child
546-
let mut tree = ViewTree::new(Box::new(|_ctx: &mut BuildContext| Element::Empty));
546+
let mut tree = ViewTree::new(Arc::new(|_ctx: &mut BuildContext| Element::Empty));
547547
let root_id = tree.root_id();
548-
let child_id = tree.insert(root_id, Box::new(|_ctx: &mut BuildContext| Element::Empty));
548+
let child_id = tree.insert(root_id, Arc::new(|_ctx: &mut BuildContext| Element::Empty));
549549

550550
// Set up HookStores with an effect cleanup for the child
551551
let mut hook_stores: HashMap<ViewId, HookStore> = HashMap::new();

rusty/src/core/view_tree.rs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ pub struct ViewTree {
2525

2626
impl ViewTree {
2727
/// Create a new ViewTree with a root view.
28-
pub fn new(root_view: Box<dyn View>) -> Self {
28+
pub fn new(root_view: Arc<dyn View>) -> Self {
2929
let root_id = uuid::Uuid::new_v4();
3030
let root_node = ViewNode {
3131
view_id: root_id,
32-
view: Arc::from(root_view),
32+
view: root_view,
3333
parent: None,
3434
children: Vec::new(),
3535
};
@@ -44,11 +44,11 @@ impl ViewTree {
4444
}
4545

4646
/// Insert a child view under the given parent, returning the new child's ViewId.
47-
pub fn insert(&mut self, parent_id: ViewId, view: Box<dyn View>) -> ViewId {
47+
pub fn insert(&mut self, parent_id: ViewId, view: Arc<dyn View>) -> ViewId {
4848
let child_id = uuid::Uuid::new_v4();
4949
let child_node = ViewNode {
5050
view_id: child_id,
51-
view: Arc::from(view),
51+
view,
5252
parent: Some(parent_id),
5353
children: Vec::new(),
5454
};
@@ -64,11 +64,11 @@ impl ViewTree {
6464
&mut self,
6565
parent_id: ViewId,
6666
child_id: ViewId,
67-
view: Box<dyn View>,
67+
view: Arc<dyn View>,
6868
) -> ViewId {
6969
let child_node = ViewNode {
7070
view_id: child_id,
71-
view: Arc::from(view),
71+
view,
7272
parent: Some(parent_id),
7373
children: Vec::new(),
7474
};
@@ -178,11 +178,11 @@ mod tests {
178178

179179
#[test]
180180
fn test_view_tree_insert_and_ancestors() {
181-
let mut tree = ViewTree::new(Box::new(DummyView("root".into())));
181+
let mut tree = ViewTree::new(Arc::new(DummyView("root".into())));
182182
let root = tree.root_id();
183183

184-
let child = tree.insert(root, Box::new(DummyView("child".into())));
185-
let grandchild = tree.insert(child, Box::new(DummyView("grandchild".into())));
184+
let child = tree.insert(root, Arc::new(DummyView("child".into())));
185+
let grandchild = tree.insert(child, Arc::new(DummyView("grandchild".into())));
186186

187187
let ancestors = tree.ancestors(grandchild);
188188
assert_eq!(ancestors.len(), 2);
@@ -195,12 +195,12 @@ mod tests {
195195

196196
#[test]
197197
fn test_view_tree_remove_subtree() {
198-
let mut tree = ViewTree::new(Box::new(DummyView("root".into())));
198+
let mut tree = ViewTree::new(Arc::new(DummyView("root".into())));
199199
let root = tree.root_id();
200200

201-
let child = tree.insert(root, Box::new(DummyView("child".into())));
202-
let gc1 = tree.insert(child, Box::new(DummyView("gc1".into())));
203-
let gc2 = tree.insert(child, Box::new(DummyView("gc2".into())));
201+
let child = tree.insert(root, Arc::new(DummyView("child".into())));
202+
let gc1 = tree.insert(child, Arc::new(DummyView("gc1".into())));
203+
let gc2 = tree.insert(child, Arc::new(DummyView("gc2".into())));
204204

205205
let removed = tree.remove(child);
206206
assert_eq!(removed.len(), 3);
@@ -217,12 +217,12 @@ mod tests {
217217

218218
#[test]
219219
fn test_view_tree_subtree_ids() {
220-
let mut tree = ViewTree::new(Box::new(DummyView("root".into())));
220+
let mut tree = ViewTree::new(Arc::new(DummyView("root".into())));
221221
let root = tree.root_id();
222222

223-
let c1 = tree.insert(root, Box::new(DummyView("c1".into())));
224-
let c2 = tree.insert(root, Box::new(DummyView("c2".into())));
225-
let gc = tree.insert(c1, Box::new(DummyView("gc".into())));
223+
let c1 = tree.insert(root, Arc::new(DummyView("c1".into())));
224+
let c2 = tree.insert(root, Arc::new(DummyView("c2".into())));
225+
let gc = tree.insert(c1, Arc::new(DummyView("gc".into())));
226226

227227
let subtree = tree.subtree_ids(root);
228228
assert_eq!(subtree.len(), 4);

rusty/src/views/view.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ pub struct EffectRecord {
159159
/// Entry for a child view registered during build via `child_view()`.
160160
pub struct ChildViewEntry {
161161
pub child_view_id: ViewId,
162-
pub view: Box<dyn View>,
162+
pub view: Arc<dyn View>,
163163
pub element: Element,
164164
}
165165

@@ -321,7 +321,7 @@ impl<'a> BuildContext<'a> {
321321

322322
self.child_views.push(ChildViewEntry {
323323
child_view_id,
324-
view: Box::new(view),
324+
view: Arc::new(view),
325325
element: element.clone(),
326326
});
327327

0 commit comments

Comments
 (0)