feat(vec): add copy

This commit is contained in:
Simon Cruanes 2021-09-29 22:16:10 -04:00
parent 5e0652687a
commit 313e9db026
No known key found for this signature in database
GPG key ID: 4AC01D0849AA62B6
5 changed files with 22 additions and 4 deletions

View file

@ -18,6 +18,15 @@ let[@inline] shrink self n = if n < self.sz then self.sz <- n
let[@inline] size self = self.sz
let[@inline] is_empty self = self.sz = 0
let copy self =
if size self=0 then create ~cap:0 ()
else (
(* copy bigarray *)
let data = mk_arr_ (size self) in
A.blit self.data data;
{sz=self.sz; data}
)
let[@inline] fast_remove t i =
assert (i>= 0 && i < t.sz);
A.unsafe_set t.data i @@ A.unsafe_get t.data (t.sz - 1);

View file

@ -5,8 +5,6 @@
include Vec_sig.S with type elt := int
val ensure_size : t -> int -> unit
val push_i32 : t -> int32 -> unit
val get_i32 : t -> int -> int32

View file

@ -18,6 +18,15 @@ let[@inline] shrink self n = if n < self.sz then self.sz <- n
let[@inline] size self = self.sz
let[@inline] is_empty self = self.sz = 0
let copy self =
if size self=0 then create ~cap:0 ()
else (
(* copy bigarray *)
let data = mk_arr_ (size self) in
A.blit self.data data;
{sz=self.sz; data}
)
let[@inline] fast_remove t i =
assert (i>= 0 && i < t.sz);
A.unsafe_set t.data i @@ A.unsafe_get t.data (t.sz - 1);

View file

@ -4,5 +4,3 @@
These vectors are more optimized than {!Vec}. *)
include Vec_sig.S with type elt := float
val ensure_size : t -> int -> unit

View file

@ -19,6 +19,8 @@ module type BASE = sig
val clear : t -> unit
val copy : t -> t
val is_empty : t -> bool
val push : t -> elt -> unit
@ -29,6 +31,8 @@ module type BASE = sig
val filter_in_place : (elt -> bool) -> t -> unit
val ensure_size : t -> int -> unit
val pop : t -> elt
val set : t -> int -> elt -> unit