1 ! Copyright (C) 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel assocs math accessors destructors fry sequences ;
6 TUPLE: cache-assoc assoc max-age disposed ;
8 : <cache-assoc> ( -- cache )
9 H{ } clone 10 f cache-assoc boa ;
13 TUPLE: cache-entry value age ;
15 : <cache-entry> ( value -- entry ) 0 cache-entry boa ; inline
17 M: cache-entry dispose value>> dispose ;
19 M: cache-assoc assoc-size assoc>> assoc-size ;
21 M: cache-assoc at* assoc>> at* [ dup [ 0 >>age value>> ] when ] dip ;
24 [ check-disposed ] keep
25 [ <cache-entry> ] 2dip
28 M: cache-assoc clear-assoc assoc>> clear-assoc ;
30 M: cache-assoc >alist assoc>> [ value>> ] { } assoc-map-as ;
32 INSTANCE: cache-assoc assoc
34 M: cache-assoc dispose*
35 [ values dispose-each ] [ clear-assoc ] bi ;
39 : purge-cache ( cache -- )
41 [ nip [ 1+ ] change-age age>> _ >= ] assoc-partition
42 [ values dispose-each ] dip