From ca8c7b4db44e8126837c588b97d973845f5ccb52 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Tue, 5 Mar 2013 20:01:27 -0800 Subject: [PATCH] grouping: faster all-eq? and all-equal? (fewer comparisons). --- basis/grouping/grouping.factor | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/basis/grouping/grouping.factor b/basis/grouping/grouping.factor index 99cefa3cf0..8c49f0d903 100644 --- a/basis/grouping/grouping.factor +++ b/basis/grouping/grouping.factor @@ -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 } ;