added from_iter_strict methods to the Map and Set data-structures

This commit is contained in:
ripytide
2023-10-11 14:57:13 +01:00
parent 88b0c21615
commit f9003ea513
3 changed files with 47 additions and 1 deletions
Generated
+1 -1
View File
@@ -36,7 +36,7 @@ checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
[[package]]
name = "discrete_range_map"
version = "0.5.0"
version = "0.5.1"
dependencies = [
"btree_monstrousity",
"either",
+36
View File
@@ -1205,6 +1205,42 @@ where
}
return Ok(map);
}
/// Collects a `DiscreteRangeMap` from an iterator of (range,
/// value) tuples using [`DiscreteRangeMap::insert_strict()`].
///
/// May return an `Err` while inserting. See
/// [`DiscreteRangeMap::insert_strict()`] for details.
///
/// # Panics
///
/// Panics if the given range is an invalid range. See [`Invalid
/// Ranges`](https://docs.rs/discrete_range_map/latest/discrete_range_map/index.html#invalid-ranges)
/// for more details.
///
/// # Examples
/// ```
/// use discrete_range_map::test_ranges::ie;
/// use discrete_range_map::DiscreteRangeMap;
///
/// let slice =
/// [(ie(1, 4), false), (ie(4, 8), true), (ie(8, 100), false)];
///
/// let map: DiscreteRangeMap<_, _, _> =
/// DiscreteRangeMap::from_iter_strict(
/// slice.into_iter().filter(|(range, _)| range.start > 2),
/// )
/// .unwrap();
/// ```
pub fn from_iter_strict(
iter: impl Iterator<Item = (K, V)>,
) -> Result<DiscreteRangeMap<I, K, V>, OverlapError> {
let mut map = DiscreteRangeMap::new();
for (range, value) in iter {
map.insert_strict(range, value)?;
}
return Ok(map);
}
}
impl<I, K, V> DiscreteRangeMap<I, K, V> {
+10
View File
@@ -122,6 +122,16 @@ where
}
return Ok(set);
}
/// See [`DiscreteRangeMap::from_iter_strict()`] for more details.
pub fn from_iter_strict(
iter: impl Iterator<Item = K>,
) -> Result<DiscreteRangeSet<I, K>, OverlapError> {
let mut set = DiscreteRangeSet::new();
for range in iter {
set.insert_strict(range)?;
}
return Ok(set);
}
}
impl<I, K> DiscreteRangeSet<I, K> {