renamed niceRange to DiscreteRange
This commit is contained in:
parent
0dd08da2bd
commit
0b0251ee9c
@ -34,6 +34,7 @@ use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||
|
||||
use crate::bound_ord::DiscreteBoundOrd;
|
||||
use crate::discrete_bounds::DiscreteBounds;
|
||||
use crate::stepable::Stepable;
|
||||
use crate::utils::{
|
||||
cmp_range_with_discrete_bound_ord, cut_range, flip_bound, is_valid_range,
|
||||
overlaps,
|
||||
@ -284,7 +285,7 @@ pub enum OverlapOrTryFromBoundsError {
|
||||
impl<I, K, V> RangeBoundsMap<I, K, V>
|
||||
where
|
||||
I: Ord + Copy,
|
||||
K: NiceRange<I>,
|
||||
K: DiscreteRange<I>,
|
||||
{
|
||||
/// Makes a new, empty `RangeBoundsMap`.
|
||||
///
|
||||
@ -366,7 +367,7 @@ where
|
||||
/// ```
|
||||
pub fn overlaps<Q>(&self, range: Q) -> bool
|
||||
where
|
||||
Q: NiceRange<I>,
|
||||
Q: DiscreteRange<I>,
|
||||
{
|
||||
invalid_range_panic(range);
|
||||
|
||||
@ -406,7 +407,7 @@ where
|
||||
range: Q,
|
||||
) -> impl DoubleEndedIterator<Item = (&K, &V)>
|
||||
where
|
||||
Q: NiceRange<I>,
|
||||
Q: DiscreteRange<I>,
|
||||
{
|
||||
invalid_range_panic(range);
|
||||
|
||||
@ -454,7 +455,7 @@ where
|
||||
range: Q,
|
||||
) -> impl DoubleEndedIterator<Item = (&K, &mut V)>
|
||||
where
|
||||
Q: NiceRange<I>,
|
||||
Q: DiscreteRange<I>,
|
||||
{
|
||||
invalid_range_panic(range);
|
||||
|
||||
@ -687,7 +688,7 @@ where
|
||||
range: Q,
|
||||
) -> impl Iterator<Item = (K, V)> + '_
|
||||
where
|
||||
Q: NiceRange<I> + 'a,
|
||||
Q: DiscreteRange<I> + 'a,
|
||||
{
|
||||
invalid_range_panic(range);
|
||||
|
||||
@ -756,7 +757,7 @@ where
|
||||
TryFromBoundsError,
|
||||
>
|
||||
where
|
||||
Q: NiceRange<I> + 'a,
|
||||
Q: DiscreteRange<I> + 'a,
|
||||
K: TryFrom<DiscreteBounds<I>>,
|
||||
V: Clone,
|
||||
{
|
||||
@ -791,7 +792,7 @@ where
|
||||
TryFromBoundsError,
|
||||
>
|
||||
where
|
||||
Q: NiceRange<I>,
|
||||
Q: DiscreteRange<I>,
|
||||
K: TryFrom<DiscreteBounds<I>>,
|
||||
V: Clone,
|
||||
{
|
||||
@ -831,7 +832,7 @@ where
|
||||
TryFromBoundsError,
|
||||
>
|
||||
where
|
||||
Q: NiceRange<I> + 'a,
|
||||
Q: DiscreteRange<I> + 'a,
|
||||
K: TryFrom<DiscreteBounds<I>>,
|
||||
V: Clone,
|
||||
{
|
||||
@ -947,7 +948,7 @@ where
|
||||
outer_range: Q,
|
||||
) -> impl DoubleEndedIterator<Item = (Bound<I>, Bound<I>)>
|
||||
where
|
||||
Q: NiceRange<I>,
|
||||
Q: DiscreteRange<I>,
|
||||
{
|
||||
invalid_range_panic(outer_range);
|
||||
|
||||
@ -1028,7 +1029,7 @@ where
|
||||
/// ```
|
||||
pub fn contains_range<Q>(&self, range: Q) -> bool
|
||||
where
|
||||
Q: NiceRange<I>,
|
||||
Q: DiscreteRange<I>,
|
||||
{
|
||||
invalid_range_panic(range);
|
||||
|
||||
@ -1654,7 +1655,7 @@ where
|
||||
|
||||
fn invalid_range_panic<Q, I>(range: Q)
|
||||
where
|
||||
Q: NiceRange<I>,
|
||||
Q: DiscreteRange<I>,
|
||||
I: Ord,
|
||||
{
|
||||
if !is_valid_range(range) {
|
||||
@ -1666,7 +1667,7 @@ where
|
||||
|
||||
fn double_comp<K, I>() -> impl FnMut(&K, &K) -> Ordering
|
||||
where
|
||||
K: NiceRange<I>,
|
||||
K: DiscreteRange<I>,
|
||||
I: Ord,
|
||||
{
|
||||
|inner_range: &K, new_range: &K| {
|
||||
@ -1677,7 +1678,7 @@ where
|
||||
fn overlapping_start_comp<I, K>(start: Bound<I>) -> impl FnMut(&K) -> Ordering
|
||||
where
|
||||
I: Ord + Copy,
|
||||
K: NiceRange<I>,
|
||||
K: DiscreteRange<I>,
|
||||
{
|
||||
move |inner_range: &K| {
|
||||
cmp_range_with_discrete_bound_ord(
|
||||
@ -1689,7 +1690,7 @@ where
|
||||
fn overlapping_end_comp<I, K>(end: Bound<I>) -> impl FnMut(&K) -> Ordering
|
||||
where
|
||||
I: Ord + Copy,
|
||||
K: NiceRange<I>,
|
||||
K: DiscreteRange<I>,
|
||||
{
|
||||
move |inner_range: &K| {
|
||||
cmp_range_with_discrete_bound_ord(
|
||||
@ -1701,7 +1702,7 @@ where
|
||||
fn touching_start_comp<I, K>(start: Bound<I>) -> impl FnMut(&K) -> Ordering
|
||||
where
|
||||
I: Ord + Copy,
|
||||
K: NiceRange<I>,
|
||||
K: DiscreteRange<I>,
|
||||
{
|
||||
move |inner_range: &K| match (inner_range.end(), start) {
|
||||
//we only allow Ordering::Equal here since if they are equal
|
||||
@ -1729,7 +1730,7 @@ where
|
||||
fn touching_end_comp<I, K>(end: Bound<I>) -> impl FnMut(&K) -> Ordering
|
||||
where
|
||||
I: Ord + Copy,
|
||||
K: NiceRange<I>,
|
||||
K: DiscreteRange<I>,
|
||||
{
|
||||
move |inner_range: &K| match (end, inner_range.start()) {
|
||||
//we only allow Ordering::Equal here since if they are equal
|
||||
@ -1758,13 +1759,13 @@ where
|
||||
/// A simple helper trait to make my implemtation nicer, if you
|
||||
/// already implement RangeBounds and Copy on your type then this will
|
||||
/// also be implemted.
|
||||
pub trait NiceRange<I>: Copy {
|
||||
pub trait DiscreteRange<I>: Copy {
|
||||
fn start(&self) -> DiscreteBoundOrd<I>;
|
||||
fn end(&self) -> DiscreteBoundOrd<I>;
|
||||
}
|
||||
impl<K, I> NiceRange<I> for K
|
||||
impl<K, I> DiscreteRange<I> for K
|
||||
where
|
||||
I: Copy,
|
||||
I: Copy + Stepable,
|
||||
K: RangeBounds<I> + Copy,
|
||||
{
|
||||
fn start(&self) -> Bound<I> {
|
||||
@ -1818,7 +1819,7 @@ impl<I, K, V> Default for RangeBoundsMap<I, K, V> {
|
||||
impl<I, K, V> Serialize for RangeBoundsMap<I, K, V>
|
||||
where
|
||||
I: Ord + Copy,
|
||||
K: NiceRange<I> + Serialize,
|
||||
K: DiscreteRange<I> + Serialize,
|
||||
V: Serialize,
|
||||
{
|
||||
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||
@ -1836,7 +1837,7 @@ where
|
||||
impl<'de, I, K, V> Deserialize<'de> for RangeBoundsMap<I, K, V>
|
||||
where
|
||||
I: Ord + Copy,
|
||||
K: NiceRange<I> + Deserialize<'de>,
|
||||
K: DiscreteRange<I> + Deserialize<'de>,
|
||||
V: Deserialize<'de>,
|
||||
{
|
||||
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||
@ -1860,7 +1861,7 @@ struct RangeBoundsMapVisitor<I, K, V> {
|
||||
impl<'de, I, K, V> Visitor<'de> for RangeBoundsMapVisitor<I, K, V>
|
||||
where
|
||||
I: Ord + Copy,
|
||||
K: NiceRange<I> + Deserialize<'de>,
|
||||
K: DiscreteRange<I> + Deserialize<'de>,
|
||||
V: Deserialize<'de>,
|
||||
{
|
||||
type Value = RangeBoundsMap<I, K, V>;
|
||||
@ -2221,8 +2222,8 @@ mod tests {
|
||||
after: Option<[(K, V); N]>,
|
||||
) where
|
||||
I: Ord + Debug + Copy,
|
||||
K: NiceRange<I> + TryFrom<DiscreteBounds<I>> + PartialEq + Debug,
|
||||
Q: NiceRange<I>,
|
||||
K: DiscreteRange<I> + TryFrom<DiscreteBounds<I>> + PartialEq + Debug,
|
||||
Q: DiscreteRange<I>,
|
||||
V: PartialEq + Debug + Clone,
|
||||
{
|
||||
let clone = before.clone();
|
||||
@ -2367,7 +2368,7 @@ mod tests {
|
||||
after: Option<[(K, V); N]>,
|
||||
) where
|
||||
I: Ord + Debug + Copy,
|
||||
K: NiceRange<I> + TryFrom<DiscreteBounds<I>> + PartialEq + Debug,
|
||||
K: DiscreteRange<I> + TryFrom<DiscreteBounds<I>> + PartialEq + Debug,
|
||||
V: PartialEq + Debug + Clone,
|
||||
{
|
||||
let clone = before.clone();
|
||||
@ -2490,7 +2491,7 @@ mod tests {
|
||||
after: Option<[(K, V); N]>,
|
||||
) where
|
||||
I: Ord + Debug + Copy,
|
||||
K: NiceRange<I> + TryFrom<DiscreteBounds<I>> + PartialEq + Debug,
|
||||
K: DiscreteRange<I> + TryFrom<DiscreteBounds<I>> + PartialEq + Debug,
|
||||
V: Eq + Debug + Clone,
|
||||
{
|
||||
let clone = before.clone();
|
||||
@ -2598,7 +2599,7 @@ mod tests {
|
||||
after: Option<[(K, V); N]>,
|
||||
) where
|
||||
I: Ord + Debug + Copy,
|
||||
K: NiceRange<I> + TryFrom<DiscreteBounds<I>> + PartialEq + Debug,
|
||||
K: DiscreteRange<I> + TryFrom<DiscreteBounds<I>> + PartialEq + Debug,
|
||||
V: PartialEq + Debug + Clone,
|
||||
{
|
||||
let clone = before.clone();
|
||||
@ -2732,7 +2733,7 @@ mod tests {
|
||||
after: Option<[(K, V); N]>,
|
||||
) where
|
||||
I: Ord + Debug + Copy,
|
||||
K: NiceRange<I> + TryFrom<DiscreteBounds<I>> + PartialEq + Debug,
|
||||
K: DiscreteRange<I> + TryFrom<DiscreteBounds<I>> + PartialEq + Debug,
|
||||
V: PartialEq + Debug + Clone,
|
||||
{
|
||||
let clone = before.clone();
|
||||
|
@ -7,7 +7,7 @@ use serde::ser::SerializeSeq;
|
||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||
|
||||
use crate::discrete_bounds::DiscreteBounds;
|
||||
use crate::range_bounds_map::{IntoIter as RangeBoundsMapIntoIter, NiceRange};
|
||||
use crate::range_bounds_map::{IntoIter as RangeBoundsMapIntoIter, DiscreteRange};
|
||||
use crate::{
|
||||
OverlapError, OverlapOrTryFromBoundsError, RangeBoundsMap,
|
||||
TryFromBoundsError,
|
||||
@ -34,7 +34,7 @@ pub struct RangeBoundsSet<I, K> {
|
||||
impl<I, K> RangeBoundsSet<I, K>
|
||||
where
|
||||
I: Ord + Copy,
|
||||
K: NiceRange<I>,
|
||||
K: DiscreteRange<I>,
|
||||
{
|
||||
/// See [`RangeBoundsMap::new()`] for more details.
|
||||
pub fn new() -> Self {
|
||||
@ -53,7 +53,7 @@ where
|
||||
/// See [`RangeBoundsMap::overlaps()`] for more details.
|
||||
pub fn overlaps<Q>(&self, range: Q) -> bool
|
||||
where
|
||||
Q: NiceRange<I>,
|
||||
Q: DiscreteRange<I>,
|
||||
{
|
||||
self.inner.overlaps(range)
|
||||
}
|
||||
@ -63,7 +63,7 @@ where
|
||||
range: Q,
|
||||
) -> impl DoubleEndedIterator<Item = &K>
|
||||
where
|
||||
Q: NiceRange<I>,
|
||||
Q: DiscreteRange<I>,
|
||||
{
|
||||
self.inner.overlapping(range).map(first)
|
||||
}
|
||||
@ -85,7 +85,7 @@ where
|
||||
range: Q,
|
||||
) -> impl Iterator<Item = K> + '_
|
||||
where
|
||||
Q: NiceRange<I> + 'a,
|
||||
Q: DiscreteRange<I> + 'a,
|
||||
{
|
||||
self.inner.remove_overlapping(range).map(first)
|
||||
}
|
||||
@ -98,7 +98,7 @@ where
|
||||
TryFromBoundsError,
|
||||
>
|
||||
where
|
||||
Q: NiceRange<I> + 'a,
|
||||
Q: DiscreteRange<I> + 'a,
|
||||
K: TryFrom<DiscreteBounds<I>>,
|
||||
{
|
||||
self.inner.cut(range).map(|x| x.map(first))
|
||||
@ -109,14 +109,14 @@ where
|
||||
range: Q,
|
||||
) -> impl DoubleEndedIterator<Item = (Bound<I>, Bound<I>)> + '_
|
||||
where
|
||||
Q: NiceRange<I> + 'a,
|
||||
Q: DiscreteRange<I> + 'a,
|
||||
{
|
||||
self.inner.gaps(range)
|
||||
}
|
||||
/// See [`RangeBoundsMap::contains_range()`] for more details.
|
||||
pub fn contains_range<Q>(&self, range: Q) -> bool
|
||||
where
|
||||
Q: NiceRange<I>,
|
||||
Q: DiscreteRange<I>,
|
||||
{
|
||||
self.inner.contains_range(range)
|
||||
}
|
||||
@ -233,7 +233,7 @@ where
|
||||
impl<I, K> Serialize for RangeBoundsSet<I, K>
|
||||
where
|
||||
I: Ord + Copy,
|
||||
K: NiceRange<I> + Serialize,
|
||||
K: DiscreteRange<I> + Serialize,
|
||||
{
|
||||
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||
where
|
||||
@ -250,7 +250,7 @@ where
|
||||
impl<'de, I, K> Deserialize<'de> for RangeBoundsSet<I, K>
|
||||
where
|
||||
I: Ord + Copy,
|
||||
K: NiceRange<I> + Deserialize<'de>,
|
||||
K: DiscreteRange<I> + Deserialize<'de>,
|
||||
{
|
||||
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||
where
|
||||
@ -271,7 +271,7 @@ struct RangeBoundsSetVisitor<I, K> {
|
||||
impl<'de, I, K> Visitor<'de> for RangeBoundsSetVisitor<I, K>
|
||||
where
|
||||
I: Ord + Copy,
|
||||
K: NiceRange<I> + Deserialize<'de>,
|
||||
K: DiscreteRange<I> + Deserialize<'de>,
|
||||
{
|
||||
type Value = RangeBoundsSet<I, K>;
|
||||
|
||||
|
28
src/utils.rs
28
src/utils.rs
@ -21,14 +21,14 @@ use std::cmp::Ordering;
|
||||
use std::ops::Bound;
|
||||
|
||||
use crate::bound_ord::DiscreteBoundOrd;
|
||||
use crate::range_bounds_map::NiceRange;
|
||||
use crate::range_bounds_map::DiscreteRange;
|
||||
|
||||
pub(crate) fn cmp_range_with_discrete_bound_ord<A, B>(
|
||||
range: A,
|
||||
discrete_bound_ord: DiscreteBoundOrd<B>,
|
||||
) -> Ordering
|
||||
where
|
||||
A: NiceRange<B>,
|
||||
A: DiscreteRange<B>,
|
||||
B: Ord,
|
||||
{
|
||||
if discrete_bound_ord < range.start() {
|
||||
@ -52,13 +52,11 @@ pub(crate) enum Config {
|
||||
}
|
||||
pub(crate) fn config<I, A, B>(a: A, b: B) -> Config
|
||||
where
|
||||
A: NiceRange<I>,
|
||||
B: NiceRange<I>,
|
||||
A: DiscreteRange<I>,
|
||||
B: DiscreteRange<I>,
|
||||
I: Ord,
|
||||
{
|
||||
match DiscreteBoundOrd::start(a.start())
|
||||
< DiscreteBoundOrd::start(b.start())
|
||||
{
|
||||
match a.start() < b.start() {
|
||||
true => {
|
||||
match (
|
||||
contains_bound_ord(a, DiscreteBoundOrd::start(b.start())),
|
||||
@ -91,8 +89,8 @@ enum SortedConfig<I> {
|
||||
}
|
||||
fn sorted_config<I, A, B>(a: A, b: B) -> SortedConfig<I>
|
||||
where
|
||||
A: NiceRange<I>,
|
||||
B: NiceRange<I>,
|
||||
A: DiscreteRange<I>,
|
||||
B: DiscreteRange<I>,
|
||||
I: Ord,
|
||||
{
|
||||
let ae = (a.start(), a.end());
|
||||
@ -117,7 +115,7 @@ pub(crate) fn contains_bound_ord<I, A>(
|
||||
bound_ord: DiscreteBoundOrd<I>,
|
||||
) -> bool
|
||||
where
|
||||
A: NiceRange<I>,
|
||||
A: DiscreteRange<I>,
|
||||
I: Ord,
|
||||
{
|
||||
let start_bound_ord = DiscreteBoundOrd::start(range.start());
|
||||
@ -134,8 +132,8 @@ pub(crate) struct CutResult<I> {
|
||||
}
|
||||
pub(crate) fn cut_range<I, B, C>(base: B, cut: C) -> CutResult<I>
|
||||
where
|
||||
B: NiceRange<I>,
|
||||
C: NiceRange<I>,
|
||||
B: DiscreteRange<I>,
|
||||
C: DiscreteRange<I>,
|
||||
I: Ord + Copy,
|
||||
{
|
||||
let mut result = CutResult {
|
||||
@ -188,7 +186,7 @@ where
|
||||
pub(crate) fn is_valid_range<I, K>(range: K) -> bool
|
||||
where
|
||||
I: Ord,
|
||||
K: NiceRange<I>,
|
||||
K: DiscreteRange<I>,
|
||||
{
|
||||
match (range.start(), range.end()) {
|
||||
(Bound::Included(start), Bound::Included(end)) => start <= end,
|
||||
@ -201,8 +199,8 @@ where
|
||||
|
||||
pub(crate) fn overlaps<I, A, B>(a: A, b: B) -> bool
|
||||
where
|
||||
A: NiceRange<I>,
|
||||
B: NiceRange<I>,
|
||||
A: DiscreteRange<I>,
|
||||
B: DiscreteRange<I>,
|
||||
I: Ord,
|
||||
{
|
||||
!matches!(sorted_config(a, b), SortedConfig::NonOverlapping(_, _))
|
||||
|
Loading…
x
Reference in New Issue
Block a user