package okio; /* loaded from: classes5.dex */ public final class Segment { public final byte[] data; public int limit; public Segment next; public boolean owner; public int pos; public Segment prev; public boolean shared; public Segment() { this.data = new byte[8192]; this.owner = true; this.shared = false; } public 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; } public final Segment sharedCopy() { this.shared = true; return new Segment(this.data, this.pos, this.limit, true, false); } public final Segment pop() { Segment segment = this.next; Segment segment2 = segment != this ? segment : null; Segment segment3 = this.prev; segment3.next = segment; this.next.prev = segment3; this.next = null; this.prev = null; return segment2; } public final Segment push(Segment segment) { segment.prev = this; segment.next = this.next; this.next.prev = segment; this.next = segment; return segment; } public final 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; } public final 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(segment, i); pop(); SegmentPool.recycle(this); } } public final 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; } }