rust/hg-core/examples/nodemap/index.rs
changeset 50990 4c5f6e95df84
parent 47983 e834b79def74
equal deleted inserted replaced
50989:27e773aa607d 50990:4c5f6e95df84
    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     }