1 ! Copyright (C) 2008, 2009 Slava Pestov.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: accessors kernel models sequences ;
6 TUPLE: arrow < model quot ;
8 : new-arrow ( model quot class -- arrow )
11 [ add-dependency ] keep ;
13 : <arrow> ( model quot -- arrow )
16 : compute-arrow-value ( model observer -- value )
17 [ value>> ] [ quot>> ] bi* call( old -- new ) ; inline
19 M: arrow model-changed
20 [ compute-arrow-value ] [ set-model ] bi ;
22 M: arrow model-activated
23 [ dependencies>> ] keep [ model-changed ] curry each ;
25 TUPLE: ?arrow < arrow ;
27 : <?arrow> ( model quot -- ?arrow )
30 M: ?arrow model-changed
31 [ compute-arrow-value ] [ ?set-model ] bi ;