! 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
: 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
{ 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
{ $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 } "." } ;