get_or tbl k ~default returns the value associated to k if present,
and returns default otherwise (if k doesn't belong in tbl).
add_list tbl x y adds y to the list x is bound to. If x is
not bound, it becomes bound to y.
incr ?by tbl x increments or initializes the counter associated with x.
If get tbl x = None, then after update, get tbl x = Some 1;
otherwise, if get tbl x = Some n, now get tbl x = Some (n+1).
by rather than 1.Like incr but subtract 1 (or the value of by).
If the value reaches 0, the key is removed from the table.
This does nothing if the key is not already present in the table.
keys_list t is the list of keys in t.
If the key is in the Hashtable multiple times, all occurrences will be returned.
add_seq_count tbl seq increments the count of each element of seq
by calling incr. This is useful for counting how many times each
element of seq occurs.
Similar to add_seq_count, but allocates a new table and returns it.
Build a table from the given list of bindings k_i -> v_i,
added in order using add. If a key occurs several times,
it will be added several times, and the visible binding
will be the last one.
update tbl ~f ~k updates key k by calling f k (Some v) if
k was mapped to v, or f k None otherwise; if the call
returns None then k is removed/stays removed, if the call
returns Some v' then the binding k -> v' is inserted
using Hashtbl.replace.