diff --git a/src/core/CCVector.ml b/src/core/CCVector.ml index 4777205d..572c3598 100644 --- a/src/core/CCVector.ml +++ b/src/core/CCVector.ml @@ -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 *)