(* * 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. *) include CCHashSet module Make (E : ELEMENT) = struct include CCHashSet.Make [@inlined] (E) let update s e ~f = let eo = find s e in match (eo, f eo) with | None, None -> () | Some e, Some e' when e == e' -> () | Some _, None -> remove s e | _, Some e' -> insert s e' let add s e = let change = ref false in update s e ~f:(function | None -> change := true ; Some e | Some e -> Some e ) ; !change end