35 lines
923 B
Factor
35 lines
923 B
Factor
! Copyright (C) 2007 Daniel Ehrenberg.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: splitting grouping classes.tuple classes math kernel
|
|
sequences arrays accessors ;
|
|
IN: tuple-arrays
|
|
|
|
TUPLE: tuple-array { seq read-only } { class read-only } ;
|
|
|
|
: <tuple-array> ( length class -- tuple-array )
|
|
[
|
|
new tuple>array 1 tail
|
|
[ <repetition> concat ] [ length ] bi <sliced-groups>
|
|
] [ ] bi tuple-array boa ;
|
|
|
|
M: tuple-array nth
|
|
[ seq>> nth ] [ class>> ] bi prefix >tuple ;
|
|
|
|
M: tuple-array set-nth ( elt n seq -- )
|
|
[ tuple>array 1 tail ] 2dip seq>> set-nth ;
|
|
|
|
M: tuple-array new-sequence
|
|
class>> <tuple-array> ;
|
|
|
|
: >tuple-array ( seq -- tuple-array )
|
|
dup empty? [
|
|
0 over first class <tuple-array> clone-like
|
|
] unless ;
|
|
|
|
M: tuple-array like
|
|
drop dup tuple-array? [ >tuple-array ] unless ;
|
|
|
|
M: tuple-array length seq>> length ;
|
|
|
|
INSTANCE: tuple-array sequence
|