]> gitweb.factorcode.org Git - factor.git/blob - basis/tuple-arrays/tuple-arrays.factor
Create basis vocab root
[factor.git] / basis / tuple-arrays / tuple-arrays.factor
1 ! Copyright (C) 2007 Daniel Ehrenberg.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: splitting grouping classes.tuple classes math kernel
4 sequences arrays accessors ;
5 IN: tuple-arrays
6
7 TUPLE: tuple-array { seq read-only } { class read-only } ;
8
9 : <tuple-array> ( length class -- tuple-array )
10     [
11         new tuple>array 1 tail
12         [ <repetition> concat ] [ length ] bi <sliced-groups>
13     ] [ ] bi tuple-array boa ;
14
15 M: tuple-array nth
16     [ seq>> nth ] [ class>> ] bi prefix >tuple ;
17
18 M: tuple-array set-nth ( elt n seq -- )
19     >r >r tuple>array 1 tail r> r> seq>> set-nth ;
20
21 M: tuple-array new-sequence
22     class>> <tuple-array> ;
23
24 : >tuple-array ( seq -- tuple-array )
25     dup empty? [
26         0 over first class <tuple-array> clone-like
27     ] unless ;
28
29 M: tuple-array like 
30     drop dup tuple-array? [ >tuple-array ] unless ;
31
32 M: tuple-array length seq>> length ;
33
34 INSTANCE: tuple-array sequence