]> gitweb.factorcode.org Git - factor.git/blob - core/byte-vectors/byte-vectors.factor
5d337cb028992afcd0e09d46863437cc8ba4b8b0
[factor.git] / core / byte-vectors / byte-vectors.factor
1 ! Copyright (C) 2008 Slava Pestov.\r
2 ! See http://factorcode.org/license.txt for BSD license.\r
3 USING: arrays kernel kernel.private math sequences\r
4 sequences.private growable byte-arrays ;\r
5 IN: byte-vectors\r
6 \r
7 TUPLE: byte-vector\r
8 { underlying byte-array }\r
9 { length array-capacity } ;\r
10 \r
11 : <byte-vector> ( n -- byte-vector )\r
12     <byte-array> 0 byte-vector boa ; inline\r
13 \r
14 : >byte-vector ( seq -- byte-vector )\r
15     T{ byte-vector f B{ } 0 } clone-like ;\r
16 \r
17 M: byte-vector like\r
18     drop dup byte-vector? [\r
19         dup byte-array?\r
20         [ dup length byte-vector boa ] [ >byte-vector ] if\r
21     ] unless ;\r
22 \r
23 M: byte-vector new-sequence\r
24     drop [ <byte-array> ] [ >fixnum ] bi byte-vector boa ;\r
25 \r
26 M: byte-vector equal?\r
27     over byte-vector? [ sequence= ] [ 2drop f ] if ;\r
28 \r
29 M: byte-array new-resizable drop <byte-vector> ;\r
30 \r
31 INSTANCE: byte-vector growable\r