// 
// Decompiled by Procyon v0.6.0
// 

package com.github.luben.zstd;

import com.github.luben.zstd.util.Native;
import java.io.IOException;
import java.nio.ByteBuffer;

public class ZstdBufferDecompressingStreamNoFinalizer extends BaseZstdBufferDecompressingStreamNoFinalizer
{
    public ZstdBufferDecompressingStreamNoFinalizer(final ByteBuffer byteBuffer) {
        super(byteBuffer);
        if (byteBuffer.isDirect()) {
            throw new IllegalArgumentException("Source buffer should be a non-direct buffer");
        }
        this.initDStream(this.stream = this.createDStream());
    }
    
    @Override
    public int read(final ByteBuffer byteBuffer) throws IOException {
        if (byteBuffer.isDirect()) {
            throw new IllegalArgumentException("Target buffer should be a non-direct buffer");
        }
        return this.readInternal(byteBuffer, false);
    }
    
    @Override
    long createDStream() {
        return this.createDStreamNative();
    }
    
    @Override
    long freeDStream(final long n) {
        return this.freeDStreamNative(n);
    }
    
    @Override
    long initDStream(final long n) {
        return this.initDStreamNative(n);
    }
    
    @Override
    long decompressStream(final long n, final ByteBuffer byteBuffer, final int n2, final int n3, final ByteBuffer byteBuffer2, final int n4, final int n5) {
        if (!byteBuffer2.hasArray()) {
            throw new IllegalArgumentException("provided source ByteBuffer lacks array");
        }
        if (!byteBuffer.hasArray()) {
            throw new IllegalArgumentException("provided destination ByteBuffer lacks array");
        }
        return this.decompressStreamNative(n, byteBuffer.array(), n2 + byteBuffer.arrayOffset(), n3, byteBuffer2.array(), n4 + byteBuffer2.arrayOffset(), n5);
    }
    
    public static int recommendedTargetBufferSize() {
        return (int)recommendedDOutSizeNative();
    }
    
    private native long createDStreamNative();
    
    private native long freeDStreamNative(final long p0);
    
    private native long initDStreamNative(final long p0);
    
    private native long decompressStreamNative(final long p0, final byte[] p1, final int p2, final int p3, final byte[] p4, final int p5, final int p6);
    
    private static native long recommendedDOutSizeNative();
    
    static {
        Native.load();
    }
}
