]> gitweb.factorcode.org Git - factor.git/blobdiff - extra/sequences/repeating/repeating.factor
factor: trim using lists
[factor.git] / extra / sequences / repeating / repeating.factor
index 92b0925907b5bba79c0ac951ea5c78ee8c0c0d8e..9c624e700e055b10fb1d98d8ad83ca882cea3d54 100644 (file)
@@ -1,21 +1,44 @@
 ! Copyright (C) 2008 Alex Chapman
-! See http;//factorcode.org/license.txt for BSD license
-USING: accessors circular kernel sequences ;
+! Copyright (C) 2012 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+USING: accessors circular kernel math sequences ;
 IN: sequences.repeating
 
-TUPLE: repeating circular len ;
+TUPLE: cycles
+{ circular circular read-only }
+{ length integer read-only } ;
 
-: <repeating> ( seq length -- repeating )
-    [ <circular> ] dip repeating boa ;
+: <cycles> ( seq length -- cycles )
+    [ <circular> ] dip cycles boa ;
 
-: repeated ( seq length -- new-seq )
-    dupd <repeating> swap like ;
+: cycle ( seq length -- new-seq )
+    dupd <cycles> swap like ;
 
-M: repeating length repeating-len ;
-M: repeating set-length (>>len) ;
+M: cycles length length>> ;
 
-M: repeating virtual@ ( n seq -- n' seq' ) circular>> ;
+M: cycles set-length length<< ;
 
-M: repeating virtual-seq circular>> ;
+M: cycles virtual@ circular>> ;
 
-INSTANCE: repeating virtual-sequence
+M: cycles virtual-exemplar circular>> ;
+
+INSTANCE: cycles virtual-sequence
+
+TUPLE: repeats
+{ seq sequence read-only }
+{ times integer read-only } ;
+
+C: <repeats> repeats
+
+M: repeats length [ seq>> length ] [ times>> ] bi * ;
+
+M: repeats virtual@ [ times>> /i ] [ seq>> ] bi ;
+
+M: repeats virtual-exemplar seq>> ;
+
+INSTANCE: repeats immutable-sequence
+
+INSTANCE: repeats virtual-sequence
+
+: repeat ( seq times -- new-seq )
+    dupd <repeats> swap like ;