]> gitweb.factorcode.org Git - factor.git/blob - basis/io/streams/byte-array/byte-array.factor
More VM fixes
[factor.git] / basis / io / streams / byte-array / byte-array.factor
1 ! Copyright (C) 2008, 2009 Daniel Ehrenberg
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: byte-arrays byte-vectors kernel io.encodings io.streams.string
4 sequences io namespaces io.encodings.private accessors sequences.private
5 io.streams.sequence destructors math combinators ;
6 IN: io.streams.byte-array
7
8 M: byte-vector stream-element-type drop +byte+ ;
9
10 : <byte-writer> ( encoding -- stream )
11     512 <byte-vector> swap <encoder> ;
12
13 : with-byte-writer ( encoding quot -- byte-array )
14     [ <byte-writer> ] dip [ output-stream get ] compose with-output-stream*
15     dup encoder? [ stream>> ] when >byte-array ; inline
16
17 TUPLE: byte-reader { underlying byte-array read-only } { i array-capacity } ;
18
19 M: byte-reader stream-element-type drop +byte+ ;
20
21 M: byte-reader stream-read-partial stream-read ;
22 M: byte-reader stream-read sequence-read ;
23 M: byte-reader stream-read1 sequence-read1 ;
24 M: byte-reader stream-read-until sequence-read-until ;
25 M: byte-reader dispose drop ;
26
27 M: byte-reader stream-seek ( n seek-type stream -- )
28     swap {
29         { seek-absolute [ (>>i) ] }
30         { seek-relative [ [ + ] change-i drop ] }
31         { seek-end [ [ underlying>> length + ] keep (>>i) ] }
32         [ bad-seek-type ]
33     } case ;
34
35 : <byte-reader> ( byte-array encoding -- stream )
36     [ B{ } like 0 byte-reader boa ] dip <decoder> ;
37
38 : with-byte-reader ( byte-array encoding quot -- )
39     [ <byte-reader> ] dip with-input-stream* ; inline