115 lines
3.0 KiB
Java
115 lines
3.0 KiB
Java
package okio;
|
|
|
|
/* loaded from: classes2.dex */
|
|
final class Segment {
|
|
static final int SHARE_MINIMUM = 1024;
|
|
static final int SIZE = 8192;
|
|
final byte[] data;
|
|
int limit;
|
|
Segment next;
|
|
boolean owner;
|
|
int pos;
|
|
Segment prev;
|
|
boolean shared;
|
|
|
|
Segment() {
|
|
this.data = new byte[8192];
|
|
this.owner = true;
|
|
this.shared = false;
|
|
}
|
|
|
|
public void compact() {
|
|
Segment segment = this.prev;
|
|
if (segment == this) {
|
|
throw new IllegalStateException();
|
|
}
|
|
if (segment.owner) {
|
|
int i = this.limit - this.pos;
|
|
if (i > (8192 - segment.limit) + (segment.shared ? 0 : segment.pos)) {
|
|
return;
|
|
}
|
|
writeTo(this.prev, i);
|
|
pop();
|
|
SegmentPool.recycle(this);
|
|
}
|
|
}
|
|
|
|
public Segment pop() {
|
|
Segment segment = this.next;
|
|
if (segment == this) {
|
|
segment = null;
|
|
}
|
|
Segment segment2 = this.prev;
|
|
segment2.next = this.next;
|
|
this.next.prev = segment2;
|
|
this.next = null;
|
|
this.prev = null;
|
|
return segment;
|
|
}
|
|
|
|
public Segment push(Segment segment) {
|
|
segment.prev = this;
|
|
segment.next = this.next;
|
|
this.next.prev = segment;
|
|
this.next = segment;
|
|
return segment;
|
|
}
|
|
|
|
Segment sharedCopy() {
|
|
this.shared = true;
|
|
return new Segment(this.data, this.pos, this.limit, true, false);
|
|
}
|
|
|
|
public Segment split(int i) {
|
|
Segment take;
|
|
if (i <= 0 || i > this.limit - this.pos) {
|
|
throw new IllegalArgumentException();
|
|
}
|
|
if (i >= 1024) {
|
|
take = sharedCopy();
|
|
} else {
|
|
take = SegmentPool.take();
|
|
System.arraycopy(this.data, this.pos, take.data, 0, i);
|
|
}
|
|
take.limit = take.pos + i;
|
|
this.pos += i;
|
|
this.prev.push(take);
|
|
return take;
|
|
}
|
|
|
|
Segment unsharedCopy() {
|
|
return new Segment((byte[]) this.data.clone(), this.pos, this.limit, false, true);
|
|
}
|
|
|
|
public void writeTo(Segment segment, int i) {
|
|
if (!segment.owner) {
|
|
throw new IllegalArgumentException();
|
|
}
|
|
int i2 = segment.limit;
|
|
if (i2 + i > 8192) {
|
|
if (segment.shared) {
|
|
throw new IllegalArgumentException();
|
|
}
|
|
int i3 = segment.pos;
|
|
if ((i2 + i) - i3 > 8192) {
|
|
throw new IllegalArgumentException();
|
|
}
|
|
byte[] bArr = segment.data;
|
|
System.arraycopy(bArr, i3, bArr, 0, i2 - i3);
|
|
segment.limit -= segment.pos;
|
|
segment.pos = 0;
|
|
}
|
|
System.arraycopy(this.data, this.pos, segment.data, segment.limit, i);
|
|
segment.limit += i;
|
|
this.pos += i;
|
|
}
|
|
|
|
Segment(byte[] bArr, int i, int i2, boolean z, boolean z2) {
|
|
this.data = bArr;
|
|
this.pos = i;
|
|
this.limit = i2;
|
|
this.shared = z;
|
|
this.owner = z2;
|
|
}
|
|
}
|