package pfff

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file oassoc.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
open Common

open Ocollection

(* assoc, also called map or dictionnary *)
class virtual ['a,'b] oassoc = 
object(o: 'o)
  inherit ['a * 'b] ocollection
  
  method virtual assoc: 'a -> 'b
  method virtual delkey: 'a -> 'o
 
  (* pre: must be in *)
  method replkey: ('a * 'b) -> 'o = 
    fun (k,v) -> o#add (k,v) 

  (* pre: must not be in *)
  (* method add: ('a * 'b) -> 'o = *)

  (*
    method keys = 
    List.map fst (o#tolist)
  *)
  method virtual keys: 'a list (* or 'a oset ? *)

  method find: 'a -> 'b = fun k -> 
    o#assoc k

  method find_opt: 'a -> 'b option = fun k -> 
    try 
      let res = o#assoc k in
      Some res
    with Not_found -> None

  method haskey: 'a -> bool = fun k -> 
    try (ignore(o#assoc k); true) 
    with Not_found -> false
 
  method apply: 'a -> ('b -> 'b) -> 'o = fun k f -> 
    let old = o#assoc k in 
    o#replkey (k, f old)

  (* apply default, assoc_default, take in class parameters a default value *)
  method apply_with_default: 'a -> ('b -> 'b) -> (unit -> 'b) -> 'o = 
    fun k f default -> 
      let old = 
        try o#assoc k
        with Not_found -> default ()
      in
      o#replkey (k, f old)

  method apply_with_default2 = fun k f default -> 
    o#apply_with_default k f default |> ignore
    

end
OCaml

Innovation. Community. Security.