let set bitarray index value =
if index < 0 || index >= bitarray.length
then raise (Invalid_argument "Bitarray.get");
let array = bitarray.array in
let virtual_index = index / size in
let shift_index = index mod size in
array.{virtual_index} <- if value then array.{virtual_index} lor values.(shift_index) else array.{virtual_index} land (lnot values.(shift_index))