From c70c102de9f0b0d89d37a21b0563183f6b30a70a Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Fri, 29 Jul 2016 22:50:26 +0200 Subject: [PATCH] optim in a bottleneck in Vec --- src/util/vec.ml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/util/vec.ml b/src/util/vec.ml index b55b7bc2..b8cfa63f 100644 --- a/src/util/vec.ml +++ b/src/util/vec.ml @@ -59,9 +59,13 @@ let is_empty t = t.sz = 0 let grow_to t new_capa = assert (new_capa >= Array.length t.data); - let data = t.data in - let capa = Array.length data in - t.data <- Array.init new_capa (fun i -> if i < capa then data.(i) else t.dummy) + let new_data = Array.make new_capa t.dummy in + assert (t.sz <= new_capa); + let old = t.data in + for i = 0 to t.sz - 1 do + Array.unsafe_set new_data i (Array.unsafe_get old i) + done; + t.data <- new_data let grow_to_double_size t = if Array.length t.data = Sys.max_array_length then _size_too_big();