(** Fonctions d'emballage et de déballage d'entiers k-bits. 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.html}ByteStream}. *) (** Fixons [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. - Si [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 »). - Si [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 ». Un entier OCaml [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 pop_bits_as_int : int -> bool MyStream.t -> int * bool MyStream.t (** Fixons [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. - Si [k] est strictement inférieur à [n], les bits de gauche de l'entier [i] sont « perdus ». - Si [k] est strictement supérieur à [n], on complète à gauche avec des zéros (« left padding »). Notons alors que si [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]).*) val push_int_as_bits : int -> int -> bool MyStream.t -> bool MyStream.t (** Retour à la page du {{:../INF441-TD8-1.html}TD8}*)