Module Merlin_utils.Stamped_hashtable
The changelog datastructure logs stamped bindings added to tables. By separating the log from the table, it is possible to efficiently remove stamped bindings spread accross multiple tables.
val create :
Merlin_utils.Stamped_hashtable.changelog ->
int ->
('a, 'b) Merlin_utils.Stamped_hashtable.tcreate changelog n creates a new table with an initial size of n (see Hashtbl.create) that logs its changes to changelog.
val add :
('a, 'b) Merlin_utils.Stamped_hashtable.t ->
?stamp:int ->
'a ->
'b ->
unitAdd a binding, like Hashtbl.add, with an optional stamp. Unlike Hashtbl.add, having multiple bindings with the same key is undefined. (It's ok, this feature is not used by the caches!)
val mem : ('a, 'b) Merlin_utils.Stamped_hashtable.t -> 'a -> boolSee Hashtbl.mem.
val find : ('a, 'b) Merlin_utils.Stamped_hashtable.t -> 'a -> 'bSee Hashtbl.find.
val fold :
('a -> 'b -> 'acc -> 'acc) ->
('a, 'b) Merlin_utils.Stamped_hashtable.t ->
'acc ->
'accSee Hashtbl.fold.
val clear : ('a, 'b) Merlin_utils.Stamped_hashtable.t -> unitClear the table and empty the changelog. See Hashtbl.clear.
val create_changelog : unit -> Merlin_utils.Stamped_hashtable.changelogCreate a new change log.
val backtrack : Merlin_utils.Stamped_hashtable.changelog -> stamp:int -> unitval replace : ('a, 'b) Merlin_utils.Stamped_hashtable.t -> 'a -> 'b -> unitThis operation is unsafe in general. Only replacements that does not imply re-stamping are safe.