module Pack:sig
..end
Notons n
le nombre de bits utilisés pour représenter le type int
sur
votre machine. Autrement dit 31 ou 63 selon que l'architecture de votre
machine soit 32 ou 64 bits, cette dernière information étant donnée par
Sys.word_size
.
Ce module est utilisé pour écrire le module ByteStream.
val pop_bits_as_int : int -> bool MyStream.t -> int * bool MyStream.t
k
la valeur du premier argument, la fonction pop_bits_as_int k
prend
les k
premiers bits (i.e. les plus à gauche) du flot binaire passé en
argument pour en faire un entier x
qu'elle renvoie ainsi que le flot
binaire restant. Si le flot passé en argument contient strictement moins
de k
éléments, on complète à droite avec des zéros (« right padding »).
Dans tous les cas on obtient donc k
bits.
k
est strictement inférieur à n
, les k
bits de droite de x
sont ceux qui ont été prélevés, ceux de gauche sont mis à zéro (« left
padding »).k
est strictement supérieur à n
, les bits de x
sont les n
derniers prélevés (i.e. ceux de droite), les autres sont « perdus ».i
est dit « k-bits » lorsque k
≤n
et que seuls ses k
bits de droite peuvent être non nuls, autrement dit lorsque
i = fst (pack_int k bs)
où bs
est l'écriture binaire de i
.val push_int_as_bits : int -> int -> bool MyStream.t -> bool MyStream.t
k
la valeur du premier argument, la fonction push_int_as_bits k
prend
les k
bits de droite de l'écriture binaire de l'entier i
passé en premier
argument et les insère devant le (i.e. à gauche du) flot binaire passé en
second argument.
k
est strictement inférieur à n
, les bits de gauche de l'entier
i
sont « perdus ».k
est strictement supérieur à n
, on complète à gauche avec des
zéros (« left padding »).k
≤n
alors pour tout entier OCaml k-bits i
, on a
pack_int k (unpack_int k i bs) = (i, bs)
. C'est en particulier le cas lorsque
l'on travaille avec des entier 8-bits (i.e. k=8
).