tuple-arrays: initial-values can be reused here to create the tuple

array sequence
db4
Björn Lindqvist 2015-10-10 22:12:51 +02:00
parent 9c0d5cf34d
commit 81ad3e21cb
2 changed files with 8 additions and 10 deletions

View File

@ -1,8 +1,8 @@
! Copyright (C) 2009, 2010 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors arrays combinators.smart fry functors kernel
kernel.private macros sequences combinators sequences.private
stack-checker parser math classes.tuple classes.tuple.private ;
USING: accessors arrays classes.tuple classes.tuple.private
combinators combinators.smart fry functors kernel macros math parser
sequences sequences.private ;
FROM: inverse => undo ;
IN: tuple-arrays
@ -14,12 +14,6 @@ MACRO: boa-unsafe ( class -- quot ) tuple-layout '[ _ <tuple-boa> ] ;
: tuple-arity ( class -- quot ) '[ _ boa ] inputs ; inline
: smart-tuple>array ( tuple class -- array )
'[ [ _ boa ] undo ] output>array ; inline
: tuple-prototype ( class -- array )
[ new ] [ smart-tuple>array ] bi ; inline
: tuple-slice ( n seq -- slice )
[ n>> [ * dup ] keep + ] [ seq>> ] bi <slice-unsafe> ; inline
@ -60,7 +54,7 @@ TUPLE: CLASS-array
{ length array-capacity read-only } ;
: <CLASS-array> ( length -- tuple-array )
[ \ CLASS [ tuple-prototype <repetition> concat ] [ tuple-arity ] bi ] keep
[ \ CLASS [ initial-values <repetition> concat ] [ tuple-arity ] bi ] keep
\ CLASS-array boa ; inline
M: CLASS-array length length>> ; inline

View File

@ -419,6 +419,10 @@ HELP: tuple>array
{ $values { "tuple" tuple } { "array" array } }
{ $description "Outputs an array having the tuple's slots as elements. The first element is the tuple class word and remainder are declared slots." } ;
HELP: initial-values
{ $values { "class" class } { "seq" sequence } }
{ $description "Gets a sequence with the initial value for each tuple slot." } ;
HELP: <tuple>
{ $values { "layout" "a tuple layout array" } { "tuple" tuple } }
{ $description "Low-level tuple constructor. User code should never call this directly, and instead use " { $link new } "." } ;