From 37aa0159ea8d881250cb9cf5c8fe56891232bebf Mon Sep 17 00:00:00 2001 From: Josh Berdine Date: Thu, 1 Jul 2021 03:30:40 -0700 Subject: [PATCH] [sledge] Add Set.pop_min_elt_exn Differential Revision: D29441151 fbshipit-source-id: b317d6458 --- sledge/nonstdlib/NSSet.ml | 5 +++++ sledge/nonstdlib/NSSet_intf.ml | 3 +++ 2 files changed, 8 insertions(+) diff --git a/sledge/nonstdlib/NSSet.ml b/sledge/nonstdlib/NSSet.ml index 77bf96dce..321ddcfaf 100644 --- a/sledge/nonstdlib/NSSet.ml +++ b/sledge/nonstdlib/NSSet.ml @@ -75,6 +75,11 @@ struct let choose_exn = S.choose let pop = S.pop_opt let pop_exn = S.pop + + let pop_min_elt_exn s = + let min = S.min_elt s in + (min, S.remove min s) + let only_elt = S.only_elt let classify = S.classify let map s ~f = S.map f s diff --git a/sledge/nonstdlib/NSSet_intf.ml b/sledge/nonstdlib/NSSet_intf.ml index d91523de2..16476f7e0 100644 --- a/sledge/nonstdlib/NSSet_intf.ml +++ b/sledge/nonstdlib/NSSet_intf.ml @@ -88,6 +88,9 @@ module type S = sig val pop_exn : t -> elt * t (** Find and remove an unspecified element. [O(1)]. *) + val pop_min_elt_exn : t -> elt * t + (** Find and remove the minimum element. [O(1)]. *) + (** {1 Transform} *) val map : t -> f:(elt -> elt) -> t