From 949c4ee91a00fc7020e2ba616143ef85646d4dd0 Mon Sep 17 00:00:00 2001 From: Andrew Morris Date: Thu, 17 Aug 2023 11:25:19 +1000 Subject: [PATCH] Split out index_path --- radix_tree/src/radix_tree.rs | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) 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];