From 62ae098b599ee3b0cb993c8547129fd309caadb8 Mon Sep 17 00:00:00 2001 From: Eduardo Trujillo <ed@chromabits.com> Date: Sun, 16 Mar 2025 21:53:11 +0000 Subject: [PATCH] feat(rangemap): Add iterator --- src/rangemap.rs | 17 +++++++++++++++++ src/rangeset.rs | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/rangemap.rs b/src/rangemap.rs index 91eef9a..8c58716 100644 --- a/src/rangemap.rs +++ b/src/rangemap.rs @@ -84,6 +84,23 @@ impl<RK: Ord + Copy, V> RangeMap<RK, V> { None } + + /// Returns all stored ranges, sorted by key. + pub fn iter(&self) -> impl Iterator<Item = ((RK, RK), &V)> + '_ { + self.ranges + .iter() + .map(|(&s, value)| ((s, value.0), &value.1)) + } + + /// Returns the number of elements in the map. + pub fn len(&self) -> usize { + self.ranges.len() + } + + /// Returns whether this map is empty. + pub fn is_empty(&self) -> bool { + self.ranges.is_empty() + } } impl<RK: Ord + Copy, V> Default for RangeMap<RK, V> { diff --git a/src/rangeset.rs b/src/rangeset.rs index 49de772..f6e52d8 100644 --- a/src/rangeset.rs +++ b/src/rangeset.rs @@ -69,7 +69,7 @@ impl<RK: Ord + Copy> RangeSet<RK> { false } - /// Returns all stored ranges. + /// Returns all stored ranges, sorted by key. pub fn iter(&self) -> impl Iterator<Item = (RK, RK)> + '_ { self.ranges.iter().map(|(&s, &e)| (s, e)) } -- GitLab