BucketList class

Пакет: com.hypixel.hytale.common.collection

Файл: com/hypixel/hytale/common/collection/BucketList.java

Поля (41)

МодификаторыТипИмя
final int INITIAL_BUCKET_ITEM_ARRAY_SIZE
break
protected BucketItem<E>[] bucketItems
protected BucketItem[] buffer
protected boolean isEmpty
protected boolean isUnsorted
return
protected int size
var1
BucketList.Bucket var10
int var10
BucketItem[] var11
int var11
int var12
int var12
BucketItem var14
double var15
int var15
var15
Object var17
int var2
BucketItem[] var2
int[] var3
int var3
var3
int var4
int var4
int var5
BucketItem var5
int var5
int var5
int var6
int var6
int var7
int var7
var7
int var8
int var8
var8
int var9
var9

Методы (56)

МодификаторыВозвратСигнатура
public Bucketpublic Bucket(int var1)
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("bucketRanges can't be null")
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("bucketRanges can't beempty")
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("bucketRanges entries must be >0")
public SortBufferProviderpublic SortBufferProvider()
public boolean addboolean add(@Nonnull E var1, double var2)
public void addpublic void add(@Nonnull BucketItem<E> var1)
static void addBucketDistancevoid addBucketDistance(@Nonnull IntArrayList var0, int var1, int var2)
static void addBucketDistancevoid addBucketDistance(@Nonnull IntArrayList var0, int var1, int var2, int var3)
abstract addBucketDistance addBucketDistance(var0, var1, var2, -1)
public BucketItem[] applypublic BucketItem[] apply(int var1)
static int areaint area(int var0, int var1)
public void clearvoid clear()
public void clearpublic void clear(@Nonnull BucketItemPool<E> var1)
public void configurevoid configure(@Nonnull int[] var1)
public void configurevoid configure(@Nonnull int[] var1, int var2)
public void configureWithPreSortedArrayvoid configureWithPreSortedArray(@Nonnull int[] var1)
public void configureWithPreSortedArrayvoid configureWithPreSortedArray(@Nonnull int[] var1, int var2)
public void configureWithPresortedArrayvoid configureWithPresortedArray(@Nonnull IntArrayList var1, int var2)
for for(BucketList.Bucket var4 : this.buckets)
for for(int var4 = 0; var4 < this.bucketCount; var4++)
for for(int var6 = var3; var6 < var5; var6++)
for for(int var9 = var6; var9 <= var8; var9++)
for for(int var13 = var10.size; var12 < var13; var12++)
for for(int var13 = 1; var13 < var5; var13++)
for for(int var2 = 0; var2 < this.size; var2++)
abstract for for(var5 = var0.size()
public int getBucketCountint getBucketCount()
public int getFirstBucketIndexint getFirstBucketIndex(int var1)
public BucketItem<E>[] getItemspublic BucketItem<E>[] getItems()
public int getLastBucketIndexint getLastBucketIndex(int var1)
if if(this.buckets != null && this.bucketItemPool != null)
if if(var1 == null)
if if(var1.length <= 0)
if if(var3[0] <= 0)
if if(var4 < 0)
if if(var1 == 0)
if if(var6 < 0)
if if(!var10.isEmpty)
if if(var10.isUnsorted)
if if(var15 >= var7)
if if(var2 >= 1)
if if(var6 == var2)
if if(var6 > var2)
if if(++var5 > var1)
if if(var12 <= var8 && var15 != var3)
if if(!this.isEmpty)
if if(this.size == this.bucketItems.length)
if if(this.size > 1)
if if(var1 <= this.buffer.length)
public boolean isEmptypublic boolean isEmpty()
public boolean isUnsortedpublic boolean isUnsorted()
public void resetvoid reset()
public void setBucketItemPoolvoid setBucketItemPool(@Nonnull BucketItemPool<E> var1)
public int sizepublic int size()
public void sortpublic void sort(@Nonnull BucketList.SortBufferProvider var1)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.common.collection;

class="kw">import it.unimi.dsi.fastutil.ints.IntArrayList;
class="kw">import it.unimi.dsi.fastutil.ints.IntArrays;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrays;
class="kw">import java.util.Comparator;
class="kw">import java.util.function.IntFunction;
class="kw">import java.util.function.Predicate;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class BucketList<E> {
   class="kw">public class="kw">static class="kw">final int INITIAL_BUCKET_ITEM_ARRAY_SIZE = 4;
   class="kw">public class="kw">static class="kw">final Comparator<BucketItem<?>> CLOSER_TO_SELF = Comparator.comparingDouble(var0 -> var0.squaredDistance);
   class="kw">protected class="kw">static class="kw">final byte[] EMPTY_INDICES = new byte[]{-1};
   class="kw">protected BucketItemPool<E> bucketItemPool;
   @Nullable
   class="kw">protected BucketList.Bucket<E>[] buckets;
   class="kw">protected byte[] bucketIndices = EMPTY_INDICES;
   class="kw">protected int bucketCount;
   class="kw">protected int squaredMaxDistance;

   class="kw">public BucketList(BucketItemPool<E> var1) {
      this.bucketItemPool = var1;
   }

   class="kw">public void setBucketItemPool(@Nonnull BucketItemPool<E> var1) {
      this.clear();
      this.bucketItemPool = var1;
   }

   class="kw">public void clear() {
      if (this.buckets != null && this.bucketItemPool != null) {
         for (BucketList.Bucket var4 : this.buckets) {
            var4.clear(this.bucketItemPool);
         }
      }
   }

   class="kw">public void reset() {
      this.clear();
      this.buckets = null;
      this.bucketCount = 0;
      this.bucketIndices = EMPTY_INDICES;
   }

   class="kw">public void configure(@Nonnull int[] var1) {
      this.configure(var1, 4);
   }

   class="kw">public void configure(@Nonnull int[] var1, int var2) {
      if (var1 == null) {
         throw new IllegalArgumentException("bucketRanges can't be null");
      }

      if (var1.length <= 0) {
         throw new IllegalArgumentException("bucketRanges can't beempty");
      }

      int[] var3 = (int[])var1.clone();
      IntArrays.quickSort(var3);
      if (var3[0] <= 0) {
         throw new IllegalArgumentException("bucketRanges entries must be >0");
      }

      this.configureWithPreSortedArray(var3, var2);
   }

   class="kw">public void configureWithPreSortedArray(@Nonnull int[] var1) {
      this.configureWithPreSortedArray(var1, 4);
   }

   class="kw">public void configureWithPreSortedArray(@Nonnull int[] var1, int var2) {
      this.clear();
      this.bucketCount = var1.length;
      this.squaredMaxDistance = var1[this.bucketCount - 1];
      this.squaredMaxDistance = this.squaredMaxDistance * this.squaredMaxDistance;
      this.buckets = new BucketList.Bucket[this.bucketCount];
      this.bucketIndices = new byte[this.squaredMaxDistance + 1];
      int var3 = 0;

      for (int var4 = 0; var4 < this.bucketCount; var4++) {
         int var5 = var1[var4] * var1[var4];
         this.buckets[var4] = new BucketList.Bucket<>(var2);

         for (int var6 = var3; var6 < var5; var6++) {
            this.bucketIndices[var6] = (byte)var4;
         }

         var3 = var5;
      }

      this.bucketIndices[this.bucketIndices.length - 1] = -1;
   }

   class="kw">public void configureWithPresortedArray(@Nonnull IntArrayList var1, int var2) {
      this.configureWithPreSortedArray(var1.toIntArray(), var2);
   }

   class="kw">public boolean add(@Nonnull E var1, double var2) {
      int var4 = this.getFirstBucketIndex((int)var2);
      if (var4 < 0) {
         class="kw">return false;
      }

      BucketItem var5 = this.bucketItemPool.allocate(var1, var2);
      this.buckets[var4].add(var5);
      class="kw">return true;
   }

   class="kw">public int getBucketCount() {
      class="kw">return this.buckets != null ? this.buckets.length : 0;
   }

   @Nullable
   class="kw">public BucketList.Bucket<E> getBucket(int var1) {
      class="kw">return var1 >= 0 && var1 < this.getBucketCount() ? this.buckets[var1] : null;
   }

   class="kw">public int getFirstBucketIndex(int var1) {
      if (var1 == 0) {
         class="kw">return this.bucketIndices[0];
      }

      var1 = Math.min(var1, this.squaredMaxDistance);
      class="kw">return var1 <= 0 ? -1 : this.bucketIndices[var1];
   }

   class="kw">public int getLastBucketIndex(int var1) {
      int var2 = Math.min(var1, this.squaredMaxDistance) - 1;
      class="kw">return var2 < 0 ? -1 : this.bucketIndices[var2];
   }

   @Nullable
   class="kw">public E getClosestInRange(int var1, int var2, @Nonnull Predicate<E> var3, @Nonnull BucketList.SortBufferProvider var4) {
      int var5 = var1 * var1;
      int var6 = this.getFirstBucketIndex(var5);
      if (var6 < 0) {
         class="kw">return null;
      }

      int var7 = var2 * var2;
      int var8 = this.getLastBucketIndex(var7);

      for (int var9 = var6; var9 <= var8; var9++) {
         BucketList.Bucket var10 = this.buckets[var9];
         if (!var10.isEmpty) {
            if (var10.isUnsorted) {
               var10.sort(var4);
            }

            BucketItem[] var11 = var10.bucketItems;
            int var12 = 0;

            for (int var13 = var10.size; var12 < var13; var12++) {
               BucketItem var14 = var11[var12];
               double var15 = var14.squaredDistance;
               if (!(var15 < var5)) {
                  if (var15 >= var7) {
                     class="kw">return null;
                  }

                  Object var17 = var14.item;
                  if (var17 != null && var3.test(var17)) {
                     class="kw">return var17;
                  }
               }
            }
         }
      }

      class="kw">return null;
   }

   class="kw">public class="kw">static void addBucketDistance(@Nonnull IntArrayList var0, int var1, int var2) {
      addBucketDistance(var0, var1, var2, -1);
   }

   class="kw">public class="kw">static void addBucketDistance(@Nonnull IntArrayList var0, int var1, int var2, int var3) {
      if (var2 >= 1) {
         int var4 = 0;

         int var5;
         for (var5 = var0.size(); var4 < var5; var4++) {
            int var6 = var0.getInt(var4);
            if (var6 == var2) {
               class="kw">return;
            }

            if (var6 > var2) {
               break;
            }
         }

         var0.add(var4, var2);
         if (++var5 > var1) {
            int var15 = var0.getInt(0);
            int var7 = area(0, var15);
            int var8 = Integer.MAX_VALUE;
            int var9 = -1;

            for (int var13 = 1; var13 < var5; var13++) {
               int var10 = var0.getInt(var13);
               int var11 = area(var15, var10);
               int var12 = var7 + var11;
               if (var12 <= var8 && var15 != var3) {
                  var9 = var13 - 1;
                  var8 = var12;
               }

               var15 = var10;
               var7 = var11;
            }

            var0.removeInt(var9);
         }
      }
   }

   class="kw">protected class="kw">static int area(int var0, int var1) {
      class="kw">return var1 * var1 - var0 * var0;
   }

   class="kw">public class="kw">static class Bucket<E> {
      class="kw">protected BucketItem<E>[] bucketItems;
      class="kw">protected int size;
      class="kw">protected boolean isUnsorted;
      class="kw">protected boolean isEmpty;

      class="kw">public Bucket(int var1) {
         this.bucketItems = new BucketItem[var1];
         this.size = 0;
         this.isUnsorted = false;
         this.isEmpty = true;
      }

      class="kw">public BucketItem<E>[] getItems() {
         class="kw">return this.bucketItems;
      }

      class="kw">public int size() {
         class="kw">return this.size;
      }

      class="kw">public boolean isUnsorted() {
         class="kw">return this.isUnsorted;
      }

      class="kw">public boolean isEmpty() {
         class="kw">return this.isEmpty;
      }

      class="kw">public void clear(@Nonnull BucketItemPool<E> var1) {
         if (!this.isEmpty) {
            var1.deallocate(this.bucketItems, this.size);

            for (int var2 = 0; var2 < this.size; var2++) {
               this.bucketItems[var2] = null;
            }

            this.size = 0;
            this.isUnsorted = false;
            this.isEmpty = true;
         }
      }

      class="kw">public void add(@Nonnull BucketItem<E> var1) {
         this.isEmpty = false;
         if (this.size == this.bucketItems.length) {
            this.bucketItems = (BucketItem<E>[])ObjectArrays.grow(this.bucketItems, this.size + 1);
         }

         this.bucketItems[this.size++] = var1;
         this.isUnsorted = true;
      }

      class="kw">public void sort(@Nonnull BucketList.SortBufferProvider var1) {
         this.isUnsorted = false;
         if (this.size > 1) {
            BucketItem[] var2 = var1.apply(this.size);
            System.arraycopy(this.bucketItems, 0, var2, 0, this.size);
            ObjectArrays.mergeSort(this.bucketItems, 0, this.size, BucketList.CLOSER_TO_SELF, var2);
         }
      }
   }

   class="kw">public class="kw">static class SortBufferProvider class="kw">implements IntFunction<BucketItem[]> {
      class="kw">protected BucketItem[] buffer = new BucketItem[4];

      class="kw">public SortBufferProvider() {
      }

      class="kw">public BucketItem[] apply(int var1) {
         if (var1 <= this.buffer.length) {
            class="kw">return this.buffer;
         }

         this.buffer = (BucketItem[])ObjectArrays.grow(this.buffer, var1);
         class="kw">return this.buffer;
      }
   }
}