1 ! Copyright (C) 2013 John Benediktsson
2 ! See http://factorcode.org/license.txt for BSD license
4 USING: accessors arrays hash-sets kernel sequences sets
10 { underlying read-only } ;
12 TUPLE: wrapped-hash-set
13 { underlying hash-set read-only } ;
15 GENERIC: wrap-key ( key wrapped-hash -- wrapped-key )
19 : wrapper@ ( key wrapped-hash -- wrapped-key hash-set )
20 [ wrap-key ] [ nip underlying>> ] 2bi ; inline
24 M: wrapped-hash-set adjoin
25 wrapper@ adjoin ; inline
27 M: wrapped-hash-set ?adjoin
28 wrapper@ ?adjoin ; inline
30 M: wrapped-hash-set in?
33 M: wrapped-hash-set clear-set
34 underlying>> clear-set ; inline
36 M: wrapped-hash-set delete
37 wrapper@ delete ; inline
39 M: wrapped-hash-set ?delete
40 wrapper@ ?delete ; inline
42 M: wrapped-hash-set cardinality
43 underlying>> cardinality ; inline
45 M: wrapped-hash-set members
46 underlying>> members [ underlying>> ] map! ;
48 M: wrapped-hash-set equal?
49 over wrapped-hash-set? [ [ underlying>> ] same? ] [ 2drop f ] if ;
51 INSTANCE: wrapped-hash-set set
53 { "hash-sets.wrapped" "prettyprint" } "hash-sets.wrapped.prettyprint" require-when