Add a resizing policy for Interned
Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
This commit is contained in:
parent
1aa6209584
commit
cbf2727209
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1 +1,3 @@
|
|||
include Stdune.Interned.Make ()
|
||||
open Stdune
|
||||
|
||||
include Interned.Make(struct let resize_policy = Interned.Conservative end)
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue