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