1 ! Copyright (C) 2010 Joe Groff.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors fry growable kernel locals math sequences ;
4 IN: sequences.inserters
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
13 M: offset-growable virtual@
14 [ offset>> + ] [ underlying>> ] bi ; inline
15 M: offset-growable set-length
16 [ offset>> + ] [ underlying>> ] bi set-length ; inline
20 nip underlying>> ; inline
21 M: inserter new-resizable
22 [ drop 0 ] dip new-sequence ; inline
26 TUPLE: appender { underlying read-only } ;
27 C: <appender> appender
29 INSTANCE: appender inserter
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
38 TUPLE: replacer { underlying read-only } ;
39 C: <replacer> replacer
41 INSTANCE: replacer inserter
43 M: replacer new-sequence
44 underlying>> [ set-length ] keep ; inline