ExtendedCoordinateObjectFunction interface

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

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

Методы (1)

МодификаторыВозвратСигнатура
abstract T computeT compute(K var1, int var2, int var3, int var4)

Исходный код

Показать/скрыть
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);
   }
}