public class org.iq.leveldb.table.BlockBuilder extends java.lang.Object
{
private final int blockRestartInterval;
private final org.iq.leveldb.util.IntVector restartPositions;
private final java.util.Comparator comparator;
private int entryCount;
private int restartBlockEntryCount;
private boolean finished;
private final org.iq.leveldb.util.DynamicSliceOutput block;
private org.iq.leveldb.util.Slice lastKey;
public void <init>(int, int, java.util.Comparator)
{
org.iq.leveldb.util.IntVector v, v;
int v, v;
org.iq.leveldb.table.BlockBuilder v;
org.iq.leveldb.util.DynamicSliceOutput v;
java.util.Comparator v;
boolean v, v;
v := @this: org.iq.leveldb.table.BlockBuilder;
v := @parameter: int;
v := @parameter: int;
v := @parameter: java.util.Comparator;
specialinvoke v.<java.lang.Object: void <init>()>();
if v < 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
staticinvoke <com.google.common.base.Preconditions: void checkArgument(boolean,java.lang.Object)>(v, "estimatedSize is negative");
if v < 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
staticinvoke <com.google.common.base.Preconditions: void checkArgument(boolean,java.lang.Object)>(v, "blockRestartInterval is negative");
staticinvoke <com.google.common.base.Preconditions: java.lang.Object checkNotNull(java.lang.Object,java.lang.Object)>(v, "comparator is null");
v = new org.iq.leveldb.util.DynamicSliceOutput;
specialinvoke v.<org.iq.leveldb.util.DynamicSliceOutput: void <init>(int)>(v);
v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.DynamicSliceOutput block> = v;
v.<org.iq.leveldb.table.BlockBuilder: int blockRestartInterval> = v;
v.<org.iq.leveldb.table.BlockBuilder: java.util.Comparator comparator> = v;
v = new org.iq.leveldb.util.IntVector;
specialinvoke v.<org.iq.leveldb.util.IntVector: void <init>(int)>(32);
v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.IntVector restartPositions> = v;
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.IntVector restartPositions>;
virtualinvoke v.<org.iq.leveldb.util.IntVector: void add(int)>(0);
return;
}
public void reset()
{
org.iq.leveldb.util.IntVector v, v;
org.iq.leveldb.table.BlockBuilder v;
org.iq.leveldb.util.DynamicSliceOutput v;
v := @this: org.iq.leveldb.table.BlockBuilder;
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.DynamicSliceOutput block>;
virtualinvoke v.<org.iq.leveldb.util.DynamicSliceOutput: void reset()>();
v.<org.iq.leveldb.table.BlockBuilder: int entryCount> = 0;
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.IntVector restartPositions>;
virtualinvoke v.<org.iq.leveldb.util.IntVector: void clear()>();
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.IntVector restartPositions>;
virtualinvoke v.<org.iq.leveldb.util.IntVector: void add(int)>(0);
v.<org.iq.leveldb.table.BlockBuilder: int restartBlockEntryCount> = 0;
v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.Slice lastKey> = null;
v.<org.iq.leveldb.table.BlockBuilder: boolean finished> = 0;
return;
}
public int getEntryCount()
{
int v;
org.iq.leveldb.table.BlockBuilder v;
v := @this: org.iq.leveldb.table.BlockBuilder;
v = v.<org.iq.leveldb.table.BlockBuilder: int entryCount>;
return v;
}
public boolean isEmpty()
{
int v;
org.iq.leveldb.table.BlockBuilder v;
boolean v;
v := @this: org.iq.leveldb.table.BlockBuilder;
v = v.<org.iq.leveldb.table.BlockBuilder: int entryCount>;
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
public int currentSizeEstimate()
{
org.iq.leveldb.util.IntVector v;
int v, v, v, v, v, v, v;
org.iq.leveldb.table.BlockBuilder v;
org.iq.leveldb.util.DynamicSliceOutput v, v, v;
boolean v;
v := @this: org.iq.leveldb.table.BlockBuilder;
v = v.<org.iq.leveldb.table.BlockBuilder: boolean finished>;
if v == 0 goto label;
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.DynamicSliceOutput block>;
v = virtualinvoke v.<org.iq.leveldb.util.DynamicSliceOutput: int size()>();
return v;
label:
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.DynamicSliceOutput block>;
v = virtualinvoke v.<org.iq.leveldb.util.DynamicSliceOutput: int size()>();
if v != 0 goto label;
return 4;
label:
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.DynamicSliceOutput block>;
v = virtualinvoke v.<org.iq.leveldb.util.DynamicSliceOutput: int size()>();
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.IntVector restartPositions>;
v = virtualinvoke v.<org.iq.leveldb.util.IntVector: int size()>();
v = v * 4;
v = v + v;
v = v + 4;
return v;
}
public void add(org.iq.leveldb.table.BlockEntry)
{
org.iq.leveldb.util.Slice v, v;
org.iq.leveldb.table.BlockBuilder v;
org.iq.leveldb.table.BlockEntry v;
v := @this: org.iq.leveldb.table.BlockBuilder;
v := @parameter: org.iq.leveldb.table.BlockEntry;
staticinvoke <com.google.common.base.Preconditions: java.lang.Object checkNotNull(java.lang.Object,java.lang.Object)>(v, "blockEntry is null");
v = virtualinvoke v.<org.iq.leveldb.table.BlockEntry: org.iq.leveldb.util.Slice getKey()>();
v = virtualinvoke v.<org.iq.leveldb.table.BlockEntry: org.iq.leveldb.util.Slice getValue()>();
virtualinvoke v.<org.iq.leveldb.table.BlockBuilder: void add(org.iq.leveldb.util.Slice,org.iq.leveldb.util.Slice)>(v, v);
return;
}
public void add(org.iq.leveldb.util.Slice, org.iq.leveldb.util.Slice)
{
org.iq.leveldb.util.Slice v, v, v, v, v;
org.iq.leveldb.table.BlockBuilder v;
boolean v, v, v;
org.iq.leveldb.util.DynamicSliceOutput v, v, v, v, v, v;
int v, v, v, v, v, v, v, v, v, v, v, v, v, v, v;
org.iq.leveldb.util.IntVector v;
java.util.Comparator v;
v := @this: org.iq.leveldb.table.BlockBuilder;
v := @parameter: org.iq.leveldb.util.Slice;
v := @parameter: org.iq.leveldb.util.Slice;
staticinvoke <com.google.common.base.Preconditions: java.lang.Object checkNotNull(java.lang.Object,java.lang.Object)>(v, "key is null");
staticinvoke <com.google.common.base.Preconditions: java.lang.Object checkNotNull(java.lang.Object,java.lang.Object)>(v, "value is null");
v = v.<org.iq.leveldb.table.BlockBuilder: boolean finished>;
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
staticinvoke <com.google.common.base.Preconditions: void checkState(boolean,java.lang.Object)>(v, "block is finished");
v = v.<org.iq.leveldb.table.BlockBuilder: int restartBlockEntryCount>;
v = v.<org.iq.leveldb.table.BlockBuilder: int blockRestartInterval>;
staticinvoke <com.google.common.base.Preconditions: int checkPositionIndex(int,int)>(v, v);
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.Slice lastKey>;
if v == null goto label;
v = v.<org.iq.leveldb.table.BlockBuilder: java.util.Comparator comparator>;
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.Slice lastKey>;
v = interfaceinvoke v.<java.util.Comparator: int compare(java.lang.Object,java.lang.Object)>(v, v);
if v <= 0 goto label;
label:
v = 1;
goto label;
label:
v = 0;
label:
staticinvoke <com.google.common.base.Preconditions: void checkArgument(boolean,java.lang.Object)>(v, "key must be greater than last key");
v = 0;
v = v.<org.iq.leveldb.table.BlockBuilder: int restartBlockEntryCount>;
v = v.<org.iq.leveldb.table.BlockBuilder: int blockRestartInterval>;
if v >= v goto label;
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.Slice lastKey>;
v = staticinvoke <org.iq.leveldb.table.BlockBuilder: int calculateSharedBytes(org.iq.leveldb.util.Slice,org.iq.leveldb.util.Slice)>(v, v);
goto label;
label:
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.IntVector restartPositions>;
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.DynamicSliceOutput block>;
v = virtualinvoke v.<org.iq.leveldb.util.DynamicSliceOutput: int size()>();
virtualinvoke v.<org.iq.leveldb.util.IntVector: void add(int)>(v);
v.<org.iq.leveldb.table.BlockBuilder: int restartBlockEntryCount> = 0;
label:
v = virtualinvoke v.<org.iq.leveldb.util.Slice: int length()>();
v = v - v;
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.DynamicSliceOutput block>;
staticinvoke <org.iq.leveldb.util.VariableLengthQuantity: void writeVariableLengthInt(int,org.iq.leveldb.util.SliceOutput)>(v, v);
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.DynamicSliceOutput block>;
staticinvoke <org.iq.leveldb.util.VariableLengthQuantity: void writeVariableLengthInt(int,org.iq.leveldb.util.SliceOutput)>(v, v);
v = virtualinvoke v.<org.iq.leveldb.util.Slice: int length()>();
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.DynamicSliceOutput block>;
staticinvoke <org.iq.leveldb.util.VariableLengthQuantity: void writeVariableLengthInt(int,org.iq.leveldb.util.SliceOutput)>(v, v);
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.DynamicSliceOutput block>;
virtualinvoke v.<org.iq.leveldb.util.DynamicSliceOutput: void writeBytes(org.iq.leveldb.util.Slice,int,int)>(v, v, v);
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.DynamicSliceOutput block>;
v = virtualinvoke v.<org.iq.leveldb.util.Slice: int length()>();
virtualinvoke v.<org.iq.leveldb.util.DynamicSliceOutput: void writeBytes(org.iq.leveldb.util.Slice,int,int)>(v, 0, v);
v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.Slice lastKey> = v;
v = v.<org.iq.leveldb.table.BlockBuilder: int entryCount>;
v = v + 1;
v.<org.iq.leveldb.table.BlockBuilder: int entryCount> = v;
v = v.<org.iq.leveldb.table.BlockBuilder: int restartBlockEntryCount>;
v = v + 1;
v.<org.iq.leveldb.table.BlockBuilder: int restartBlockEntryCount> = v;
return;
}
public static int calculateSharedBytes(org.iq.leveldb.util.Slice, org.iq.leveldb.util.Slice)
{
org.iq.leveldb.util.Slice v, v;
byte v, v;
int[] v;
int v, v, v, v;
v := @parameter: org.iq.leveldb.util.Slice;
v := @parameter: org.iq.leveldb.util.Slice;
v = 0;
if v == null goto label;
if v == null goto label;
v = newarray (int)[2];
v = virtualinvoke v.<org.iq.leveldb.util.Slice: int length()>();
v[0] = v;
v = virtualinvoke v.<org.iq.leveldb.util.Slice: int length()>();
v[1] = v;
v = staticinvoke <com.google.common.primitives.Ints: int min(int[])>(v);
label:
if v >= v goto label;
v = virtualinvoke v.<org.iq.leveldb.util.Slice: byte getByte(int)>(v);
v = virtualinvoke v.<org.iq.leveldb.util.Slice: byte getByte(int)>(v);
if v != v goto label;
v = v + 1;
goto label;
label:
return v;
}
public org.iq.leveldb.util.Slice finish()
{
org.iq.leveldb.util.IntVector v, v;
org.iq.leveldb.util.Slice v;
int v, v;
org.iq.leveldb.table.BlockBuilder v;
org.iq.leveldb.util.DynamicSliceOutput v, v, v, v;
boolean v;
v := @this: org.iq.leveldb.table.BlockBuilder;
v = v.<org.iq.leveldb.table.BlockBuilder: boolean finished>;
if v != 0 goto label;
v.<org.iq.leveldb.table.BlockBuilder: boolean finished> = 1;
v = v.<org.iq.leveldb.table.BlockBuilder: int entryCount>;
if v <= 0 goto label;
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.IntVector restartPositions>;
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.DynamicSliceOutput block>;
virtualinvoke v.<org.iq.leveldb.util.IntVector: void write(org.iq.leveldb.util.SliceOutput)>(v);
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.DynamicSliceOutput block>;
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.IntVector restartPositions>;
v = virtualinvoke v.<org.iq.leveldb.util.IntVector: int size()>();
virtualinvoke v.<org.iq.leveldb.util.DynamicSliceOutput: void writeInt(int)>(v);
goto label;
label:
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.DynamicSliceOutput block>;
virtualinvoke v.<org.iq.leveldb.util.DynamicSliceOutput: void writeInt(int)>(0);
label:
v = v.<org.iq.leveldb.table.BlockBuilder: org.iq.leveldb.util.DynamicSliceOutput block>;
v = virtualinvoke v.<org.iq.leveldb.util.DynamicSliceOutput: org.iq.leveldb.util.Slice slice()>();
return v;
}
}