diff --git a/AUTHORS.md b/AUTHORS.md index 39b3731c..77bf7dcd 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -8,3 +8,4 @@ - hcarty (Hezekiah M. Carty) - struktured (Carmelo Piccione) - Bernardo da Costa +- Vincent Bernardoff (vbmithr) \ No newline at end of file diff --git a/src/core/CCHashtbl.ml b/src/core/CCHashtbl.ml index fe5289b7..580e6f29 100644 --- a/src/core/CCHashtbl.ml +++ b/src/core/CCHashtbl.ml @@ -40,6 +40,9 @@ let keys tbl k = Hashtbl.iter (fun key _ -> k key) tbl let values tbl k = Hashtbl.iter (fun _ v -> k v) tbl +let keys_list tbl = Hashtbl.fold (fun k _ a -> k::a) tbl [] +let values_list tbl = Hashtbl.fold (fun _ v a -> v::a) tbl [] + let map_list f h = Hashtbl.fold (fun x y acc -> f x y :: acc) @@ -81,6 +84,14 @@ module type S = sig val values : 'a t -> 'a sequence (** Iterate on values in the table *) + val keys_list : ('a, 'b) Hashtbl.t -> 'a list + (** [keys t] is the list of keys in [t]. + @since NEXT_RELEASE *) + + val values_list : ('a, 'b) Hashtbl.t -> 'b list + (** [values t] is the list of values in [t]. + @since NEXT_RELEASE *) + val map_list : (key -> 'a -> 'b) -> 'a t -> 'b list (** Map on a hashtable's items, collect into a list *) @@ -108,6 +119,9 @@ module Make(X : Hashtbl.HashedType) = struct let values tbl k = iter (fun _ v -> k v) tbl + let keys_list tbl = Hashtbl.fold (fun k _ a -> k::a) tbl [] + let values_list tbl = Hashtbl.fold (fun _ v a -> v::a) tbl [] + let map_list f h = fold (fun x y acc -> f x y :: acc) diff --git a/src/core/CCHashtbl.mli b/src/core/CCHashtbl.mli index fcfde106..b862bcad 100644 --- a/src/core/CCHashtbl.mli +++ b/src/core/CCHashtbl.mli @@ -44,6 +44,14 @@ val keys : ('a,'b) Hashtbl.t -> 'a sequence val values : ('a,'b) Hashtbl.t -> 'b sequence (** Iterate on values in the table *) +val keys_list : ('a, 'b) Hashtbl.t -> 'a list +(** [keys t] is the list of keys in [t]. + @since NEXT_RELEASE *) + +val values_list : ('a, 'b) Hashtbl.t -> 'b list +(** [values t] is the list of values in [t]. + @since NEXT_RELEASE *) + val map_list : ('a -> 'b -> 'c) -> ('a, 'b) Hashtbl.t -> 'c list (** Map on a hashtable's items, collect into a list *) @@ -73,6 +81,14 @@ module type S = sig val values : 'a t -> 'a sequence (** Iterate on values in the table *) + val keys_list : ('a, 'b) Hashtbl.t -> 'a list + (** [keys t] is the list of keys in [t]. + @since NEXT_RELEASE *) + + val values_list : ('a, 'b) Hashtbl.t -> 'b list + (** [values t] is the list of values in [t]. + @since NEXT_RELEASE *) + val map_list : (key -> 'a -> 'b) -> 'a t -> 'b list (** Map on a hashtable's items, collect into a list *)