]> gitweb.factorcode.org Git - factor.git/blob - basis/sequences/windowed/windowed.factor
factor: trim using lists
[factor.git] / basis / sequences / windowed / windowed.factor
1 ! Copyright (C) 2012 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors kernel math math.order math.statistics
4 sequences sequences.private ;
5 IN: sequences.windowed
6
7 TUPLE: windowed-sequence
8     { sequence sequence read-only }
9     { n integer } ;
10
11 INSTANCE: windowed-sequence sequence
12
13 C: <windowed-sequence> windowed-sequence
14
15 M: windowed-sequence nth-unsafe
16     [ 1 + ] dip [ n>> dupd [-] swap ] [ sequence>> ] bi <slice> ; inline
17
18 M: windowed-sequence length
19     sequence>> length ; inline
20
21 : in-bound ( n sequence -- n' )
22     [ drop 0 ] [ length ] bi clamp ; inline
23
24 : in-bounds ( a b sequence -- a' b' sequence )
25     [ nip in-bound ] [ nipd in-bound ] [ 2nip ] 3tri ;
26
27 :: rolling-map ( ... seq n quot: ( ... slice -- ... elt ) -- ... newseq )
28     seq length [
29         1 + [ n [-] ] [ seq <slice-unsafe> ] bi quot call
30     ] { } map-integers ; inline
31
32 : rolling-sum ( seq n -- newseq )
33     [ sum ] rolling-map ;
34
35 : rolling-mean ( seq n -- newseq )
36     [ mean ] rolling-map ;
37
38 : rolling-median ( seq n -- newseq )
39     [ median ] rolling-map ;
40
41 : rolling-supremum ( seq n -- newseq )
42     [ supremum ] rolling-map ;
43
44 : rolling-infimum ( seq n -- newseq )
45     [ infimum ] rolling-map ;
46
47 : rolling-count ( ... u n quot: ( ... elt -- ... ? ) -- ... v )
48     '[ _ count ] rolling-map ; inline