mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 11:15:31 -05:00
additional fix for #454 on OCaml 4.10..4.12
This commit is contained in:
parent
477e9cc7ca
commit
f02df05b35
1 changed files with 24 additions and 0 deletions
|
|
@ -119,10 +119,20 @@ let clear_and_reset v =
|
|||
|
||||
let[@inline] is_empty v = v.size = 0
|
||||
|
||||
[@@@ifge 4.13]
|
||||
|
||||
let[@inline] push_unsafe_ v x =
|
||||
Sys.opaque_identity (Array.unsafe_set v.vec v.size x);
|
||||
v.size <- v.size + 1
|
||||
|
||||
[@@@else_]
|
||||
|
||||
let[@inline never] push_unsafe_ v x =
|
||||
Array.unsafe_set v.vec v.size x;
|
||||
v.size <- v.size + 1
|
||||
|
||||
[@@@endif]
|
||||
|
||||
let push v x =
|
||||
if v.size = Array.length v.vec then grow_with_ v ~filler:x;
|
||||
push_unsafe_ v x
|
||||
|
|
@ -174,6 +184,8 @@ let append a b =
|
|||
a.size <- a.size + b.size
|
||||
)
|
||||
|
||||
[@@@ifge 4.13]
|
||||
|
||||
let[@inline] get v i =
|
||||
if i < 0 || i >= v.size then invalid_arg "CCVector.get";
|
||||
(* NOTE: over eager inlining seems to miscompile for int32 at least (#454) *)
|
||||
|
|
@ -183,6 +195,18 @@ let[@inline] set v i x =
|
|||
if i < 0 || i >= v.size then invalid_arg "CCVector.set";
|
||||
Array.unsafe_set v.vec i x
|
||||
|
||||
[@@@else_]
|
||||
|
||||
let[@inline never] get v i =
|
||||
if i < 0 || i >= v.size then invalid_arg "CCVector.get";
|
||||
Array.unsafe_get v.vec i
|
||||
|
||||
let[@inline never] set v i x =
|
||||
if i < 0 || i >= v.size then invalid_arg "CCVector.set";
|
||||
Array.unsafe_set v.vec i x
|
||||
|
||||
[@@@endif]
|
||||
|
||||
let remove_and_shift v i =
|
||||
if i < 0 || i >= v.size then invalid_arg "CCVector.remove";
|
||||
(* if v.(i) not the last element, then put last element at index i *)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue