Resource class
Пакет: com.hypixel.hytale.server.worldgen.util
Файл: com/hypixel/hytale/server/worldgen/util/ListPool.java
extends: ObjectArrayList<T>
implements: AutoCloseable
Поля (1)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private final ListPool<T> |
pool |
Методы (2)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public void |
closepublic void close() |
|
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);
}
}
}