260 lines
6.5 KiB
Java
260 lines
6.5 KiB
Java
package com.google.zxing.common;
|
|
|
|
import java.util.Arrays;
|
|
|
|
/* loaded from: classes.dex */
|
|
public final class BitArray implements Cloneable {
|
|
private int[] a;
|
|
private int b;
|
|
|
|
public BitArray() {
|
|
this.b = 0;
|
|
this.a = new int[1];
|
|
}
|
|
|
|
private void e(int i) {
|
|
if (i > (this.a.length << 5)) {
|
|
int[] f = f(i);
|
|
int[] iArr = this.a;
|
|
System.arraycopy(iArr, 0, f, 0, iArr.length);
|
|
this.a = f;
|
|
}
|
|
}
|
|
|
|
private static int[] f(int i) {
|
|
return new int[(i + 31) / 32];
|
|
}
|
|
|
|
public boolean a(int i) {
|
|
return ((1 << (i & 31)) & this.a[i / 32]) != 0;
|
|
}
|
|
|
|
public int b(int i) {
|
|
int i2 = this.b;
|
|
if (i >= i2) {
|
|
return i2;
|
|
}
|
|
int i3 = i / 32;
|
|
int i4 = (~((1 << (i & 31)) - 1)) & this.a[i3];
|
|
while (i4 == 0) {
|
|
i3++;
|
|
int[] iArr = this.a;
|
|
if (i3 == iArr.length) {
|
|
return this.b;
|
|
}
|
|
i4 = iArr[i3];
|
|
}
|
|
int numberOfTrailingZeros = (i3 << 5) + Integer.numberOfTrailingZeros(i4);
|
|
int i5 = this.b;
|
|
return numberOfTrailingZeros > i5 ? i5 : numberOfTrailingZeros;
|
|
}
|
|
|
|
public int c(int i) {
|
|
int i2 = this.b;
|
|
if (i >= i2) {
|
|
return i2;
|
|
}
|
|
int i3 = i / 32;
|
|
int i4 = (~((1 << (i & 31)) - 1)) & (~this.a[i3]);
|
|
while (i4 == 0) {
|
|
i3++;
|
|
int[] iArr = this.a;
|
|
if (i3 == iArr.length) {
|
|
return this.b;
|
|
}
|
|
i4 = ~iArr[i3];
|
|
}
|
|
int numberOfTrailingZeros = (i3 << 5) + Integer.numberOfTrailingZeros(i4);
|
|
int i5 = this.b;
|
|
return numberOfTrailingZeros > i5 ? i5 : numberOfTrailingZeros;
|
|
}
|
|
|
|
public void d(int i) {
|
|
int[] iArr = this.a;
|
|
int i2 = i / 32;
|
|
iArr[i2] = (1 << (i & 31)) | iArr[i2];
|
|
}
|
|
|
|
public boolean equals(Object obj) {
|
|
if (!(obj instanceof BitArray)) {
|
|
return false;
|
|
}
|
|
BitArray bitArray = (BitArray) obj;
|
|
return this.b == bitArray.b && Arrays.equals(this.a, bitArray.a);
|
|
}
|
|
|
|
public int h() {
|
|
return this.b;
|
|
}
|
|
|
|
public int hashCode() {
|
|
return (this.b * 31) + Arrays.hashCode(this.a);
|
|
}
|
|
|
|
public int i() {
|
|
return (this.b + 7) / 8;
|
|
}
|
|
|
|
public void j() {
|
|
int[] iArr = new int[this.a.length];
|
|
int i = (this.b - 1) / 32;
|
|
int i2 = i + 1;
|
|
for (int i3 = 0; i3 < i2; i3++) {
|
|
long j = this.a[i3];
|
|
long j2 = ((j & 1431655765) << 1) | ((j >> 1) & 1431655765);
|
|
long j3 = ((j2 & 858993459) << 2) | ((j2 >> 2) & 858993459);
|
|
long j4 = ((j3 & 252645135) << 4) | ((j3 >> 4) & 252645135);
|
|
long j5 = ((j4 & 16711935) << 8) | ((j4 >> 8) & 16711935);
|
|
iArr[i - i3] = (int) (((j5 & 65535) << 16) | ((j5 >> 16) & 65535));
|
|
}
|
|
int i4 = this.b;
|
|
int i5 = i2 << 5;
|
|
if (i4 != i5) {
|
|
int i6 = i5 - i4;
|
|
int i7 = iArr[0] >>> i6;
|
|
for (int i8 = 1; i8 < i2; i8++) {
|
|
int i9 = iArr[i8];
|
|
iArr[i8 - 1] = i7 | (i9 << (32 - i6));
|
|
i7 = i9 >>> i6;
|
|
}
|
|
iArr[i2 - 1] = i7;
|
|
}
|
|
this.a = iArr;
|
|
}
|
|
|
|
public String toString() {
|
|
int i = this.b;
|
|
StringBuilder sb = new StringBuilder(i + (i / 8) + 1);
|
|
for (int i2 = 0; i2 < this.b; i2++) {
|
|
if ((i2 & 7) == 0) {
|
|
sb.append(' ');
|
|
}
|
|
sb.append(a(i2) ? 'X' : '.');
|
|
}
|
|
return sb.toString();
|
|
}
|
|
|
|
public void a() {
|
|
int length = this.a.length;
|
|
for (int i = 0; i < length; i++) {
|
|
this.a[i] = 0;
|
|
}
|
|
}
|
|
|
|
/* renamed from: clone, reason: merged with bridge method [inline-methods] */
|
|
public BitArray m14clone() {
|
|
return new BitArray((int[]) this.a.clone(), this.b);
|
|
}
|
|
|
|
public BitArray(int i) {
|
|
this.b = i;
|
|
this.a = f(i);
|
|
}
|
|
|
|
public boolean a(int i, int i2, boolean z) {
|
|
if (i2 < i || i < 0 || i2 > this.b) {
|
|
throw new IllegalArgumentException();
|
|
}
|
|
if (i2 == i) {
|
|
return true;
|
|
}
|
|
int i3 = i2 - 1;
|
|
int i4 = i / 32;
|
|
int i5 = i3 / 32;
|
|
int i6 = i4;
|
|
while (i6 <= i5) {
|
|
int i7 = (2 << (i6 >= i5 ? 31 & i3 : 31)) - (1 << (i6 > i4 ? 0 : i & 31));
|
|
int i8 = this.a[i6] & i7;
|
|
if (!z) {
|
|
i7 = 0;
|
|
}
|
|
if (i8 != i7) {
|
|
return false;
|
|
}
|
|
i6++;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
BitArray(int[] iArr, int i) {
|
|
this.a = iArr;
|
|
this.b = i;
|
|
}
|
|
|
|
public void a(boolean z) {
|
|
e(this.b + 1);
|
|
if (z) {
|
|
int[] iArr = this.a;
|
|
int i = this.b;
|
|
int i2 = i / 32;
|
|
iArr[i2] = (1 << (i & 31)) | iArr[i2];
|
|
}
|
|
this.b++;
|
|
}
|
|
|
|
public void b(int i, int i2) {
|
|
this.a[i / 32] = i2;
|
|
}
|
|
|
|
public void b(BitArray bitArray) {
|
|
if (this.b != bitArray.b) {
|
|
throw new IllegalArgumentException("Sizes don't match");
|
|
}
|
|
int i = 0;
|
|
while (true) {
|
|
int[] iArr = this.a;
|
|
if (i >= iArr.length) {
|
|
return;
|
|
}
|
|
iArr[i] = iArr[i] ^ bitArray.a[i];
|
|
i++;
|
|
}
|
|
}
|
|
|
|
public void a(int i, int i2) {
|
|
if (i2 >= 0 && i2 <= 32) {
|
|
e(this.b + i2);
|
|
while (i2 > 0) {
|
|
boolean z = true;
|
|
if (((i >> (i2 - 1)) & 1) != 1) {
|
|
z = false;
|
|
}
|
|
a(z);
|
|
i2--;
|
|
}
|
|
return;
|
|
}
|
|
throw new IllegalArgumentException("Num bits must be between 0 and 32");
|
|
}
|
|
|
|
public int[] b() {
|
|
return this.a;
|
|
}
|
|
|
|
public void a(BitArray bitArray) {
|
|
int i = bitArray.b;
|
|
e(this.b + i);
|
|
for (int i2 = 0; i2 < i; i2++) {
|
|
a(bitArray.a(i2));
|
|
}
|
|
}
|
|
|
|
public void a(int i, byte[] bArr, int i2, int i3) {
|
|
int i4 = i;
|
|
int i5 = 0;
|
|
while (i5 < i3) {
|
|
int i6 = i4;
|
|
int i7 = 0;
|
|
for (int i8 = 0; i8 < 8; i8++) {
|
|
if (a(i6)) {
|
|
i7 |= 1 << (7 - i8);
|
|
}
|
|
i6++;
|
|
}
|
|
bArr[i2 + i5] = (byte) i7;
|
|
i5++;
|
|
i4 = i6;
|
|
}
|
|
}
|
|
}
|