ListPool class

Пакет: com.hypixel.hytale.server.worldgen.util

Файл: com/hypixel/hytale/server/worldgen/util/ListPool.java

Поля (5)

МодификаторыТипИмя
final int capacity
private final ListPool<T> pool
ListPool.Resource var1
ListPool.Resource var2
var2

Методы (7)

МодификаторыВозвратСигнатура
public Resourcepublic Resource(ListPool<T> var1)
public void closepublic void close()
public T[] emptyArrayT[] emptyArray()
for for(int var3 = 0; var3 < var1; var3++)
if if(var2 == null)
public void releasevoid release(@Nonnull ListPool.Resource<T> var1)
public T[] toArraypublic T[] toArray()

Исходный код

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

class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.util.concurrent.ConcurrentLinkedQueue;
class="kw">import javax.annotation.Nonnull;

class="kw">public class ListPool<T> {
   class="kw">private class="kw">final int capacity;
   class="kw">private class="kw">final T[] empty;
   class="kw">private class="kw">final ConcurrentLinkedQueue<ListPool.Resource<T>> pool = new ConcurrentLinkedQueue<>();

   class="kw">public ListPool(int var1, T[] var2) {
      this.capacity = var1;
      this.empty = var2;

      for (int var3 = 0; var3 < var1; var3++) {
         this.pool.add(new ListPool.Resource<>(this));
      }
   }

   class="kw">public T[] emptyArray() {
      class="kw">return this.empty;
   }

   @Nonnull
   class="kw">public ListPool.Resource<T> acquire() {
      ListPool.Resource var1 = this.pool.poll();
      class="kw">return var1 == null ? new ListPool.Resource<>(this) : var1;
   }

   @Nonnull
   class="kw">public ListPool.Resource<T> acquire(int var1) {
      ListPool.Resource var2 = this.pool.poll();
      if (var2 == null) {
         var2 = new ListPool.Resource<>(this);
      }

      var2.ensureCapacity(var1);
      class="kw">return var2;
   }

   class="kw">public void release(@Nonnull ListPool.Resource<T> var1) {
      if (this.pool.size() < this.capacity) {
         var1.clear();
         this.pool.offer(var1);
      }
   }

   class="kw">public class="kw">static class Resource<T> class="kw">extends ObjectArrayList<T> class="kw">implements AutoCloseable {
      class="kw">private class="kw">final ListPool<T> pool;

      class="kw">public Resource(ListPool<T> var1) {
         this.pool = var1;
      }

      @Nonnull
      class="kw">public T[] toArray() {
         class="kw">return (T[])super.toArray(this.pool.empty);
      }

      @Override
      class="kw">public void close() {
         this.pool.release(this);
      }
   }
}