Skip to content
Snippets Groups Projects
Commit 27e1982a authored by David Bühler's avatar David Bühler
Browse files

[Server] States: fixes use of signal hooks from state_builder.

Uses add_hook_on_update to also synchronize when the project library changes
the state.
parent 4f07a5d2
No related branches found
No related tags found
No related merge requests found
......@@ -81,6 +81,11 @@ sig
(** Set a hook on function statistics computation *)
val add_hook_on_change:
((key, data) State_builder.hashtbl_event -> unit) -> unit
module Datatype: Datatype.S
(** Set a hook on statistics changes by the project library *)
val add_hook_on_update: (Datatype.t -> unit) -> unit
end
(** Compute analysis statistics. *)
......
......@@ -69,15 +69,18 @@ module type Value = sig
type data
val get: unit -> data
val add_hook_on_change: (data -> unit) -> unit
module Datatype: Datatype.S
val add_hook_on_update: (Datatype.t -> unit) -> unit
end
let register_framac_value (type a) ~package ~name ~descr
~(output : a Request.output)
(state : (module Value with type data = a)) =
let module State = (val state) in
register_value ~package ~name ~descr ~output
~get:State.get
~add_hook:State.add_hook_on_change ()
let signal = register_value ~package ~name ~descr ~output ~get:State.get () in
register_hook signal State.add_hook_on_change ;
register_hook signal State.add_hook_on_update ;
signal
(* -------------------------------------------------------------------------- *)
(* --- States --- *)
......@@ -110,15 +113,19 @@ module type State = sig
val set: data -> unit
val get: unit -> data
val add_hook_on_change: (data -> unit) -> unit
module Datatype: Datatype.S
val add_hook_on_update: (Datatype.t -> unit) -> unit
end
let register_framac_state (type a) ~package ~name ~descr
~(data : a data)
(state : (module State with type data = a)) =
let module State = (val state) in
register_state ~package ~name ~descr ~data
~get:State.get ~set:State.set
~add_hook:State.add_hook_on_change ()
let get, set = State.(get, set) in
let signal = register_state ~package ~name ~descr ~data ~get ~set () in
register_hook signal State.add_hook_on_change ;
register_hook signal State.add_hook_on_update ;
signal
(* -------------------------------------------------------------------------- *)
(* --- Model Signature --- *)
......@@ -430,6 +437,8 @@ module type TableState = sig
val iter: (key -> data -> unit) -> unit
val add_hook_on_change:
((key, data) State_builder.hashtbl_event -> unit) -> unit
module Datatype: Datatype.S
val add_hook_on_update: (Datatype.t -> unit) -> unit
end
let register_framac_array (type key) (type data) ~package ~name ~descr ~key
......@@ -447,7 +456,8 @@ let register_framac_array (type key) (type data) ~package ~name ~descr ~key
| Remove k -> remove_key array (key k)
| Clear -> reload array
in
install_hook array.signal handle_event (Table.add_hook_on_change);
install_hook array.signal handle_event Table.add_hook_on_change;
install_hook array.signal (fun _ -> reload array) Table.add_hook_on_update;
array
(* -------------------------------------------------------------------------- *)
......@@ -56,6 +56,8 @@ module type Value = sig
type data
val get: unit -> data
val add_hook_on_change: (data -> unit) -> unit
module Datatype: Datatype.S
val add_hook_on_update: (Datatype.t -> unit) -> unit
end
(** Same as [register_value] but takes a [State_builder.Ref] module as
......@@ -97,6 +99,8 @@ module type State = sig
val set: data -> unit
val get: unit -> data
val add_hook_on_change: (data -> unit) -> unit
module Datatype: Datatype.S
val add_hook_on_update: (Datatype.t -> unit) -> unit
end
(** Same as [register_state] but takes a [State_builder.Ref] module as
......@@ -194,6 +198,8 @@ module type TableState = sig
val iter: (key -> data -> unit) -> unit
val add_hook_on_change:
((key, data) State_builder.hashtbl_event -> unit) -> unit
module Datatype: Datatype.S
val add_hook_on_update: (Datatype.t -> unit) -> unit
end
(** Same as [register_array] but takes a [State_builder.Hashtbl] module as
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment