- Added realracing3-community.apk (71.57 MB) - Removed 32-bit support (armeabi-v7a) - Only includes arm64-v8a libraries - Decompiled source code included - Added README-community.md with analysis
606 lines
22 KiB
Java
606 lines
22 KiB
Java
package androidx.datastore.preferences.protobuf;
|
|
|
|
import androidx.datastore.preferences.protobuf.ByteString;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.io.InvalidObjectException;
|
|
import java.io.ObjectInputStream;
|
|
import java.io.OutputStream;
|
|
import java.nio.ByteBuffer;
|
|
import java.nio.charset.Charset;
|
|
import java.util.ArrayDeque;
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
import java.util.NoSuchElementException;
|
|
|
|
/* loaded from: classes.dex */
|
|
final class RopeByteString extends ByteString {
|
|
static final int[] minLengthByDepth = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903, Integer.MAX_VALUE};
|
|
private static final long serialVersionUID = 1;
|
|
private final ByteString left;
|
|
private final int leftLength;
|
|
private final ByteString right;
|
|
private final int totalLength;
|
|
private final int treeDepth;
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public int getTreeDepth() {
|
|
return this.treeDepth;
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public int size() {
|
|
return this.totalLength;
|
|
}
|
|
|
|
private RopeByteString(ByteString byteString, ByteString byteString2) {
|
|
this.left = byteString;
|
|
this.right = byteString2;
|
|
int size = byteString.size();
|
|
this.leftLength = size;
|
|
this.totalLength = size + byteString2.size();
|
|
this.treeDepth = Math.max(byteString.getTreeDepth(), byteString2.getTreeDepth()) + 1;
|
|
}
|
|
|
|
public static ByteString concatenate(ByteString byteString, ByteString byteString2) {
|
|
if (byteString2.size() == 0) {
|
|
return byteString;
|
|
}
|
|
if (byteString.size() == 0) {
|
|
return byteString2;
|
|
}
|
|
int size = byteString.size() + byteString2.size();
|
|
if (size < 128) {
|
|
return concatenateBytes(byteString, byteString2);
|
|
}
|
|
if (byteString instanceof RopeByteString) {
|
|
RopeByteString ropeByteString = (RopeByteString) byteString;
|
|
if (ropeByteString.right.size() + byteString2.size() < 128) {
|
|
return new RopeByteString(ropeByteString.left, concatenateBytes(ropeByteString.right, byteString2));
|
|
}
|
|
if (ropeByteString.left.getTreeDepth() > ropeByteString.right.getTreeDepth() && ropeByteString.getTreeDepth() > byteString2.getTreeDepth()) {
|
|
return new RopeByteString(ropeByteString.left, new RopeByteString(ropeByteString.right, byteString2));
|
|
}
|
|
}
|
|
if (size >= minLengthByDepth[Math.max(byteString.getTreeDepth(), byteString2.getTreeDepth()) + 1]) {
|
|
return new RopeByteString(byteString, byteString2);
|
|
}
|
|
return new Balancer().balance(byteString, byteString2);
|
|
}
|
|
|
|
private static ByteString concatenateBytes(ByteString byteString, ByteString byteString2) {
|
|
int size = byteString.size();
|
|
int size2 = byteString2.size();
|
|
byte[] bArr = new byte[size + size2];
|
|
byteString.copyTo(bArr, 0, 0, size);
|
|
byteString2.copyTo(bArr, 0, size, size2);
|
|
return ByteString.wrap(bArr);
|
|
}
|
|
|
|
public static RopeByteString newInstanceForTest(ByteString byteString, ByteString byteString2) {
|
|
return new RopeByteString(byteString, byteString2);
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public byte byteAt(int i) {
|
|
ByteString.checkIndex(i, this.totalLength);
|
|
return internalByteAt(i);
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public byte internalByteAt(int i) {
|
|
int i2 = this.leftLength;
|
|
if (i < i2) {
|
|
return this.left.internalByteAt(i);
|
|
}
|
|
return this.right.internalByteAt(i - i2);
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString, java.lang.Iterable
|
|
/* renamed from: iterator */
|
|
public Iterator<Byte> iterator2() {
|
|
return new ByteString.AbstractByteIterator() { // from class: androidx.datastore.preferences.protobuf.RopeByteString.1
|
|
ByteString.ByteIterator current = nextPiece();
|
|
final PieceIterator pieces;
|
|
|
|
@Override // java.util.Iterator
|
|
public boolean hasNext() {
|
|
return this.current != null;
|
|
}
|
|
|
|
{
|
|
this.pieces = new PieceIterator(RopeByteString.this);
|
|
}
|
|
|
|
/* JADX WARN: Type inference failed for: r0v5, types: [androidx.datastore.preferences.protobuf.ByteString$ByteIterator] */
|
|
private ByteString.ByteIterator nextPiece() {
|
|
if (this.pieces.hasNext()) {
|
|
return this.pieces.next().iterator2();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString.ByteIterator
|
|
public byte nextByte() {
|
|
ByteString.ByteIterator byteIterator = this.current;
|
|
if (byteIterator == null) {
|
|
throw new NoSuchElementException();
|
|
}
|
|
byte nextByte = byteIterator.nextByte();
|
|
if (!this.current.hasNext()) {
|
|
this.current = nextPiece();
|
|
}
|
|
return nextByte;
|
|
}
|
|
};
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public boolean isBalanced() {
|
|
return this.totalLength >= minLengthByDepth[this.treeDepth];
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public ByteString substring(int i, int i2) {
|
|
int checkRange = ByteString.checkRange(i, i2, this.totalLength);
|
|
if (checkRange == 0) {
|
|
return ByteString.EMPTY;
|
|
}
|
|
if (checkRange == this.totalLength) {
|
|
return this;
|
|
}
|
|
int i3 = this.leftLength;
|
|
if (i2 <= i3) {
|
|
return this.left.substring(i, i2);
|
|
}
|
|
if (i >= i3) {
|
|
return this.right.substring(i - i3, i2 - i3);
|
|
}
|
|
return new RopeByteString(this.left.substring(i), this.right.substring(0, i2 - this.leftLength));
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public void copyToInternal(byte[] bArr, int i, int i2, int i3) {
|
|
int i4 = i + i3;
|
|
int i5 = this.leftLength;
|
|
if (i4 <= i5) {
|
|
this.left.copyToInternal(bArr, i, i2, i3);
|
|
} else {
|
|
if (i >= i5) {
|
|
this.right.copyToInternal(bArr, i - i5, i2, i3);
|
|
return;
|
|
}
|
|
int i6 = i5 - i;
|
|
this.left.copyToInternal(bArr, i, i2, i6);
|
|
this.right.copyToInternal(bArr, 0, i2 + i6, i3 - i6);
|
|
}
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public void copyTo(ByteBuffer byteBuffer) {
|
|
this.left.copyTo(byteBuffer);
|
|
this.right.copyTo(byteBuffer);
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public ByteBuffer asReadOnlyByteBuffer() {
|
|
return ByteBuffer.wrap(toByteArray()).asReadOnlyBuffer();
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public List<ByteBuffer> asReadOnlyByteBufferList() {
|
|
ArrayList arrayList = new ArrayList();
|
|
PieceIterator pieceIterator = new PieceIterator(this);
|
|
while (pieceIterator.hasNext()) {
|
|
arrayList.add(pieceIterator.next().asReadOnlyByteBuffer());
|
|
}
|
|
return arrayList;
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public void writeTo(OutputStream outputStream) throws IOException {
|
|
this.left.writeTo(outputStream);
|
|
this.right.writeTo(outputStream);
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public void writeToInternal(OutputStream outputStream, int i, int i2) throws IOException {
|
|
int i3 = i + i2;
|
|
int i4 = this.leftLength;
|
|
if (i3 <= i4) {
|
|
this.left.writeToInternal(outputStream, i, i2);
|
|
} else {
|
|
if (i >= i4) {
|
|
this.right.writeToInternal(outputStream, i - i4, i2);
|
|
return;
|
|
}
|
|
int i5 = i4 - i;
|
|
this.left.writeToInternal(outputStream, i, i5);
|
|
this.right.writeToInternal(outputStream, 0, i2 - i5);
|
|
}
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public void writeTo(ByteOutput byteOutput) throws IOException {
|
|
this.left.writeTo(byteOutput);
|
|
this.right.writeTo(byteOutput);
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public void writeToReverse(ByteOutput byteOutput) throws IOException {
|
|
this.right.writeToReverse(byteOutput);
|
|
this.left.writeToReverse(byteOutput);
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public String toStringInternal(Charset charset) {
|
|
return new String(toByteArray(), charset);
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public boolean isValidUtf8() {
|
|
int partialIsValidUtf8 = this.left.partialIsValidUtf8(0, 0, this.leftLength);
|
|
ByteString byteString = this.right;
|
|
return byteString.partialIsValidUtf8(partialIsValidUtf8, 0, byteString.size()) == 0;
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public int partialIsValidUtf8(int i, int i2, int i3) {
|
|
int i4 = i2 + i3;
|
|
int i5 = this.leftLength;
|
|
if (i4 <= i5) {
|
|
return this.left.partialIsValidUtf8(i, i2, i3);
|
|
}
|
|
if (i2 >= i5) {
|
|
return this.right.partialIsValidUtf8(i, i2 - i5, i3);
|
|
}
|
|
int i6 = i5 - i2;
|
|
return this.right.partialIsValidUtf8(this.left.partialIsValidUtf8(i, i2, i6), 0, i3 - i6);
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public boolean equals(Object obj) {
|
|
if (obj == this) {
|
|
return true;
|
|
}
|
|
if (!(obj instanceof ByteString)) {
|
|
return false;
|
|
}
|
|
ByteString byteString = (ByteString) obj;
|
|
if (this.totalLength != byteString.size()) {
|
|
return false;
|
|
}
|
|
if (this.totalLength == 0) {
|
|
return true;
|
|
}
|
|
int peekCachedHashCode = peekCachedHashCode();
|
|
int peekCachedHashCode2 = byteString.peekCachedHashCode();
|
|
if (peekCachedHashCode == 0 || peekCachedHashCode2 == 0 || peekCachedHashCode == peekCachedHashCode2) {
|
|
return equalsFragments(byteString);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private boolean equalsFragments(ByteString byteString) {
|
|
boolean equalsRange;
|
|
PieceIterator pieceIterator = new PieceIterator(this);
|
|
ByteString.LeafByteString next = pieceIterator.next();
|
|
PieceIterator pieceIterator2 = new PieceIterator(byteString);
|
|
ByteString.LeafByteString next2 = pieceIterator2.next();
|
|
int i = 0;
|
|
int i2 = 0;
|
|
int i3 = 0;
|
|
while (true) {
|
|
int size = next.size() - i;
|
|
int size2 = next2.size() - i2;
|
|
int min = Math.min(size, size2);
|
|
if (i == 0) {
|
|
equalsRange = next.equalsRange(next2, i2, min);
|
|
} else {
|
|
equalsRange = next2.equalsRange(next, i, min);
|
|
}
|
|
if (!equalsRange) {
|
|
return false;
|
|
}
|
|
i3 += min;
|
|
int i4 = this.totalLength;
|
|
if (i3 >= i4) {
|
|
if (i3 == i4) {
|
|
return true;
|
|
}
|
|
throw new IllegalStateException();
|
|
}
|
|
if (min == size) {
|
|
i = 0;
|
|
next = pieceIterator.next();
|
|
} else {
|
|
i += min;
|
|
next = next;
|
|
}
|
|
if (min == size2) {
|
|
next2 = pieceIterator2.next();
|
|
i2 = 0;
|
|
} else {
|
|
i2 += min;
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public int partialHash(int i, int i2, int i3) {
|
|
int i4 = i2 + i3;
|
|
int i5 = this.leftLength;
|
|
if (i4 <= i5) {
|
|
return this.left.partialHash(i, i2, i3);
|
|
}
|
|
if (i2 >= i5) {
|
|
return this.right.partialHash(i, i2 - i5, i3);
|
|
}
|
|
int i6 = i5 - i2;
|
|
return this.right.partialHash(this.left.partialHash(i, i2, i6), 0, i3 - i6);
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public CodedInputStream newCodedInput() {
|
|
return CodedInputStream.newInstance(new RopeInputStream());
|
|
}
|
|
|
|
@Override // androidx.datastore.preferences.protobuf.ByteString
|
|
public InputStream newInput() {
|
|
return new RopeInputStream();
|
|
}
|
|
|
|
public static class Balancer {
|
|
private final ArrayDeque<ByteString> prefixesStack;
|
|
|
|
private Balancer() {
|
|
this.prefixesStack = new ArrayDeque<>();
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: private */
|
|
public ByteString balance(ByteString byteString, ByteString byteString2) {
|
|
doBalance(byteString);
|
|
doBalance(byteString2);
|
|
ByteString pop = this.prefixesStack.pop();
|
|
while (!this.prefixesStack.isEmpty()) {
|
|
pop = new RopeByteString(this.prefixesStack.pop(), pop);
|
|
}
|
|
return pop;
|
|
}
|
|
|
|
private void doBalance(ByteString byteString) {
|
|
if (byteString.isBalanced()) {
|
|
insert(byteString);
|
|
return;
|
|
}
|
|
if (byteString instanceof RopeByteString) {
|
|
RopeByteString ropeByteString = (RopeByteString) byteString;
|
|
doBalance(ropeByteString.left);
|
|
doBalance(ropeByteString.right);
|
|
} else {
|
|
throw new IllegalArgumentException("Has a new type of ByteString been created? Found " + byteString.getClass());
|
|
}
|
|
}
|
|
|
|
private void insert(ByteString byteString) {
|
|
int depthBinForLength = getDepthBinForLength(byteString.size());
|
|
int[] iArr = RopeByteString.minLengthByDepth;
|
|
int i = iArr[depthBinForLength + 1];
|
|
if (this.prefixesStack.isEmpty() || this.prefixesStack.peek().size() >= i) {
|
|
this.prefixesStack.push(byteString);
|
|
return;
|
|
}
|
|
int i2 = iArr[depthBinForLength];
|
|
ByteString pop = this.prefixesStack.pop();
|
|
while (true) {
|
|
if (this.prefixesStack.isEmpty() || this.prefixesStack.peek().size() >= i2) {
|
|
break;
|
|
} else {
|
|
pop = new RopeByteString(this.prefixesStack.pop(), pop);
|
|
}
|
|
}
|
|
RopeByteString ropeByteString = new RopeByteString(pop, byteString);
|
|
while (!this.prefixesStack.isEmpty()) {
|
|
if (this.prefixesStack.peek().size() >= RopeByteString.minLengthByDepth[getDepthBinForLength(ropeByteString.size()) + 1]) {
|
|
break;
|
|
} else {
|
|
ropeByteString = new RopeByteString(this.prefixesStack.pop(), ropeByteString);
|
|
}
|
|
}
|
|
this.prefixesStack.push(ropeByteString);
|
|
}
|
|
|
|
private int getDepthBinForLength(int i) {
|
|
int binarySearch = Arrays.binarySearch(RopeByteString.minLengthByDepth, i);
|
|
return binarySearch < 0 ? (-(binarySearch + 1)) - 1 : binarySearch;
|
|
}
|
|
}
|
|
|
|
public static final class PieceIterator implements Iterator<ByteString.LeafByteString> {
|
|
private final ArrayDeque<RopeByteString> breadCrumbs;
|
|
private ByteString.LeafByteString next;
|
|
|
|
@Override // java.util.Iterator
|
|
public boolean hasNext() {
|
|
return this.next != null;
|
|
}
|
|
|
|
private PieceIterator(ByteString byteString) {
|
|
if (byteString instanceof RopeByteString) {
|
|
RopeByteString ropeByteString = (RopeByteString) byteString;
|
|
ArrayDeque<RopeByteString> arrayDeque = new ArrayDeque<>(ropeByteString.getTreeDepth());
|
|
this.breadCrumbs = arrayDeque;
|
|
arrayDeque.push(ropeByteString);
|
|
this.next = getLeafByLeft(ropeByteString.left);
|
|
return;
|
|
}
|
|
this.breadCrumbs = null;
|
|
this.next = (ByteString.LeafByteString) byteString;
|
|
}
|
|
|
|
private ByteString.LeafByteString getLeafByLeft(ByteString byteString) {
|
|
while (byteString instanceof RopeByteString) {
|
|
RopeByteString ropeByteString = (RopeByteString) byteString;
|
|
this.breadCrumbs.push(ropeByteString);
|
|
byteString = ropeByteString.left;
|
|
}
|
|
return (ByteString.LeafByteString) byteString;
|
|
}
|
|
|
|
private ByteString.LeafByteString getNextNonEmptyLeaf() {
|
|
ByteString.LeafByteString leafByLeft;
|
|
do {
|
|
ArrayDeque<RopeByteString> arrayDeque = this.breadCrumbs;
|
|
if (arrayDeque == null || arrayDeque.isEmpty()) {
|
|
return null;
|
|
}
|
|
leafByLeft = getLeafByLeft(this.breadCrumbs.pop().right);
|
|
} while (leafByLeft.isEmpty());
|
|
return leafByLeft;
|
|
}
|
|
|
|
/* JADX WARN: Can't rename method to resolve collision */
|
|
@Override // java.util.Iterator
|
|
public ByteString.LeafByteString next() {
|
|
ByteString.LeafByteString leafByteString = this.next;
|
|
if (leafByteString == null) {
|
|
throw new NoSuchElementException();
|
|
}
|
|
this.next = getNextNonEmptyLeaf();
|
|
return leafByteString;
|
|
}
|
|
|
|
@Override // java.util.Iterator
|
|
public void remove() {
|
|
throw new UnsupportedOperationException();
|
|
}
|
|
}
|
|
|
|
public Object writeReplace() {
|
|
return ByteString.wrap(toByteArray());
|
|
}
|
|
|
|
private void readObject(ObjectInputStream objectInputStream) throws IOException {
|
|
throw new InvalidObjectException("RopeByteStream instances are not to be serialized directly");
|
|
}
|
|
|
|
public class RopeInputStream extends InputStream {
|
|
private ByteString.LeafByteString currentPiece;
|
|
private int currentPieceIndex;
|
|
private int currentPieceOffsetInRope;
|
|
private int currentPieceSize;
|
|
private int mark;
|
|
private PieceIterator pieceIterator;
|
|
|
|
@Override // java.io.InputStream
|
|
public void mark(int i) {
|
|
this.mark = this.currentPieceOffsetInRope + this.currentPieceIndex;
|
|
}
|
|
|
|
@Override // java.io.InputStream
|
|
public boolean markSupported() {
|
|
return true;
|
|
}
|
|
|
|
public RopeInputStream() {
|
|
initialize();
|
|
}
|
|
|
|
@Override // java.io.InputStream
|
|
public int read(byte[] bArr, int i, int i2) {
|
|
bArr.getClass();
|
|
if (i < 0 || i2 < 0 || i2 > bArr.length - i) {
|
|
throw new IndexOutOfBoundsException();
|
|
}
|
|
return readSkipInternal(bArr, i, i2);
|
|
}
|
|
|
|
@Override // java.io.InputStream
|
|
public long skip(long j) {
|
|
if (j < 0) {
|
|
throw new IndexOutOfBoundsException();
|
|
}
|
|
if (j > 2147483647L) {
|
|
j = 2147483647L;
|
|
}
|
|
return readSkipInternal(null, 0, (int) j);
|
|
}
|
|
|
|
private int readSkipInternal(byte[] bArr, int i, int i2) {
|
|
int i3 = i2;
|
|
while (true) {
|
|
if (i3 <= 0) {
|
|
break;
|
|
}
|
|
advanceIfCurrentPieceFullyRead();
|
|
if (this.currentPiece != null) {
|
|
int min = Math.min(this.currentPieceSize - this.currentPieceIndex, i3);
|
|
if (bArr != null) {
|
|
this.currentPiece.copyTo(bArr, this.currentPieceIndex, i, min);
|
|
i += min;
|
|
}
|
|
this.currentPieceIndex += min;
|
|
i3 -= min;
|
|
} else if (i3 == i2) {
|
|
return -1;
|
|
}
|
|
}
|
|
return i2 - i3;
|
|
}
|
|
|
|
@Override // java.io.InputStream
|
|
public int read() throws IOException {
|
|
advanceIfCurrentPieceFullyRead();
|
|
ByteString.LeafByteString leafByteString = this.currentPiece;
|
|
if (leafByteString == null) {
|
|
return -1;
|
|
}
|
|
int i = this.currentPieceIndex;
|
|
this.currentPieceIndex = i + 1;
|
|
return leafByteString.byteAt(i) & 255;
|
|
}
|
|
|
|
@Override // java.io.InputStream
|
|
public int available() throws IOException {
|
|
return RopeByteString.this.size() - (this.currentPieceOffsetInRope + this.currentPieceIndex);
|
|
}
|
|
|
|
@Override // java.io.InputStream
|
|
public synchronized void reset() {
|
|
initialize();
|
|
readSkipInternal(null, 0, this.mark);
|
|
}
|
|
|
|
private void initialize() {
|
|
PieceIterator pieceIterator = new PieceIterator(RopeByteString.this);
|
|
this.pieceIterator = pieceIterator;
|
|
ByteString.LeafByteString next = pieceIterator.next();
|
|
this.currentPiece = next;
|
|
this.currentPieceSize = next.size();
|
|
this.currentPieceIndex = 0;
|
|
this.currentPieceOffsetInRope = 0;
|
|
}
|
|
|
|
private void advanceIfCurrentPieceFullyRead() {
|
|
if (this.currentPiece != null) {
|
|
int i = this.currentPieceIndex;
|
|
int i2 = this.currentPieceSize;
|
|
if (i == i2) {
|
|
this.currentPieceOffsetInRope += i2;
|
|
this.currentPieceIndex = 0;
|
|
if (!this.pieceIterator.hasNext()) {
|
|
this.currentPiece = null;
|
|
this.currentPieceSize = 0;
|
|
} else {
|
|
ByteString.LeafByteString next = this.pieceIterator.next();
|
|
this.currentPiece = next;
|
|
this.currentPieceSize = next.size();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|