]> gitweb.factorcode.org Git - factor.git/commitdiff
sequences.extras: fix evens/odds to not cache length.
authorJohn Benediktsson <mrjbq7@gmail.com>
Fri, 16 Feb 2018 16:25:57 +0000 (08:25 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Fri, 16 Feb 2018 16:25:57 +0000 (08:25 -0800)
extra/sequences/extras/extras.factor

index d1fbe0e8532f09f4ec9bd11268b6732e9c0cdefd..adfcf15d93f7de7139933aa2c275a44741ce41f0 100644 (file)
@@ -382,26 +382,32 @@ PRIVATE>
 : 2map-index ( ... seq1 seq2 quot: ( ... elt1 elt2 index -- ... newelt ) -- ... newseq )
     pick [ (2each-index) ] dip map-integers ; inline
 
-TUPLE: evens seq length ;
+TUPLE: evens { seq read-only } ;
 
-: <evens> ( seq -- evens )
-    dup length 1 + 2/ evens boa ; inline
+C: <evens> evens
 
-M: evens length length>> ; inline
+M: evens length seq>> length 1 + 2/ ; inline
 
 M: evens nth-unsafe [ 2 * ] [ seq>> nth-unsafe ] bi* ; inline
 
+M: evens like seq>> like ;
+
+M: evens new-sequence seq>> new-sequence ;
+
 INSTANCE: evens immutable-sequence
 
-TUPLE: odds seq length ;
+TUPLE: odds { seq read-only } ;
 
-: <odds> ( seq -- odds )
-    dup length 2/ odds boa ; inline
+C: <odds> odds
 
-M: odds length length>> ; inline
+M: odds length seq>> length 2/ ; inline
 
 M: odds nth-unsafe [ 2 * 1 + ] [ seq>> nth-unsafe ] bi* ; inline
 
+M: odds like seq>> like ;
+
+M: odds new-sequence seq>> new-sequence ;
+
 INSTANCE: odds immutable-sequence
 
 : until-empty ( seq quot -- )