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;
      }
   }
}