From 1933fe6a56b6380d6ae41de1334595c73c1a6866 Mon Sep 17 00:00:00 2001 From: Zixuan Chen Date: Wed, 7 Dec 2022 11:03:10 +0800 Subject: [PATCH] fix: refine rangemap interface --- crates/rle/src/range_map.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/crates/rle/src/range_map.rs b/crates/rle/src/range_map.rs index 5f4ff020..b15b4dee 100644 --- a/crates/rle/src/range_map.rs +++ b/crates/rle/src/range_map.rs @@ -323,6 +323,9 @@ impl< self.tree.delete_range(start, end); } + /// Return the values overlap with the given range + /// + /// Note that the returned values may exceed the given range #[inline] pub fn get_range(&self, start: Index, end: Index) -> impl Iterator { self.tree @@ -330,6 +333,10 @@ impl< .map(|x| &x.as_tree_ref().value) } + /// Return the values overlap with the given range and their indexes + /// + /// Note that the returned values may exceed the given range + /// /// TODO: need double check this method #[inline] pub fn get_range_with_index( @@ -343,6 +350,19 @@ impl< }) } + /// Return the values contained by the given range, the returned values are sliced by the given range + #[inline] + pub fn get_range_sliced( + &self, + start: Index, + end: Index, + ) -> impl Iterator + '_ { + self.tree.iter_range(start, Some(end)).map(|x| { + let sliced = x.get_sliced(); + (sliced.index, sliced.value) + }) + } + #[inline] pub fn get_mut(&mut self, index: Index) -> Option<&mut Value> { let cursor = self.tree.get_mut(index);