Files
runelite/runescape-client/src/main/java/DemotingHashTable.java
Owain van Brakel 42acd14658 project: 184 (#1670)
* 184

* checkstyle
2019-09-28 17:05:04 +01:00

157 lines
3.4 KiB
Java

import net.runelite.mapping.Export;
import net.runelite.mapping.Implements;
import net.runelite.mapping.ObfuscatedName;
import net.runelite.mapping.ObfuscatedSignature;
@ObfuscatedName("eu")
@Implements("DemotingHashTable")
public final class DemotingHashTable {
@ObfuscatedName("z")
@Export("capacity")
int capacity;
@ObfuscatedName("n")
@Export("remaining")
int remaining;
@ObfuscatedName("v")
@ObfuscatedSignature(
signature = "Llb;"
)
@Export("hashTable")
IterableNodeHashTable hashTable;
@ObfuscatedName("u")
@ObfuscatedSignature(
signature = "Lji;"
)
@Export("queue")
IterableDualNodeQueue queue;
@ObfuscatedName("r")
@ObfuscatedSignature(
signature = "Lev;"
)
class146 field1944;
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("z")
@Export("get")
public Object get(long var1) {
Wrapper var3 = (Wrapper)this.hashTable.get(var1);
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("n")
@Export("remove")
void remove(long var1) {
Wrapper var3 = (Wrapper)this.hashTable.get(var1);
this.removeWrapper(var3);
}
@ObfuscatedName("v")
@ObfuscatedSignature(
signature = "(Lec;)V"
)
@Export("removeWrapper")
void removeWrapper(Wrapper var1) {
if (var1 != null) {
var1.remove();
var1.removeDual();
this.remaining += var1.size;
}
}
@ObfuscatedName("u")
@Export("put")
public void put(Object var1, long var2, int var4) {
if (var4 > this.capacity) {
throw new IllegalStateException();
} else {
this.remove(var2);
this.remaining -= var4;
while (this.remaining < 0) {
Wrapper var5 = (Wrapper)this.queue.removeLast();
if (var5 == null) {
throw new RuntimeException("");
}
if (!var5.isSoft()) {
}
this.removeWrapper(var5);
if (this.field1944 != null) {
this.field1944.method3302(var5.get());
}
}
DirectWrapper var6 = new DirectWrapper(var1, var4);
this.hashTable.put(var6, var2);
this.queue.add(var6);
var6.keyDual = 0L;
}
}
@ObfuscatedName("r")
@Export("demote")
public void demote(int var1) {
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)var1) {
SoftWrapper var3 = new SoftWrapper(var2.get(), var2.size);
this.hashTable.put(var3, var2.key);
IterableDualNodeQueue.DualNodeDeque_addBefore(var3, var2);
var2.remove();
var2.removeDual();
}
}
}
@ObfuscatedName("p")
@Export("clear")
public void clear() {
this.queue.clear();
this.hashTable.clear();
this.remaining = this.capacity;
}
}