Skip to content

Commit

Permalink
Rename range-set-intersects?
Browse files Browse the repository at this point in the history
It actually checks if any range in the set *overlaps* with the given range, which is when two ranges have a *nonempty* intersection. Updated docs and renamed it to `range-set-overlaps?` to clarify this. The old name is kept around as a deprecated legacy alias.
  • Loading branch information
jackfirth committed May 23, 2024
1 parent 90fe33a commit b4769c2
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 16 deletions.
6 changes: 4 additions & 2 deletions base/range.scrbl
Original file line number Diff line number Diff line change
Expand Up @@ -548,10 +548,12 @@ whether the bound is inclusive or exclusive.
@defproc[(range-intersection [range1 range?] [range2 range?]) range?]{
Returns the largest range that is @tech{enclose}d by both @racket[range1] and @racket[range2]. The
ranges must be connected and use the same @tech{comparator} or else a contract error is raised. This
operation is commutative, associative, and idempotent.
operation is commutative, associative, and idempotent. If the two ranges are adjacent, then an empty
range is returned.

@(examples
#:eval (make-evaluator) #:once
(range-intersection (closed-range 2 8) (open-range 4 16))
(range-intersection (greater-than-range 4) (less-than-range 6))
(range-intersection (open-range 2 8) (at-most-range 5)))}
(range-intersection (open-range 2 8) (at-most-range 5))
(range-intersection (less-than-range 4) (singleton-range 4)))}
12 changes: 6 additions & 6 deletions collection/private/endpoint-map-range-set.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@
(define (range-set-encloses? this range)
(endpoint-map-encloses? (this-endpoints this) (this-comparator this) range))

(define (range-set-intersects? this range)
(endpoint-map-intersects? (this-endpoints this) (this-comparator this) range))
(define (range-set-overlaps? this range)
(endpoint-map-overlaps? (this-endpoints this) (this-comparator this) range))

(define (range-set-range-containing-or-absent this value)
(endpoint-map-range-containing-or-absent (this-endpoints this) (this-comparator this) value))
Expand Down Expand Up @@ -281,8 +281,8 @@
(define (range-set-encloses? this range)
(endpoint-map-encloses? (this-endpoints this) (this-comparator this) range))

(define (range-set-intersects? this range)
(endpoint-map-intersects? (this-endpoints this) (this-comparator this) range))
(define (range-set-overlaps? this range)
(endpoint-map-overlaps? (this-endpoints this) (this-comparator this) range))

(define (range-set-range-containing-or-absent this value)
(endpoint-map-range-containing-or-absent (this-endpoints this) (this-comparator this) value))
Expand Down Expand Up @@ -474,7 +474,7 @@
(and (range-encloses? (this-subrange this) range)
(generic-range-set-encloses? (this-delegate-range-set this) range)))

(define (range-set-intersects? this range)
(define (range-set-overlaps? this range)
TODO)

(define/guard (range-set-range-containing-or-absent this value)
Expand Down Expand Up @@ -563,7 +563,7 @@
[(present nearest-range) (range-encloses? nearest-range range)]))


(define/guard (endpoint-map-intersects? endpoints comparator range)
(define/guard (endpoint-map-overlaps? endpoints comparator range)
(define lower-cut (range-lower-cut range))
(define upper-cut (range-upper-cut range))
(guard-match (present (entry _ upper)) (sorted-map-entry-at-most endpoints upper-cut) else
Expand Down
4 changes: 2 additions & 2 deletions collection/private/range-set-interface.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
[range-set-contains-all? (-> range-set? (sequence/c any/c) boolean?)]
[range-set-encloses? (-> range-set? range? boolean?)]
[range-set-encloses-all? (-> range-set? (sequence/c range?) boolean?)]
[range-set-intersects? (-> range-set? range? boolean?)]
[range-set-overlaps? (-> range-set? range? boolean?)]
[range-set-range-containing (->* (range-set? any/c) (failure-result/c) any)]
[range-set-range-containing-or-absent (-> range-set? any/c (option/c range?))]
[range-set-span (->* (range-set?) (failure-result/c) any)]
Expand Down Expand Up @@ -85,7 +85,7 @@
(range-set-contains-all? range-set values)
(range-set-encloses? range-set range)
(range-set-encloses-all? range-set ranges)
(range-set-intersects? range-set range)
(range-set-overlaps? range-set range)
(range-set-range-containing range-set value [failure-result])
(range-set-range-containing-or-absent range-set value)
(range-set-span range-set [failure-result])
Expand Down
8 changes: 6 additions & 2 deletions collection/range-set.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
range-set-contains-all?
range-set-encloses?
range-set-encloses-all?
range-set-intersects?
range-set-overlaps?
range-set-range-containing
range-set-range-containing-or-absent
range-set-span
Expand All @@ -40,6 +40,10 @@
range-set-remove-all!
range-set-clear!
range-subset)

;; Deprecated legacy alias of range-set-overlaps?
(rename-out [range-set-overlaps? range-set-intersects?])

(contract-out
[empty-range-set? predicate/c]
[nonempty-range-set? predicate/c]))
Expand All @@ -57,7 +61,7 @@


;@----------------------------------------------------------------------------------------------------
;; Data definition


(define (empty-range-set? v)
(and (range-set? v) (range-set-empty? v)))
Expand Down
8 changes: 4 additions & 4 deletions collection/range-set.scrbl
Original file line number Diff line number Diff line change
Expand Up @@ -233,16 +233,16 @@ descending order, use @racket[in-range-set] with @racket[#:descending?] set to t
(range-set (closed-range 3 4) (closed-range 8 9))))}


@defproc[(range-set-intersects? [ranges range-set?] [other-range range?]) boolean?]{
Determines if any range in @racket[ranges] intersects with @racket[other-range].
@defproc[(range-set-overlaps? [ranges range-set?] [other-range range?]) boolean?]{
Determines if any range in @racket[ranges] overlaps with @racket[other-range].

@(examples
#:eval (make-evaluator) #:once
(eval:no-prompt
(define ranges (range-set (closed-range 2 5) (closed-range 9 10))))

(range-set-intersects? ranges (closed-range 4 8))
(range-set-intersects? ranges (closed-range 6 8)))}
(range-set-overlaps? ranges (closed-range 4 8))
(range-set-overlaps? ranges (closed-range 6 8)))}


@defproc[(range-set-range-containing [ranges range-set?]
Expand Down

0 comments on commit b4769c2

Please sign in to comment.