Aller au contenu principal

5. Encodage des longueurs d'insertion littérale et des longueurs de copie (Encoding of Literal Insertion Lengths and Copy Lengths)

5. Encodage des longueurs d'insertion littérale et des longueurs de copie (Encoding of Literal Insertion Lengths and Copy Lengths)

Comme décrit dans la section 2, les longueurs d'insertion littérale (Literal Insertion Lengths) et les longueurs de copie arrière (Backward Copy Lengths) sont encodées en utilisant un seul code préfixe. Cette section fournit les détails de cet encodage.

Chaque paire <insertion length, copy length> dans la partie données compressées d'un méta-bloc est représentée par le triplet suivant :

<insert-and-copy length code, insert extra bits, copy extra bits>

Le code de longueur d'insertion et de copie (Insert-and-Copy Length Code), les bits supplémentaires d'insertion (Insert Extra Bits) et les bits supplémentaires de copie (Copy Extra Bits) sont encodés dos à dos, le code de longueur d'insertion et de copie est encodé en utilisant un code préfixe sur l'alphabet des codes de longueur d'insertion et de copie, tandis que les valeurs des bits supplémentaires sont encodées comme des valeurs entières de largeur fixe. Le nombre de bits supplémentaires d'insertion et de copie peut être 0..24, et ils dépendent du code de longueur d'insertion et de copie.

Certains codes de longueur d'insertion et de copie expriment également le fait que le symbole de distance de la distance dans la même commande est 0, c'est-à-dire que le composant de distance de la commande est le même que celui de la commande précédente. Dans ce cas, le code de distance et les bits supplémentaires pour la distance sont omis du flux de données compressées.

Nous décrivons l'alphabet des codes de longueur d'insertion et de copie en termes des alphabets (non directement utilisés) de code de longueur d'insertion (Insert Length Code) et de code de longueur de copie (Copy Length Code). Les symboles de l'alphabet de code de longueur d'insertion, ainsi que le nombre de bits supplémentaires d'insertion et la plage des longueurs d'insertion sont les suivants :

        Extra              Extra               Extra
Code Bits Lengths Code Bits Lengths Code Bits Lengths
---- ---- ------- ---- ---- ------- ---- ---- -------
0 0 0 8 2 10..13 16 6 130..193
1 0 1 9 2 14..17 17 7 194..321
2 0 2 10 3 18..25 18 8 322..577
3 0 3 11 3 26..33 19 9 578..1089
4 0 4 12 4 34..49 20 10 1090..2113
5 0 5 13 4 50..65 21 12 2114..6209
6 1 6,7 14 5 66..97 22 14 6210..22593
7 1 8,9 15 5 98..129 23 24 22594..16799809

Les symboles de l'alphabet de code de longueur de copie, ainsi que le nombre de bits supplémentaires de copie et la plage des longueurs de copie sont les suivants :

        Extra              Extra               Extra
Code Bits Lengths Code Bits Lengths Code Bits Lengths
---- ---- ------- ---- ---- ------- ---- ---- -------
0 0 2 8 1 10,11 16 5 70..101
1 0 3 9 1 12,13 17 5 102..133
2 0 4 10 2 14..17 18 6 134..197
3 0 5 11 2 18..21 19 7 198..325
4 0 6 12 3 22..29 20 8 326..581
5 0 7 13 3 30..37 21 9 582..1093
6 0 8 14 4 38..53 22 10 1094..2117
7 0 9 15 4 54..69 23 24 2118..16779333

Pour convertir un code de longueur d'insertion et de copie en un code de longueur d'insertion et un code de longueur de copie, le tableau suivant peut être utilisé :

       Insert
length Copy length code
code 0..7 8..15 16..23
+----------+----------+
| | |
0..7 | 0..63 | 64..127 | <--- distance symbol 0
| | |
+----------+----------+----------+
| | | |
0..7 | 128..191 | 192..255 | 384..447 |
| | | |
+----------+----------+----------+
| | | |
8..15 | 256..319 | 320..383 | 512..575 |
| | | |
+----------+----------+----------+
| | | |
16..23 | 448..511 | 576..639 | 640..703 |
| | | |
+----------+----------+----------+

Tout d'abord, recherchez la cellule avec la plage de 64 valeurs contenant le code de longueur d'insertion et de copie ; cela donne les plages de code de longueur d'insertion et de code de longueur de copie, toutes deux longues de 8 valeurs. Le code de longueur de copie dans sa plage est déterminé par les bits 0..2 (comptés depuis le lsb) du code de longueur d'insertion et de copie. Le code de longueur d'insertion dans sa plage est déterminé par les bits 3..5 (comptés depuis le lsb) du code de longueur d'insertion et de copie. Étant donné les codes de longueur d'insertion et de longueur de copie, les longueurs d'insertion et de copie réelles peuvent être obtenues en lisant le nombre de bits supplémentaires donnés par les tableaux ci-dessus.

Si le code de longueur d'insertion et de copie est entre 0 et 127, le code de distance de la commande est défini à zéro (la dernière distance réutilisée).


Source : RFC 7932, Section 5
Texte officiel (Official Text) : https://www.rfc-editor.org/rfc/rfc7932.txt