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 i = Vec.get self.lvls new_lvl in
|
||||
while Vec.size self.vec > i do
|
||||
let x = Vec.pop self.vec in
|
||||
let x = Vec.pop_exn self.vec in
|
||||
f x
|
||||
done;
|
||||
Vec.shrink self.lvls new_lvl
|
||||
|
|
|
|||
|
|
@ -15,12 +15,20 @@ let[@inline] shrink t i =
|
|||
assert (i<=t.sz);
|
||||
t.sz <- i
|
||||
|
||||
let[@inline] pop t =
|
||||
let[@inline] pop_exn t =
|
||||
if t.sz = 0 then invalid_arg "vec.pop";
|
||||
let x = Array.unsafe_get t.data (t.sz - 1) in
|
||||
t.sz <- t.sz - 1;
|
||||
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] 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].
|
||||
Assumes [sz >=0 && sz <= size vec] *)
|
||||
|
||||
val pop : 'a t -> 'a
|
||||
val pop_exn : 'a t -> 'a
|
||||
(** Pop last element and return it.
|
||||
@raise Invalid_argument if the vector is empty *)
|
||||
|
||||
val pop : 'a t -> 'a option
|
||||
|
||||
val size : 'a t -> int
|
||||
|
||||
val is_empty : 'a t -> bool
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue