mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-05 19:00: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
|
let[@inline] is_empty v = v.size = 0
|
||||||
|
|
||||||
|
[@@@ifge 4.13]
|
||||||
|
|
||||||
let[@inline] push_unsafe_ v x =
|
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;
|
Array.unsafe_set v.vec v.size x;
|
||||||
v.size <- v.size + 1
|
v.size <- v.size + 1
|
||||||
|
|
||||||
|
[@@@endif]
|
||||||
|
|
||||||
let push v x =
|
let push v x =
|
||||||
if v.size = Array.length v.vec then grow_with_ v ~filler:x;
|
if v.size = Array.length v.vec then grow_with_ v ~filler:x;
|
||||||
push_unsafe_ v x
|
push_unsafe_ v x
|
||||||
|
|
@ -174,6 +184,8 @@ let append a b =
|
||||||
a.size <- a.size + b.size
|
a.size <- a.size + b.size
|
||||||
)
|
)
|
||||||
|
|
||||||
|
[@@@ifge 4.13]
|
||||||
|
|
||||||
let[@inline] get v i =
|
let[@inline] get v i =
|
||||||
if i < 0 || i >= v.size then invalid_arg "CCVector.get";
|
if i < 0 || i >= v.size then invalid_arg "CCVector.get";
|
||||||
(* NOTE: over eager inlining seems to miscompile for int32 at least (#454) *)
|
(* 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";
|
if i < 0 || i >= v.size then invalid_arg "CCVector.set";
|
||||||
Array.unsafe_set v.vec i x
|
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 =
|
let remove_and_shift v i =
|
||||||
if i < 0 || i >= v.size then invalid_arg "CCVector.remove";
|
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 *)
|
(* if v.(i) not the last element, then put last element at index i *)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue