Commit | Line | Data |
---|---|---|
34e49164 C |
1 | open Ocollection |
2 | open Oset | |
3 | ||
4 | let empty = Setb.empty | |
5 | ||
6 | class ['a] osetb xs = | |
7 | object(o) | |
8 | inherit ['a] oset | |
9 | ||
10 | val data = xs (* Setb.empty *) | |
11 | method tosetb = data | |
12 | ||
13 | (* if put [] then no segfault, if [11] then segfault *) | |
14 | method toset = Obj.magic data | |
15 | ||
16 | method empty = {< data = Setb.empty >} | |
17 | method add e = {< data = Setb.add e data >} | |
18 | method iter f = Setb.iter f data | |
19 | method view = | |
20 | if Setb.is_empty data | |
21 | then Empty | |
22 | else let el = Setb.choose data in Cons (el, o#del el) | |
23 | ||
24 | method del e = {< data = Setb.remove e data >} | |
25 | method mem e = Setb.mem e data | |
26 | method null = Setb.is_empty data | |
27 | ||
28 | method tolist = Setb.elements data | |
29 | method length = Setb.cardinal data | |
30 | ||
31 | method union s = {< data = Setb.union data s#tosetb >} | |
32 | method inter s = {< data = Setb.inter data s#tosetb >} | |
33 | method minus s = {< data = Setb.diff data s#tosetb >} | |
34 | (* todo: include, ... *) | |
35 | ||
36 | end |