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