]> gitweb.factorcode.org Git - factor.git/commitdiff
ranges: M\ range in? should use >forward-range<
authorJohn Benediktsson <mrjbq7@gmail.com>
Thu, 7 Sep 2023 18:58:50 +0000 (11:58 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Thu, 7 Sep 2023 18:58:50 +0000 (11:58 -0700)
core/ranges/ranges.factor

index 6a6318520a0560bf31587bd63cef85e0ad44c785..62305b7c1d0c3ba105e689a73d409bdcb8c5f8ed 100644 (file)
@@ -63,20 +63,7 @@ PRIVATE>
 
 : [1..b) ( b -- range ) 1 swap [a..b) ; inline
 
-
 ! Some methods can be much faster for ranges
-M: range in?
-    over number?
-    [ [ from>> ] [ step>> ] [ length>> 1 - ] tri
-        [ * over + sort-pair between? ] 4keep
-        drop 3dup [ - ] dip /i * + = and
-    ] [ 2drop f ] if ;
-
-M: range cardinality length>> ;
-
-M: range all-unique? drop t ;
-
-M: range duplicates drop f ;
 
 <PRIVATE
 
@@ -108,6 +95,18 @@ CONSTANT: empty-range T{ range f 1 0 1 }
 
 PRIVATE>
 
+M: range in?
+    over number? [
+        >forward-range< [ 3dup between? ] dip swap
+        [ nip 3dup [ - ] dip /i * + = ] [ 4drop f ] if
+    ] [ 2drop f ] if ;
+
+M: range cardinality length>> ;
+
+M: range all-unique? drop t ;
+
+M: range duplicates drop f ;
+
 M: range intersect
     over range? [ intersect-range ] [ call-next-method ] if ;