]> gitweb.factorcode.org Git - factor.git/commitdiff
grouping: faster all-eq? and all-equal? (fewer comparisons).
authorJohn Benediktsson <mrjbq7@gmail.com>
Wed, 6 Mar 2013 04:01:27 +0000 (20:01 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Wed, 6 Mar 2013 04:01:27 +0000 (20:01 -0800)
basis/grouping/grouping.factor

index 99cefa3cf0df94f6f6b9f3f956a581cda457754f..8c49f0d903129dc6f17582c7ebcda10d7f79f266 100644 (file)
@@ -106,9 +106,23 @@ INSTANCE: sliced-clumps abstract-clumps
         ] if
     ] if ; inline
 
-: all-equal? ( seq -- ? ) [ = ] monotonic? ;
+: all-equal? ( seq -- ? )
+    dup length dup 2 < [ 2drop t ] [
+        2 = [
+            first2-unsafe =
+        ] [
+            dup first-unsafe [ = ] curry all?
+        ] if
+    ] if ;
 
-: all-eq? ( seq -- ? ) [ eq? ] monotonic? ;
+: all-eq? ( seq -- ? )
+    dup length dup 2 < [ 2drop t ] [
+        2 = [
+            first2-unsafe eq?
+        ] [
+            dup first-unsafe [ eq? ] curry all?
+        ] if
+    ] if ;
 
 TUPLE: circular-slice { from read-only } { to read-only } { seq read-only } ;