SoftCache.smali
.class public Lorg/apache/commons/jexl3/internal/SoftCache;
.super Ljava/lang/Object;
.source "SourceFile"
# annotations
.annotation system Ldalvik/annotation/Signature;
value = {
"<K:",
"Ljava/lang/Object;",
"V:",
"Ljava/lang/Object;",
">",
"Ljava/lang/Object;"
}
.end annotation
# static fields
.field private static final LOAD_FACTOR:F = 0.75f
# instance fields
.field private final lock:Ljava/util/concurrent/locks/ReadWriteLock;
.field private ref:Ljava/lang/ref/SoftReference;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/lang/ref/SoftReference<",
"Ljava/util/Map<",
"TK;TV;>;>;"
}
.end annotation
.end field
.field private final size:I
# direct methods
.method public constructor <init>(I)V
.registers 3
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const/4 v0, 0x0
.line 2
iput-object v0, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->ref:Ljava/lang/ref/SoftReference;
.line 3
iput p1, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->size:I
.line 4
new-instance p1, Ljava/util/concurrent/locks/ReentrantReadWriteLock;
invoke-direct {p1}, Ljava/util/concurrent/locks/ReentrantReadWriteLock;-><init>()V
iput-object p1, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->lock:Ljava/util/concurrent/locks/ReadWriteLock;
return-void
.end method
# virtual methods
.method public clear()V
.registers 3
.line 1
iget-object v0, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->lock:Ljava/util/concurrent/locks/ReadWriteLock;
invoke-interface {v0}, Ljava/util/concurrent/locks/ReadWriteLock;->writeLock()Ljava/util/concurrent/locks/Lock;
move-result-object v0
invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->lock()V
const/4 v0, 0x0
.line 2
:try_start_a
iput-object v0, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->ref:Ljava/lang/ref/SoftReference;
:try_end_c
.catchall {:try_start_a .. :try_end_c} :catchall_16
.line 3
iget-object v0, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->lock:Ljava/util/concurrent/locks/ReadWriteLock;
invoke-interface {v0}, Ljava/util/concurrent/locks/ReadWriteLock;->writeLock()Ljava/util/concurrent/locks/Lock;
move-result-object v0
invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->unlock()V
return-void
:catchall_16
move-exception v0
iget-object v1, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->lock:Ljava/util/concurrent/locks/ReadWriteLock;
invoke-interface {v1}, Ljava/util/concurrent/locks/ReadWriteLock;->writeLock()Ljava/util/concurrent/locks/Lock;
move-result-object v1
invoke-interface {v1}, Ljava/util/concurrent/locks/Lock;->unlock()V
throw v0
.end method
.method public createCache(I)Ljava/util/Map;
.registers 9
.annotation system Ldalvik/annotation/Signature;
value = {
"<K:",
"Ljava/lang/Object;",
"V:",
"Ljava/lang/Object;",
">(I)",
"Ljava/util/Map<",
"TK;TV;>;"
}
.end annotation
new-instance v6, Lorg/apache/commons/jexl3/internal/SoftCache$1;
const/high16 v3, 0x3f400000 # 0.75f
const/4 v4, 0x1
move-object v0, v6
move-object v1, p0
move v2, p1
move v5, p1
invoke-direct/range {v0 .. v5}, Lorg/apache/commons/jexl3/internal/SoftCache$1;-><init>(Lorg/apache/commons/jexl3/internal/SoftCache;IFZI)V
return-object v6
.end method
.method public entries()Ljava/util/List;
.registers 5
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Ljava/util/List<",
"Ljava/util/Map$Entry<",
"TK;TV;>;>;"
}
.end annotation
.line 1
iget-object v0, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->lock:Ljava/util/concurrent/locks/ReadWriteLock;
invoke-interface {v0}, Ljava/util/concurrent/locks/ReadWriteLock;->readLock()Ljava/util/concurrent/locks/Lock;
move-result-object v0
invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->lock()V
.line 2
:try_start_9
iget-object v0, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->ref:Ljava/lang/ref/SoftReference;
if-eqz v0, :cond_14
invoke-virtual {v0}, Ljava/lang/ref/SoftReference;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/util/Map;
goto :goto_15
:cond_14
const/4 v0, 0x0
:goto_15
if-nez v0, :cond_25
.line 3
invoke-static {}, Ljava/util/Collections;->emptyList()Ljava/util/List;
move-result-object v0
:try_end_1b
.catchall {:try_start_9 .. :try_end_1b} :catchall_55
.line 4
iget-object v1, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->lock:Ljava/util/concurrent/locks/ReadWriteLock;
invoke-interface {v1}, Ljava/util/concurrent/locks/ReadWriteLock;->readLock()Ljava/util/concurrent/locks/Lock;
move-result-object v1
invoke-interface {v1}, Ljava/util/concurrent/locks/Lock;->unlock()V
return-object v0
.line 5
:cond_25
:try_start_25
invoke-interface {v0}, Ljava/util/Map;->entrySet()Ljava/util/Set;
move-result-object v0
.line 6
new-instance v1, Ljava/util/ArrayList;
invoke-interface {v0}, Ljava/util/Set;->size()I
move-result v2
invoke-direct {v1, v2}, Ljava/util/ArrayList;-><init>(I)V
.line 7
invoke-interface {v0}, Ljava/util/Set;->iterator()Ljava/util/Iterator;
move-result-object v0
:goto_36
invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z
move-result v2
if-eqz v2, :cond_4b
invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v2
check-cast v2, Ljava/util/Map$Entry;
.line 8
new-instance v3, Lorg/apache/commons/jexl3/internal/SoftCacheEntry;
invoke-direct {v3, v2}, Lorg/apache/commons/jexl3/internal/SoftCacheEntry;-><init>(Ljava/util/Map$Entry;)V
invoke-virtual {v1, v3}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
:try_end_4a
.catchall {:try_start_25 .. :try_end_4a} :catchall_55
goto :goto_36
.line 9
:cond_4b
iget-object v0, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->lock:Ljava/util/concurrent/locks/ReadWriteLock;
invoke-interface {v0}, Ljava/util/concurrent/locks/ReadWriteLock;->readLock()Ljava/util/concurrent/locks/Lock;
move-result-object v0
invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->unlock()V
return-object v1
:catchall_55
move-exception v0
iget-object v1, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->lock:Ljava/util/concurrent/locks/ReadWriteLock;
invoke-interface {v1}, Ljava/util/concurrent/locks/ReadWriteLock;->readLock()Ljava/util/concurrent/locks/Lock;
move-result-object v1
invoke-interface {v1}, Ljava/util/concurrent/locks/Lock;->unlock()V
throw v0
.end method
.method public get(Ljava/lang/Object;)Ljava/lang/Object;
.registers 4
.annotation system Ldalvik/annotation/Signature;
value = {
"(TK;)TV;"
}
.end annotation
.line 1
iget-object v0, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->lock:Ljava/util/concurrent/locks/ReadWriteLock;
invoke-interface {v0}, Ljava/util/concurrent/locks/ReadWriteLock;->readLock()Ljava/util/concurrent/locks/Lock;
move-result-object v0
invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->lock()V
.line 2
:try_start_9
iget-object v0, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->ref:Ljava/lang/ref/SoftReference;
const/4 v1, 0x0
if-eqz v0, :cond_15
invoke-virtual {v0}, Ljava/lang/ref/SoftReference;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/util/Map;
goto :goto_16
:cond_15
move-object v0, v1
:goto_16
if-eqz v0, :cond_1c
.line 3
invoke-interface {v0, p1}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v1
:try_end_1c
.catchall {:try_start_9 .. :try_end_1c} :catchall_26
.line 4
:cond_1c
iget-object p1, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->lock:Ljava/util/concurrent/locks/ReadWriteLock;
invoke-interface {p1}, Ljava/util/concurrent/locks/ReadWriteLock;->readLock()Ljava/util/concurrent/locks/Lock;
move-result-object p1
invoke-interface {p1}, Ljava/util/concurrent/locks/Lock;->unlock()V
return-object v1
:catchall_26
move-exception p1
iget-object v0, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->lock:Ljava/util/concurrent/locks/ReadWriteLock;
invoke-interface {v0}, Ljava/util/concurrent/locks/ReadWriteLock;->readLock()Ljava/util/concurrent/locks/Lock;
move-result-object v0
invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->unlock()V
throw p1
.end method
.method public put(Ljava/lang/Object;Ljava/lang/Object;)V
.registers 5
.annotation system Ldalvik/annotation/Signature;
value = {
"(TK;TV;)V"
}
.end annotation
.line 1
iget-object v0, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->lock:Ljava/util/concurrent/locks/ReadWriteLock;
invoke-interface {v0}, Ljava/util/concurrent/locks/ReadWriteLock;->writeLock()Ljava/util/concurrent/locks/Lock;
move-result-object v0
invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->lock()V
.line 2
:try_start_9
iget-object v0, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->ref:Ljava/lang/ref/SoftReference;
if-eqz v0, :cond_14
invoke-virtual {v0}, Ljava/lang/ref/SoftReference;->get()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/util/Map;
goto :goto_15
:cond_14
const/4 v0, 0x0
:goto_15
if-nez v0, :cond_24
.line 3
iget v0, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->size:I
invoke-virtual {p0, v0}, Lorg/apache/commons/jexl3/internal/SoftCache;->createCache(I)Ljava/util/Map;
move-result-object v0
.line 4
new-instance v1, Ljava/lang/ref/SoftReference;
invoke-direct {v1, v0}, Ljava/lang/ref/SoftReference;-><init>(Ljava/lang/Object;)V
iput-object v1, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->ref:Ljava/lang/ref/SoftReference;
.line 5
:cond_24
invoke-interface {v0, p1, p2}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
:try_end_27
.catchall {:try_start_9 .. :try_end_27} :catchall_31
.line 6
iget-object p1, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->lock:Ljava/util/concurrent/locks/ReadWriteLock;
invoke-interface {p1}, Ljava/util/concurrent/locks/ReadWriteLock;->writeLock()Ljava/util/concurrent/locks/Lock;
move-result-object p1
invoke-interface {p1}, Ljava/util/concurrent/locks/Lock;->unlock()V
return-void
:catchall_31
move-exception p1
iget-object p2, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->lock:Ljava/util/concurrent/locks/ReadWriteLock;
invoke-interface {p2}, Ljava/util/concurrent/locks/ReadWriteLock;->writeLock()Ljava/util/concurrent/locks/Lock;
move-result-object p2
invoke-interface {p2}, Ljava/util/concurrent/locks/Lock;->unlock()V
throw p1
.end method
.method public size()I
.registers 2
iget v0, p0, Lorg/apache/commons/jexl3/internal/SoftCache;->size:I
return v0
.end method