stop requiring annoying reference-based RangeBounds supertrait

This commit is contained in:
ripytide
2023-06-18 10:49:54 +01:00
parent eb7f93fa61
commit 354815809b
2 changed files with 10 additions and 20 deletions
+9 -3
View File
@@ -21,7 +21,6 @@ use std::cmp::Ordering;
use std::fmt::{self, Debug};
use std::iter::once;
use std::marker::PhantomData;
use std::ops::RangeBounds;
use btree_monstrousity::btree_map::{
IntoIter as BTreeMapIntoIter, SearchBoundCustom,
@@ -1408,10 +1407,17 @@ where
}
/// A range that has **Inclusive** end-points.
pub trait InclusiveRange<I>: RangeBounds<I> {
pub trait InclusiveRange<I> {
fn start(&self) -> I;
fn end(&self) -> I;
fn contains(&self, point: I) -> bool
where
I: Ord,
{
point >= self.start() && point <= self.end()
}
///requires that self comes before other and they don't overlap
fn touches_ordered(&self, other: &Self) -> bool
where
@@ -1425,7 +1431,7 @@ pub trait InclusiveRange<I>: RangeBounds<I> {
where
I: DiscreteFinite + Ord,
{
self.contains(&other.start()) || self.contains(&other.end())
self.contains(other.start()) || self.contains(other.end())
}
///requires that self comes before other
+1 -17
View File
@@ -47,6 +47,7 @@ along with discrete_range_map. If not, see <https://www.gnu.org/licenses/>.
//!
//! ```rust
//! use std::ops::{Bound, RangeBounds};
//!
//! use discrete_range_map::test_ranges::ie;
//! use discrete_range_map::{
//! DiscreteFinite, DiscreteRangeMap, InclusiveInterval,
@@ -61,23 +62,6 @@ along with discrete_range_map. If not, see <https://www.gnu.org/licenses/>.
//! Infinite(i8),
//! }
//!
//! // First, we need to implement RangeBounds since its a super-trait
//! // of InclusiveRange
//! impl RangeBounds<i8> for Reservation {
//! fn start_bound(&self) -> Bound<&i8> {
//! match self {
//! Reservation::Finite(start, _) => Bound::Included(start),
//! Reservation::Infinite(start) => Bound::Included(start),
//! }
//! }
//! fn end_bound(&self) -> Bound<&i8> {
//! match self {
//! Reservation::Finite(_, end) => Bound::Included(end),
//! Reservation::Infinite(_) => Bound::Included(&i8::MAX),
//! }
//! }
//! }
//!
//! // First, we need to implement InclusiveRange
//! impl InclusiveRange<i8> for Reservation {
//! fn start(&self) -> i8 {