Int3OpenHashSet class
Пакет: com.hypixel.hytale.math.data
Файл: com/hypixel/hytale/math/data/Int3OpenHashSet.java
Поля (50)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
int |
DEFAULT_CAPACITY |
|
|
continue |
|
|
continue |
|
|
return |
|
int |
var1 |
|
int |
var10 |
|
int |
var10 |
|
int |
var11 |
|
|
var11 |
|
int |
var12 |
|
int[] |
var2 |
|
int[] |
var2 |
|
int[] |
var2 |
|
int[] |
var2 |
|
int |
var2 |
|
int |
var3 |
|
long |
var3 |
|
boolean[] |
var3 |
|
boolean[] |
var3 |
|
boolean[] |
var3 |
|
boolean[] |
var3 |
|
int |
var3 |
|
int[] |
var4 |
|
int[] |
var4 |
|
int[] |
var4 |
|
int |
var4 |
|
int |
var4 |
|
int[] |
var4 |
|
boolean[] |
var5 |
|
boolean[] |
var5 |
|
boolean[] |
var5 |
|
int |
var5 |
|
int |
var5 |
|
int |
var5 |
|
|
var5 |
|
boolean[] |
var5 |
|
int |
var6 |
|
int |
var6 |
|
|
var6 |
|
int |
var7 |
|
int |
var7 |
|
int |
var7 |
|
int[] |
var7 |
|
int |
var7 |
|
int |
var8 |
|
int |
var8 |
|
boolean[] |
var8 |
|
int |
var8 |
|
int |
var9 |
|
int |
var9 |
Методы (36)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
public |
boolean |
addboolean add(int var1, int var2, int var3) |
static |
int |
arraySizeint arraySize(int var0, float var1) |
public |
void |
clearvoid clear() |
public |
boolean |
containsboolean contains(int var1, int var2, int var3) |
private |
int |
fibIndexint fibIndex(long var1) |
|
|
for for(int var4 = 0; var4 < var3.length; var4++) |
|
|
for for(var1 = var1 + 1 & this.mask; var3[var1]; var1 = var1 + 1 & this.mask) |
|
|
for for(int var6 = 0; var6 < var3.length; var6++) |
public |
void |
forEachvoid forEach(@Nonnull TriIntConsumer var1) |
|
|
if if(var4[var7] == var1 && var4[var7 + 1] == var2 && var4[var7 + 2] == var3) |
|
|
if if(++this.size > this.maxFill) |
|
|
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[var7] == var1 && var4[var7 + 1] == var2 && var4[var7 + 2] == var3) |
|
|
if if(var3[var4]) |
|
|
if if(var3[var4]) |
|
|
if if(var8[var9]) |
|
|
if if(var1 > 16 && this.size < this.maxFill >>> 2) |
|
|
if if(var4 <= var1 ? var4 >= var6 || var6 > var1 : var4 >= var6 && var6 > var1) |
|
|
if if(var3[var6]) |
|
|
if if(var0 <= 0) |
public |
boolean |
isEmptyboolean isEmpty() |
private |
void |
maybeShrinkvoid maybeShrink() |
static |
long |
mixlong mix(int var0, int var1, int var2) |
private |
void |
rehashvoid rehash(int var1) |
public |
boolean |
removeboolean remove(int var1, int var2, int var3) |
public |
void |
removeIfvoid removeIf(@Nonnull TriIntPredicate var1) |
public |
<T, V> void |
removeIf<T, V> void removeIf(@Nonnull Int3TriIntBiObjPredicate<T, V> var1, int var2, int var3, int var4, T var5, V var6) |
private |
void |
shiftKeysvoid shiftKeys(int var1) |
public |
int |
sizeint size() |
abstract |
|
this this(16) |
abstract |
|
this this(var1, 0.75F) |
|
|
while while(var4 < var3.length) |
|
|
while while(var9 < var8.length) |
|
|
while while(true) |
|
|
while while(var5[var11]) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.math.data;
class="kw">import com.hypixel.hytale.function.consumer.TriIntConsumer;
class="kw">import com.hypixel.hytale.function.predicate.Int3TriIntBiObjPredicate;
class="kw">import com.hypixel.hytale.function.predicate.TriIntPredicate;
class="kw">import java.util.Arrays;
class="kw">import javax.annotation.Nonnull;
class="kw">public class Int3OpenHashSet {
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 boolean[] used;
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 Int3OpenHashSet() {
this(16);
}
class="kw">public Int3OpenHashSet(int var1) {
this(var1, 0.75F);
}
class="kw">public Int3OpenHashSet(int var1, float var2) {
this.loadFactor = var2;
int var3 = arraySize(var1, var2);
this.keys = new int[var3 * 3];
this.used = new boolean[var3];
this.mask = var3 - 1;
this.shift = 64 - Integer.numberOfTrailingZeros(var3);
this.maxFill = (int)(var3 * var2);
}
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);
}
class="kw">public boolean add(int var1, int var2, int var3) {
int[] var4 = this.keys;
boolean[] var5 = this.used;
int var6;
for (var6 = this.fibIndex(mix(var1, var2, var3)); var5[var6]; var6 = var6 + 1 & this.mask) {
int var7 = var6 * 3;
if (var4[var7] == var1 && var4[var7 + 1] == var2 && var4[var7 + 2] == var3) {
class="kw">return false;
}
}
int var8 = var6 * 3;
var4[var8] = var1;
var4[var8 + 1] = var2;
var4[var8 + 2] = var3;
var5[var6] = true;
if (++this.size > this.maxFill) {
this.rehash(this.used.length << 1);
}
class="kw">return true;
}
class="kw">public boolean remove(int var1, int var2, int var3) {
int[] var4 = this.keys;
boolean[] var5 = this.used;
for (int var6 = this.fibIndex(mix(var1, var2, var3)); var5[var6]; var6 = var6 + 1 & this.mask) {
int var7 = var6 * 3;
if (var4[var7] == var1 && var4[var7 + 1] == var2 && var4[var7 + 2] == var3) {
this.size--;
this.shiftKeys(var6);
int var8 = this.used.length;
if (var8 > 16 && this.size < this.maxFill >>> 2) {
this.rehash(var8 >>> 1);
}
class="kw">return true;
}
}
class="kw">return false;
}
class="kw">public boolean contains(int var1, int var2, int var3) {
int[] var4 = this.keys;
boolean[] var5 = this.used;
for (int var6 = this.fibIndex(mix(var1, var2, var3)); var5[var6]; var6 = var6 + 1 & this.mask) {
int var7 = var6 * 3;
if (var4[var7] == var1 && var4[var7 + 1] == var2 && var4[var7 + 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.used, false);
}
class="kw">public void forEach(@Nonnull TriIntConsumer var1) {
int[] var2 = this.keys;
boolean[] var3 = this.used;
for (int var4 = 0; var4 < var3.length; var4++) {
if (var3[var4]) {
int var5 = var4 * 3;
var1.accept(var2[var5], var2[var5 + 1], var2[var5 + 2]);
}
}
}
class="kw">public void removeIf(@Nonnull TriIntPredicate var1) {
int[] var2 = this.keys;
boolean[] var3 = this.used;
int var4 = 0;
while (var4 < var3.length) {
if (var3[var4]) {
int var5 = var4 * 3;
if (var1.test(var2[var5], var2[var5 + 1], var2[var5 + 2])) {
this.size--;
this.shiftKeys(var4);
class="kw">continue;
}
}
var4++;
}
this.maybeShrink();
}
class="kw">public <T, V> void removeIf(@Nonnull Int3TriIntBiObjPredicate<T, V> var1, int var2, int var3, int var4, T var5, V var6) {
int[] var7 = this.keys;
boolean[] var8 = this.used;
int var9 = 0;
while (var9 < var8.length) {
if (var8[var9]) {
int var10 = var9 * 3;
if (var1.test(var7[var10], var7[var10 + 1], var7[var10 + 2], var2, var3, var4, var5, var6)) {
this.size--;
this.shiftKeys(var9);
class="kw">continue;
}
}
var9++;
}
this.maybeShrink();
}
class="kw">private void maybeShrink() {
int var1 = this.used.length;
if (var1 > 16 && this.size < this.maxFill >>> 2) {
this.rehash(var1 >>> 1);
}
}
class="kw">private void shiftKeys(int var1) {
int[] var2 = this.keys;
boolean[] var3 = this.used;
label30:
while (true) {
int var4 = var1;
for (var1 = var1 + 1 & this.mask; var3[var1]; var1 = var1 + 1 & this.mask) {
int var5 = var1 * 3;
int var6 = this.fibIndex(mix(var2[var5], var2[var5 + 1], var2[var5 + 2]));
if (var4 <= var1 ? var4 >= var6 || var6 > var1 : var4 >= var6 && var6 > var1) {
var5 = var1 * 3;
var6 = var4 * 3;
var2[var6] = var2[var5];
var2[var6 + 1] = var2[var5 + 1];
var2[var6 + 2] = var2[var5 + 2];
var3[var4] = true;
class="kw">continue label30;
}
}
var3[var4] = false;
class="kw">return;
}
}
class="kw">private void rehash(int var1) {
int[] var2 = this.keys;
boolean[] var3 = this.used;
this.keys = new int[var1 * 3];
this.used = new boolean[var1];
this.mask = var1 - 1;
this.shift = 64 - Integer.numberOfTrailingZeros(var1);
this.maxFill = (int)(var1 * this.loadFactor);
int[] var4 = this.keys;
boolean[] var5 = this.used;
for (int var6 = 0; var6 < var3.length; var6++) {
if (var3[var6]) {
int var7 = var6 * 3;
int var8 = var2[var7];
int var9 = var2[var7 + 1];
int var10 = var2[var7 + 2];
int var11 = this.fibIndex(mix(var8, var9, var10));
while (var5[var11]) {
var11 = var11 + 1 & this.mask;
}
int var12 = var11 * 3;
var4[var12] = var8;
var4[var12 + 1] = var9;
var4[var12 + 2] = var10;
var5[var11] = true;
}
}
}
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);
}
}