package base

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

Source file random_repr.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

type t = Stdlib.Random.State.t Stdlib.Domain.DLS.key

module Repr = struct
  open Stdlib.Bigarray

  type t = (int64, int64_elt, c_layout) Array1.t

  let of_state : Stdlib.Random.State.t -> t = Stdlib.Obj.magic
end

let assign t state =
  let dst = Repr.of_state (Stdlib.Domain.DLS.get t) in
  let src = Repr.of_state state in
  Stdlib.Bigarray.Array1.blit src dst
;;

let make state =
  let split_from_parent v = Stdlib.Random.State.split v in
  let t = Stdlib.Domain.DLS.new_key ~split_from_parent (fun () -> state) in
  Stdlib.Domain.DLS.get t |> ignore;
  t
;;

let make_lazy ~f =
  let split_from_parent v = Stdlib.Random.State.split v in
  Stdlib.Domain.DLS.new_key ~split_from_parent f
;;

let[@inline always] get_state t = Stdlib.Domain.DLS.get t
OCaml

Innovation. Community. Security.