~npalix/coccinelle/upstream

« back to all changes in this revision

Viewing changes to commons/oassoc.ml

  • Committer: Nicolas Palix
  • Date: 2010-01-28 14:23:49 UTC
  • Revision ID: git-v1:70d17887795852eca805bfe27745b9810c0a39be
Remove trailing whitespace/tab

svn path=/coccinelle/; revision=8684

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
open Ocollection
4
4
 
5
5
(* assoc, also called map or dictionnary *)
6
 
class virtual ['a,'b] oassoc = 
 
6
class virtual ['a,'b] oassoc =
7
7
object(o: 'o)
8
8
  inherit ['a * 'b] ocollection
9
 
  
 
9
 
10
10
  method virtual assoc: 'a -> 'b
11
11
  method virtual delkey: 'a -> 'o
12
 
 
 
12
 
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)
16
16
 
17
17
  (* pre: must not be in *)
18
18
  (* method add: ('a * 'b) -> 'o = *)
19
19
 
20
20
  (*
21
 
    method keys = 
 
21
    method keys =
22
22
    List.map fst (o#tolist)
23
23
  *)
24
24
  method virtual keys: 'a list (* or 'a oset ? *)
25
25
 
26
 
  method find: 'a -> 'b = fun k -> 
 
26
  method find: 'a -> 'b = fun k ->
27
27
    o#assoc k
28
28
 
29
 
  method find_opt: 'a -> 'b option = fun k -> 
30
 
    try 
 
29
  method find_opt: 'a -> 'b option = fun k ->
 
30
    try
31
31
      let res = o#assoc k in
32
32
      Some res
33
33
    with Not_found -> None
34
34
 
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
38
 
 
39
 
  method apply: 'a -> ('b -> 'b) -> 'o = fun k f -> 
40
 
    let old = o#assoc k in 
 
38
 
 
39
  method apply: 'a -> ('b -> 'b) -> 'o = fun k f ->
 
40
    let old = o#assoc k in
41
41
    o#replkey (k, f old)
42
42
 
43
43
  (* apply default, assoc_default, take in class parameters a default value *)
44
 
  method apply_with_default: 'a -> ('b -> 'b) -> (unit -> 'b) -> 'o = 
45
 
    fun k f default -> 
46
 
      let old = 
 
44
  method apply_with_default: 'a -> ('b -> 'b) -> (unit -> 'b) -> 'o =
 
45
    fun k f default ->
 
46
      let old =
47
47
        try o#assoc k
48
48
        with Not_found -> default ()
49
49
      in
50
50
      o#replkey (k, f old)
51
51
 
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
54
 
    
 
54
 
55
55
 
56
56
end