]> gitweb.factorcode.org Git - factor.git/blob - extra/sequences/repeating/repeating.factor
circular: fix minor typo in copyright url.
[factor.git] / extra / sequences / repeating / repeating.factor
1 ! Copyright (C) 2008 Alex Chapman
2 ! Copyright (C) 2012 John Benediktsson
3 ! See http://factorcode.org/license.txt for BSD license
4 USING: accessors circular kernel math sequences sequences.private ;
5 IN: sequences.repeating
6
7 TUPLE: cycles
8 { circular circular read-only }
9 { length integer read-only } ;
10
11 : <cycles> ( seq length -- cycles )
12     [ <circular> ] dip cycles boa ;
13
14 : cycle ( seq length -- new-seq )
15     dupd <cycles> swap like ;
16
17 M: cycles length length>> ;
18
19 M: cycles set-length length<< ;
20
21 M: cycles virtual@ ( n seq -- n' seq' ) circular>> ;
22
23 M: cycles virtual-exemplar circular>> ;
24
25 INSTANCE: cycles virtual-sequence
26
27 TUPLE: repeats
28 { seq sequence read-only }
29 { length integer read-only } ;
30
31 : <repeats> ( seq times -- repeats )
32     over length * repeats boa ;
33
34 : repeat ( seq times -- new-seq )
35     dupd <repeats> swap like ;
36
37 M: repeats length length>> ;
38
39 M: repeats nth-unsafe
40     [ length>> / ] [ seq>> [ length * >integer ] keep nth ] bi ;
41
42 INSTANCE: repeats immutable-sequence