mirror of
https://github.com/c-cube/sidekick.git
synced 2025-12-06 11:15:43 -05:00
feat(vec): more
This commit is contained in:
parent
d53b3c291e
commit
11b1ea4eda
3 changed files with 13 additions and 3 deletions
|
|
@ -27,7 +27,7 @@ let pop_levels (self:_ t) (n:int) ~f : unit =
|
||||||
let new_lvl = n_levels self - n in
|
let new_lvl = n_levels self - n in
|
||||||
let i = Vec.get self.lvls new_lvl in
|
let i = Vec.get self.lvls new_lvl in
|
||||||
while Vec.size self.vec > i do
|
while Vec.size self.vec > i do
|
||||||
let x = Vec.pop self.vec in
|
let x = Vec.pop_exn self.vec in
|
||||||
f x
|
f x
|
||||||
done;
|
done;
|
||||||
Vec.shrink self.lvls new_lvl
|
Vec.shrink self.lvls new_lvl
|
||||||
|
|
|
||||||
|
|
@ -15,12 +15,20 @@ let[@inline] shrink t i =
|
||||||
assert (i<=t.sz);
|
assert (i<=t.sz);
|
||||||
t.sz <- i
|
t.sz <- i
|
||||||
|
|
||||||
let[@inline] pop t =
|
let[@inline] pop_exn t =
|
||||||
if t.sz = 0 then invalid_arg "vec.pop";
|
if t.sz = 0 then invalid_arg "vec.pop";
|
||||||
let x = Array.unsafe_get t.data (t.sz - 1) in
|
let x = Array.unsafe_get t.data (t.sz - 1) in
|
||||||
t.sz <- t.sz - 1;
|
t.sz <- t.sz - 1;
|
||||||
x
|
x
|
||||||
|
|
||||||
|
let[@inline] pop t =
|
||||||
|
if t.sz = 0 then None
|
||||||
|
else (
|
||||||
|
let x = Array.unsafe_get t.data (t.sz - 1) in
|
||||||
|
t.sz <- t.sz - 1;
|
||||||
|
Some x
|
||||||
|
)
|
||||||
|
|
||||||
let[@inline] size t = t.sz
|
let[@inline] size t = t.sz
|
||||||
|
|
||||||
let[@inline] is_empty t = t.sz = 0
|
let[@inline] is_empty t = t.sz = 0
|
||||||
|
|
|
||||||
|
|
@ -32,10 +32,12 @@ val shrink : 'a t -> int -> unit
|
||||||
(** [shrink vec sz] resets size of [vec] to [sz].
|
(** [shrink vec sz] resets size of [vec] to [sz].
|
||||||
Assumes [sz >=0 && sz <= size vec] *)
|
Assumes [sz >=0 && sz <= size vec] *)
|
||||||
|
|
||||||
val pop : 'a t -> 'a
|
val pop_exn : 'a t -> 'a
|
||||||
(** Pop last element and return it.
|
(** Pop last element and return it.
|
||||||
@raise Invalid_argument if the vector is empty *)
|
@raise Invalid_argument if the vector is empty *)
|
||||||
|
|
||||||
|
val pop : 'a t -> 'a option
|
||||||
|
|
||||||
val size : 'a t -> int
|
val size : 'a t -> int
|
||||||
|
|
||||||
val is_empty : 'a t -> bool
|
val is_empty : 'a t -> bool
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue