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