diff --git a/src/listhead.rs b/src/listhead.rs index b4c3dcf..f63d959 100644 --- a/src/listhead.rs +++ b/src/listhead.rs @@ -29,11 +29,58 @@ impl ListHead { self.prev.upgrade().unwrap().borrow_mut().next = self.next.clone(); } - pub fn add_tail(&mut self, pnew: &mut ListHead) { - let prev = &mut self.prev; - unsafe { - let next = Weak::from_raw(self); - } + pub fn add_tail(head: &mut Rc::>>, + pnew: &mut Rc::>>) { + let prev = &mut head.borrow_mut().prev; + let next = Rc::downgrade(head); + + next.upgrade().unwrap().borrow_mut().prev = Rc::downgrade(pnew); + pnew.borrow_mut().next = next; + pnew.borrow_mut().prev = prev.clone(); + prev.upgrade().unwrap().borrow_mut().next = Rc::downgrade(pnew); } } +/* +pub struct ListHead { + prev: Weak::>, + next: Weak::>, + data: Weak::>, +} + +impl ListHead { + + pub fn new() -> RefCell::>> { + let mut this = Rc::new(ListHead{ + prev: Weak::>::new(), + next: Weak::>::new(), + data: Weak::>::new(), + }); + let p = RefCell::new(this); + //this.prev = Rc::downgrade(&this).clone(); + //this.prev = Weak::>::new(); + //this.next = Rc::downgrade(&this); + //p.borrow_mut().prev = Rc::downgrade(&p.borrow()); + p.borrow_mut().prev = Weak::>::new(); + return p; + } + /* + pub fn data(&self) -> &Weak::> { + return &self.data; + } + + pub fn del(&mut self) { + self.next.upgrade().unwrap().borrow_mut().prev = self.prev.clone(); + self.prev.upgrade().unwrap().borrow_mut().next = self.next.clone(); + } + + pub fn add_tail(&mut self, pnew: &mut ListHead) { + let prev = &mut self.prev; + unsafe { + let next = Weak::from_raw(&self); + //next.upgrade().unwrap().borrow_mut().prev = Weak::from_raw(pnew); + } + } + */ +} +*/