what-the-bank/sources/org/jmrtd/io/FragmentBuffer.java

299 lines
9.1 KiB
Java
Raw Normal View History

2024-07-27 18:17:47 +07:00
package org.jmrtd.io;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
/* loaded from: classes6.dex */
public class FragmentBuffer implements Serializable {
private static final long serialVersionUID = -3510872461790499721L;
private byte[] buffer;
private Collection<Fragment> fragments;
public FragmentBuffer() {
this(1024);
}
public FragmentBuffer(int i) {
this.buffer = new byte[i];
this.fragments = new HashSet();
}
public void updateFrom(FragmentBuffer fragmentBuffer) {
synchronized (this) {
for (Fragment fragment : fragmentBuffer.fragments) {
addFragment(fragment.offset, fragmentBuffer.buffer, fragment.offset, fragment.length);
}
}
}
public void addFragment(int i, byte b) {
synchronized (this) {
addFragment(i, new byte[]{b});
}
}
public void addFragment(int i, byte[] bArr) {
synchronized (this) {
addFragment(i, bArr, 0, bArr.length);
}
}
public void addFragment(int i, byte[] bArr, int i2, int i3) {
synchronized (this) {
int i4 = i + i3;
byte[] bArr2 = this.buffer;
if (i4 > bArr2.length) {
setLength(Math.max(i4, bArr2.length) << 1);
}
System.arraycopy(bArr, i2, this.buffer, i, i3);
for (Fragment fragment : new ArrayList(this.fragments)) {
if (fragment.getOffset() <= i && i + i3 <= fragment.getOffset() + fragment.getLength()) {
return;
}
if (fragment.getOffset() <= i && i <= fragment.getOffset() + fragment.getLength()) {
int offset = fragment.getOffset();
int offset2 = fragment.getOffset();
this.fragments.remove(fragment);
i3 = (i + i3) - offset;
i = offset2;
} else if (i <= fragment.getOffset() && fragment.getOffset() + fragment.getLength() <= i + i3) {
this.fragments.remove(fragment);
} else if (i <= fragment.getOffset() && fragment.getOffset() <= i + i3) {
i3 = (fragment.getOffset() + fragment.getLength()) - i;
this.fragments.remove(fragment);
}
}
this.fragments.add(Fragment.getInstance(i, i3));
}
}
public int getPosition() {
int i;
synchronized (this) {
i = 0;
for (int i2 = 0; i2 < this.buffer.length; i2++) {
if (isCoveredByFragment(i2)) {
i = i2 + 1;
}
}
}
return i;
}
public int getBytesBuffered() {
int i;
synchronized (this) {
i = 0;
for (int i2 = 0; i2 < this.buffer.length; i2++) {
if (isCoveredByFragment(i2)) {
i++;
}
}
}
return i;
}
public boolean isCoveredByFragment(int i) {
boolean isCoveredByFragment;
synchronized (this) {
isCoveredByFragment = isCoveredByFragment(i, 1);
}
return isCoveredByFragment;
}
public boolean isCoveredByFragment(int i, int i2) {
synchronized (this) {
for (Fragment fragment : this.fragments) {
int offset = fragment.getOffset();
int offset2 = fragment.getOffset();
int length = fragment.getLength();
if (offset <= i && i + i2 <= offset2 + length) {
return true;
}
}
return false;
}
}
public int getBufferedLength(int i) {
int i2;
synchronized (this) {
int i3 = 0;
if (i >= this.buffer.length) {
return 0;
}
for (Fragment fragment : this.fragments) {
int offset = fragment.getOffset();
int offset2 = fragment.getOffset() + fragment.getLength();
if (offset <= i && i < offset2 && (i2 = offset2 - i) > i3) {
i3 = i2;
}
}
return i3;
}
}
public int getLength() {
return this.buffer.length;
}
public Fragment getSmallestUnbufferedFragment(int i, int i2) {
Fragment fragment;
synchronized (this) {
Iterator<Fragment> it = this.fragments.iterator();
int i3 = i;
while (true) {
if (!it.hasNext()) {
break;
}
Fragment next = it.next();
if (next.getOffset() <= i3 && i3 + i2 <= next.getOffset() + next.getLength()) {
i2 = 0;
break;
}
if (next.getOffset() <= i3 && i3 < next.getOffset() + next.getLength()) {
int offset = next.getOffset() + next.getLength();
i2 = (i3 + i2) - offset;
i3 = offset;
} else if (i3 > next.getOffset() || next.getOffset() + next.getLength() > i3 + i2) {
if (i <= next.getOffset() && next.getOffset() < i3 + i2) {
i2 = next.getOffset() - i3;
}
}
}
fragment = Fragment.getInstance(i3, i2);
}
return fragment;
}
public String toString() {
String obj;
synchronized (this) {
StringBuilder sb = new StringBuilder("FragmentBuffer [");
sb.append(this.buffer.length);
sb.append(", ");
sb.append(this.fragments);
sb.append("]");
obj = sb.toString();
}
return obj;
}
public boolean equals(Object obj) {
synchronized (this) {
boolean z = false;
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (!obj.getClass().equals(FragmentBuffer.class)) {
return false;
}
FragmentBuffer fragmentBuffer = (FragmentBuffer) obj;
byte[] bArr = fragmentBuffer.buffer;
if (bArr == null && this.buffer != null) {
return false;
}
if (bArr != null && this.buffer == null) {
return false;
}
Collection<Fragment> collection = fragmentBuffer.fragments;
if (collection == null && this.fragments != null) {
return false;
}
if (collection != null && this.fragments == null) {
return false;
}
if (Arrays.equals(bArr, this.buffer)) {
if (fragmentBuffer.fragments.equals(this.fragments)) {
z = true;
}
}
return z;
}
}
public int hashCode() {
return (Arrays.hashCode(this.buffer) * 3) + (this.fragments.hashCode() << 1) + 7;
}
private void setLength(int i) {
synchronized (this) {
byte[] bArr = this.buffer;
if (i <= bArr.length) {
return;
}
byte[] bArr2 = new byte[i];
System.arraycopy(bArr, 0, bArr2, 0, bArr.length);
this.buffer = bArr2;
}
}
/* loaded from: classes6.dex */
public static class Fragment implements Serializable {
private static final long serialVersionUID = -3795931618553980328L;
private int length;
private int offset;
private Fragment(int i, int i2) {
this.offset = i;
this.length = i2;
}
public static Fragment getInstance(int i, int i2) {
return new Fragment(i, i2);
}
public String toString() {
StringBuilder sb = new StringBuilder("[");
sb.append(this.offset);
sb.append(" .. ");
sb.append((this.offset + this.length) - 1);
sb.append(" (");
sb.append(this.length);
sb.append(")]");
return sb.toString();
}
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (!obj.getClass().equals(Fragment.class)) {
return false;
}
Fragment fragment = (Fragment) obj;
return fragment.offset == this.offset && fragment.length == this.length;
}
public int hashCode() {
return (this.offset << 1) + (this.length * 3) + 5;
}
public int getOffset() {
return this.offset;
}
public int getLength() {
return this.length;
}
}
public Collection<Fragment> getFragments() {
return this.fragments;
}
public byte[] getBuffer() {
return this.buffer;
}
}