3.1.1.4. Sequence Execution (Exécution de séquence)
Une fois que les littéraux et les séquences ont tous été décodés, ils sont combinés pour générer le contenu décodé du bloc.
Chaque séquence est composée d'un tuple (literals_length, offset_value, match_length), tel que décodé comme décrit dans Sequences_Section (section 3.1.1.3.2). Pour exécuter une séquence, copiez d'abord literals_length octets depuis les littéraux décodés vers la sortie.
Ensuite, copiez match_length octets à partir de données précédemment décodées. Le décalage à partir duquel copier est déterminé par offset_value:
-
if Offset_Value > 3: alors le décalage est Offset_Value - 3;
-
if Offset_Value is from 1-3: le décalage est une valeur de décalage répété spéciale. Voir la section 3.1.1.5 pour des informations sur la façon de déterminer le décalage dans ce cas.
Le décalage est défini à partir de la position actuelle (après avoir copié les littéraux), donc un décalage de 6 et une longueur de correspondance de 3 signifie que 3 octets doivent être copiés depuis 6 octets auparavant. Notez que tous les décalages menant à des données précédemment décodées doivent être inférieurs à Window_Size, défini dans Frame_Header_Descriptor (section 3.1.1.1.1).
Exemple de flux d'exécution
Exemple 1: Exécution de séquence de base
Supposons que la séquence soit (literals_length=5, offset_value=10, match_length=4):
- Copier les littéraux: Copiez 5 octets depuis la section des littéraux vers la sortie
- Calculer le décalage: Offset_Value=10 > 3, donc Offset = 10 - 3 = 7
- Copier la correspondance: Copiez 4 octets depuis 7 octets avant la position de sortie
Exemple 2: Utilisation d'un décalage répété
Supposons que la séquence soit (literals_length=3, offset_value=1, match_length=8):
- Copier les littéraux: Copiez 3 octets depuis la section des littéraux vers la sortie
- Utiliser le décalage répété: offset_value=1 signifie utiliser Repeated_Offset1
- Copier la correspondance: Copiez 8 octets depuis la position Repeated_Offset1
Contraintes importantes
- Limitation Window_Size: Tous les décalages doivent être < Window_Size
- Intégrité des données: Assurez-vous que les décalages ne dépassent pas la plage des données décodées
- Épuisement des littéraux: Après l'exécution de toutes les séquences, les littéraux restants sont ajoutés à la fin de la sortie