3.1.1.4. Sequence Execution (Esecuzione sequenza)
Una volta decodificati sia i letterali che le sequenze, vengono combinati per generare il contenuto decodificato del blocco.
Ogni sequenza è composta da una tupla (literals_length, offset_value, match_length), decodificata come descritto in Sequences_Section (sezione 3.1.1.3.2). Per eseguire una sequenza, copiare prima literals_length byte dai letterali decodificati all'output.
Quindi, copiare match_length byte da dati precedentemente decodificati. L'offset da cui copiare è determinato da offset_value:
-
if Offset_Value > 3: allora l'offset è Offset_Value - 3;
-
if Offset_Value is from 1-3: l'offset è un valore di offset ripetuto speciale. Vedere la sezione 3.1.1.5 per informazioni su come determinare l'offset in questo caso.
L'offset è definito dalla posizione corrente (dopo aver copiato i letterali), quindi un offset di 6 e una lunghezza di corrispondenza di 3 significa che 3 byte devono essere copiati da 6 byte prima. Si noti che tutti gli offset che portano a dati precedentemente decodificati devono essere inferiori a Window_Size, definito in Frame_Header_Descriptor (sezione 3.1.1.1.1).
Esempio di flusso di esecuzione
Esempio 1: Esecuzione sequenza base
Supponiamo che la sequenza sia (literals_length=5, offset_value=10, match_length=4):
- Copiare letterali: Copia 5 byte dalla sezione letterali all'output
- Calcolare offset: Offset_Value=10 > 3, quindi Offset = 10 - 3 = 7
- Copiare corrispondenza: Copia 4 byte da 7 byte prima della posizione output
Esempio 2: Utilizzo di un offset ripetuto
Supponiamo che la sequenza sia (literals_length=3, offset_value=1, match_length=8):
- Copiare letterali: Copia 3 byte dalla sezione letterali all'output
- Utilizzare offset ripetuto: offset_value=1 significa utilizzare Repeated_Offset1
- Copiare corrispondenza: Copia 8 byte dalla posizione Repeated_Offset1
Vincoli importanti
- Limitazione Window_Size: Tutti gli offset devono essere < Window_Size
- Integrità dati: Assicurarsi che gli offset non superino l'intervallo dei dati decodificati
- Esaurimento letterali: Dopo l'esecuzione di tutte le sequenze, i letterali rimanenti vengono aggiunti alla fine dell'output