mirror of
https://github.com/c-cube/moonpool.git
synced 2026-01-28 20:24:49 -05:00
43 lines
1.3 KiB
OCaml
43 lines
1.3 KiB
OCaml
(** Task-local storage.
|
|
|
|
This storage is associated to the current task, just like thread-local
|
|
storage is associated with the current thread. The storage is carried along
|
|
in case the current task is suspended.
|
|
|
|
@since 0.6 *)
|
|
|
|
type 'a t = 'a Picos.Fiber.FLS.t
|
|
|
|
val create : unit -> 'a t
|
|
(** [create ()] makes a new key. Keys are expensive and should never be
|
|
allocated dynamically or in a loop. *)
|
|
|
|
exception Not_set
|
|
|
|
val get_exn : 'a t -> 'a
|
|
(** [get k] gets the value for the current task for key [k]. Must be run from
|
|
inside a task running on a runner.
|
|
@raise Not_set otherwise *)
|
|
|
|
val get_opt : 'a t -> 'a option
|
|
(** [get_opt k] gets the current task's value for key [k], or [None] if not run
|
|
from inside the task. *)
|
|
|
|
val get : 'a t -> default:'a -> 'a
|
|
|
|
val set : 'a t -> 'a -> unit
|
|
(** [set k v] sets the storage for [k] to [v]. Must be run from inside a task
|
|
running on a runner.
|
|
@raise Failure otherwise *)
|
|
|
|
val with_value : 'a t -> 'a -> (unit -> 'b) -> 'b
|
|
(** [with_value k v f] sets [k] to [v] for the duration of the call to [f()].
|
|
When [f()] returns (or fails), [k] is restored to its old value. *)
|
|
|
|
(** {2 Local [Hmap.t]}
|
|
|
|
This requires [hmap] to be installed. *)
|
|
|
|
include module type of struct
|
|
include Hmap_ls_
|
|
end
|