Int3ObjectOpenHashMap class
Пакет: com.hypixel.hytale.math.data
Файл: com/hypixel/hytale/math/data/Int3ObjectOpenHashMap.java
Поля (44)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
int |
DEFAULT_CAPACITY |
|
|
return |
|
int |
var10 |
|
|
var10 |
|
int |
var11 |
|
int[] |
var2 |
|
int[] |
var2 |
|
int[] |
var2 |
|
int |
var2 |
|
int |
var3 |
|
long |
var3 |
|
int |
var3 |
|
Object[] |
var3 |
|
int |
var3 |
|
int[] |
var4 |
|
int[] |
var4 |
|
int[] |
var4 |
|
Object |
var4 |
|
int |
var4 |
|
|
var4 |
|
int[] |
var4 |
|
int |
var5 |
|
|
var5 |
|
int[] |
var5 |
|
int |
var5 |
|
|
var5 |
|
int |
var5 |
|
int |
var5 |
|
|
var5 |
|
Object |
var6 |
|
int |
var6 |
|
|
var6 |
|
Object |
var6 |
|
int |
var6 |
|
int |
var6 |
|
int |
var7 |
|
Object |
var7 |
|
int |
var7 |
|
int |
var7 |
|
int |
var8 |
|
int |
var8 |
|
int |
var8 |
|
int |
var9 |
|
int |
var9 |
Методы (33)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
static |
int |
arraySizeint arraySize(int var0, float var1) |
public |
void |
clearvoid clear() |
public |
boolean |
containsKeyboolean containsKey(int var1, int var2, int var3) |
private |
int |
fibIndexint fibIndex(long var1) |
|
|
for for(int var3 = 0; var3 < this.values.length; var3++) |
|
|
for for(var1 = var1 + 1 & this.mask; this.values[var1] != null; var1 = var1 + 1 & this.mask) |
|
|
for for(int var5 = 0; var5 < var3.length; var5++) |
public |
void |
forEachvoid forEach(@Nonnull TriIntObjectConsumer<? super V> var1) |
|
|
if if(var6 == null) |
|
|
if if(var4[var7] == var1 && var4[var7 + 1] == var2 && var4[var7 + 2] == var3) |
|
|
if if(var7 == null) |
|
|
if if(++this.size > this.maxFill) |
|
|
if if(var5[var8] == var1 && var5[var8 + 1] == var2 && var5[var8 + 2] == var3) |
|
|
if if(var6 == null) |
|
|
if if(var4[var7] == var1 && var4[var7 + 1] == var2 && var4[var7 + 2] == var3) |
|
|
if if(var8 > 16 && this.size < this.maxFill >>> 2) |
|
|
if if(var4[var6] == var1 && var4[var6 + 1] == var2 && var4[var6 + 2] == var3) |
|
|
if if(var4 != null) |
|
|
if if(var3 <= var1 ? var3 >= var5 || var5 > var1 : var3 >= var5 && var5 > var1) |
|
|
if if(var3[var5] != null) |
|
|
if if(var0 <= 0) |
public |
boolean |
isEmptyboolean isEmpty() |
static |
long |
mixlong mix(int var0, int var1, int var2) |
private |
void |
rehashvoid rehash(int var1) |
private |
void |
shiftKeysvoid shiftKeys(int var1) |
public |
int |
sizeint size() |
abstract |
|
this this(16) |
abstract |
|
this this(var1, 0.75F) |
|
|
while while(true) |
|
|
while while(true) |
|
|
while while(true) |
|
|
while while(true) |
|
|
while while(this.values[var10] != null) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.math.data;
class="kw">import com.hypixel.hytale.function.consumer.TriIntObjectConsumer;
class="kw">import java.util.Arrays;
class="kw">import java.util.Objects;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class Int3ObjectOpenHashMap<V> {
class="kw">private class="kw">static class="kw">final int DEFAULT_CAPACITY = 16;
class="kw">private class="kw">static class="kw">final float DEFAULT_LOAD_FACTOR = 0.75F;
class="kw">private class="kw">static class="kw">final long PHI = -7046029254386353131L;
class="kw">private int[] keys;
class="kw">private Object[] values;
class="kw">private int mask;
class="kw">private int shift;
class="kw">private int size;
class="kw">private int maxFill;
class="kw">private class="kw">final float loadFactor;
class="kw">public Int3ObjectOpenHashMap() {
this(16);
}
class="kw">public Int3ObjectOpenHashMap(int var1) {
this(var1, 0.75F);
}
class="kw">public Int3ObjectOpenHashMap(int var1, float var2) {
this.loadFactor = var2;
int var3 = arraySize(var1, var2);
this.keys = new int[var3 * 3];
this.values = new Object[var3];
this.mask = var3 - 1;
this.shift = 64 - Integer.numberOfTrailingZeros(var3);
this.maxFill = (int)(var3 * var2);
}
class="kw">public Int3ObjectOpenHashMap(@Nonnull Int3ObjectOpenHashMap<? class="kw">extends V> var1) {
this.loadFactor = var1.loadFactor;
this.keys = (int[])var1.keys.clone();
this.values = (Object[])var1.values.clone();
this.mask = var1.mask;
this.shift = var1.shift;
this.size = var1.size;
this.maxFill = var1.maxFill;
}
class="kw">private class="kw">static long mix(int var0, int var1, int var2) {
long var3 = var0 * 7640891576956012808L ^ var1 * -4942790177534073029L ^ var2 * 4354685564936845355L;
var3 ^= var3 >>> 33;
var3 *= -49064778989728563L;
var3 ^= var3 >>> 33;
var3 *= -4265267296055464877L;
class="kw">return var3 ^ var3 >>> 33;
}
class="kw">private int fibIndex(long var1) {
class="kw">return (int)(var1 * -7046029254386353131L >>> this.shift);
}
@Nullable
class="kw">public V get(int var1, int var2, int var3) {
int[] var4 = this.keys;
int var5 = this.fibIndex(mix(var1, var2, var3));
while (true) {
Object var6 = this.values[var5];
if (var6 == null) {
class="kw">return null;
}
int var7 = var5 * 3;
if (var4[var7] == var1 && var4[var7 + 1] == var2 && var4[var7 + 2] == var3) {
class="kw">return (V)var6;
}
var5 = var5 + 1 & this.mask;
}
}
@Nullable
class="kw">public V put(int var1, int var2, int var3, @Nonnull V var4) {
Objects.requireNonNull(var4, "value");
int[] var5 = this.keys;
int var6 = this.fibIndex(mix(var1, var2, var3));
while (true) {
Object var7 = this.values[var6];
if (var7 == null) {
int var9 = var6 * 3;
var5[var9] = var1;
var5[var9 + 1] = var2;
var5[var9 + 2] = var3;
this.values[var6] = var4;
if (++this.size > this.maxFill) {
this.rehash(this.values.length << 1);
}
class="kw">return null;
}
int var8 = var6 * 3;
if (var5[var8] == var1 && var5[var8 + 1] == var2 && var5[var8 + 2] == var3) {
this.values[var6] = var4;
class="kw">return (V)var7;
}
var6 = var6 + 1 & this.mask;
}
}
@Nullable
class="kw">public V remove(int var1, int var2, int var3) {
int[] var4 = this.keys;
int var5 = this.fibIndex(mix(var1, var2, var3));
while (true) {
Object var6 = this.values[var5];
if (var6 == null) {
class="kw">return null;
}
int var7 = var5 * 3;
if (var4[var7] == var1 && var4[var7 + 1] == var2 && var4[var7 + 2] == var3) {
this.size--;
this.shiftKeys(var5);
int var8 = this.values.length;
if (var8 > 16 && this.size < this.maxFill >>> 2) {
this.rehash(var8 >>> 1);
}
class="kw">return (V)var6;
}
var5 = var5 + 1 & this.mask;
}
}
class="kw">public boolean containsKey(int var1, int var2, int var3) {
int[] var4 = this.keys;
for (int var5 = this.fibIndex(mix(var1, var2, var3)); this.values[var5] != null; var5 = var5 + 1 & this.mask) {
int var6 = var5 * 3;
if (var4[var6] == var1 && var4[var6 + 1] == var2 && var4[var6 + 2] == var3) {
class="kw">return true;
}
}
class="kw">return false;
}
class="kw">public int size() {
class="kw">return this.size;
}
class="kw">public boolean isEmpty() {
class="kw">return this.size == 0;
}
class="kw">public void clear() {
this.size = 0;
Arrays.fill(this.values, null);
}
class="kw">public void forEach(@Nonnull TriIntObjectConsumer<? super V> var1) {
int[] var2 = this.keys;
for (int var3 = 0; var3 < this.values.length; var3++) {
Object var4 = this.values[var3];
if (var4 != null) {
int var5 = var3 * 3;
var1.accept(var2[var5], var2[var5 + 1], var2[var5 + 2], (V)var4);
}
}
}
class="kw">private void shiftKeys(int var1) {
int[] var2 = this.keys;
label30:
while (true) {
int var3 = var1;
for (var1 = var1 + 1 & this.mask; this.values[var1] != null; var1 = var1 + 1 & this.mask) {
int var4 = var1 * 3;
int var5 = this.fibIndex(mix(var2[var4], var2[var4 + 1], var2[var4 + 2]));
if (var3 <= var1 ? var3 >= var5 || var5 > var1 : var3 >= var5 && var5 > var1) {
var4 = var1 * 3;
var5 = var3 * 3;
var2[var5] = var2[var4];
var2[var5 + 1] = var2[var4 + 1];
var2[var5 + 2] = var2[var4 + 2];
this.values[var3] = this.values[var1];
class="kw">continue label30;
}
}
this.values[var3] = null;
class="kw">return;
}
}
class="kw">private void rehash(int var1) {
int[] var2 = this.keys;
Object[] var3 = this.values;
this.keys = new int[var1 * 3];
this.values = new Object[var1];
this.mask = var1 - 1;
this.shift = 64 - Integer.numberOfTrailingZeros(var1);
this.maxFill = (int)(var1 * this.loadFactor);
int[] var4 = this.keys;
for (int var5 = 0; var5 < var3.length; var5++) {
if (var3[var5] != null) {
int var6 = var5 * 3;
int var7 = var2[var6];
int var8 = var2[var6 + 1];
int var9 = var2[var6 + 2];
int var10 = this.fibIndex(mix(var7, var8, var9));
while (this.values[var10] != null) {
var10 = var10 + 1 & this.mask;
}
int var11 = var10 * 3;
var4[var11] = var7;
var4[var11 + 1] = var8;
var4[var11 + 2] = var9;
this.values[var10] = var3[var5];
}
}
}
class="kw">private class="kw">static int arraySize(int var0, float var1) {
if (var0 <= 0) {
class="kw">return 16;
}
int var2 = (int)Math.ceil(var0 / var1);
int var3 = Integer.highestOneBit(var2 - 1) << 1;
class="kw">return Math.max(var3, 16);
}
}