mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 11:15:31 -05:00
apply comments from the review
This commit is contained in:
parent
6a3e446d27
commit
19c65b5472
1 changed files with 10 additions and 12 deletions
|
|
@ -14,7 +14,7 @@ let[@inline] unsafe_get_ b i = Char.code (Bytes.unsafe_get b i)
|
||||||
let[@inline] set_ b i v = Bytes.set b i (Char.unsafe_chr v)
|
let[@inline] set_ b i v = Bytes.set b i (Char.unsafe_chr v)
|
||||||
let[@inline] unsafe_set_ b i v = Bytes.unsafe_set b i (Char.unsafe_chr v)
|
let[@inline] unsafe_set_ b i v = Bytes.unsafe_set b i (Char.unsafe_chr v)
|
||||||
|
|
||||||
let[@inline] mod_ n = (n lsl (Sys.word_size - 4)) lsr (Sys.word_size - 4)
|
let[@inline] mod_ n = (n land 0b111)
|
||||||
|
|
||||||
let[@inline] div_ n = n lsr 3
|
let[@inline] div_ n = n lsr 3
|
||||||
|
|
||||||
|
|
@ -26,14 +26,9 @@ let zero = Char.unsafe_chr 0
|
||||||
least significant bit. We create masks to zero out the most significant
|
least significant bit. We create masks to zero out the most significant
|
||||||
bits that aren't used to store values. This is necessary when we are
|
bits that aren't used to store values. This is necessary when we are
|
||||||
constructing or negating a bit vector. *)
|
constructing or negating a bit vector. *)
|
||||||
let lsb_masks_ =
|
let[@inline] lsb_masks_ n = (1 lsl n) - 1
|
||||||
let b = Bytes.make (width_ + 1) zero in
|
|
||||||
for i = 1 to width_ do
|
|
||||||
set_ b i (get_ b (i-1) lor (1 lsl (i - 1)))
|
|
||||||
done;
|
|
||||||
b
|
|
||||||
|
|
||||||
let all_ones_ = Bytes.get lsb_masks_ width_
|
let all_ones_ = Char.unsafe_chr (lsb_masks_ width_)
|
||||||
|
|
||||||
let count_bits_ n =
|
let count_bits_ n =
|
||||||
let table = [| 0; 1; 1; 2; 1; 2; 2; 3; 1; 2; 2; 3; 2; 3; 3; 4; 1; 2; 2; 3; 2; 3; 3; 4;
|
let table = [| 0; 1; 1; 2; 1; 2; 2; 3; 1; 2; 2; 3; 2; 3; 3; 4; 1; 2; 2; 3; 2; 3; 3; 4;
|
||||||
|
|
@ -76,7 +71,7 @@ let create ~size default =
|
||||||
(* adjust last bits *)
|
(* adjust last bits *)
|
||||||
let r = mod_ size in
|
let r = mod_ size in
|
||||||
if default && r <> 0 then (
|
if default && r <> 0 then (
|
||||||
Bytes.unsafe_set b (n-1) (Bytes.unsafe_get lsb_masks_ r);
|
Bytes.unsafe_set b (n-1) (Char.unsafe_chr (lsb_masks_ r));
|
||||||
);
|
);
|
||||||
{ b; size }
|
{ b; size }
|
||||||
)
|
)
|
||||||
|
|
@ -425,7 +420,7 @@ let negate_self b =
|
||||||
let r = mod_ b.size in
|
let r = mod_ b.size in
|
||||||
if r <> 0 then
|
if r <> 0 then
|
||||||
let l = Bytes.length b.b - 1 in
|
let l = Bytes.length b.b - 1 in
|
||||||
unsafe_set_ b.b l (unsafe_get_ lsb_masks_ r land (unsafe_get_ b.b l))
|
unsafe_set_ b.b l (lsb_masks_ r land (unsafe_get_ b.b l))
|
||||||
|
|
||||||
(*$= & ~printer:(CCFormat.to_string ppli)
|
(*$= & ~printer:(CCFormat.to_string ppli)
|
||||||
[0;3;4;6] (let v = of_list [1;2;5;7;] in negate_self v; to_sorted_list v)
|
[0;3;4;6] (let v = of_list [1;2;5;7;] in negate_self v; to_sorted_list v)
|
||||||
|
|
@ -436,7 +431,7 @@ let negate a =
|
||||||
let r = mod_ a.size in
|
let r = mod_ a.size in
|
||||||
if r <> 0 then (
|
if r <> 0 then (
|
||||||
let l = Bytes.length a.b - 1 in
|
let l = Bytes.length a.b - 1 in
|
||||||
unsafe_set_ b l (unsafe_get_ lsb_masks_ r land (unsafe_get_ b l))
|
unsafe_set_ b l (lsb_masks_ r land (unsafe_get_ b l))
|
||||||
);
|
);
|
||||||
{ b ; size = a.size }
|
{ b ; size = a.size }
|
||||||
|
|
||||||
|
|
@ -666,4 +661,7 @@ let pp out bv =
|
||||||
"bv {00001}" (CCFormat.to_string pp (of_list [4]))
|
"bv {00001}" (CCFormat.to_string pp (of_list [4]))
|
||||||
*)
|
*)
|
||||||
|
|
||||||
let __to_word_l bv = CCString.to_list (Bytes.unsafe_to_string bv.b)
|
let __to_word_l bv =
|
||||||
|
let l = ref [] in
|
||||||
|
Bytes.iter (fun c -> l := c :: !l) bv.b;
|
||||||
|
List.rev !l
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue