From ec32a50d35f1a3b1fb1755f5112f984d83845917 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Fri, 15 Nov 2024 16:22:21 +0000 Subject: [PATCH] add prepend --- src/test/demo.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/test/demo.rs b/src/test/demo.rs index f0b05c5..1a61116 100644 --- a/src/test/demo.rs +++ b/src/test/demo.rs @@ -69,6 +69,28 @@ impl List { self.tail = Some(node); } + pub fn prepend(&mut self, data: T) { + let node = Node { + back: None, + next: None, + data, + }; + let node = Ptr::new_heap(node); + self.prepend_raw(node) + } + + fn prepend_raw(&mut self, node: P) { + let mut tok = self.noalias.token_mut(); + node.borrow_mut(&mut tok).back = None; + node.borrow_mut(&mut tok).next = self.head; + if let Some(old_head) = self.head { + old_head.borrow_mut(&mut tok).back = Some(node); + } else { + self.tail = Some(node); + }; + self.head = Some(node); + } + pub fn front(&self) -> Option<&T> { let tok = self.noalias.token_ref(); let head = self.head?; -- 2.30.2