File: shared.ml

package info (click to toggle)
ocaml 5.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 44,372 kB
  • sloc: ml: 370,196; ansic: 52,820; sh: 27,419; asm: 5,462; makefile: 3,684; python: 974; awk: 278; javascript: 273; perl: 59; fortran: 21; cs: 9
file content (58 lines) | stat: -rw-r--r-- 892 bytes parent folder | download | duplicates (2)
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
57
58
(*****************)
(* Shared memory *)
(*****************)

module type T = sig
  type t
  val empty : 'a -> t
  val reinit :  t -> unit
end

module type S = sig
  type t
  val make : int -> t
  val reinit : t -> unit
  type in_t
  val env2in : t -> int -> in_t
end

module One(T0:T) = struct

  type t = T0.t array

  let make sz =  Array.init sz T0.empty

  let reinit env = Array.iter T0.reinit env

  type in_t = T0.t

  let env2in env i = env.(i)

end

module Make(T0:T)(T1:T) = struct

  type t =
    {
      x :T0.t array ;
      y :T1.t array ;
      sz : int ;
    }

  let make sz =
    {
      x = Array.init sz T0.empty ;
      y = Array.init sz T1.empty ;
      sz;
    }

  let reinit env =
    let x = env.x and y = env.y in
    for i = 0 to env.sz-1 do
      T0.reinit x.(i) ; T1.reinit y.(i)
    done

  type in_t = T0.t * T1.t
  let env2in env i = env.x.(i),env.y.(i)

end