You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
1.1 KiB

3 years ago
(*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*)
open! NS0
(** Hash tables *)
include HashTable_intf
module Make (Key : HashedType) = struct
include CCHashtbl.Make [@inlined] (Key)
let create ?(size = 0) () = create size
let set tbl ~key ~data = replace tbl key data
let add_multi tbl ~key ~data =
update tbl ~k:key ~f:(fun _ -> function
| None -> Some [data] | Some datas -> Some (data :: datas) )
let update tbl key ~f = update tbl ~k:key ~f:(fun _ dat -> f dat)
let find_exn = find
let find = find_opt
let find_or_add tbl key ~default =
let found = ref None in
update tbl key ~f:(function
| None ->
let v = default () in
found := Some v ;
Some v
| Some v ->
found := Some v ;
Some v ) ;
Option.get_exn !found
let iteri tbl ~f = iter (fun key data -> f ~key ~data) tbl
let fold tbl s ~f = fold (fun key data acc -> f ~key ~data acc) tbl s
end