package lrgrep
Source file boolvector.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38open Fix.Indexing type 'n t = bytes let make c default = let n = cardinal c in Bytes.make ((n + 7) lsr 3) (if default then '\xFF' else '\x00') let test b n = let n = (n : _ index :> int) in let cell = n lsr 3 in let bit = n land 7 in Char.code (Bytes.unsafe_get b cell) land (1 lsl bit) <> 0 let set b n = let n = (n : _ index :> int) in let cell = n lsr 3 in let bit = n land 7 in Bytes.unsafe_set b cell (Char.unsafe_chr (Char.code (Bytes.unsafe_get b cell) lor (1 lsl bit))) let clear b n = let n = (n : _ index :> int) in let cell = n lsr 3 in let bit = n land 7 in Bytes.unsafe_set b cell (Char.unsafe_chr (Char.code (Bytes.unsafe_get b cell) land lnot (1 lsl bit))) let init c f = let result = make c false in Index.iter c (fun i -> if f i then set result i); result let from_vector vec f = let n = Vector.length vec in let result = make n false in Vector.iteri (fun i x -> if f x then set result i) vec; result