hashtables kernel parser sequences.private vocabs.loader ;
IN: linked-assocs
-SLOT: dlist ! FIXME: needed for change-dlist for some reason
-
TUPLE: linked-assoc { assoc read-only } { dlist dlist read-only } ;
: <linked-assoc> ( exemplar -- assoc )
[ assoc>> clear-assoc ] [ dlist>> clear-deque ] bi ;
M: linked-assoc clone
- (clone) [ clone ] change-assoc [ clone ] change-dlist ;
+ [ assoc>> clone ] [ dlist>> clone ] bi linked-assoc boa ;
INSTANCE: linked-assoc assoc
] [ drop ] if
] [ drop ] if* ;
+M: lru-cache clone
+ [ assoc>> clone ] [ dlist>> clone ] [ max-size>> ] tri
+ lru-cache boa ;
+
TUPLE: fifo-cache < linked-assoc max-size ;
: <fifo-cache> ( max-size exemplar -- assoc )
] [ drop ] if
] [ drop ] if* ;
+M: fifo-cache clone
+ [ assoc>> clone ] [ dlist>> clone ] [ max-size>> ] tri
+ fifo-cache boa ;
+
TUPLE: lifo-cache < linked-assoc max-size ;
: <lifo-cache> ( max-size exemplar -- assoc )
[ dlist>> ] tri (delete-at)
] when
] when* call-next-method ;
+
+M: lifo-cache clone
+ [ assoc>> clone ] [ dlist>> clone ] [ max-size>> ] tri
+ lifo-cache boa ;