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);
   }
}