TUPLE: | < multi-model ;
: <|> ( models -- product ) | <multi-model> ;
+GENERIC: models-changed ( product -- )
+M: | models-changed drop ;
M: | model-changed
nip
dup dependencies>> [ value>> ] all?
- [ dup [ value>> ] product-value >>value notify-connections
- ] [ drop ] if ;
+ [ [ dup [ value>> ] product-value >>value notify-connections ] keep models-changed ]
+ [ drop ] if ;
M: | update-model
dup value>> swap [ set-model ] set-product-value ;
M: | model-activated dup model-changed ;
+! Only when everything's true does he make it false
TUPLE: & < | ;
: <&> ( models -- product ) & <multi-model> ;
-M: & model-changed [ call-next-method ] keep
- [ dependencies>> [ f swap set-model ] each ] with-locked-model ;
\ No newline at end of file
+M: & models-changed dependencies>> [ f swap (>>value) ] each ;
\ No newline at end of file