- 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
593 lines
23 KiB
Java
593 lines
23 KiB
Java
package androidx.collection;
|
|
|
|
import kotlin.ULong;
|
|
import kotlin.collections.ArraysKt___ArraysJvmKt;
|
|
import kotlin.jvm.functions.Function0;
|
|
import kotlin.jvm.functions.Function2;
|
|
import kotlin.jvm.internal.DefaultConstructorMarker;
|
|
import kotlin.jvm.internal.Intrinsics;
|
|
import kotlin.jvm.internal.SourceDebugExtension;
|
|
|
|
@SourceDebugExtension({"SMAP\nIntObjectMap.kt\nKotlin\n*S Kotlin\n*F\n+ 1 IntObjectMap.kt\nandroidx/collection/MutableIntObjectMap\n+ 2 fake.kt\nkotlin/jvm/internal/FakeKt\n+ 3 ScatterMap.kt\nandroidx/collection/ScatterMapKt\n+ 4 IntObjectMap.kt\nandroidx/collection/IntObjectMap\n+ 5 IntSet.kt\nandroidx/collection/IntSetKt\n+ 6 IntSet.kt\nandroidx/collection/IntSet\n+ 7 IntList.kt\nandroidx/collection/IntList\n*L\n1#1,1034:1\n820#1,2:1187\n820#1,2:1201\n1024#1,2:1204\n1028#1,5:1212\n1024#1,2:1243\n1028#1,5:1251\n1024#1,2:1268\n1028#1,5:1276\n1024#1,2:1282\n1028#1,5:1290\n1#2:1035\n1672#3,6:1036\n1826#3:1052\n1688#3:1056\n1619#3:1073\n1615#3:1076\n1795#3,3:1081\n1809#3,3:1085\n1733#3:1089\n1721#3:1091\n1715#3:1092\n1728#3:1097\n1818#3:1099\n1619#3:1113\n1615#3:1116\n1795#3,3:1121\n1809#3,3:1125\n1733#3:1129\n1721#3:1131\n1715#3:1132\n1728#3:1137\n1818#3:1139\n1826#3:1154\n1688#3:1158\n1826#3:1179\n1688#3:1183\n1672#3,6:1206\n1672#3,6:1217\n1615#3:1226\n1619#3:1227\n1795#3,3:1228\n1809#3,3:1231\n1733#3:1234\n1721#3:1235\n1715#3:1236\n1728#3:1237\n1818#3:1238\n1682#3:1239\n1661#3:1240\n1680#3:1241\n1661#3:1242\n1672#3,6:1245\n1795#3,3:1256\n1826#3:1259\n1715#3:1260\n1685#3:1261\n1661#3:1262\n1615#3:1266\n1619#3:1267\n1672#3,6:1270\n1661#3:1281\n1672#3,6:1284\n1672#3,6:1295\n1672#3,6:1301\n382#4,4:1042\n354#4,6:1046\n364#4,3:1053\n367#4,2:1057\n387#4,2:1059\n370#4,6:1061\n389#4:1067\n619#4:1068\n620#4:1072\n622#4,2:1074\n624#4,4:1077\n628#4:1084\n629#4:1088\n630#4:1090\n631#4,4:1093\n637#4:1098\n638#4,8:1100\n619#4:1108\n620#4:1112\n622#4,2:1114\n624#4,4:1117\n628#4:1124\n629#4:1128\n630#4:1130\n631#4,4:1133\n637#4:1138\n638#4,8:1140\n354#4,6:1148\n364#4,3:1155\n367#4,9:1159\n849#5,3:1069\n849#5,3:1109\n849#5,3:1223\n849#5,3:1263\n262#6,4:1168\n232#6,7:1172\n243#6,3:1180\n246#6,2:1184\n266#6:1186\n267#6:1189\n249#6,6:1190\n268#6:1196\n253#7,4:1197\n258#7:1203\n*S KotlinDebug\n*F\n+ 1 IntObjectMap.kt\nandroidx/collection/MutableIntObjectMap\n*L\n837#1:1187,2\n846#1:1201,2\n856#1:1204,2\n856#1:1212,5\n920#1:1243,2\n920#1:1251,5\n994#1:1268,2\n994#1:1276,5\n1010#1:1282,2\n1010#1:1290,5\n713#1:1036,6\n766#1:1052\n766#1:1056\n782#1:1073\n782#1:1076\n782#1:1081,3\n782#1:1085,3\n782#1:1089\n782#1:1091\n782#1:1092\n782#1:1097\n782#1:1099\n794#1:1113\n794#1:1116\n794#1:1121,3\n794#1:1125,3\n794#1:1129\n794#1:1131\n794#1:1132\n794#1:1137\n794#1:1139\n808#1:1154\n808#1:1158\n836#1:1179\n836#1:1183\n856#1:1206,6\n871#1:1217,6\n886#1:1226\n887#1:1227\n894#1:1228,3\n895#1:1231,3\n896#1:1234\n897#1:1235\n897#1:1236\n901#1:1237\n904#1:1238\n913#1:1239\n913#1:1240\n919#1:1241\n919#1:1242\n920#1:1245,6\n935#1:1256,3\n936#1:1259\n938#1:1260\n989#1:1261\n989#1:1262\n992#1:1266\n994#1:1267\n994#1:1270,6\n1008#1:1281\n1010#1:1284,6\n1025#1:1295,6\n1031#1:1301,6\n766#1:1042,4\n766#1:1046,6\n766#1:1053,3\n766#1:1057,2\n766#1:1059,2\n766#1:1061,6\n766#1:1067\n782#1:1068\n782#1:1072\n782#1:1074,2\n782#1:1077,4\n782#1:1084\n782#1:1088\n782#1:1090\n782#1:1093,4\n782#1:1098\n782#1:1100,8\n794#1:1108\n794#1:1112\n794#1:1114,2\n794#1:1117,4\n794#1:1124\n794#1:1128\n794#1:1130\n794#1:1133,4\n794#1:1138\n794#1:1140,8\n808#1:1148,6\n808#1:1155,3\n808#1:1159,9\n782#1:1069,3\n794#1:1109,3\n885#1:1223,3\n991#1:1263,3\n836#1:1168,4\n836#1:1172,7\n836#1:1180,3\n836#1:1184,2\n836#1:1186\n836#1:1189\n836#1:1190,6\n836#1:1196\n845#1:1197,4\n845#1:1203\n*E\n"})
|
|
/* loaded from: classes.dex */
|
|
public final class MutableIntObjectMap<V> extends IntObjectMap<V> {
|
|
private int growthLimit;
|
|
|
|
public MutableIntObjectMap() {
|
|
this(0, 1, null);
|
|
}
|
|
|
|
public final void minusAssign(IntList keys) {
|
|
Intrinsics.checkNotNullParameter(keys, "keys");
|
|
int[] iArr = keys.content;
|
|
int i = keys._size;
|
|
for (int i2 = 0; i2 < i; i2++) {
|
|
remove(iArr[i2]);
|
|
}
|
|
}
|
|
|
|
public final void minusAssign(IntSet keys) {
|
|
Intrinsics.checkNotNullParameter(keys, "keys");
|
|
int[] iArr = keys.elements;
|
|
long[] jArr = keys.metadata;
|
|
int length = jArr.length - 2;
|
|
if (length < 0) {
|
|
return;
|
|
}
|
|
int i = 0;
|
|
while (true) {
|
|
long j = jArr[i];
|
|
if ((((~j) << 7) & j & (-9187201950435737472L)) != -9187201950435737472L) {
|
|
int i2 = 8 - ((~(i - length)) >>> 31);
|
|
for (int i3 = 0; i3 < i2; i3++) {
|
|
if ((255 & j) < 128) {
|
|
remove(iArr[(i << 3) + i3]);
|
|
}
|
|
j >>= 8;
|
|
}
|
|
if (i2 != 8) {
|
|
return;
|
|
}
|
|
}
|
|
if (i == length) {
|
|
return;
|
|
} else {
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
|
|
public final void removeIf(Function2 predicate) {
|
|
Intrinsics.checkNotNullParameter(predicate, "predicate");
|
|
long[] jArr = this.metadata;
|
|
int length = jArr.length - 2;
|
|
if (length < 0) {
|
|
return;
|
|
}
|
|
int i = 0;
|
|
while (true) {
|
|
long j = jArr[i];
|
|
if ((((~j) << 7) & j & (-9187201950435737472L)) != -9187201950435737472L) {
|
|
int i2 = 8 - ((~(i - length)) >>> 31);
|
|
for (int i3 = 0; i3 < i2; i3++) {
|
|
if ((255 & j) < 128) {
|
|
int i4 = (i << 3) + i3;
|
|
if (((Boolean) predicate.invoke(Integer.valueOf(this.keys[i4]), this.values[i4])).booleanValue()) {
|
|
removeValueAt(i4);
|
|
}
|
|
}
|
|
j >>= 8;
|
|
}
|
|
if (i2 != 8) {
|
|
return;
|
|
}
|
|
}
|
|
if (i == length) {
|
|
return;
|
|
} else {
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* JADX WARN: Multi-variable type inference failed */
|
|
public final void putAll(IntObjectMap<V> from) {
|
|
Intrinsics.checkNotNullParameter(from, "from");
|
|
int[] iArr = from.keys;
|
|
Object[] objArr = from.values;
|
|
long[] jArr = from.metadata;
|
|
int length = jArr.length - 2;
|
|
if (length < 0) {
|
|
return;
|
|
}
|
|
int i = 0;
|
|
while (true) {
|
|
long j = jArr[i];
|
|
if ((((~j) << 7) & j & (-9187201950435737472L)) != -9187201950435737472L) {
|
|
int i2 = 8 - ((~(i - length)) >>> 31);
|
|
for (int i3 = 0; i3 < i2; i3++) {
|
|
if ((255 & j) < 128) {
|
|
int i4 = (i << 3) + i3;
|
|
set(iArr[i4], objArr[i4]);
|
|
}
|
|
j >>= 8;
|
|
}
|
|
if (i2 != 8) {
|
|
return;
|
|
}
|
|
}
|
|
if (i == length) {
|
|
return;
|
|
} else {
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
|
|
public /* synthetic */ MutableIntObjectMap(int i, int i2, DefaultConstructorMarker defaultConstructorMarker) {
|
|
this((i2 & 1) != 0 ? 6 : i);
|
|
}
|
|
|
|
public MutableIntObjectMap(int i) {
|
|
super(null);
|
|
if (i < 0) {
|
|
throw new IllegalArgumentException("Capacity must be a positive value.".toString());
|
|
}
|
|
initializeStorage(ScatterMapKt.unloadedCapacity(i));
|
|
}
|
|
|
|
private final void initializeStorage(int i) {
|
|
int max = i > 0 ? Math.max(7, ScatterMapKt.normalizeCapacity(i)) : 0;
|
|
this._capacity = max;
|
|
initializeMetadata(max);
|
|
this.keys = new int[max];
|
|
this.values = new Object[max];
|
|
}
|
|
|
|
private final void initializeMetadata(int i) {
|
|
long[] jArr;
|
|
if (i == 0) {
|
|
jArr = ScatterMapKt.EmptyGroup;
|
|
} else {
|
|
jArr = new long[((i + 15) & (-8)) >> 3];
|
|
ArraysKt___ArraysJvmKt.fill$default(jArr, -9187201950435737472L, 0, 0, 6, (Object) null);
|
|
}
|
|
this.metadata = jArr;
|
|
int i2 = i >> 3;
|
|
long j = 255 << ((i & 7) << 3);
|
|
jArr[i2] = (jArr[i2] & (~j)) | j;
|
|
initializeGrowth();
|
|
}
|
|
|
|
private final void initializeGrowth() {
|
|
this.growthLimit = ScatterMapKt.loadedCapacity(getCapacity()) - this._size;
|
|
}
|
|
|
|
public final V getOrPut(int i, Function0 defaultValue) {
|
|
Intrinsics.checkNotNullParameter(defaultValue, "defaultValue");
|
|
V v = get(i);
|
|
if (v != null) {
|
|
return v;
|
|
}
|
|
V v2 = (V) defaultValue.invoke();
|
|
set(i, v2);
|
|
return v2;
|
|
}
|
|
|
|
public final void set(int i, V v) {
|
|
int findAbsoluteInsertIndex = findAbsoluteInsertIndex(i);
|
|
this.keys[findAbsoluteInsertIndex] = i;
|
|
this.values[findAbsoluteInsertIndex] = v;
|
|
}
|
|
|
|
public final V put(int i, V v) {
|
|
int findAbsoluteInsertIndex = findAbsoluteInsertIndex(i);
|
|
Object[] objArr = this.values;
|
|
V v2 = (V) objArr[findAbsoluteInsertIndex];
|
|
this.keys[findAbsoluteInsertIndex] = i;
|
|
objArr[findAbsoluteInsertIndex] = v;
|
|
return v2;
|
|
}
|
|
|
|
public final void plusAssign(IntObjectMap<V> from) {
|
|
Intrinsics.checkNotNullParameter(from, "from");
|
|
putAll(from);
|
|
}
|
|
|
|
public final void minusAssign(int i) {
|
|
remove(i);
|
|
}
|
|
|
|
public final void minusAssign(int[] keys) {
|
|
Intrinsics.checkNotNullParameter(keys, "keys");
|
|
for (int i : keys) {
|
|
remove(i);
|
|
}
|
|
}
|
|
|
|
private final int findAbsoluteInsertIndex(int i) {
|
|
int hashCode = Integer.hashCode(i) * ScatterMapKt.MurmurHashC1;
|
|
int i2 = hashCode ^ (hashCode << 16);
|
|
int i3 = i2 >>> 7;
|
|
int i4 = i2 & 127;
|
|
int i5 = this._capacity;
|
|
int i6 = i3 & i5;
|
|
int i7 = 0;
|
|
while (true) {
|
|
long[] jArr = this.metadata;
|
|
int i8 = i6 >> 3;
|
|
int i9 = (i6 & 7) << 3;
|
|
long j = ((jArr[i8 + 1] << (64 - i9)) & ((-i9) >> 63)) | (jArr[i8] >>> i9);
|
|
long j2 = i4;
|
|
int i10 = i7;
|
|
long j3 = j ^ (j2 * ScatterMapKt.BitmaskLsb);
|
|
for (long j4 = (~j3) & (j3 - ScatterMapKt.BitmaskLsb) & (-9187201950435737472L); j4 != 0; j4 &= j4 - 1) {
|
|
int numberOfTrailingZeros = ((Long.numberOfTrailingZeros(j4) >> 3) + i6) & i5;
|
|
if (this.keys[numberOfTrailingZeros] == i) {
|
|
return numberOfTrailingZeros;
|
|
}
|
|
}
|
|
if ((((~j) << 6) & j & (-9187201950435737472L)) != 0) {
|
|
int findFirstAvailableSlot = findFirstAvailableSlot(i3);
|
|
if (this.growthLimit == 0 && ((this.metadata[findFirstAvailableSlot >> 3] >> ((findFirstAvailableSlot & 7) << 3)) & 255) != 254) {
|
|
adjustStorage();
|
|
findFirstAvailableSlot = findFirstAvailableSlot(i3);
|
|
}
|
|
this._size++;
|
|
int i11 = this.growthLimit;
|
|
long[] jArr2 = this.metadata;
|
|
int i12 = findFirstAvailableSlot >> 3;
|
|
long j5 = jArr2[i12];
|
|
int i13 = (findFirstAvailableSlot & 7) << 3;
|
|
this.growthLimit = i11 - (((j5 >> i13) & 255) == 128 ? 1 : 0);
|
|
jArr2[i12] = ((~(255 << i13)) & j5) | (j2 << i13);
|
|
int i14 = this._capacity;
|
|
int i15 = ((findFirstAvailableSlot - 7) & i14) + (i14 & 7);
|
|
int i16 = i15 >> 3;
|
|
int i17 = (i15 & 7) << 3;
|
|
jArr2[i16] = ((~(255 << i17)) & jArr2[i16]) | (j2 << i17);
|
|
return findFirstAvailableSlot;
|
|
}
|
|
i7 = i10 + 8;
|
|
i6 = (i6 + i7) & i5;
|
|
}
|
|
}
|
|
|
|
/* JADX WARN: Code restructure failed: missing block: B:16:0x0061, code lost:
|
|
|
|
if (((r4 & ((~r4) << 6)) & (-9187201950435737472L)) == 0) goto L18;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:19:0x0063, code lost:
|
|
|
|
r10 = -1;
|
|
*/
|
|
/*
|
|
Code decompiled incorrectly, please refer to instructions dump.
|
|
To view partially-correct add '--show-bad-code' argument
|
|
*/
|
|
public final V remove(int r14) {
|
|
/*
|
|
r13 = this;
|
|
int r0 = java.lang.Integer.hashCode(r14)
|
|
r1 = -862048943(0xffffffffcc9e2d51, float:-8.293031E7)
|
|
int r0 = r0 * r1
|
|
int r1 = r0 << 16
|
|
r0 = r0 ^ r1
|
|
r1 = r0 & 127(0x7f, float:1.78E-43)
|
|
int r2 = r13._capacity
|
|
int r0 = r0 >>> 7
|
|
r0 = r0 & r2
|
|
r3 = 0
|
|
L13:
|
|
long[] r4 = r13.metadata
|
|
int r5 = r0 >> 3
|
|
r6 = r0 & 7
|
|
int r6 = r6 << 3
|
|
r7 = r4[r5]
|
|
long r7 = r7 >>> r6
|
|
int r5 = r5 + 1
|
|
r9 = r4[r5]
|
|
int r4 = 64 - r6
|
|
long r4 = r9 << r4
|
|
long r9 = (long) r6
|
|
long r9 = -r9
|
|
r6 = 63
|
|
long r9 = r9 >> r6
|
|
long r4 = r4 & r9
|
|
long r4 = r4 | r7
|
|
long r6 = (long) r1
|
|
r8 = 72340172838076673(0x101010101010101, double:7.748604185489348E-304)
|
|
long r6 = r6 * r8
|
|
long r6 = r6 ^ r4
|
|
long r8 = r6 - r8
|
|
long r6 = ~r6
|
|
long r6 = r6 & r8
|
|
r8 = -9187201950435737472(0x8080808080808080, double:-2.937446524422997E-306)
|
|
long r6 = r6 & r8
|
|
L3f:
|
|
r10 = 0
|
|
int r12 = (r6 > r10 ? 1 : (r6 == r10 ? 0 : -1))
|
|
if (r12 == 0) goto L5a
|
|
int r10 = java.lang.Long.numberOfTrailingZeros(r6)
|
|
int r10 = r10 >> 3
|
|
int r10 = r10 + r0
|
|
r10 = r10 & r2
|
|
int[] r11 = r13.keys
|
|
r11 = r11[r10]
|
|
if (r11 != r14) goto L54
|
|
goto L64
|
|
L54:
|
|
r10 = 1
|
|
long r10 = r6 - r10
|
|
long r6 = r6 & r10
|
|
goto L3f
|
|
L5a:
|
|
long r6 = ~r4
|
|
r12 = 6
|
|
long r6 = r6 << r12
|
|
long r4 = r4 & r6
|
|
long r4 = r4 & r8
|
|
int r4 = (r4 > r10 ? 1 : (r4 == r10 ? 0 : -1))
|
|
if (r4 == 0) goto L6d
|
|
r10 = -1
|
|
L64:
|
|
if (r10 < 0) goto L6b
|
|
java.lang.Object r14 = r13.removeValueAt(r10)
|
|
return r14
|
|
L6b:
|
|
r14 = 0
|
|
return r14
|
|
L6d:
|
|
int r3 = r3 + 8
|
|
int r0 = r0 + r3
|
|
r0 = r0 & r2
|
|
goto L13
|
|
*/
|
|
throw new UnsupportedOperationException("Method not decompiled: androidx.collection.MutableIntObjectMap.remove(int):java.lang.Object");
|
|
}
|
|
|
|
/* JADX WARN: Code restructure failed: missing block: B:18:0x0067, code lost:
|
|
|
|
if (((r6 & ((~r6) << 6)) & (-9187201950435737472L)) == 0) goto L19;
|
|
*/
|
|
/* JADX WARN: Code restructure failed: missing block: B:21:0x0069, code lost:
|
|
|
|
r10 = -1;
|
|
*/
|
|
/*
|
|
Code decompiled incorrectly, please refer to instructions dump.
|
|
To view partially-correct add '--show-bad-code' argument
|
|
*/
|
|
public final boolean remove(int r19, V r20) {
|
|
/*
|
|
r18 = this;
|
|
r0 = r18
|
|
int r1 = java.lang.Integer.hashCode(r19)
|
|
r2 = -862048943(0xffffffffcc9e2d51, float:-8.293031E7)
|
|
int r1 = r1 * r2
|
|
int r2 = r1 << 16
|
|
r1 = r1 ^ r2
|
|
r2 = r1 & 127(0x7f, float:1.78E-43)
|
|
int r3 = r0._capacity
|
|
int r1 = r1 >>> 7
|
|
r1 = r1 & r3
|
|
r4 = 0
|
|
r5 = r4
|
|
L16:
|
|
long[] r6 = r0.metadata
|
|
int r7 = r1 >> 3
|
|
r8 = r1 & 7
|
|
int r8 = r8 << 3
|
|
r9 = r6[r7]
|
|
long r9 = r9 >>> r8
|
|
r11 = 1
|
|
int r7 = r7 + r11
|
|
r12 = r6[r7]
|
|
int r6 = 64 - r8
|
|
long r6 = r12 << r6
|
|
long r12 = (long) r8
|
|
long r12 = -r12
|
|
r8 = 63
|
|
long r12 = r12 >> r8
|
|
long r6 = r6 & r12
|
|
long r6 = r6 | r9
|
|
long r8 = (long) r2
|
|
r12 = 72340172838076673(0x101010101010101, double:7.748604185489348E-304)
|
|
long r8 = r8 * r12
|
|
long r8 = r8 ^ r6
|
|
long r12 = r8 - r12
|
|
long r8 = ~r8
|
|
long r8 = r8 & r12
|
|
r12 = -9187201950435737472(0x8080808080808080, double:-2.937446524422997E-306)
|
|
long r8 = r8 & r12
|
|
L42:
|
|
r14 = 0
|
|
int r10 = (r8 > r14 ? 1 : (r8 == r14 ? 0 : -1))
|
|
if (r10 == 0) goto L60
|
|
int r10 = java.lang.Long.numberOfTrailingZeros(r8)
|
|
int r10 = r10 >> 3
|
|
int r10 = r10 + r1
|
|
r10 = r10 & r3
|
|
int[] r14 = r0.keys
|
|
r14 = r14[r10]
|
|
r15 = r19
|
|
if (r14 != r15) goto L59
|
|
goto L6a
|
|
L59:
|
|
r16 = 1
|
|
long r16 = r8 - r16
|
|
long r8 = r8 & r16
|
|
goto L42
|
|
L60:
|
|
long r8 = ~r6
|
|
r10 = 6
|
|
long r8 = r8 << r10
|
|
long r6 = r6 & r8
|
|
long r6 = r6 & r12
|
|
int r6 = (r6 > r14 ? 1 : (r6 == r14 ? 0 : -1))
|
|
if (r6 == 0) goto L7d
|
|
r10 = -1
|
|
L6a:
|
|
if (r10 < 0) goto L7c
|
|
java.lang.Object[] r1 = r0.values
|
|
r1 = r1[r10]
|
|
r6 = r20
|
|
boolean r1 = kotlin.jvm.internal.Intrinsics.areEqual(r1, r6)
|
|
if (r1 == 0) goto L7c
|
|
r0.removeValueAt(r10)
|
|
return r11
|
|
L7c:
|
|
return r4
|
|
L7d:
|
|
r6 = r20
|
|
int r5 = r5 + 8
|
|
int r1 = r1 + r5
|
|
r1 = r1 & r3
|
|
goto L16
|
|
*/
|
|
throw new UnsupportedOperationException("Method not decompiled: androidx.collection.MutableIntObjectMap.remove(int, java.lang.Object):boolean");
|
|
}
|
|
|
|
public final void clear() {
|
|
this._size = 0;
|
|
long[] jArr = this.metadata;
|
|
if (jArr != ScatterMapKt.EmptyGroup) {
|
|
ArraysKt___ArraysJvmKt.fill$default(jArr, -9187201950435737472L, 0, 0, 6, (Object) null);
|
|
long[] jArr2 = this.metadata;
|
|
int i = this._capacity;
|
|
int i2 = i >> 3;
|
|
long j = 255 << ((i & 7) << 3);
|
|
jArr2[i2] = (jArr2[i2] & (~j)) | j;
|
|
}
|
|
ArraysKt___ArraysJvmKt.fill(this.values, (Object) null, 0, this._capacity);
|
|
initializeGrowth();
|
|
}
|
|
|
|
public final int trim() {
|
|
int i = this._capacity;
|
|
int normalizeCapacity = ScatterMapKt.normalizeCapacity(ScatterMapKt.unloadedCapacity(this._size));
|
|
if (normalizeCapacity >= i) {
|
|
return 0;
|
|
}
|
|
resizeStorage(normalizeCapacity);
|
|
return i - this._capacity;
|
|
}
|
|
|
|
private final void adjustStorage() {
|
|
if (this._capacity > 8 && Long.compareUnsigned(ULong.m4068constructorimpl(ULong.m4068constructorimpl(this._size) * 32), ULong.m4068constructorimpl(ULong.m4068constructorimpl(this._capacity) * 25)) <= 0) {
|
|
removeDeletedMarkers();
|
|
} else {
|
|
resizeStorage(ScatterMapKt.nextCapacity(this._capacity));
|
|
}
|
|
}
|
|
|
|
private final void resizeStorage(int i) {
|
|
long[] jArr;
|
|
int[] iArr;
|
|
long[] jArr2 = this.metadata;
|
|
int[] iArr2 = this.keys;
|
|
Object[] objArr = this.values;
|
|
int i2 = this._capacity;
|
|
initializeStorage(i);
|
|
int[] iArr3 = this.keys;
|
|
Object[] objArr2 = this.values;
|
|
int i3 = 0;
|
|
while (i3 < i2) {
|
|
if (((jArr2[i3 >> 3] >> ((i3 & 7) << 3)) & 255) < 128) {
|
|
int i4 = iArr2[i3];
|
|
int hashCode = Integer.hashCode(i4) * ScatterMapKt.MurmurHashC1;
|
|
int i5 = hashCode ^ (hashCode << 16);
|
|
int findFirstAvailableSlot = findFirstAvailableSlot(i5 >>> 7);
|
|
long j = i5 & 127;
|
|
long[] jArr3 = this.metadata;
|
|
int i6 = findFirstAvailableSlot >> 3;
|
|
int i7 = (findFirstAvailableSlot & 7) << 3;
|
|
jArr = jArr2;
|
|
iArr = iArr2;
|
|
jArr3[i6] = (jArr3[i6] & (~(255 << i7))) | (j << i7);
|
|
int i8 = this._capacity;
|
|
int i9 = ((findFirstAvailableSlot - 7) & i8) + (i8 & 7);
|
|
int i10 = i9 >> 3;
|
|
int i11 = (i9 & 7) << 3;
|
|
jArr3[i10] = ((~(255 << i11)) & jArr3[i10]) | (j << i11);
|
|
iArr3[findFirstAvailableSlot] = i4;
|
|
objArr2[findFirstAvailableSlot] = objArr[i3];
|
|
} else {
|
|
jArr = jArr2;
|
|
iArr = iArr2;
|
|
}
|
|
i3++;
|
|
jArr2 = jArr;
|
|
iArr2 = iArr;
|
|
}
|
|
}
|
|
|
|
private final void removeDeletedMarkers() {
|
|
long[] jArr = this.metadata;
|
|
int i = this._capacity;
|
|
int i2 = 0;
|
|
for (int i3 = 0; i3 < i; i3++) {
|
|
int i4 = i3 >> 3;
|
|
int i5 = (i3 & 7) << 3;
|
|
if (((jArr[i4] >> i5) & 255) == 254) {
|
|
long[] jArr2 = this.metadata;
|
|
jArr2[i4] = (128 << i5) | (jArr2[i4] & (~(255 << i5)));
|
|
int i6 = this._capacity;
|
|
int i7 = ((i3 - 7) & i6) + (i6 & 7);
|
|
int i8 = i7 >> 3;
|
|
int i9 = (i7 & 7) << 3;
|
|
jArr2[i8] = ((~(255 << i9)) & jArr2[i8]) | (128 << i9);
|
|
i2++;
|
|
}
|
|
}
|
|
this.growthLimit += i2;
|
|
}
|
|
|
|
private final void writeMetadata(int i, long j) {
|
|
long[] jArr = this.metadata;
|
|
int i2 = i >> 3;
|
|
int i3 = (i & 7) << 3;
|
|
jArr[i2] = (jArr[i2] & (~(255 << i3))) | (j << i3);
|
|
int i4 = this._capacity;
|
|
int i5 = ((i - 7) & i4) + (i4 & 7);
|
|
int i6 = i5 >> 3;
|
|
int i7 = (i5 & 7) << 3;
|
|
jArr[i6] = (j << i7) | (jArr[i6] & (~(255 << i7)));
|
|
}
|
|
|
|
public final V removeValueAt(int i) {
|
|
this._size--;
|
|
long[] jArr = this.metadata;
|
|
int i2 = i >> 3;
|
|
int i3 = (i & 7) << 3;
|
|
jArr[i2] = (jArr[i2] & (~(255 << i3))) | (254 << i3);
|
|
int i4 = this._capacity;
|
|
int i5 = ((i - 7) & i4) + (i4 & 7);
|
|
int i6 = i5 >> 3;
|
|
int i7 = (i5 & 7) << 3;
|
|
jArr[i6] = (jArr[i6] & (~(255 << i7))) | (254 << i7);
|
|
Object[] objArr = this.values;
|
|
V v = (V) objArr[i];
|
|
objArr[i] = null;
|
|
return v;
|
|
}
|
|
|
|
private final int findFirstAvailableSlot(int i) {
|
|
int i2 = this._capacity;
|
|
int i3 = i & i2;
|
|
int i4 = 0;
|
|
while (true) {
|
|
long[] jArr = this.metadata;
|
|
int i5 = i3 >> 3;
|
|
int i6 = (i3 & 7) << 3;
|
|
long j = ((jArr[i5 + 1] << (64 - i6)) & ((-i6) >> 63)) | (jArr[i5] >>> i6);
|
|
long j2 = j & ((~j) << 7) & (-9187201950435737472L);
|
|
if (j2 != 0) {
|
|
return (i3 + (Long.numberOfTrailingZeros(j2) >> 3)) & i2;
|
|
}
|
|
i4 += 8;
|
|
i3 = (i3 + i4) & i2;
|
|
}
|
|
}
|
|
}
|