Files
runelite/runescape-client/src/main/java/DemotingHashTable.java
2019-07-07 21:43:55 +02:00

142 lines
3.7 KiB
Java

import net.runelite.mapping.Export;
import net.runelite.mapping.Implements;
import net.runelite.mapping.ObfuscatedName;
import net.runelite.mapping.ObfuscatedSignature;
@ObfuscatedName("ec")
@Implements("DemotingHashTable")
public final class DemotingHashTable {
@ObfuscatedName("m")
@Export("capacity")
int capacity;
@ObfuscatedName("f")
@Export("remaining")
int remaining;
@ObfuscatedName("q")
@ObfuscatedSignature(
signature = "Llh;"
)
@Export("hashTable")
IterableNodeHashTable hashTable;
@ObfuscatedName("w")
@ObfuscatedSignature(
signature = "Ljc;"
)
@Export("queue")
IterableDualNodeQueue queue;
public DemotingHashTable(int var1, int var2) {
this.queue = new IterableDualNodeQueue();
this.capacity = var1;
this.remaining = var1;
int var3;
for (var3 = 1; var3 + var3 < var1 && var3 < var2; var3 += var3) {
}
this.hashTable = new IterableNodeHashTable(var3);
}
@ObfuscatedName("m")
@Export("get")
public Object get(long key) {
Wrapper var3 = (Wrapper)this.hashTable.get(key);
if (var3 == null) {
return null;
} else {
Object var4 = var3.get();
if (var4 == null) {
var3.remove();
var3.removeDual();
this.remaining += var3.size;
return null;
} else {
if (var3.isSoft()) {
DirectWrapper var5 = new DirectWrapper(var4, var3.size);
this.hashTable.put(var5, var3.key);
this.queue.add(var5);
var5.keyDual = 0L;
var3.remove();
var3.removeDual();
} else {
this.queue.add(var3);
var3.keyDual = 0L;
}
return var4;
}
}
}
@ObfuscatedName("f")
@Export("remove")
void remove(long key) {
Wrapper var3 = (Wrapper)this.hashTable.get(key);
this.removeWrapper(var3);
}
@ObfuscatedName("q")
@ObfuscatedSignature(
signature = "(Leu;)V"
)
@Export("removeWrapper")
void removeWrapper(Wrapper wrapper) {
if (wrapper != null) {
wrapper.remove();
wrapper.removeDual();
this.remaining += wrapper.size;
}
}
@ObfuscatedName("w")
@Export("put")
public void put(Object value, long key, int size) {
if (size > this.capacity) {
throw new IllegalStateException();
} else {
this.remove(key);
this.remaining -= size;
while (this.remaining < 0) {
Wrapper var5 = (Wrapper)this.queue.removeLast();
this.removeWrapper(var5);
}
DirectWrapper var6 = new DirectWrapper(value, size);
this.hashTable.put(var6, key);
this.queue.add(var6);
var6.keyDual = 0L;
}
}
@ObfuscatedName("o")
@Export("demote")
public void demote(int softeningLevel) {
for (Wrapper var2 = (Wrapper)this.queue.last(); var2 != null; var2 = (Wrapper)this.queue.previous()) {
if (var2.isSoft()) {
if (var2.get() == null) {
var2.remove();
var2.removeDual();
this.remaining += var2.size;
}
} else if (++var2.keyDual > (long)softeningLevel) {
SoftWrapper var3 = new SoftWrapper(var2.get(), var2.size);
this.hashTable.put(var3, var2.key);
DualNodeDeque.DualNodeDeque_addBefore(var3, var2);
var2.remove();
var2.removeDual();
}
}
}
@ObfuscatedName("u")
@Export("clear")
public void clear() {
this.queue.clear();
this.hashTable.clear();
this.remaining = this.capacity;
}
}