1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel accessors assocs destructors
4 db.tuples db.types furnace.cache ;
7 TUPLE: scope < server-state namespace changed? ;
9 : empty-scope ( class -- scope )
10 f swap new-server-state
11 H{ } clone >>namespace ; inline
15 { "namespace" "NAMESPACE" FACTOR-BLOB +not-null+ }
18 : scope-changed ( scope -- )
21 : scope-get ( key scope -- value )
22 dup [ namespace>> at ] [ 2drop f ] if ;
24 : scope-set ( value key scope -- )
25 [ namespace>> set-at ] [ scope-changed ] bi ;
27 : scope-change ( key quot scope -- )
28 [ namespace>> swap change-at ] [ scope-changed ] bi ; inline
31 TUPLE: scope-saver scope manager ;
33 C: <scope-saver> scope-saver
35 M: scope-saver dispose
36 [ manager>> ] [ scope>> ] bi
38 [ swap touch-state ] [ update-tuple ] bi
41 : save-scope-after ( scope manager -- )
42 <scope-saver> &dispose drop ;