ADD week 5
This commit is contained in:
241
02-Easy5/E5/sources/androidx/collection/LruCache.java
Normal file
241
02-Easy5/E5/sources/androidx/collection/LruCache.java
Normal file
@@ -0,0 +1,241 @@
|
||||
package androidx.collection;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class LruCache<K, V> {
|
||||
private int createCount;
|
||||
private int evictionCount;
|
||||
private int hitCount;
|
||||
private final LinkedHashMap<K, V> map;
|
||||
private int maxSize;
|
||||
private int missCount;
|
||||
private int putCount;
|
||||
private int size;
|
||||
|
||||
protected V create(K k) {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected void entryRemoved(boolean z, K k, V v, V v2) {
|
||||
}
|
||||
|
||||
protected int sizeOf(K k, V v) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
public LruCache(int i) {
|
||||
if (i <= 0) {
|
||||
throw new IllegalArgumentException("maxSize <= 0");
|
||||
}
|
||||
this.maxSize = i;
|
||||
this.map = new LinkedHashMap<>(0, 0.75f, true);
|
||||
}
|
||||
|
||||
public void resize(int i) {
|
||||
if (i <= 0) {
|
||||
throw new IllegalArgumentException("maxSize <= 0");
|
||||
}
|
||||
synchronized (this) {
|
||||
this.maxSize = i;
|
||||
}
|
||||
trimToSize(i);
|
||||
}
|
||||
|
||||
public final V get(K k) {
|
||||
V v;
|
||||
if (k == null) {
|
||||
throw new NullPointerException("key == null");
|
||||
}
|
||||
synchronized (this) {
|
||||
V v2 = this.map.get(k);
|
||||
if (v2 != null) {
|
||||
this.hitCount++;
|
||||
return v2;
|
||||
}
|
||||
this.missCount++;
|
||||
V create = create(k);
|
||||
if (create == null) {
|
||||
return null;
|
||||
}
|
||||
synchronized (this) {
|
||||
this.createCount++;
|
||||
v = (V) this.map.put(k, create);
|
||||
if (v != null) {
|
||||
this.map.put(k, v);
|
||||
} else {
|
||||
this.size += safeSizeOf(k, create);
|
||||
}
|
||||
}
|
||||
if (v != null) {
|
||||
entryRemoved(false, k, create, v);
|
||||
return v;
|
||||
}
|
||||
trimToSize(this.maxSize);
|
||||
return create;
|
||||
}
|
||||
}
|
||||
|
||||
public final V put(K k, V v) {
|
||||
V put;
|
||||
if (k == null || v == null) {
|
||||
throw new NullPointerException("key == null || value == null");
|
||||
}
|
||||
synchronized (this) {
|
||||
this.putCount++;
|
||||
this.size += safeSizeOf(k, v);
|
||||
put = this.map.put(k, v);
|
||||
if (put != null) {
|
||||
this.size -= safeSizeOf(k, put);
|
||||
}
|
||||
}
|
||||
if (put != null) {
|
||||
entryRemoved(false, k, put, v);
|
||||
}
|
||||
trimToSize(this.maxSize);
|
||||
return put;
|
||||
}
|
||||
|
||||
/* JADX WARN: Code restructure failed: missing block: B:11:0x0070, code lost:
|
||||
|
||||
throw new java.lang.IllegalStateException(getClass().getName() + ".sizeOf() is reporting inconsistent results!");
|
||||
*/
|
||||
/*
|
||||
Code decompiled incorrectly, please refer to instructions dump.
|
||||
To view partially-correct add '--show-bad-code' argument
|
||||
*/
|
||||
public void trimToSize(int r5) {
|
||||
/*
|
||||
r4 = this;
|
||||
L0:
|
||||
monitor-enter(r4)
|
||||
int r0 = r4.size // Catch: java.lang.Throwable -> L71
|
||||
if (r0 < 0) goto L52
|
||||
java.util.LinkedHashMap<K, V> r0 = r4.map // Catch: java.lang.Throwable -> L71
|
||||
boolean r0 = r0.isEmpty() // Catch: java.lang.Throwable -> L71
|
||||
if (r0 == 0) goto L11
|
||||
int r0 = r4.size // Catch: java.lang.Throwable -> L71
|
||||
if (r0 != 0) goto L52
|
||||
L11:
|
||||
int r0 = r4.size // Catch: java.lang.Throwable -> L71
|
||||
if (r0 <= r5) goto L50
|
||||
java.util.LinkedHashMap<K, V> r0 = r4.map // Catch: java.lang.Throwable -> L71
|
||||
boolean r0 = r0.isEmpty() // Catch: java.lang.Throwable -> L71
|
||||
if (r0 == 0) goto L1e
|
||||
goto L50
|
||||
L1e:
|
||||
java.util.LinkedHashMap<K, V> r0 = r4.map // Catch: java.lang.Throwable -> L71
|
||||
java.util.Set r0 = r0.entrySet() // Catch: java.lang.Throwable -> L71
|
||||
java.util.Iterator r0 = r0.iterator() // Catch: java.lang.Throwable -> L71
|
||||
java.lang.Object r0 = r0.next() // Catch: java.lang.Throwable -> L71
|
||||
java.util.Map$Entry r0 = (java.util.Map.Entry) r0 // Catch: java.lang.Throwable -> L71
|
||||
java.lang.Object r1 = r0.getKey() // Catch: java.lang.Throwable -> L71
|
||||
java.lang.Object r0 = r0.getValue() // Catch: java.lang.Throwable -> L71
|
||||
java.util.LinkedHashMap<K, V> r2 = r4.map // Catch: java.lang.Throwable -> L71
|
||||
r2.remove(r1) // Catch: java.lang.Throwable -> L71
|
||||
int r2 = r4.size // Catch: java.lang.Throwable -> L71
|
||||
int r3 = r4.safeSizeOf(r1, r0) // Catch: java.lang.Throwable -> L71
|
||||
int r2 = r2 - r3
|
||||
r4.size = r2 // Catch: java.lang.Throwable -> L71
|
||||
int r2 = r4.evictionCount // Catch: java.lang.Throwable -> L71
|
||||
r3 = 1
|
||||
int r2 = r2 + r3
|
||||
r4.evictionCount = r2 // Catch: java.lang.Throwable -> L71
|
||||
monitor-exit(r4) // Catch: java.lang.Throwable -> L71
|
||||
r2 = 0
|
||||
r4.entryRemoved(r3, r1, r0, r2)
|
||||
goto L0
|
||||
L50:
|
||||
monitor-exit(r4) // Catch: java.lang.Throwable -> L71
|
||||
return
|
||||
L52:
|
||||
java.lang.IllegalStateException r5 = new java.lang.IllegalStateException // Catch: java.lang.Throwable -> L71
|
||||
java.lang.StringBuilder r0 = new java.lang.StringBuilder // Catch: java.lang.Throwable -> L71
|
||||
r0.<init>() // Catch: java.lang.Throwable -> L71
|
||||
java.lang.Class r1 = r4.getClass() // Catch: java.lang.Throwable -> L71
|
||||
java.lang.String r1 = r1.getName() // Catch: java.lang.Throwable -> L71
|
||||
r0.append(r1) // Catch: java.lang.Throwable -> L71
|
||||
java.lang.String r1 = ".sizeOf() is reporting inconsistent results!"
|
||||
r0.append(r1) // Catch: java.lang.Throwable -> L71
|
||||
java.lang.String r0 = r0.toString() // Catch: java.lang.Throwable -> L71
|
||||
r5.<init>(r0) // Catch: java.lang.Throwable -> L71
|
||||
throw r5 // Catch: java.lang.Throwable -> L71
|
||||
L71:
|
||||
r5 = move-exception
|
||||
monitor-exit(r4) // Catch: java.lang.Throwable -> L71
|
||||
throw r5
|
||||
*/
|
||||
throw new UnsupportedOperationException("Method not decompiled: androidx.collection.LruCache.trimToSize(int):void");
|
||||
}
|
||||
|
||||
public final V remove(K k) {
|
||||
V remove;
|
||||
if (k == null) {
|
||||
throw new NullPointerException("key == null");
|
||||
}
|
||||
synchronized (this) {
|
||||
remove = this.map.remove(k);
|
||||
if (remove != null) {
|
||||
this.size -= safeSizeOf(k, remove);
|
||||
}
|
||||
}
|
||||
if (remove != null) {
|
||||
entryRemoved(false, k, remove, null);
|
||||
}
|
||||
return remove;
|
||||
}
|
||||
|
||||
private int safeSizeOf(K k, V v) {
|
||||
int sizeOf = sizeOf(k, v);
|
||||
if (sizeOf >= 0) {
|
||||
return sizeOf;
|
||||
}
|
||||
throw new IllegalStateException("Negative size: " + k + "=" + v);
|
||||
}
|
||||
|
||||
public final void evictAll() {
|
||||
trimToSize(-1);
|
||||
}
|
||||
|
||||
public final synchronized int size() {
|
||||
return this.size;
|
||||
}
|
||||
|
||||
public final synchronized int maxSize() {
|
||||
return this.maxSize;
|
||||
}
|
||||
|
||||
public final synchronized int hitCount() {
|
||||
return this.hitCount;
|
||||
}
|
||||
|
||||
public final synchronized int missCount() {
|
||||
return this.missCount;
|
||||
}
|
||||
|
||||
public final synchronized int createCount() {
|
||||
return this.createCount;
|
||||
}
|
||||
|
||||
public final synchronized int putCount() {
|
||||
return this.putCount;
|
||||
}
|
||||
|
||||
public final synchronized int evictionCount() {
|
||||
return this.evictionCount;
|
||||
}
|
||||
|
||||
public final synchronized Map<K, V> snapshot() {
|
||||
return new LinkedHashMap(this.map);
|
||||
}
|
||||
|
||||
public final synchronized String toString() {
|
||||
int i;
|
||||
int i2;
|
||||
i = this.hitCount;
|
||||
i2 = this.missCount + i;
|
||||
return String.format(Locale.US, "LruCache[maxSize=%d,hits=%d,misses=%d,hitRate=%d%%]", Integer.valueOf(this.maxSize), Integer.valueOf(this.hitCount), Integer.valueOf(this.missCount), Integer.valueOf(i2 != 0 ? (i * 100) / i2 : 0));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user