120 lines
2.7 KiB
Java
120 lines
2.7 KiB
Java
import net.runelite.mapping.Export;
|
|
import net.runelite.mapping.Implements;
|
|
import net.runelite.mapping.ObfuscatedName;
|
|
import net.runelite.mapping.ObfuscatedSignature;
|
|
|
|
@ObfuscatedName("po")
|
|
@Implements("NodeHashTable")
|
|
public final class NodeHashTable {
|
|
@ObfuscatedName("v")
|
|
@Export("size")
|
|
int size;
|
|
@ObfuscatedName("o")
|
|
@ObfuscatedSignature(
|
|
descriptor = "[Loz;"
|
|
)
|
|
@Export("buckets")
|
|
Node[] buckets;
|
|
@ObfuscatedName("h")
|
|
@ObfuscatedSignature(
|
|
descriptor = "Loz;"
|
|
)
|
|
@Export("currentGet")
|
|
Node currentGet;
|
|
@ObfuscatedName("g")
|
|
@ObfuscatedSignature(
|
|
descriptor = "Loz;"
|
|
)
|
|
@Export("current")
|
|
Node current;
|
|
@ObfuscatedName("l")
|
|
@Export("index")
|
|
int index;
|
|
|
|
public NodeHashTable(int var1) {
|
|
this.index = 0; // L: 10
|
|
this.size = var1; // L: 13
|
|
this.buckets = new Node[var1]; // L: 14
|
|
|
|
for (int var2 = 0; var2 < var1; ++var2) { // L: 15
|
|
Node var3 = this.buckets[var2] = new Node(); // L: 16
|
|
var3.previous = var3; // L: 17
|
|
var3.next = var3; // L: 18
|
|
}
|
|
|
|
} // L: 20
|
|
|
|
@ObfuscatedName("v")
|
|
@ObfuscatedSignature(
|
|
descriptor = "(J)Loz;"
|
|
)
|
|
@Export("get")
|
|
public Node get(long var1) {
|
|
Node var3 = this.buckets[(int)(var1 & (long)(this.size - 1))]; // L: 23
|
|
|
|
for (this.currentGet = var3.previous; var3 != this.currentGet; this.currentGet = this.currentGet.previous) { // L: 24 25 31
|
|
if (this.currentGet.key == var1) { // L: 26
|
|
Node var4 = this.currentGet; // L: 27
|
|
this.currentGet = this.currentGet.previous; // L: 28
|
|
return var4; // L: 29
|
|
}
|
|
}
|
|
|
|
this.currentGet = null; // L: 33
|
|
return null; // L: 34
|
|
}
|
|
|
|
@ObfuscatedName("o")
|
|
@ObfuscatedSignature(
|
|
descriptor = "(Loz;J)V"
|
|
)
|
|
@Export("put")
|
|
public void put(Node var1, long var2) {
|
|
if (var1.next != null) { // L: 38
|
|
var1.remove();
|
|
}
|
|
|
|
Node var4 = this.buckets[(int)(var2 & (long)(this.size - 1))]; // L: 39
|
|
var1.next = var4.next; // L: 40
|
|
var1.previous = var4; // L: 41
|
|
var1.next.previous = var1; // L: 42
|
|
var1.previous.next = var1; // L: 43
|
|
var1.key = var2; // L: 44
|
|
} // L: 45
|
|
|
|
@ObfuscatedName("h")
|
|
@ObfuscatedSignature(
|
|
descriptor = "()Loz;"
|
|
)
|
|
@Export("first")
|
|
public Node first() {
|
|
this.index = 0; // L: 48
|
|
return this.next(); // L: 49
|
|
}
|
|
|
|
@ObfuscatedName("g")
|
|
@ObfuscatedSignature(
|
|
descriptor = "()Loz;"
|
|
)
|
|
@Export("next")
|
|
public Node next() {
|
|
Node var1;
|
|
if (this.index > 0 && this.buckets[this.index - 1] != this.current) { // L: 53
|
|
var1 = this.current; // L: 54
|
|
this.current = var1.previous; // L: 55
|
|
return var1; // L: 56
|
|
} else {
|
|
do {
|
|
if (this.index >= this.size) { // L: 58
|
|
return null; // L: 65
|
|
}
|
|
|
|
var1 = this.buckets[this.index++].previous; // L: 59
|
|
} while(var1 == this.buckets[this.index - 1]); // L: 60
|
|
|
|
this.current = var1.previous; // L: 61
|
|
return var1; // L: 62
|
|
}
|
|
}
|
|
}
|