source/service/dependencyTrackedMemory.mli (106 lines of code) (raw):
(*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*)
open Core
module Set = Caml.Set
(* Deliberately left abstract to prevent calls to DependencyKey.Transaction.add from outside this
module *)
type 'keyset transaction_element
module EncodedDependency : sig
type t [@@deriving compare, sexp]
val to_string : t -> string
val of_string : string -> t
val make : 'a -> hash:('a -> int) -> t
val increment : t -> t
module Table : Hashtbl.S with type key = t
end
module DependencyKey : sig
module type S = sig
type key
type registered
module RegisteredSet : Set.S with type elt = registered
module KeySet : Set.S with type elt = key
val mark : registered -> depends_on:EncodedDependency.t -> unit
val query : EncodedDependency.t -> RegisteredSet.t
module Transaction : sig
type t
val empty : scheduler:Scheduler.t -> configuration:Configuration.Analysis.t -> t
val add : t -> RegisteredSet.t transaction_element -> t
val execute : t -> update:(unit -> 'a) -> 'a * RegisteredSet.t
val scheduler : t -> Scheduler.t
val configuration : t -> Configuration.Analysis.t
end
end
module type In = sig
type key [@@deriving compare, sexp]
type registered [@@deriving compare, sexp]
module RegisteredSet : Set.S with type elt = registered
module KeySet : Set.S with type elt = key
module Registry : sig
val encode : registered -> EncodedDependency.t
val decode : EncodedDependency.t -> registered list option
end
end
module Make (In : In) :
S
with type key = In.key
and type registered = In.registered
and module RegisteredSet = In.RegisteredSet
and module KeySet = In.KeySet
end
module DependencyKind : sig
type t =
| Get
| Mem
end
module DependencyTrackedTableWithCache
(Key : Memory.KeyType)
(DependencyKey : DependencyKey.S)
(Value : Memory.ComparableValueType) : sig
include
Memory.WithCache.S
with type value = Value.t
and type key = Key.t
and type key_out = Key.out
and module KeySet = Set.Make(Key)
and module KeyMap = MyMap.Make(Key)
val get : ?dependency:DependencyKey.registered -> key -> value option
val mem : ?dependency:DependencyKey.registered -> key -> bool
val get_dependents : kind:DependencyKind.t -> key -> DependencyKey.RegisteredSet.t
val get_all_dependents : KeySet.t -> DependencyKey.RegisteredSet.t
val add_to_transaction
: DependencyKey.Transaction.t ->
keys:KeySet.t ->
DependencyKey.Transaction.t
val add_pessimistic_transaction
: DependencyKey.Transaction.t ->
keys:KeySet.t ->
DependencyKey.Transaction.t
end
module DependencyTrackedTableNoCache
(Key : Memory.KeyType)
(DependencyKey : DependencyKey.S)
(Value : Memory.ComparableValueType) : sig
include
Memory.NoCache.S
with type value = Value.t
and type key = Key.t
and type key_out = Key.out
and module KeySet = Set.Make(Key)
and module KeyMap = MyMap.Make(Key)
val get : ?dependency:DependencyKey.registered -> key -> value option
val mem : ?dependency:DependencyKey.registered -> key -> bool
val get_dependents : kind:DependencyKind.t -> key -> DependencyKey.RegisteredSet.t
val get_all_dependents : KeySet.t -> DependencyKey.RegisteredSet.t
val add_to_transaction
: DependencyKey.Transaction.t ->
keys:KeySet.t ->
DependencyKey.Transaction.t
val add_pessimistic_transaction
: DependencyKey.Transaction.t ->
keys:KeySet.t ->
DependencyKey.Transaction.t
end