mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 11:15:31 -05:00
CCVector: resize_ take the elt as argument
It is safer to have the check on the size of the underlying array close to access of the first element.
This commit is contained in:
parent
b69cc33c26
commit
27eb874523
1 changed files with 5 additions and 5 deletions
|
|
@ -83,11 +83,11 @@ let init n f = {
|
||||||
let array_is_empty_ v =
|
let array_is_empty_ v =
|
||||||
Array.length v.vec = 0
|
Array.length v.vec = 0
|
||||||
|
|
||||||
(* assuming the underlying array isn't empty, resize it *)
|
(* resize the underlying array using x to temporarily fill the array *)
|
||||||
let resize_ v newcapacity =
|
let resize_ v newcapacity x =
|
||||||
assert (newcapacity >= v.size);
|
assert (newcapacity >= v.size);
|
||||||
assert (not (array_is_empty_ v));
|
assert (not (array_is_empty_ v));
|
||||||
let new_vec = Array.make newcapacity v.vec.(0) in
|
let new_vec = Array.make newcapacity x in
|
||||||
Array.blit v.vec 0 new_vec 0 v.size;
|
Array.blit v.vec 0 new_vec 0 v.size;
|
||||||
fill_with_junk_ new_vec v.size (newcapacity-v.size);
|
fill_with_junk_ new_vec v.size (newcapacity-v.size);
|
||||||
v.vec <- new_vec;
|
v.vec <- new_vec;
|
||||||
|
|
@ -131,7 +131,7 @@ let grow_with_ v ~filler:x =
|
||||||
let n = Array.length v.vec in
|
let n = Array.length v.vec in
|
||||||
let size = min (2 * n + 3) Sys.max_array_length in
|
let size = min (2 * n + 3) Sys.max_array_length in
|
||||||
if size = n then failwith "vec: can't grow any further";
|
if size = n then failwith "vec: can't grow any further";
|
||||||
resize_ v size
|
resize_ v size v.vec.(0)
|
||||||
)
|
)
|
||||||
|
|
||||||
(* v is not empty; ensure it has at least [size] slots.
|
(* v is not empty; ensure it has at least [size] slots.
|
||||||
|
|
@ -144,7 +144,7 @@ let ensure_assuming_not_empty_ v ~size =
|
||||||
else (
|
else (
|
||||||
let n = ref (max 8 (Array.length v.vec)) in
|
let n = ref (max 8 (Array.length v.vec)) in
|
||||||
while !n < size do n := min Sys.max_array_length (2* !n) done;
|
while !n < size do n := min Sys.max_array_length (2* !n) done;
|
||||||
resize_ v !n
|
resize_ v !n v.vec.(0)
|
||||||
)
|
)
|
||||||
|
|
||||||
let ensure_with ~init v size =
|
let ensure_with ~init v size =
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue