ExtendedCoordinateKey class
Пакет: com.hypixel.hytale.server.worldgen.cache
Файл: com/hypixel/hytale/server/worldgen/cache/ExtendedCoordinateCache.java
implements: Function<ExtendedCoordinateCache.ExtendedCoordinateKey<K>, ExtendedCoordinateCache.ExtendedCoordinateKey<K>>
Поля (5)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private long |
coord |
|
private int |
hash |
|
private K |
k |
|
private int |
seed |
|
ExtendedCoordinateCache.ExtendedCoordinateKey |
var2 |
Методы (5)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public ExtendedCoordinateCache.ExtendedCoordinateKey<K> |
applypublic ExtendedCoordinateCache.ExtendedCoordinateKey<K> apply(@Nonnull ExtendedCoordinateCache.ExtendedCoordinateKey<K> var1) |
|
public boolean |
equalspublic boolean equals(Object var1) |
|
public int |
hashCodepublic int hashCode() |
|
public ExtendedCoordinateCache.ExtendedCoordinateKey<K> |
setLocationpublic ExtendedCoordinateCache.ExtendedCoordinateKey<K> setLocation(@Nonnull K var1, int var2, int var3, int var4) |
abstract |
|
this this(null, 0, 0, 0) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.worldgen.cache;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.HashUtil;
class="kw">import com.hypixel.hytale.server.worldgen.util.ObjectPool;
class="kw">import com.hypixel.hytale.server.worldgen.util.cache.SizedTimeoutCache;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import java.util.function.Function;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class="kw">abstract class ExtendedCoordinateCache<K, T> {
@Nonnull
class="kw">private class="kw">final SizedTimeoutCache<ExtendedCoordinateCache.ExtendedCoordinateKey<K>, T> cache;
@Nonnull
class="kw">private class="kw">final ExtendedCoordinateCache.ExtendedCoordinateObjectFunction<K, T> loader;
@Nonnull
class="kw">private class="kw">final ObjectPool<ExtendedCoordinateCache.ExtendedCoordinateKey<K>> vectorPool;
class="kw">public ExtendedCoordinateCache(
@Nonnull ExtendedCoordinateCache.ExtendedCoordinateObjectFunction<K, T> var1,
@Nullable ExtendedCoordinateCache.ExtendedCoordinateRemovalListener<T> var2,
int var3,
long var4
) {
this.loader = var1;
this.vectorPool = new ObjectPool<>(var3, ExtendedCoordinateCache.ExtendedCoordinateKey::new);
this.cache = new SizedTimeoutCache<>(var4, TimeUnit.SECONDS, var3, var1x -> {
int var2 = ChunkUtil.xOfChunkIndex(var1x.coord);
int var3 = ChunkUtil.zOfChunkIndex(var1x.coord);
class="kw">return var1.compute(var1x.k, var1x.seed, var2, var3);
}, (var2x, var3x) -> {
this.vectorPool.recycle(var2x);
if (var2 != null) {
var2.onRemoval(var3x);
}
});
}
@Nullable
class="kw">public T get(@Nonnull K var1, int var2, int var3, int var4) {
class="kw">return this.cache.getWithReusedKey(this.localKey().setLocation(var1, var2, var3, var4), this.vectorPool);
}
class="kw">protected class="kw">abstract ExtendedCoordinateCache.ExtendedCoordinateKey<K> localKey();
class="kw">public class="kw">static class ExtendedCoordinateKey<K>
class="kw">implements Function<ExtendedCoordinateCache.ExtendedCoordinateKey<K>, ExtendedCoordinateCache.ExtendedCoordinateKey<K>> {
@Nullable
class="kw">private K k;
class="kw">private int seed;
class="kw">private long coord;
class="kw">private int hash;
class="kw">public ExtendedCoordinateKey() {
this(null, 0, 0, 0);
}
class="kw">public ExtendedCoordinateKey(@Nullable K var1, int var2, int var3, int var4) {
this.k = var1;
this.seed = var2;
this.coord = ChunkUtil.indexChunk(var3, var4);
this.hash = 31 * (var1 != null ? var1.hashCode() : 0) + (int)HashUtil.hash(var2, this.coord);
}
@Nonnull
class="kw">public ExtendedCoordinateCache.ExtendedCoordinateKey<K> setLocation(@Nonnull K var1, int var2, int var3, int var4) {
this.k = var1;
this.seed = var2;
this.coord = ChunkUtil.indexChunk(var3, var4);
this.hash = 31 * var1.hashCode() + (int)HashUtil.hash(var2, this.coord);
class="kw">return this;
}
@Nonnull
class="kw">public ExtendedCoordinateCache.ExtendedCoordinateKey<K> apply(@Nonnull ExtendedCoordinateCache.ExtendedCoordinateKey<K> var1) {
this.k = var1.k;
this.seed = var1.seed;
this.coord = var1.coord;
this.hash = var1.hash;
class="kw">return this;
}
@Override
class="kw">public int hashCode() {
class="kw">return this.hash;
}
@Override
class="kw">public boolean equals(Object var1) {
ExtendedCoordinateCache.ExtendedCoordinateKey var2 = (ExtendedCoordinateCache.ExtendedCoordinateKey<?>)var1;
class="kw">return this.seed == var2.seed && this.coord == var2.coord && this.k.equals(var2.k);
}
}
@FunctionalInterface
class="kw">public class="kw">interface ExtendedCoordinateObjectFunction<K, T> {
T compute(K var1, int var2, int var3, int var4);
}
@FunctionalInterface
class="kw">public class="kw">interface ExtendedCoordinateRemovalListener<T> {
void onRemoval(T var1);
}
}