Previously this word conflicted with sets:in?.
! Intervals are a pair of { start end }
TUPLE: interval-set { array uint-array read-only } ;
-: in? ( key set -- ? )
+: interval-in? ( key set -- ? )
interval-set check-instance array>>
dupd [ <=> ] with search swap [
even? [ >= ] [ 1 - <= ] if
: combining-class ( char -- n ) class-map at ; inline
: non-starter? ( char -- ? ) combining-class { 0 f } member? not ; inline
: property ( property -- interval-map ) properties at ; foldable
-: property? ( char property -- ? ) property interval-sets:in? ; inline
+: property? ( char property -- ? ) property interval-in? ; inline
: special-case ( ch -- casing-tuple ) special-casing at ; inline
! For non-existent characters, use Cn
: interval-sets-benchmark ( -- )
10,000 [ random-32 ] replicate natural-sort
2 <groups> <interval-set>
- 3,000,000 swap '[ random-32 _ in? drop ] times ;
+ 3,000,000 swap '[ random-32 _ interval-in? drop ] times ;
MAIN: interval-sets-benchmark