interval-sets: faster find-interval.
parent
18a36c334a
commit
00fbe7dfe9
|
@ -15,8 +15,9 @@ ALIAS: start first-unsafe
|
||||||
ALIAS: end second-unsafe
|
ALIAS: end second-unsafe
|
||||||
|
|
||||||
: find-interval ( key interval-set -- slice )
|
: find-interval ( key interval-set -- slice )
|
||||||
array>> 2 <groups>
|
array>> swap dupd [ >=< ] curry search drop
|
||||||
[ start <=> ] with search nip ; inline
|
[ dup even? [ dup 1 + ] [ [ 1 - ] keep ] if rot <slice-unsafe> ]
|
||||||
|
[ drop f ] if* ; inline
|
||||||
|
|
||||||
ERROR: not-an-interval-set obj ;
|
ERROR: not-an-interval-set obj ;
|
||||||
|
|
||||||
|
@ -46,7 +47,7 @@ PRIVATE>
|
||||||
drop dup first2 <
|
drop dup first2 <
|
||||||
[ unclip-slice , ]
|
[ unclip-slice , ]
|
||||||
[ 2 tail-slice ] if
|
[ 2 tail-slice ] if
|
||||||
(delete-redundancies)
|
(delete-redundancies)
|
||||||
]
|
]
|
||||||
} case ;
|
} case ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue