renamed niceRange to DiscreteRange

This commit is contained in:
ripytide 2023-04-20 15:18:19 +01:00
parent 0dd08da2bd
commit 0b0251ee9c
No known key found for this signature in database
GPG Key ID: B2629F9EC7C2FE8C
3 changed files with 53 additions and 54 deletions

View File

@ -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();

View File

@ -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>;

View File

@ -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(_, _))