]> gitweb.factorcode.org Git - factor.git/blob - basis/hash-sets/wrapped/wrapped.factor
sets: adding ?delete that returns a boolean if elt was deleted from set.
[factor.git] / basis / hash-sets / wrapped / wrapped.factor
1 ! Copyright (C) 2013 John Benediktsson
2 ! See http://factorcode.org/license.txt for BSD license
3
4 USING: accessors arrays hash-sets kernel sequences sets
5 vocabs.loader ;
6
7 IN: hash-sets.wrapped
8
9 TUPLE: wrapped-key
10     { underlying read-only } ;
11
12 TUPLE: wrapped-hash-set
13     { underlying hash-set read-only } ;
14
15 GENERIC: wrap-key ( key wrapped-hash -- wrapped-key )
16
17 <PRIVATE
18
19 : wrapper@ ( key wrapped-hash -- wrapped-key hash-set )
20     [ wrap-key ] [ nip underlying>> ] 2bi ; inline
21
22 PRIVATE>
23
24 M: wrapped-hash-set adjoin
25     wrapper@ adjoin ; inline
26
27 M: wrapped-hash-set ?adjoin
28     wrapper@ ?adjoin ; inline
29
30 M: wrapped-hash-set in?
31     wrapper@ in? ; inline
32
33 M: wrapped-hash-set clear-set
34     underlying>> clear-set ; inline
35
36 M: wrapped-hash-set delete
37     wrapper@ delete ; inline
38
39 M: wrapped-hash-set ?delete
40     wrapper@ ?delete ; inline
41
42 M: wrapped-hash-set cardinality
43     underlying>> cardinality ; inline
44
45 M: wrapped-hash-set members
46     underlying>> members [ underlying>> ] map! ;
47
48 M: wrapped-hash-set equal?
49     over wrapped-hash-set? [ [ underlying>> ] same? ] [ 2drop f ] if ;
50
51 INSTANCE: wrapped-hash-set set
52
53 { "hash-sets.wrapped" "prettyprint" } "hash-sets.wrapped.prettyprint" require-when