factor/library/compiler/inference/shuffle.factor

44 lines
1.0 KiB
Factor
Raw Normal View History

2006-04-08 16:46:47 -04:00
! Copyright (C) 2005, 2006 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
IN: inference
2005-09-08 00:37:17 -04:00
USING: hashtables kernel math namespaces sequences ;
2006-04-08 16:46:47 -04:00
SYMBOL: recursive-state
: <computed> \ <computed> counter ;
TUPLE: value uid literal recursion ;
C: value ( obj -- value )
<computed> over set-value-uid
recursive-state get over set-value-recursion
[ set-value-literal ] keep ;
M: value hashcode value-uid ;
2006-08-07 15:41:31 -04:00
M: value equal? eq? ;
2006-04-08 16:46:47 -04:00
M: integer value-uid ;
M: integer value-recursion drop f ;
2006-09-15 20:52:13 -04:00
TUPLE: shuffle in out ;
2006-09-15 20:52:13 -04:00
: split-shuffle ( stack shuffle -- stack1 stack2 )
shuffle-in length swap cut* ;
2006-09-15 20:52:13 -04:00
: load-shuffle ( stack shuffle -- )
shuffle-in [ set ] 2each ;
2006-09-15 20:52:13 -04:00
: shuffled-values ( shuffle -- values )
shuffle-out [ get ] map ;
2006-09-15 20:52:13 -04:00
: shuffle* ( stack shuffle -- stack )
[ [ load-shuffle ] keep shuffled-values ] with-scope ;
2006-09-15 20:52:13 -04:00
: shuffle ( stack shuffle -- stack )
[ split-shuffle ] keep shuffle* append ;
M: shuffle clone
2006-09-15 20:52:13 -04:00
[ shuffle-in clone ] keep shuffle-out clone <shuffle> ;