CoordinateCache class

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

Файл: com/hypixel/hytale/server/worldgen/cache/CoordinateCache.java

Поля (6)

МодификаторыТипИмя
private long coord
private int hash
private int seed
int var2
CoordinateCache.CoordinateKey var2
int var3

Методы (12)

МодификаторыВозвратСигнатура
public CoordinateKeypublic CoordinateKey()
public CoordinateKeypublic CoordinateKey(int var1, int var2, int var3)
public CoordinateCache.CoordinateKey applypublic CoordinateCache.CoordinateKey apply(@Nonnull CoordinateCache.CoordinateKey var1)
abstract abstract T computeT compute(int var1, int var2, int var3)
public long coordpublic long coord()
public boolean equalspublic boolean equals(Object var1)
public int hashCodepublic int hashCode()
abstract abstract CoordinateCache.CoordinateKey localKeyCoordinateCache.CoordinateKey localKey()
abstract abstract void onRemovalvoid onRemoval(T var1)
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;
      }
   }
}