equal
deleted
inserted
replaced
27 |
27 |
28 pub const INDEX_ENTRY_SIZE: usize = 64; |
28 pub const INDEX_ENTRY_SIZE: usize = 64; |
29 |
29 |
30 impl IndexEntry { |
30 impl IndexEntry { |
31 fn parents(&self) -> [Revision; 2] { |
31 fn parents(&self) -> [Revision; 2] { |
32 [Revision::from_be(self.p1), Revision::from_be(self.p1)] |
32 [self.p1, self.p2] |
33 } |
33 } |
34 } |
34 } |
35 |
35 |
36 impl RevlogIndex for Index { |
36 impl RevlogIndex for Index { |
37 fn len(&self) -> usize { |
37 fn len(&self) -> usize { |
40 |
40 |
41 fn node(&self, rev: Revision) -> Option<&Node> { |
41 fn node(&self, rev: Revision) -> Option<&Node> { |
42 if rev == NULL_REVISION { |
42 if rev == NULL_REVISION { |
43 return None; |
43 return None; |
44 } |
44 } |
45 let i = rev as usize; |
45 Some(&self.data[rev.0 as usize].node) |
46 if i >= self.len() { |
|
47 None |
|
48 } else { |
|
49 Some(&self.data[i].node) |
|
50 } |
|
51 } |
46 } |
52 } |
47 } |
53 |
48 |
54 impl Graph for &Index { |
49 impl Graph for &Index { |
55 fn parents(&self, rev: Revision) -> Result<[Revision; 2], GraphError> { |
50 fn parents(&self, rev: Revision) -> Result<[Revision; 2], GraphError> { |
56 let [p1, p2] = (*self).data[rev as usize].parents(); |
51 let [p1, p2] = self.data[rev.0 as usize].parents(); |
57 let len = (*self).len(); |
52 let len = (*self).len(); |
58 if p1 < NULL_REVISION |
53 if p1 < NULL_REVISION |
59 || p2 < NULL_REVISION |
54 || p2 < NULL_REVISION |
60 || p1 as usize >= len |
55 || p1.0 as usize >= len |
61 || p2 as usize >= len |
56 || p2.0 as usize >= len |
62 { |
57 { |
63 return Err(GraphError::ParentOutOfRange(rev)); |
58 return Err(GraphError::ParentOutOfRange(rev)); |
64 } |
59 } |
65 Ok([p1, p2]) |
60 Ok([p1, p2]) |
66 } |
61 } |