module Bag: Bagmodule Elt:sig..end
type 'a t
include Container.S1
val invariant : 'a t -> unitval create : unit -> 'a tcreate () returns an empty bag.val add : 'a t -> 'a -> 'a Elt.tadd t v adds v to the bag t, returning an element that can
later be removed from the bag. add runs in constant time.val remove : 'a t -> 'a Elt.t -> unitremove t elt removes elt from the bag t, raising an exception if elt
is not in the bag. remove runs in constant time.val choose : 'a t -> 'a Elt.t optionchoose t returns some element in the bag.val remove_one : 'a t -> 'a optionremove_one t removes some element from the bag, and returns its value.
remove_one runs in constant time.val clear : 'a t -> unitclear t removes all elements from the bag. clear runs in O(1) time.val fold_elt : 'a t -> init:'b -> f:('b -> 'a Elt.t -> 'b) -> 'bfold_elt t ~init ~f is the same as fold, except f is called with the
'a Elt.t's from the bag instead of the contained 'a values.
Note that like other iteration functions, it is an error to mutate t inside the
fold. If you'd like to call remove on any of the 'a Elt.t's, accumulate them here
and do so after fold_elt returns.
val iter_elt : 'a t -> f:('a Elt.t -> unit) -> unitval find_elt : 'a t -> f:('a -> bool) -> 'a Elt.t optionfind_elt t ~f looks at elements in the bag one-by-one until it finds one
elt such that f (Elt.value elt), in which case it returns Some elt.
If there is no element satisfying f, then find_elt returns None.val until_empty : 'a t -> ('a -> unit) -> unituntil_empty t f repeatedly removes a value v from t and runs f v,
continuing until t is empty. Running f may add elements to t if it
wants.val transfer : src:'a t -> dst:'a t -> unittransfer ~src ~dst moves all of the elements from src to dst in constant
time.val of_list : 'a list -> 'a tval unchecked_iter : 'a t -> f:('a -> unit) -> unitunchecked_iter t ~f behaves like iter t ~f except that f is allowed to modify
t. Elements added by f may or may not be visited, elements removed by f that
have not been visited will not be visited. It is an (undetected) error to delete the
current element.val sexp_of_t : ('a -> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.tcreate () returns an empty bag.add t v adds v to the bag t, returning an element that can
later be removed from the bag. add runs in constant time.remove t elt removes elt from the bag t, raising an exception if elt
is not in the bag. remove runs in constant time.choose t returns some element in the bag.remove_one t removes some element from the bag, and returns its value.
remove_one runs in constant time.clear t removes all elements from the bag. clear runs in O(1) time.fold_elt t ~init ~f is the same as fold, except f is called with the
'a Elt.t's from the bag instead of the contained 'a values.
Note that like other iteration functions, it is an error to mutate t inside the
fold. If you'd like to call remove on any of the 'a Elt.t's, accumulate them here
and do so after fold_elt returns.
find_elt t ~f looks at elements in the bag one-by-one until it finds one
elt such that f (Elt.value elt), in which case it returns Some elt.
If there is no element satisfying f, then find_elt returns None.
until_empty t f repeatedly removes a value v from t and runs f v,
continuing until t is empty. Running f may add elements to t if it
wants.
transfer ~src ~dst moves all of the elements from src to dst in constant
time.
unchecked_iter t ~f behaves like iter t ~f except that f is allowed to modify
t. Elements added by f may or may not be visited, elements removed by f that
have not been visited will not be visited. It is an (undetected) error to delete the
current element.