package io.netty.handler.codec.compression;

import io.netty.buffer.ByteBuf;
import io.netty.handler.codec.dns.DnsRecord;
import io.netty.util.ByteProcessor;

/* JADX INFO: loaded from: classes.dex */
public final class Bzip2BlockCompressor {
    private final byte[] block;
    private int blockLength;
    private final int blockLengthLimit;
    private final int[] bwtBlock;
    private int rleLength;
    private final Bzip2BitWriter writer;
    private final ByteProcessor writeProcessor = new ByteProcessor() { // from class: io.netty.handler.codec.compression.Bzip2BlockCompressor.1
        @Override // io.netty.util.ByteProcessor
        public boolean process(byte b2) {
            return Bzip2BlockCompressor.this.write(b2);
        }
    };
    private final Crc32 crc = new Crc32();
    private final boolean[] blockValuesPresent = new boolean[256];
    private int rleCurrentValue = -1;

    public Bzip2BlockCompressor(Bzip2BitWriter bzip2BitWriter, int i2) {
        this.writer = bzip2BitWriter;
        int i3 = i2 + 1;
        this.block = new byte[i3];
        this.bwtBlock = new int[i3];
        this.blockLengthLimit = i2 - 6;
    }

    private void writeRun(int i2, int i3) {
        int i4;
        int i5 = this.blockLength;
        byte[] bArr = this.block;
        this.blockValuesPresent[i2] = true;
        this.crc.updateCRC(i2, i3);
        byte b2 = (byte) i2;
        if (i3 != 1) {
            int i6 = 2;
            if (i3 != 2) {
                i6 = 3;
                if (i3 != 3) {
                    int i7 = i3 - 4;
                    this.blockValuesPresent[i7] = true;
                    bArr[i5] = b2;
                    bArr[i5 + 1] = b2;
                    bArr[i5 + 2] = b2;
                    bArr[i5 + 3] = b2;
                    bArr[i5 + 4] = (byte) i7;
                    i4 = i5 + 5;
                } else {
                    bArr[i5] = b2;
                    bArr[i5 + 1] = b2;
                    bArr[i5 + 2] = b2;
                }
            } else {
                bArr[i5] = b2;
                bArr[i5 + 1] = b2;
            }
            i4 = i5 + i6;
        } else {
            bArr[i5] = b2;
            i4 = i5 + 1;
        }
        this.blockLength = i4;
    }

    private void writeSymbolMap(ByteBuf byteBuf) {
        Bzip2BitWriter bzip2BitWriter = this.writer;
        boolean[] zArr = this.blockValuesPresent;
        boolean[] zArr2 = new boolean[16];
        for (int i2 = 0; i2 < 16; i2++) {
            int i3 = i2 << 4;
            int i4 = 0;
            while (i4 < 16) {
                if (zArr[i3]) {
                    zArr2[i2] = true;
                }
                i4++;
                i3++;
            }
        }
        for (int i5 = 0; i5 < 16; i5++) {
            bzip2BitWriter.writeBoolean(byteBuf, zArr2[i5]);
        }
        for (int i6 = 0; i6 < 16; i6++) {
            if (zArr2[i6]) {
                int i7 = i6 << 4;
                int i8 = 0;
                while (i8 < 16) {
                    bzip2BitWriter.writeBoolean(byteBuf, zArr[i7]);
                    i8++;
                    i7++;
                }
            }
        }
    }

    public int availableSize() {
        int i2 = this.blockLength;
        return i2 == 0 ? this.blockLengthLimit + 2 : (this.blockLengthLimit - i2) + 1;
    }

    public void close(ByteBuf byteBuf) {
        int i2 = this.rleLength;
        if (i2 > 0) {
            writeRun(this.rleCurrentValue & DnsRecord.CLASS_ANY, i2);
        }
        byte[] bArr = this.block;
        int i3 = this.blockLength;
        bArr[i3] = bArr[0];
        int iBwt = new Bzip2DivSufSort(bArr, this.bwtBlock, i3).bwt();
        Bzip2BitWriter bzip2BitWriter = this.writer;
        bzip2BitWriter.writeBits(byteBuf, 24, 3227993L);
        bzip2BitWriter.writeBits(byteBuf, 24, 2511705L);
        bzip2BitWriter.writeInt(byteBuf, this.crc.getCRC());
        bzip2BitWriter.writeBoolean(byteBuf, false);
        bzip2BitWriter.writeBits(byteBuf, 24, iBwt);
        writeSymbolMap(byteBuf);
        Bzip2MTFAndRLE2StageEncoder bzip2MTFAndRLE2StageEncoder = new Bzip2MTFAndRLE2StageEncoder(this.bwtBlock, this.blockLength, this.blockValuesPresent);
        bzip2MTFAndRLE2StageEncoder.encode();
        new Bzip2HuffmanStageEncoder(bzip2BitWriter, bzip2MTFAndRLE2StageEncoder.mtfBlock(), bzip2MTFAndRLE2StageEncoder.mtfLength(), bzip2MTFAndRLE2StageEncoder.mtfAlphabetSize(), bzip2MTFAndRLE2StageEncoder.mtfSymbolFrequencies()).encode(byteBuf);
    }

    public int crc() {
        return this.crc.getCRC();
    }

    public boolean isEmpty() {
        return this.blockLength == 0 && this.rleLength == 0;
    }

    public boolean isFull() {
        return this.blockLength > this.blockLengthLimit;
    }

    public int write(ByteBuf byteBuf, int i2, int i3) {
        int iForEachByte = byteBuf.forEachByte(i2, i3, this.writeProcessor);
        return iForEachByte == -1 ? i3 : iForEachByte - i2;
    }

    public boolean write(int i2) {
        if (this.blockLength > this.blockLengthLimit) {
            return false;
        }
        int i3 = this.rleCurrentValue;
        int i4 = this.rleLength;
        if (i4 == 0) {
            this.rleCurrentValue = i2;
            this.rleLength = 1;
        } else if (i3 != i2) {
            writeRun(i3 & DnsRecord.CLASS_ANY, i4);
            this.rleCurrentValue = i2;
            this.rleLength = 1;
        } else if (i4 == 254) {
            writeRun(i3 & DnsRecord.CLASS_ANY, DnsRecord.CLASS_ANY);
            this.rleLength = 0;
        } else {
            this.rleLength = i4 + 1;
        }
        return true;
    }
}
