]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/interval-sets/interval-sets.factor
basis: use lint.vocabs tool to trim using lists
[factor.git] / basis / interval-sets / interval-sets.factor
index 62f9b479698bb14e283803d9a3a8a1136daf68a2..593ad17fd30ef64ae80270eccb3ba51207ce11e8 100644 (file)
@@ -1,28 +1,19 @@
 ! Copyright (C) 2009 Daniel Ehrenberg.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors alien.c-types arrays assocs binary-search
-combinators fry grouping kernel locals make math math.order
-sequences sequences.private sorting specialized-arrays ;
+classes combinators kernel make math math.order sequences
+sequences.private sorting specialized-arrays ;
 SPECIALIZED-ARRAY: uint
 IN: interval-sets
 ! Sets of positive integers
 
+! Intervals are a pair of { start end }
 TUPLE: interval-set { array uint-array read-only } ;
 
-<PRIVATE
-
-ERROR: not-an-interval-set obj ;
-
-: check-interval-set ( map -- map )
-    dup interval-set? [ not-an-interval-set ] unless ; inline
-
-PRIVATE>
-
-: in? ( key set -- ? )
-    check-interval-set array>>
-    over dupd [ >=< ] curry search drop [
-        dup even? [ dup 1 + ] [ [ 1 - ] keep ] if rot
-        [ nth-unsafe ] curry bi@ 1 - between?
+: interval-in? ( key set -- ? )
+    interval-set check-instance array>>
+    dupd [ <=> ] with search swap [
+        even? [ >= ] [ 1 - <= ] if
     ] [ 2drop f ] if* ;
 
 <PRIVATE
@@ -30,11 +21,8 @@ PRIVATE>
 : spec>pairs ( sequence -- intervals )
     [ dup number? [ dup 2array ] when ] map ;
 
-ALIAS: start first-unsafe
-ALIAS: end second-unsafe
-
 : disjoint? ( node1 node2 -- ? )
-    [ end ] [ start ] bi* < ;
+    [ second-unsafe ] [ first-unsafe ] bi* < ;
 
 : (delete-redundancies) ( seq -- )
     dup length {