5
5
(* assoc, also called map or dictionnary *)
6
class virtual ['a,'b] oassoc =
6
class virtual ['a,'b] oassoc =
8
8
inherit ['a * 'b] ocollection
10
10
method virtual assoc: 'a -> 'b
11
11
method virtual delkey: 'a -> 'o
13
13
(* pre: must be in *)
14
method replkey: ('a * 'b) -> 'o =
15
fun (k,v) -> o#add (k,v)
14
method replkey: ('a * 'b) -> 'o =
15
fun (k,v) -> o#add (k,v)
17
17
(* pre: must not be in *)
18
18
(* method add: ('a * 'b) -> 'o = *)
22
22
List.map fst (o#tolist)
24
24
method virtual keys: 'a list (* or 'a oset ? *)
26
method find: 'a -> 'b = fun k ->
26
method find: 'a -> 'b = fun k ->
29
method find_opt: 'a -> 'b option = fun k ->
29
method find_opt: 'a -> 'b option = fun k ->
31
31
let res = o#assoc k in
33
33
with Not_found -> None
35
method haskey: 'a -> bool = fun k ->
36
try (ignore(o#assoc k); true)
35
method haskey: 'a -> bool = fun k ->
36
try (ignore(o#assoc k); true)
37
37
with Not_found -> false
39
method apply: 'a -> ('b -> 'b) -> 'o = fun k f ->
40
let old = o#assoc k in
39
method apply: 'a -> ('b -> 'b) -> 'o = fun k f ->
40
let old = o#assoc k in
41
41
o#replkey (k, f old)
43
43
(* apply default, assoc_default, take in class parameters a default value *)
44
method apply_with_default: 'a -> ('b -> 'b) -> (unit -> 'b) -> 'o =
44
method apply_with_default: 'a -> ('b -> 'b) -> (unit -> 'b) -> 'o =
48
48
with Not_found -> default ()
50
50
o#replkey (k, f old)
52
method apply_with_default2 = fun k f default ->
52
method apply_with_default2 = fun k f default ->
53
53
o#apply_with_default k f default +> ignore