39 #[derive(Clone, Debug)] |
39 #[derive(Clone, Debug)] |
40 pub struct SampleGraph; |
40 pub struct SampleGraph; |
41 |
41 |
42 impl Graph for SampleGraph { |
42 impl Graph for SampleGraph { |
43 fn parents(&self, rev: Revision) -> Result<[Revision; 2], GraphError> { |
43 fn parents(&self, rev: Revision) -> Result<[Revision; 2], GraphError> { |
44 match rev { |
44 let null_rev = NULL_REVISION.0; |
45 0 => Ok([NULL_REVISION, NULL_REVISION]), |
45 let res = match rev.0 { |
46 1 => Ok([0, NULL_REVISION]), |
46 0 => Ok([null_rev, null_rev]), |
47 2 => Ok([1, NULL_REVISION]), |
47 1 => Ok([0, null_rev]), |
48 3 => Ok([1, NULL_REVISION]), |
48 2 => Ok([1, null_rev]), |
49 4 => Ok([2, NULL_REVISION]), |
49 3 => Ok([1, null_rev]), |
50 5 => Ok([4, NULL_REVISION]), |
50 4 => Ok([2, null_rev]), |
51 6 => Ok([4, NULL_REVISION]), |
51 5 => Ok([4, null_rev]), |
52 7 => Ok([4, NULL_REVISION]), |
52 6 => Ok([4, null_rev]), |
53 8 => Ok([NULL_REVISION, NULL_REVISION]), |
53 7 => Ok([4, null_rev]), |
|
54 8 => Ok([null_rev, null_rev]), |
54 9 => Ok([6, 7]), |
55 9 => Ok([6, 7]), |
55 10 => Ok([5, NULL_REVISION]), |
56 10 => Ok([5, null_rev]), |
56 11 => Ok([3, 7]), |
57 11 => Ok([3, 7]), |
57 12 => Ok([9, NULL_REVISION]), |
58 12 => Ok([9, null_rev]), |
58 13 => Ok([8, NULL_REVISION]), |
59 13 => Ok([8, null_rev]), |
59 r => Err(GraphError::ParentOutOfRange(r)), |
60 r => Err(GraphError::ParentOutOfRange(Revision(r))), |
|
61 }; |
|
62 match res { |
|
63 Ok([a, b]) => Ok([Revision(a), Revision(b)]), |
|
64 Err(e) => Err(e), |
60 } |
65 } |
61 } |
66 } |
62 } |
67 } |
63 |
68 |
64 // A Graph represented by a vector whose indices are revisions |
69 // A Graph represented by a vector whose indices are revisions |
65 // and values are parents of the revisions |
70 // and values are parents of the revisions |
66 pub type VecGraph = Vec<[Revision; 2]>; |
71 pub type VecGraph = Vec<[Revision; 2]>; |
67 |
72 |
68 impl Graph for VecGraph { |
73 impl Graph for VecGraph { |
69 fn parents(&self, rev: Revision) -> Result<[Revision; 2], GraphError> { |
74 fn parents(&self, rev: Revision) -> Result<[Revision; 2], GraphError> { |
70 Ok(self[rev as usize]) |
75 Ok(self[rev.0 as usize]) |
71 } |
76 } |
72 } |
77 } |