Add a resizing policy for Interned

Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
This commit is contained in:
Rudi Grinberg 2018-05-24 20:04:53 +07:00
parent 1aa6209584
commit cbf2727209
5 changed files with 21 additions and 7 deletions

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -1 +1,3 @@
include Stdune.Interned.Make ()
open Stdune
include Interned.Make(struct let resize_policy = Interned.Conservative end)

View File

@ -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"