From bd9f20557917927c0d4baee679775e6593399e3c Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sun, 24 Jul 2022 23:09:02 -0500 Subject: [PATCH] sequences: faster filter! and less bounds checking on new find --- core/sequences/sequences.factor | 46 ++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/core/sequences/sequences.factor b/core/sequences/sequences.factor index 356d96e8c1..87aa6f6465 100644 --- a/core/sequences/sequences.factor +++ b/core/sequences/sequences.factor @@ -553,20 +553,26 @@ PRIVATE> : bounds-check-find ( n seq quot -- elt i ) 2over bounds-check? [ call ] [ 3drop f f ] if ; inline + + : find-from ( ... n seq quot: ( ... elt -- ... ? ) -- ... i elt ) - '[ - _ [ rot sequence-operator-from find-integer-from ] keepd - index/element - ] bounds-check-find ; inline + '[ _ find-from-unsafe ] bounds-check-find ; inline : find ( ... seq quot: ( ... elt -- ... ? ) -- ... i elt ) - [ 0 ] 2dip find-from ; inline + [ 0 ] 2dip find-from-unsafe ; inline : find-last-from ( ... n seq quot: ( ... elt -- ... ? ) -- ... i elt ) - '[ - _ [ rot sequence-operator-last-from find-last-integer ] keepd - index/element - ] bounds-check-find ; inline + '[ _ find-last-from-unsafe ] bounds-check-find ; inline : find-last ( ... seq quot: ( ... elt -- ... ? ) -- ... i elt ) [ [ length 1 - ] keep ] dip find-last-from ; inline @@ -780,22 +786,26 @@ M: slice hashcode* [ sequence-hashcode ] recursive-hashcode ; : filter! ( ... seq quot: ( ... elt -- ... ? ) -- ... seq ) - swap [ [ 0 0 ] dip (filter!) ] keep ; inline + [ 0 0 ] 2dip filter-from! ; inline : reject! ( ... seq quot: ( ... elt -- ... ? ) -- ... seq ) negate filter! ; inline -- 2.34.1