diff --git a/radix_tree/src/radix_tree.rs b/radix_tree/src/radix_tree.rs index 03ac762..63aa2b4 100644 --- a/radix_tree/src/radix_tree.rs +++ b/radix_tree/src/radix_tree.rs @@ -221,6 +221,17 @@ impl RadixTree { } } } + + fn index_path(&self, mut i: usize) -> Vec { + let mut path = vec![0; self.depth()]; + + for p in path.iter_mut().rev() { + *p = i % N; + i /= N; + } + + path + } } impl Default for RadixTree { @@ -232,17 +243,10 @@ impl Default for RadixTree { impl Index for RadixTree { type Output = T; - fn index(&self, mut i: usize) -> &T { - let mut path = vec![0; self.depth()]; - - for p in path.iter_mut().rev() { - *p = i % N; - i /= N; - } - + fn index(&self, i: usize) -> &T { let mut tree = self; - for p in path { + for p in tree.index_path(i) { match tree.data() { RadixTreeData::Meta(meta) => { tree = &meta[p]; @@ -258,17 +262,10 @@ impl Index for RadixTree { } impl IndexMut for RadixTree { - fn index_mut(&mut self, mut i: usize) -> &mut T { - let mut path = vec![0; self.depth()]; - - for p in path.iter_mut().rev() { - *p = i % N; - i /= N; - } - + fn index_mut(&mut self, i: usize) -> &mut T { let mut tree = self; - for p in path { + for p in tree.index_path(i) { match tree.data_mut() { RadixTreeData::Meta(meta) => { tree = &mut meta[p];