From 1d4b6b265d148b2a56875e18ab1ea843935fad0a Mon Sep 17 00:00:00 2001 From: Alexander Baranov Date: Tue, 20 Jan 2026 20:57:09 +0300 Subject: [PATCH] quizzes --- practice/src/bin/m_node.rs | 45 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 practice/src/bin/m_node.rs diff --git a/practice/src/bin/m_node.rs b/practice/src/bin/m_node.rs new file mode 100644 index 0000000..26527fb --- /dev/null +++ b/practice/src/bin/m_node.rs @@ -0,0 +1,45 @@ +use std::cell::RefCell; +use std::rc::{Rc, Weak}; + +#[derive(Debug)] +struct Node { + value: i32, + parent: RefCell>>, // <-- weak ref to parent + children: RefCell>>, +} + +impl Node { + fn new(value: i32) -> Rc { + Rc::new(Self { + value, + parent: Default::default(), + children: Default::default(), + }) + } + + fn set_parent(&self, parent: Rc) { + *self.parent.borrow_mut() = Some(Rc::downgrade(&parent)); // <-- create weak ref to parent + } + + fn add_child(self: &Rc, child: Rc) { + child.set_parent(self.clone()); + self.children.borrow_mut().push(child); + } +} + +impl Drop for Node { + fn drop(&mut self) { + println!( + "Dropping node with value {} and {} children", + self.value, + self.children.borrow().len() + ); + } +} + +fn main() { + let tree = Node::new(1); + tree.add_child(Node::new(3)); + tree.add_child(Node::new(5)); + println!("Finishing program now"); +}