]> gitweb.factorcode.org Git - factor.git/blob - core/vectors/vectors.factor
Builtinn types now use new slot accessors; tuple slot type declaration work in progress
[factor.git] / core / vectors / vectors.factor
1 ! Copyright (C) 2004, 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: arrays kernel math sequences sequences.private growable ;
4 IN: vectors
5
6 TUPLE: vector
7 { "underlying" array }
8 { "length" array-capacity } ;
9
10 <PRIVATE
11
12 : array>vector ( array length -- vector )
13     vector boa ; inline
14
15 PRIVATE>
16
17 : <vector> ( n -- vector ) f <array> 0 array>vector ; inline
18
19 : >vector ( seq -- vector ) V{ } clone-like ;
20
21 M: vector like
22     drop dup vector? [
23         dup array? [ dup length array>vector ] [ >vector ] if
24     ] unless ;
25
26 M: vector new-sequence drop [ f <array> ] keep >fixnum array>vector ;
27
28 M: vector equal?
29     over vector? [ sequence= ] [ 2drop f ] if ;
30
31 M: sequence new-resizable drop <vector> ;
32
33 INSTANCE: vector growable
34
35 : 1vector ( x -- vector ) 1array >vector ;
36
37 : ?push ( elt seq/f -- seq )
38     [ 1 <vector> ] unless* [ push ] keep ;