CoordinateKey class
Пакет: com.hypixel.hytale.server.worldgen.cache
Файл: com/hypixel/hytale/server/worldgen/cache/CoordinateCache.java
implements: Function<CoordinateCache.CoordinateKey, CoordinateCache.CoordinateKey>
Поля (4)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private long |
coord |
|
private int |
hash |
|
private int |
seed |
|
CoordinateCache.CoordinateKey |
var2 |
Методы (7)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public CoordinateCache.CoordinateKey |
applypublic CoordinateCache.CoordinateKey apply(@Nonnull CoordinateCache.CoordinateKey var1) |
|
public long |
coordpublic long coord() |
|
public boolean |
equalspublic boolean equals(Object var1) |
|
public int |
hashCodepublic int hashCode() |
|
public int |
seedpublic int seed() |
|
public CoordinateCache.CoordinateKey |
setLocationpublic CoordinateCache.CoordinateKey setLocation(int var1, int var2, int var3) |
abstract |
|
this this(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 CoordinateCache<T> {
@Nonnull
class="kw">private class="kw">final SizedTimeoutCache<CoordinateCache.CoordinateKey, T> cache;
@Nonnull
class="kw">private class="kw">final ObjectPool<CoordinateCache.CoordinateKey> vectorPool;
class="kw">public CoordinateCache(int var1, long var2) {
this.vectorPool = new ObjectPool<>(var1, CoordinateCache.CoordinateKey::new);
this.cache = new SizedTimeoutCache<>(var2, TimeUnit.SECONDS, var1, var1x -> {
int var2 = ChunkUtil.xOfChunkIndex(var1x.coord);
int var3 = ChunkUtil.zOfChunkIndex(var1x.coord);
class="kw">return this.compute(var1x.seed, var2, var3);
}, (var1x, var2x) -> {
this.vectorPool.recycle(var1x);
this.onRemoval(var2x);
});
}
@Nullable
class="kw">public T get(int var1, int var2, int var3) {
class="kw">return this.cache.getWithReusedKey(this.localKey().setLocation(var1, var2, var3), this.vectorPool);
}
class="kw">protected class="kw">abstract CoordinateCache.CoordinateKey localKey();
class="kw">protected class="kw">abstract T compute(int var1, int var2, int var3);
class="kw">protected class="kw">abstract void onRemoval(T var1);
class="kw">public class="kw">static class CoordinateKey class="kw">implements Function<CoordinateCache.CoordinateKey, CoordinateCache.CoordinateKey> {
class="kw">private int seed;
class="kw">private long coord;
class="kw">private int hash;
class="kw">public CoordinateKey() {
this(0, 0, 0);
}
class="kw">public CoordinateKey(int var1, int var2, int var3) {
this.setLocation(var1, var2, var3);
}
class="kw">public int seed() {
class="kw">return this.seed;
}
class="kw">public long coord() {
class="kw">return this.coord;
}
@Nonnull
class="kw">public CoordinateCache.CoordinateKey setLocation(int var1, int var2, int var3) {
this.seed = var1;
this.coord = ChunkUtil.indexChunk(var2, var3);
this.hash = (int)HashUtil.hash(var1, this.coord);
class="kw">return this;
}
@Nonnull
class="kw">public CoordinateCache.CoordinateKey apply(@Nonnull CoordinateCache.CoordinateKey var1) {
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) {
CoordinateCache.CoordinateKey var2 = (CoordinateCache.CoordinateKey)var1;
class="kw">return this.seed == var2.seed && this.coord == var2.coord;
}
}
}