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
|
open Stdune
|
||||||
|
|
||||||
module Name = struct
|
module Name = struct
|
||||||
include Interned.Make()
|
include Interned.Make(struct let resize_policy = Interned.Conservative end)
|
||||||
|
|
||||||
let of_string = make
|
let of_string = make
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,15 @@ module type S = sig
|
||||||
end with type key := t
|
end with type key := t
|
||||||
end
|
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
|
type t = int
|
||||||
|
|
||||||
let ids = Hashtbl.create 1024
|
let ids = Hashtbl.create 1024
|
||||||
|
@ -40,8 +48,8 @@ module Make() = struct
|
||||||
}
|
}
|
||||||
|
|
||||||
let resize t =
|
let resize t =
|
||||||
let increment_size = 512 in
|
let n =
|
||||||
let n = (!next land (lnot (increment_size - 1))) + (increment_size * 2) in
|
new_size ~next:!next ~size:(Array.length t.data) R.resize_policy in
|
||||||
let old_data = t.data in
|
let old_data = t.data in
|
||||||
let new_data = Array.make n t.default_value in
|
let new_data = Array.make n t.default_value in
|
||||||
t.data <- new_data;
|
t.data <- new_data;
|
||||||
|
|
|
@ -34,4 +34,6 @@ module type S = sig
|
||||||
end with type key := t
|
end with type key := t
|
||||||
end
|
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 ppx_driver = make "ppx_driver"
|
||||||
let mt = make "mt"
|
let mt = make "mt"
|
||||||
|
|
Loading…
Reference in New Issue