diff --git a/src/helpers.rs b/src/helpers.rs
index 6109cbd..477a460 100644
--- a/src/helpers.rs
+++ b/src/helpers.rs
@@ -17,12 +17,30 @@ You should have received a copy of the GNU Affero General Public License
along with range_bounds_map. If not, see .
*/
-use std::ops::{RangeBounds, Bound};
+use std::cmp::Ordering;
+use std::ops::{Bound, RangeBounds};
-use labels::{trivial, tested};
+use labels::{tested, trivial};
use crate::bound_ord::BoundOrd;
+//todo why is pub(crate) needed?
+pub(crate) fn cmp_range_bounds_with_bound_ord(
+ range_bounds: &A,
+ bound_ord: BoundOrd<&B>,
+) -> Ordering
+where
+ A: RangeBounds,
+ B: Ord,
+{
+ if bound_ord < BoundOrd::start(range_bounds.start_bound()) {
+ Ordering::Greater
+ } else if bound_ord > BoundOrd::end(range_bounds.end_bound()) {
+ Ordering::Less
+ } else {
+ Ordering::Equal
+ }
+}
#[derive(Debug, PartialEq)]
enum Config {
diff --git a/src/range_bounds_map.rs b/src/range_bounds_map.rs
index b52678c..1f71852 100644
--- a/src/range_bounds_map.rs
+++ b/src/range_bounds_map.rs
@@ -22,8 +22,8 @@ use std::iter::once;
use std::marker::PhantomData;
use std::ops::{Bound, RangeBounds};
-use btree_monstousity::BTreeMap;
use btree_monstousity::btree_map::SearchBoundCustom;
+use btree_monstousity::BTreeMap;
use itertools::Itertools;
use labels::{parent_tested, tested, trivial};
use serde::de::{MapAccess, Visitor};
@@ -31,7 +31,7 @@ use serde::ser::SerializeMap;
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use crate::bound_ord::BoundOrd;
-use crate::helpers::is_valid_range_bounds;
+use crate::helpers::{cmp_range_bounds_with_bound_ord, is_valid_range_bounds};
use crate::TryFromBounds;
/// An ordered map of non-overlapping [`RangeBounds`] based on [`BTreeMap`].
@@ -431,16 +431,20 @@ where
Q: RangeBounds,
{
let lower_comp = |inner_range_bounds: &K| {
- BoundOrd::start(range_bounds.start_bound())
- .cmp(&BoundOrd::start(inner_range_bounds.start_bound()))
+ cmp_range_bounds_with_bound_ord(
+ inner_range_bounds,
+ BoundOrd::start(range_bounds.start_bound()),
+ )
};
let upper_comp = |inner_range_bounds: &K| {
- BoundOrd::start(range_bounds.start_bound())
- .cmp(&BoundOrd::start(inner_range_bounds.start_bound()))
+ cmp_range_bounds_with_bound_ord(
+ inner_range_bounds,
+ BoundOrd::end(range_bounds.end_bound()),
+ )
};
- let lower_bound = SearchBoundCustom::Included;
- let upper_bound = SearchBoundCustom::Included;
+ let lower_bound = SearchBoundCustom::Included;
+ let upper_bound = SearchBoundCustom::Included;
self.inner
.range(lower_comp, lower_bound, upper_comp, upper_bound)