]> gitweb.factorcode.org Git - factor.git/blob - basis/hashtables/wrapped/wrapped.factor
Using "same?" in more places.
[factor.git] / basis / hashtables / wrapped / wrapped.factor
1 ! Copyright (C) 2011 John Benediktsson
2 ! See http://factorcode.org/license.txt for BSD license
3
4 USING: accessors arrays assocs hashtables kernel sequences
5 vocabs.loader ;
6
7 IN: hashtables.wrapped
8
9 TUPLE: wrapped-key
10     { underlying read-only } ;
11
12 TUPLE: wrapped-hashtable
13     { underlying hashtable read-only } ;
14
15 GENERIC: wrap-key ( key wrapped-hash -- wrapped-key )
16
17 <PRIVATE
18
19 : wrapper@ ( key wrapped-hash -- wrapped-key hash )
20     [ wrap-key ] [ nip underlying>> ] 2bi ; inline
21
22 PRIVATE>
23
24 M: wrapped-hashtable at*
25     wrapper@ at* ; inline
26
27 M: wrapped-hashtable clear-assoc
28     underlying>> clear-assoc ; inline
29
30 M: wrapped-hashtable delete-at
31     wrapper@ delete-at ; inline
32
33 M: wrapped-hashtable assoc-size
34     underlying>> assoc-size ; inline
35
36 M: wrapped-hashtable set-at
37     wrapper@ set-at ; inline
38
39 M: wrapped-hashtable >alist
40     underlying>> >alist [ [ first underlying>> ] [ second ] bi 2array ] map ;
41
42 M: wrapped-hashtable equal?
43     over wrapped-hashtable? [ [ underlying>> ] same? ] [ 2drop f ] if ;
44
45 INSTANCE: wrapped-hashtable assoc
46
47 { "hashtables.wrapped" "prettyprint" } "hashtables.wrapped.prettyprint" require-when