-! (c)2010 Joe Groff bsd license
-USING: combinators combinators.short-circuit fry generalizations kernel
-locals macros math quotations sequences compiler.tree.propagation.transforms ;
-FROM: sequences.private => (each) (each-index) (2each) nth-unsafe set-nth-unsafe ;
+! Copyright (C) 2010 Joe Groff.
+! See http://factorcode.org/license.txt for BSD license.
+USING: combinators combinators.short-circuit
+compiler.tree.propagation.transforms kernel math
+sequences sequences.private ;
IN: sequences.unrolled
<PRIVATE
swap '[ _ call( i -- ) ] each-integer ;
<< \ (unrolled-each-integer) [
- iota [ '[ _ swap call( i -- ) ] ] [ ] map-as '[ _ cleave ]
+ <iota> [ '[ _ swap call( i -- ) ] ] [ ] map-as '[ _ cleave ]
] 1 define-partial-eval >>
: (unrolled-collect) ( quot into -- quot' )
(unrolled-collect) unrolled-each-integer ; inline
: unrolled-map-integers ( n quot: ( n -- value ) exemplar -- newseq )
- [ over ] dip [ [ unrolled-collect ] keep ] new-like ; inline
+ overd [ [ unrolled-collect ] keep ] new-like ; inline
ERROR: unrolled-bounds-error
seq unroll-length ;
: unrolled-2map-as-unsafe ( xseq yseq len quot: ( x y -- newx ) exemplar -- newseq )
[ (unrolled-2each) ] dip unrolled-map-integers ; inline
+: unrolled-map-unsafe ( seq len quot: ( x -- newx ) -- newseq )
+ pick unrolled-map-as-unsafe ; inline
+
+: unrolled-2map-unsafe ( xseq yseq len quot: ( x y -- newx ) -- newseq )
+ reach unrolled-2map-as-unsafe ; inline
+
PRIVATE>
: unrolled-each ( seq len quot: ( x -- ) -- )
pick unrolled-map-as ; inline
: unrolled-2map ( xseq yseq len quot: ( x y -- newx ) -- newseq )
- 4 npick unrolled-2map-as ; inline
+ reach unrolled-2map-as ; inline
: unrolled-map-index ( seq len quot: ( x i -- newx ) -- newseq )
- [ dup length iota ] 2dip unrolled-2map ; inline
-
+ [ dup length <iota> ] 2dip unrolled-2map ; inline