diff --git a/src/package.ml b/src/package.ml index 409fe9be..fb7788ae 100644 --- a/src/package.ml +++ b/src/package.ml @@ -1,7 +1,7 @@ open Stdune module Name = struct - include Interned.Make() + include Interned.Make(struct let resize_policy = Interned.Conservative end) let of_string = make diff --git a/src/stdune/interned.ml b/src/stdune/interned.ml index c00b9331..af039be1 100644 --- a/src/stdune/interned.ml +++ b/src/stdune/interned.ml @@ -20,7 +20,15 @@ module type S = sig end with type key := t end -module Make() = struct +type resize_policy = Conservative | Greedy + +let new_size ~next ~size = function + | Conservative -> + let increment_size = 512 in + (next land (lnot (increment_size - 1))) + (increment_size * 2) + | Greedy -> size * 2 + +module Make(R : sig val resize_policy : resize_policy end) = struct type t = int let ids = Hashtbl.create 1024 @@ -40,8 +48,8 @@ module Make() = struct } let resize t = - let increment_size = 512 in - let n = (!next land (lnot (increment_size - 1))) + (increment_size * 2) in + let n = + new_size ~next:!next ~size:(Array.length t.data) R.resize_policy in let old_data = t.data in let new_data = Array.make n t.default_value in t.data <- new_data; diff --git a/src/stdune/interned.mli b/src/stdune/interned.mli index b2ffa488..fec0493a 100644 --- a/src/stdune/interned.mli +++ b/src/stdune/interned.mli @@ -34,4 +34,6 @@ module type S = sig end with type key := t end -module Make() : S +type resize_policy = Conservative | Greedy + +module Make(R : sig val resize_policy : resize_policy end) : S diff --git a/src/sub_system_name.ml b/src/sub_system_name.ml index 016ae847..e44b598f 100644 --- a/src/sub_system_name.ml +++ b/src/sub_system_name.ml @@ -1 +1,3 @@ -include Stdune.Interned.Make () +open Stdune + +include Interned.Make(struct let resize_policy = Interned.Conservative end) diff --git a/src/variant.ml b/src/variant.ml index 3071b3ae..66d2c0de 100644 --- a/src/variant.ml +++ b/src/variant.ml @@ -1,4 +1,6 @@ -include Stdune.Interned.Make() +open Stdune + +include Interned.Make(struct let resize_policy = Interned.Conservative end) let ppx_driver = make "ppx_driver" let mt = make "mt"