]> gitweb.factorcode.org Git - factor.git/blob - extra/sequences/inserters/inserters.factor
factor: trim using lists
[factor.git] / extra / sequences / inserters / inserters.factor
1 ! Copyright (C) 2010 Joe Groff.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors kernel math sequences ;
4 IN: sequences.inserters
5
6 TUPLE: offset-growable { underlying read-only } { offset read-only } ;
7 C: <offset-growable> offset-growable
8 INSTANCE: offset-growable virtual-sequence
9 M: offset-growable length
10     [ underlying>> length ] [ offset>> ] bi - ; inline
11 M: offset-growable virtual-exemplar
12     underlying>> ; inline
13 M: offset-growable virtual@
14     [ offset>> + ] [ underlying>> ] bi ; inline
15 M: offset-growable set-length
16     [ offset>> + ] [ underlying>> ] bi set-length ; inline
17
18 MIXIN: inserter
19 M: inserter like
20     nip underlying>> ; inline
21 M: inserter new-resizable
22     [ drop 0 ] dip new-sequence ; inline
23 M: inserter length
24     drop 0 ; inline
25
26 TUPLE: appender { underlying read-only } ;
27 C: <appender> appender
28
29 INSTANCE: appender inserter
30
31 M:: appender new-sequence ( len inserter -- sequence )
32     inserter underlying>> :> underlying
33     underlying length :> old-length
34     old-length len + :> new-length
35     new-length underlying set-length
36     underlying old-length <offset-growable> ; inline
37
38 TUPLE: replacer { underlying read-only } ;
39 C: <replacer> replacer
40
41 INSTANCE: replacer inserter
42
43 M: replacer new-sequence
44     underlying>> [ set-length ] keep ; inline