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 ;
5 FROM: assocs => change-at ;
8 TUPLE: scope < server-state namespace changed? ;
10 : empty-scope ( class -- scope )
11 f swap new-server-state
12 H{ } clone >>namespace ; inline
16 { "namespace" "NAMESPACE" FACTOR-BLOB +not-null+ }
19 : scope-changed ( scope -- )
22 : scope-get ( key scope -- value )
23 [ namespace>> at ] [ drop f ] if* ;
25 : scope-set ( value key scope -- )
26 [ namespace>> set-at ] [ scope-changed ] bi ;
28 : scope-change ( key quot scope -- )
29 [ namespace>> swap change-at ] [ scope-changed ] bi ; inline
32 TUPLE: scope-saver scope manager ;
34 C: <scope-saver> scope-saver
36 M: scope-saver dispose
37 [ manager>> ] [ scope>> ] bi
39 [ swap touch-state ] [ update-tuple ] bi
42 : save-scope-after ( scope manager -- )
43 <scope-saver> &dispose drop ;