From cee38e1f40833a2b8d6ba2a944d7c400e2fc2212 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Mon, 20 May 2013 16:22:23 -0700 Subject: [PATCH] sequences: change filter-as to allocate length of seq not exemplar. --- core/sequences/sequences.factor | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/core/sequences/sequences.factor b/core/sequences/sequences.factor index 55e95c5cf8..df4f7b8529 100644 --- a/core/sequences/sequences.factor +++ b/core/sequences/sequences.factor @@ -331,8 +331,7 @@ PRIVATE> : but-last ( seq -- headseq ) 1 head* ; -: copy ( src i dst -- ) - check-copy copy-unsafe ; inline +: copy ( src i dst -- ) check-copy copy-unsafe ; inline M: sequence clone-like [ dup length ] dip new-sequence [ 0 swap copy-unsafe ] keep ; inline @@ -524,14 +523,21 @@ PRIVATE> : push-if ( ..a elt quot: ( ..a elt -- ..b ? ) accum -- ..b ) [ keep ] dip rot [ push ] [ 2drop ] if ; inline + + : selector-for ( quot exemplar -- selector accum ) - [ length ] keep new-resizable [ [ push-if ] 2curry ] keep ; inline + [ length ] keep (selector-for) ; inline : selector ( quot -- selector accum ) V{ } selector-for ; inline : filter-as ( ... seq quot: ( ... elt -- ... ? ) exemplar -- ... subseq ) - dup [ selector-for [ each ] dip ] curry dip like ; inline + pick length over [ (selector-for) [ each ] dip ] 2curry dip like ; inline : filter ( ... seq quot: ( ... elt -- ... ? ) -- ... subseq ) over filter-as ; inline