M: model model-activated drop ;
: ref-model ( model -- n )
- [ 1 + ] change-ref ref>> ;
+ [ 1 + dup ] change-ref drop ;
: unref-model ( model -- n )
- [ 1 - ] change-ref ref>> ;
+ [ 1 - dup ] change-ref drop ;
: activate-model ( model -- )
dup ref-model 1 = [
GENERIC: model-changed ( model observer -- )
: add-connection ( observer model -- )
- dup connections>> empty? [ dup activate-model ] when
- connections>> push ;
+ dup connections>>
+ [ empty? [ activate-model ] [ drop ] if ]
+ [ push ] bi ;
: remove-connection ( observer model -- )
- [ connections>> remove! drop ] keep
- dup connections>> empty? [ dup deactivate-model ] when
- drop ;
+ [ connections>> remove! ] keep swap
+ empty? [ deactivate-model ] [ drop ] if ;
: with-locked-model ( model quot -- )
[ '[ _ t >>locked? @ ] ]
- [ drop '[ _ f >>locked? drop ] ]
+ [ drop '[ f _ locked?<< ] ]
2bi [ ] cleanup ; inline
GENERIC: update-model ( model -- )