mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 11:15:31 -05:00
perf(BV): make more functions inline, use raise_notrace
This commit is contained in:
parent
ced66a76e1
commit
92463d33c5
1 changed files with 18 additions and 18 deletions
|
|
@ -141,14 +141,14 @@ let create ~size default =
|
||||||
create ~size:29 true |> to_sorted_list = CCList.range 0 28
|
create ~size:29 true |> to_sorted_list = CCList.range 0 28
|
||||||
*)
|
*)
|
||||||
|
|
||||||
let copy bv = { bv with b = Bytes.copy bv.b }
|
let[@inline] copy bv = { bv with b = Bytes.copy bv.b }
|
||||||
|
|
||||||
(*$Q
|
(*$Q
|
||||||
(Q.list Q.small_int) (fun l -> \
|
(Q.list Q.small_int) (fun l -> \
|
||||||
let bv = of_list l in to_list bv = to_list (copy bv))
|
let bv = of_list l in to_list bv = to_list (copy bv))
|
||||||
*)
|
*)
|
||||||
|
|
||||||
let capacity bv = mul_ (Bytes.length bv.b)
|
let[@inline] capacity bv = mul_ (Bytes.length bv.b)
|
||||||
|
|
||||||
let cardinal bv =
|
let cardinal bv =
|
||||||
if bv.size = 0 then 0
|
if bv.size = 0 then 0
|
||||||
|
|
@ -206,18 +206,18 @@ let resize bv size =
|
||||||
let is_empty bv =
|
let is_empty bv =
|
||||||
try
|
try
|
||||||
for i = 0 to Bytes.length bv.b - 1 do
|
for i = 0 to Bytes.length bv.b - 1 do
|
||||||
if get_ bv.b i <> 0 then raise Exit
|
if get_ bv.b i <> 0 then raise_notrace Exit
|
||||||
done;
|
done;
|
||||||
true
|
true
|
||||||
with Exit ->
|
with Exit ->
|
||||||
false
|
false
|
||||||
|
|
||||||
let get bv i =
|
let[@inline] get bv i =
|
||||||
if i < 0 then invalid_arg "get: negative index";
|
if i < 0 then invalid_arg "get: negative index";
|
||||||
let n = div_ i in
|
let idx_bucket = div_ i in
|
||||||
let i = mod_ i in
|
let idx_in_byte = mod_ i in
|
||||||
if n < Bytes.length bv.b
|
if idx_bucket < Bytes.length bv.b
|
||||||
then (unsafe_get_ bv.b n) land (1 lsl i) <> 0
|
then (unsafe_get_ bv.b idx_bucket) land (1 lsl idx_in_byte) <> 0
|
||||||
else false
|
else false
|
||||||
|
|
||||||
(*$R
|
(*$R
|
||||||
|
|
@ -236,13 +236,13 @@ let get bv i =
|
||||||
assert_bool "1 must be false" (not (CCBV.get bv 1));
|
assert_bool "1 must be false" (not (CCBV.get bv 1));
|
||||||
*)
|
*)
|
||||||
|
|
||||||
let set bv i =
|
let[@inline] set bv i =
|
||||||
if i < 0 then invalid_arg "set: negative index"
|
if i < 0 then invalid_arg "set: negative index"
|
||||||
else (
|
else (
|
||||||
let n = div_ i in
|
let idx_bucket = div_ i in
|
||||||
let j = mod_ i in
|
let idx_in_byte = mod_ i in
|
||||||
if i >= bv.size then grow_ bv (i+1);
|
if i >= bv.size then grow_ bv (i+1);
|
||||||
unsafe_set_ bv.b n ((unsafe_get_ bv.b n) lor (1 lsl j))
|
unsafe_set_ bv.b idx_bucket ((unsafe_get_ bv.b idx_bucket) lor (1 lsl idx_in_byte))
|
||||||
)
|
)
|
||||||
|
|
||||||
(*$T
|
(*$T
|
||||||
|
|
@ -250,7 +250,7 @@ let set bv i =
|
||||||
let bv = create ~size:3 false in set bv 1; not (get bv 0)
|
let bv = create ~size:3 false in set bv 1; not (get bv 0)
|
||||||
*)
|
*)
|
||||||
|
|
||||||
let reset bv i =
|
let[@inline] reset bv i =
|
||||||
if i < 0 then invalid_arg "reset: negative index"
|
if i < 0 then invalid_arg "reset: negative index"
|
||||||
else (
|
else (
|
||||||
let n = div_ i in
|
let n = div_ i in
|
||||||
|
|
@ -443,7 +443,7 @@ exception FoundFirst of int
|
||||||
|
|
||||||
let first_exn bv =
|
let first_exn bv =
|
||||||
try
|
try
|
||||||
iter_true bv (fun i -> raise (FoundFirst i));
|
iter_true bv (fun i -> raise_notrace (FoundFirst i));
|
||||||
raise Not_found
|
raise Not_found
|
||||||
with FoundFirst i ->
|
with FoundFirst i ->
|
||||||
i
|
i
|
||||||
|
|
@ -607,8 +607,8 @@ let inter b1 b2 =
|
||||||
assert_equal [3;4] l;
|
assert_equal [3;4] l;
|
||||||
*)
|
*)
|
||||||
|
|
||||||
(* Underlying size depends on the 'in_' set for diff, so we don't change
|
(* Underlying size depends on the [in_] set for diff, so we don't change
|
||||||
it's size! *)
|
its size! *)
|
||||||
let diff_into ~into bv =
|
let diff_into ~into bv =
|
||||||
let n = min (Bytes.length into.b) (Bytes.length bv.b) in
|
let n = min (Bytes.length into.b) (Bytes.length bv.b) in
|
||||||
for i = 0 to n - 1 do
|
for i = 0 to n - 1 do
|
||||||
|
|
@ -642,7 +642,7 @@ let select bv arr =
|
||||||
iter_true bv
|
iter_true bv
|
||||||
(fun i ->
|
(fun i ->
|
||||||
if i >= Array.length arr
|
if i >= Array.length arr
|
||||||
then raise Exit
|
then raise_notrace Exit
|
||||||
else l := arr.(i) :: !l)
|
else l := arr.(i) :: !l)
|
||||||
with Exit -> ()
|
with Exit -> ()
|
||||||
end;
|
end;
|
||||||
|
|
@ -661,7 +661,7 @@ let selecti bv arr =
|
||||||
iter_true bv
|
iter_true bv
|
||||||
(fun i ->
|
(fun i ->
|
||||||
if i >= Array.length arr
|
if i >= Array.length arr
|
||||||
then raise Exit
|
then raise_notrace Exit
|
||||||
else l := (arr.(i), i) :: !l)
|
else l := (arr.(i), i) :: !l)
|
||||||
with Exit -> ()
|
with Exit -> ()
|
||||||
end;
|
end;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue