]> gitweb.factorcode.org Git - factor.git/commitdiff
interval-sets: faster find-interval.
authorJohn Benediktsson <mrjbq7@gmail.com>
Mon, 19 May 2014 05:49:39 +0000 (22:49 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Mon, 19 May 2014 05:49:39 +0000 (22:49 -0700)
basis/interval-sets/interval-sets.factor

index 4fdcfc3634069f8c5d2f2c563bdc3276ff6f1649..c547b874837241705ab8f062d098fc5f1271db07 100644 (file)
@@ -15,8 +15,9 @@ ALIAS: start first-unsafe
 ALIAS: end second-unsafe
 
 : find-interval ( key interval-set -- slice )
-    array>> 2 <groups>
-    [ start <=> ] with search nip ; inline
+    array>> swap dupd [ >=< ] curry search drop
+    [ dup even? [ dup 1 + ] [ [ 1 - ] keep ] if rot <slice-unsafe> ]
+    [ drop f ] if* ; inline
 
 ERROR: not-an-interval-set obj ;
 
@@ -46,7 +47,7 @@ PRIVATE>
             drop dup first2 <
             [ unclip-slice , ]
             [ 2 tail-slice ] if
-            (delete-redundancies) 
+            (delete-redundancies)
         ]
     } case ;