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