diff --git a/CHANGES.md b/CHANGES.md index 5ecfb73..d6a8756 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,7 @@ +# unreleased + +- Added `copy` + # v0.2.0 2021-02-10 - Added `to_bytes` and `of_bytes`. diff --git a/src/bloomf.ml b/src/bloomf.ml index 7f5fb3f..df290a0 100644 --- a/src/bloomf.ml +++ b/src/bloomf.ml @@ -1,6 +1,7 @@ type priv = { m : int; k : int; p_len : (int * int) list; b : Bitv.t } type 'a t = priv +let copy t = { m = t.m; k = t.k; p_len = t.p_len; b = Bitv.copy t.b } let rec gcd a b = if b = 0 then a else gcd b (a mod b) let partition_lengths m k = @@ -142,6 +143,7 @@ module Make (H : Hashable) = struct type t = priv let create = create + let copy = copy let add bf data = add_priv bf (H.hash data) let mem bf data = mem_priv bf (H.hash data) let clear = clear diff --git a/src/bloomf.mli b/src/bloomf.mli index 95960c5..f91633e 100644 --- a/src/bloomf.mli +++ b/src/bloomf.mli @@ -22,6 +22,10 @@ val create : ?error_rate:float -> int -> 'a t @raise Invalid_argument if [error_rate] is not in \]0, 1\[, or [size] is negative. *) +val copy : 'a t -> 'a t +(** [copy t] copies the BF. The fresh returned BF is completely separated from + the given one. *) + val add : 'a t -> 'a -> unit (** [add t e] adds [e] to [t]. *) @@ -79,6 +83,7 @@ module Make (H : Hashable) : sig type t val create : ?error_rate:float -> int -> t + val copy : t -> t val add : t -> H.t -> unit val mem : t -> H.t -> bool val clear : t -> unit