Merlin_utils.Stamped_hashtableThe 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.
create 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) 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) t -> 'a -> boolSee Hashtbl.mem.
val find : ('a, 'b) t -> 'a -> 'bSee Hashtbl.find.
val fold : ('a -> 'b -> 'acc -> 'acc) -> ('a, 'b) t -> 'acc -> 'accSee Hashtbl.fold.
val clear : ('a, 'b) t -> unitClear the table and empty the changelog. See Hashtbl.clear.
val create_changelog : unit -> changelogCreate a new change log.
val backtrack : changelog -> stamp:int -> unitval replace : ('a, 'b) t -> 'a -> 'b -> unitThis operation is unsafe in general. Only replacements that does not imply re-stamping are safe.