public class org.apache.commons.io.input.ReadAheadInputStream extends java.io.FilterInputStream
{
private static final java.lang.ThreadLocal BYTE_ARRAY_1;
private final java.util.concurrent.locks.ReentrantLock stateChangeLock;
private java.nio.ByteBuffer activeBuffer;
private java.nio.ByteBuffer readAheadBuffer;
private boolean endOfStream;
private boolean readInProgress;
private boolean readAborted;
private java.lang.Throwable readException;
private boolean isClosed;
private boolean isUnderlyingInputStreamBeingClosed;
private boolean isReading;
private final java.util.concurrent.atomic.AtomicBoolean isWaiting;
private final java.util.concurrent.ExecutorService executorService;
private final boolean shutdownExecutorService;
private final java.util.concurrent.locks.Condition asyncReadComplete;
static final boolean $assertionsDisabled;
public static org.apache.commons.io.input.ReadAheadInputStream$Builder builder()
{
org.apache.commons.io.input.ReadAheadInputStream$Builder v;
v = new org.apache.commons.io.input.ReadAheadInputStream$Builder;
specialinvoke v.<org.apache.commons.io.input.ReadAheadInputStream$Builder: void <init>()>();
return v;
}
public static java.lang.Thread newDaemonThread(java.lang.Runnable)
{
java.lang.Runnable v;
java.lang.Thread v;
v := @parameter: java.lang.Runnable;
v = new java.lang.Thread;
specialinvoke v.<java.lang.Thread: void <init>(java.lang.Runnable,java.lang.String)>(v, "commons-io-read-ahead");
virtualinvoke v.<java.lang.Thread: void setDaemon(boolean)>(1);
return v;
}
private static java.util.concurrent.ExecutorService newExecutorService()
{
java.util.concurrent.ThreadFactory v;
java.util.concurrent.ExecutorService v;
v = staticinvoke <org.apache.commons.io.input.ReadAheadInputStream$newDaemonThread__516: java.util.concurrent.ThreadFactory bootstrap$()>();
v = staticinvoke <java.util.concurrent.Executors: java.util.concurrent.ExecutorService newSingleThreadExecutor(java.util.concurrent.ThreadFactory)>(v);
return v;
}
public void <init>(java.io.InputStream, int)
{
org.apache.commons.io.input.ReadAheadInputStream v;
int v;
java.util.concurrent.ExecutorService v;
java.io.InputStream v;
v := @this: org.apache.commons.io.input.ReadAheadInputStream;
v := @parameter: java.io.InputStream;
v := @parameter: int;
v = staticinvoke <org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.ExecutorService newExecutorService()>();
specialinvoke v.<org.apache.commons.io.input.ReadAheadInputStream: void <init>(java.io.InputStream,int,java.util.concurrent.ExecutorService,boolean)>(v, v, v, 1);
return;
}
public void <init>(java.io.InputStream, int, java.util.concurrent.ExecutorService)
{
org.apache.commons.io.input.ReadAheadInputStream v;
int v;
java.util.concurrent.ExecutorService v;
java.io.InputStream v;
v := @this: org.apache.commons.io.input.ReadAheadInputStream;
v := @parameter: java.io.InputStream;
v := @parameter: int;
v := @parameter: java.util.concurrent.ExecutorService;
specialinvoke v.<org.apache.commons.io.input.ReadAheadInputStream: void <init>(java.io.InputStream,int,java.util.concurrent.ExecutorService,boolean)>(v, v, v, 0);
return;
}
private void <init>(java.io.InputStream, int, java.util.concurrent.ExecutorService, boolean)
{
java.util.concurrent.atomic.AtomicBoolean v;
java.nio.ByteBuffer v, v, v, v;
int v;
java.lang.String v;
java.util.concurrent.ExecutorService v;
boolean v;
java.util.concurrent.locks.ReentrantLock v, v;
java.lang.IllegalArgumentException v;
java.util.concurrent.locks.Condition v;
org.apache.commons.io.input.ReadAheadInputStream v;
java.lang.Object v, v;
java.io.InputStream v;
v := @this: org.apache.commons.io.input.ReadAheadInputStream;
v := @parameter: java.io.InputStream;
v := @parameter: int;
v := @parameter: java.util.concurrent.ExecutorService;
v := @parameter: boolean;
v = staticinvoke <java.util.Objects: java.lang.Object requireNonNull(java.lang.Object,java.lang.String)>(v, "inputStream");
specialinvoke v.<java.io.FilterInputStream: void <init>(java.io.InputStream)>(v);
v = new java.util.concurrent.locks.ReentrantLock;
specialinvoke v.<java.util.concurrent.locks.ReentrantLock: void <init>()>();
v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock> = v;
v = new java.util.concurrent.atomic.AtomicBoolean;
specialinvoke v.<java.util.concurrent.atomic.AtomicBoolean: void <init>(boolean)>(0);
v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.atomic.AtomicBoolean isWaiting> = v;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
v = virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: java.util.concurrent.locks.Condition newCondition()>();
v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.Condition asyncReadComplete> = v;
if v > 0 goto label;
v = new java.lang.IllegalArgumentException;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (int)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("bufferSizeInBytes should be greater than 0, but the value is \u0001");
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>(v);
throw v;
label:
v = staticinvoke <java.util.Objects: java.lang.Object requireNonNull(java.lang.Object,java.lang.String)>(v, "executorService");
v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.ExecutorService executorService> = v;
v.<org.apache.commons.io.input.ReadAheadInputStream: boolean shutdownExecutorService> = v;
v = staticinvoke <java.nio.ByteBuffer: java.nio.ByteBuffer allocate(int)>(v);
v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer activeBuffer> = v;
v = staticinvoke <java.nio.ByteBuffer: java.nio.ByteBuffer allocate(int)>(v);
v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer readAheadBuffer> = v;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer activeBuffer>;
virtualinvoke v.<java.nio.ByteBuffer: java.nio.ByteBuffer flip()>();
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer readAheadBuffer>;
virtualinvoke v.<java.nio.ByteBuffer: java.nio.ByteBuffer flip()>();
return;
}
public int available() throws java.io.IOException
{
java.lang.Throwable v;
java.util.concurrent.locks.ReentrantLock v, v, v;
long v, v;
java.nio.ByteBuffer v, v;
org.apache.commons.io.input.ReadAheadInputStream v;
int v, v;
v := @this: org.apache.commons.io.input.ReadAheadInputStream;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void lock()>();
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer activeBuffer>;
v = virtualinvoke v.<java.nio.ByteBuffer: int remaining()>();
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer readAheadBuffer>;
v = virtualinvoke v.<java.nio.ByteBuffer: int remaining()>();
v = v + v;
v = staticinvoke <java.lang.Math: long min(long,long)>(2147483647L, v);
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
return v;
label:
v := @caughtexception;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
throw v;
catch java.lang.Throwable from label to label with label;
}
private void checkReadException() throws java.io.IOException
{
java.lang.Throwable v, v, v;
org.apache.commons.io.input.ReadAheadInputStream v;
java.io.IOException v;
boolean v, v;
v := @this: org.apache.commons.io.input.ReadAheadInputStream;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: boolean readAborted>;
if v == 0 goto label;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.lang.Throwable readException>;
v = v instanceof java.io.IOException;
if v == 0 goto label;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.lang.Throwable readException>;
throw v;
label:
v = new java.io.IOException;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.lang.Throwable readException>;
specialinvoke v.<java.io.IOException: void <init>(java.lang.Throwable)>(v);
throw v;
label:
return;
}
public void close() throws java.io.IOException
{
java.lang.Throwable v, v;
java.io.InterruptedIOException v;
java.lang.String v;
java.util.concurrent.ExecutorService v, v;
boolean v, v, v, v;
java.util.concurrent.locks.ReentrantLock v, v, v, v;
java.util.concurrent.TimeUnit v;
org.apache.commons.io.input.ReadAheadInputStream v;
java.lang.InterruptedException v;
v := @this: org.apache.commons.io.input.ReadAheadInputStream;
v = 0;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void lock()>();
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: boolean isClosed>;
if v == 0 goto label;
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
return;
label:
v.<org.apache.commons.io.input.ReadAheadInputStream: boolean isClosed> = 1;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: boolean isReading>;
if v != 0 goto label;
v = 1;
v.<org.apache.commons.io.input.ReadAheadInputStream: boolean isUnderlyingInputStreamBeingClosed> = 1;
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
goto label;
label:
v := @caughtexception;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
throw v;
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: boolean shutdownExecutorService>;
if v == 0 goto label;
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.ExecutorService executorService>;
interfaceinvoke v.<java.util.concurrent.ExecutorService: java.util.List shutdownNow()>();
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.ExecutorService executorService>;
v = <java.util.concurrent.TimeUnit: java.util.concurrent.TimeUnit SECONDS>;
interfaceinvoke v.<java.util.concurrent.ExecutorService: boolean awaitTermination(long,java.util.concurrent.TimeUnit)>(9223372036854775807L, v);
label:
if v == 0 goto label;
specialinvoke v.<java.io.FilterInputStream: void close()>();
goto label;
label:
v := @caughtexception;
v = new java.io.InterruptedIOException;
v = virtualinvoke v.<java.lang.InterruptedException: java.lang.String getMessage()>();
specialinvoke v.<java.io.InterruptedIOException: void <init>(java.lang.String)>(v);
virtualinvoke v.<java.io.InterruptedIOException: java.lang.Throwable initCause(java.lang.Throwable)>(v);
throw v;
label:
v := @caughtexception;
if v == 0 goto label;
specialinvoke v.<java.io.FilterInputStream: void close()>();
label:
throw v;
label:
return;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.InterruptedException from label to label with label;
catch java.lang.Throwable from label to label with label;
}
private void closeUnderlyingInputStreamIfNecessary()
{
java.lang.Throwable v;
java.util.concurrent.locks.ReentrantLock v, v, v;
org.apache.commons.io.input.ReadAheadInputStream v;
boolean v, v, v;
v := @this: org.apache.commons.io.input.ReadAheadInputStream;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void lock()>();
label:
v.<org.apache.commons.io.input.ReadAheadInputStream: boolean isReading> = 0;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: boolean isClosed>;
if v == 0 goto label;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: boolean isUnderlyingInputStreamBeingClosed>;
if v != 0 goto label;
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
goto label;
label:
v := @caughtexception;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
throw v;
label:
return;
catch java.lang.Throwable from label to label with label;
}
private boolean isEndOfStream()
{
org.apache.commons.io.input.ReadAheadInputStream v;
java.nio.ByteBuffer v, v;
boolean v, v, v, v;
v := @this: org.apache.commons.io.input.ReadAheadInputStream;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer activeBuffer>;
v = virtualinvoke v.<java.nio.ByteBuffer: boolean hasRemaining()>();
if v != 0 goto label;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer readAheadBuffer>;
v = virtualinvoke v.<java.nio.ByteBuffer: boolean hasRemaining()>();
if v != 0 goto label;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: boolean endOfStream>;
if v == 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
public int read() throws java.io.IOException
{
java.lang.ThreadLocal v;
java.nio.ByteBuffer v, v;
org.apache.commons.io.input.ReadAheadInputStream v;
short v, v;
byte v, v;
int v, v;
java.lang.Object v;
boolean v;
v := @this: org.apache.commons.io.input.ReadAheadInputStream;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer activeBuffer>;
v = virtualinvoke v.<java.nio.ByteBuffer: boolean hasRemaining()>();
if v == 0 goto label;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer activeBuffer>;
v = virtualinvoke v.<java.nio.ByteBuffer: byte get()>();
v = v & 255;
return v;
label:
v = <org.apache.commons.io.input.ReadAheadInputStream: java.lang.ThreadLocal BYTE_ARRAY_1>;
v = virtualinvoke v.<java.lang.ThreadLocal: java.lang.Object get()>();
v[0] = 0;
v = virtualinvoke v.<org.apache.commons.io.input.ReadAheadInputStream: int read(byte[],int,int)>(v, 0, 1);
v = (int) -1;
if v != v goto label;
v = -1;
goto label;
label:
v = v[0];
v = v & 255;
label:
return v;
}
public int read(byte[], int, int) throws java.io.IOException
{
java.lang.Throwable v;
byte[] v;
java.lang.IndexOutOfBoundsException v;
java.nio.ByteBuffer v, v, v, v;
int v, v, v, v, v, v;
boolean v, v, v;
java.util.concurrent.locks.ReentrantLock v, v, v, v;
org.apache.commons.io.input.ReadAheadInputStream v;
v := @this: org.apache.commons.io.input.ReadAheadInputStream;
v := @parameter: byte[];
v := @parameter: int;
v := @parameter: int;
if v < 0 goto label;
if v < 0 goto label;
v = lengthof v;
v = v - v;
if v <= v goto label;
label:
v = new java.lang.IndexOutOfBoundsException;
specialinvoke v.<java.lang.IndexOutOfBoundsException: void <init>()>();
throw v;
label:
if v != 0 goto label;
return 0;
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer activeBuffer>;
v = virtualinvoke v.<java.nio.ByteBuffer: boolean hasRemaining()>();
if v != 0 goto label;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void lock()>();
label:
specialinvoke v.<org.apache.commons.io.input.ReadAheadInputStream: void waitForAsyncReadComplete()>();
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer readAheadBuffer>;
v = virtualinvoke v.<java.nio.ByteBuffer: boolean hasRemaining()>();
if v != 0 goto label;
specialinvoke v.<org.apache.commons.io.input.ReadAheadInputStream: void readAsync()>();
specialinvoke v.<org.apache.commons.io.input.ReadAheadInputStream: void waitForAsyncReadComplete()>();
v = specialinvoke v.<org.apache.commons.io.input.ReadAheadInputStream: boolean isEndOfStream()>();
if v == 0 goto label;
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
return -1;
label:
specialinvoke v.<org.apache.commons.io.input.ReadAheadInputStream: void swapBuffers()>();
specialinvoke v.<org.apache.commons.io.input.ReadAheadInputStream: void readAsync()>();
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
goto label;
label:
v := @caughtexception;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
throw v;
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer activeBuffer>;
v = virtualinvoke v.<java.nio.ByteBuffer: int remaining()>();
v = staticinvoke <java.lang.Math: int min(int,int)>(v, v);
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer activeBuffer>;
virtualinvoke v.<java.nio.ByteBuffer: java.nio.ByteBuffer get(byte[],int,int)>(v, v, v);
return v;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
private void readAsync() throws java.io.IOException
{
java.lang.Throwable v;
byte[] v;
java.util.concurrent.locks.ReentrantLock v, v, v, v;
java.lang.Runnable v;
java.nio.ByteBuffer v, v, v;
org.apache.commons.io.input.ReadAheadInputStream v;
java.util.concurrent.ExecutorService v;
boolean v, v;
v := @this: org.apache.commons.io.input.ReadAheadInputStream;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void lock()>();
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer readAheadBuffer>;
v = virtualinvoke v.<java.nio.ByteBuffer: byte[] array()>();
v = v.<org.apache.commons.io.input.ReadAheadInputStream: boolean endOfStream>;
if v != 0 goto label;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: boolean readInProgress>;
if v == 0 goto label;
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
return;
label:
specialinvoke v.<org.apache.commons.io.input.ReadAheadInputStream: void checkReadException()>();
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer readAheadBuffer>;
virtualinvoke v.<java.nio.ByteBuffer: java.nio.ByteBuffer position(int)>(0);
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer readAheadBuffer>;
virtualinvoke v.<java.nio.ByteBuffer: java.nio.ByteBuffer flip()>();
v.<org.apache.commons.io.input.ReadAheadInputStream: boolean readInProgress> = 1;
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
goto label;
label:
v := @caughtexception;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
throw v;
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.ExecutorService executorService>;
v = staticinvoke <org.apache.commons.io.input.ReadAheadInputStream$lambda_readAsync_1__517: java.lang.Runnable bootstrap$(org.apache.commons.io.input.ReadAheadInputStream,byte[])>(v, v);
interfaceinvoke v.<java.util.concurrent.ExecutorService: void execute(java.lang.Runnable)>(v);
return;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
private void signalAsyncReadComplete()
{
java.lang.Throwable v;
java.util.concurrent.locks.Condition v;
org.apache.commons.io.input.ReadAheadInputStream v;
java.util.concurrent.locks.ReentrantLock v, v, v;
v := @this: org.apache.commons.io.input.ReadAheadInputStream;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void lock()>();
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.Condition asyncReadComplete>;
interfaceinvoke v.<java.util.concurrent.locks.Condition: void signalAll()>();
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
goto label;
label:
v := @caughtexception;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
throw v;
label:
return;
catch java.lang.Throwable from label to label with label;
}
public long skip(long) throws java.io.IOException
{
java.lang.Throwable v;
java.util.concurrent.locks.ReentrantLock v, v, v;
long v, v;
java.nio.ByteBuffer v, v, v;
org.apache.commons.io.input.ReadAheadInputStream v;
byte v, v;
int v, v, v;
v := @this: org.apache.commons.io.input.ReadAheadInputStream;
v := @parameter: long;
v = v cmp 0L;
if v > 0 goto label;
return 0L;
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer activeBuffer>;
v = virtualinvoke v.<java.nio.ByteBuffer: int remaining()>();
v = v cmp v;
if v > 0 goto label;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer activeBuffer>;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer activeBuffer>;
v = virtualinvoke v.<java.nio.ByteBuffer: int position()>();
v = v + v;
virtualinvoke v.<java.nio.ByteBuffer: java.nio.ByteBuffer position(int)>(v);
return v;
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void lock()>();
label:
v = specialinvoke v.<org.apache.commons.io.input.ReadAheadInputStream: long skipInternal(long)>(v);
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
goto label;
label:
v := @caughtexception;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
throw v;
label:
return v;
catch java.lang.Throwable from label to label with label;
}
private long skipInternal(long) throws java.io.IOException
{
long v, v, v, v;
java.lang.AssertionError v, v;
java.nio.ByteBuffer v, v, v, v, v, v, v, v, v;
byte v;
int v, v, v, v, v, v;
boolean v, v, v, v;
java.util.concurrent.locks.ReentrantLock v;
org.apache.commons.io.input.ReadAheadInputStream v;
java.io.InputStream v;
v := @this: org.apache.commons.io.input.ReadAheadInputStream;
v := @parameter: long;
v = <org.apache.commons.io.input.ReadAheadInputStream: boolean $assertionsDisabled>;
if v != 0 goto label;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
v = virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: boolean isLocked()>();
if v != 0 goto label;
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>()>();
throw v;
label:
specialinvoke v.<org.apache.commons.io.input.ReadAheadInputStream: void waitForAsyncReadComplete()>();
v = specialinvoke v.<org.apache.commons.io.input.ReadAheadInputStream: boolean isEndOfStream()>();
if v == 0 goto label;
return 0L;
label:
v = virtualinvoke v.<org.apache.commons.io.input.ReadAheadInputStream: int available()>();
v = v cmp v;
if v < 0 goto label;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer activeBuffer>;
v = virtualinvoke v.<java.nio.ByteBuffer: int remaining()>();
v = v - v;
v = <org.apache.commons.io.input.ReadAheadInputStream: boolean $assertionsDisabled>;
if v != 0 goto label;
if v > 0 goto label;
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>()>();
throw v;
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer activeBuffer>;
virtualinvoke v.<java.nio.ByteBuffer: java.nio.ByteBuffer position(int)>(0);
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer activeBuffer>;
virtualinvoke v.<java.nio.ByteBuffer: java.nio.ByteBuffer flip()>();
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer readAheadBuffer>;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer readAheadBuffer>;
v = virtualinvoke v.<java.nio.ByteBuffer: int position()>();
v = v + v;
virtualinvoke v.<java.nio.ByteBuffer: java.nio.ByteBuffer position(int)>(v);
specialinvoke v.<org.apache.commons.io.input.ReadAheadInputStream: void swapBuffers()>();
specialinvoke v.<org.apache.commons.io.input.ReadAheadInputStream: void readAsync()>();
return v;
label:
v = virtualinvoke v.<org.apache.commons.io.input.ReadAheadInputStream: int available()>();
v = v - v;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer activeBuffer>;
virtualinvoke v.<java.nio.ByteBuffer: java.nio.ByteBuffer position(int)>(0);
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer activeBuffer>;
virtualinvoke v.<java.nio.ByteBuffer: java.nio.ByteBuffer flip()>();
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer readAheadBuffer>;
virtualinvoke v.<java.nio.ByteBuffer: java.nio.ByteBuffer position(int)>(0);
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer readAheadBuffer>;
virtualinvoke v.<java.nio.ByteBuffer: java.nio.ByteBuffer flip()>();
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.io.InputStream in>;
v = virtualinvoke v.<java.io.InputStream: long skip(long)>(v);
specialinvoke v.<org.apache.commons.io.input.ReadAheadInputStream: void readAsync()>();
v = v + v;
return v;
}
private void swapBuffers()
{
org.apache.commons.io.input.ReadAheadInputStream v;
java.nio.ByteBuffer v, v;
v := @this: org.apache.commons.io.input.ReadAheadInputStream;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer activeBuffer>;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer readAheadBuffer>;
v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer activeBuffer> = v;
v.<org.apache.commons.io.input.ReadAheadInputStream: java.nio.ByteBuffer readAheadBuffer> = v;
return;
}
private void waitForAsyncReadComplete() throws java.io.IOException
{
java.lang.Throwable v, v, v;
java.util.concurrent.atomic.AtomicBoolean v, v, v;
java.io.InterruptedIOException v;
java.lang.String v;
boolean v;
java.util.concurrent.locks.ReentrantLock v, v, v, v, v;
java.util.concurrent.locks.Condition v;
org.apache.commons.io.input.ReadAheadInputStream v;
java.lang.InterruptedException v;
v := @this: org.apache.commons.io.input.ReadAheadInputStream;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void lock()>();
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.atomic.AtomicBoolean isWaiting>;
virtualinvoke v.<java.util.concurrent.atomic.AtomicBoolean: void set(boolean)>(1);
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: boolean readInProgress>;
if v == 0 goto label;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.Condition asyncReadComplete>;
interfaceinvoke v.<java.util.concurrent.locks.Condition: void await()>();
goto label;
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.atomic.AtomicBoolean isWaiting>;
virtualinvoke v.<java.util.concurrent.atomic.AtomicBoolean: void set(boolean)>(0);
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
goto label;
label:
v := @caughtexception;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
throw v;
label:
v := @caughtexception;
v = new java.io.InterruptedIOException;
v = virtualinvoke v.<java.lang.InterruptedException: java.lang.String getMessage()>();
specialinvoke v.<java.io.InterruptedIOException: void <init>(java.lang.String)>(v);
virtualinvoke v.<java.io.InterruptedIOException: java.lang.Throwable initCause(java.lang.Throwable)>(v);
throw v;
label:
v := @caughtexception;
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.atomic.AtomicBoolean isWaiting>;
virtualinvoke v.<java.util.concurrent.atomic.AtomicBoolean: void set(boolean)>(0);
label:
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
goto label;
label:
v := @caughtexception;
v = v.<org.apache.commons.io.input.ReadAheadInputStream: java.util.concurrent.locks.ReentrantLock stateChangeLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
throw v;
label:
throw v;
label:
specialinvoke v.<org.apache.commons.io.input.ReadAheadInputStream: void checkReadException()>();
return;
catch java.lang.Throwable from label to label with label;
catch java.lang.InterruptedException from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
static void <clinit>()
{
java.lang.ThreadLocal v;
java.lang.Class v;
java.util.function.Supplier v;
boolean v, v;
v = class "Lorg/apache/commons/io/input/ReadAheadInputStream;";
v = virtualinvoke v.<java.lang.Class: boolean desiredAssertionStatus()>();
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
<org.apache.commons.io.input.ReadAheadInputStream: boolean $assertionsDisabled> = v;
v = staticinvoke <org.apache.commons.io.input.ReadAheadInputStream$lambda_static_0__518: java.util.function.Supplier bootstrap$()>();
v = staticinvoke <java.lang.ThreadLocal: java.lang.ThreadLocal withInitial(java.util.function.Supplier)>(v);
<org.apache.commons.io.input.ReadAheadInputStream: java.lang.ThreadLocal BYTE_ARRAY_1> = v;
return;
}
}