// 
// 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 ZstdDirectBufferDecompressingStreamNoFinalizer extends BaseZstdBufferDecompressingStreamNoFinalizer
{
    public ZstdDirectBufferDecompressingStreamNoFinalizer(final ByteBuffer source) {
        super(source);
        if (!source.isDirect()) {
            throw new IllegalArgumentException("Source buffer should be a direct buffer");
        }
        this.source = source;
        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 direct buffer");
        }
        return this.readInternal(byteBuffer, true);
    }
    
    @Override
    long createDStream() {
        return createDStreamNative();
    }
    
    @Override
    long freeDStream(final long n) {
        return 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) {
        return this.decompressStreamNative(n, byteBuffer, n2, n3, byteBuffer2, n4, n5);
    }
    
    public static int recommendedTargetBufferSize() {
        return (int)recommendedDOutSizeNative();
    }
    
    private static native long createDStreamNative();
    
    private static native long freeDStreamNative(final long p0);
    
    private native long initDStreamNative(final long p0);
    
    private native long decompressStreamNative(final long p0, final ByteBuffer p1, final int p2, final int p3, final ByteBuffer p4, final int p5, final int p6);
    
    private static native long recommendedDOutSizeNative();
    
    static {
        Native.load();
    }
}
