1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
use LinkReference;
/// Base doubly-linked list trait providing node-level navigation.
///
/// Implementors provide the storage for previous/next pointers.
/// Higher-level traits ([`AbsoluteLinkedList`](super::AbsoluteLinkedList),
/// [`RelativeLinkedList`](super::RelativeLinkedList)) build on this to
/// add head, tail, and size tracking.
///
/// # Examples
///
/// ```
/// use platform_trees::LinkedList;
///
/// struct SimpleList { prev: Vec<usize>, next: Vec<usize> }
///
/// impl LinkedList<usize> for SimpleList {
/// fn get_previous(&self, el: usize) -> usize { self.prev[el] }
/// fn get_next(&self, el: usize) -> usize { self.next[el] }
/// fn set_previous(&mut self, el: usize, p: usize) { self.prev[el] = p; }
/// fn set_next(&mut self, el: usize, n: usize) { self.next[el] = n; }
/// }
///
/// let mut list = SimpleList {
/// prev: vec![0; 4],
/// next: vec![0; 4],
/// };
/// list.set_next(1, 2);
/// assert_eq!(list.get_next(1), 2);
/// ```