MetaRegistryEntry class

Пакет: com.hypixel.hytale.server.core.meta

Файл: com/hypixel/hytale/server/core/meta/MetaRegistry.java

Поля (2)

МодификаторыТипИмя
private final Function<K, T> function
private final MetaKey<T> key

Методы (2)

МодификаторыВозвратСигнатура
public Function<K, T> getFunctionpublic Function<K, T> getFunction()
public MetaKey<T> getKeypublic MetaKey<T> getKey()

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.meta;

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.concurrent.locks.ReentrantReadWriteLock;
class="kw">import java.util.function.Function;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class MetaRegistry<K> class="kw">implements IMetaRegistry<K> {
   class="kw">private class="kw">final Map<String, MetaRegistry.MetaRegistryEntry> parameterMapping = new Object2ObjectOpenHashMap();
   class="kw">private class="kw">final List<MetaRegistry.MetaRegistryEntry> suppliers = new ObjectArrayList();
   class="kw">private class="kw">final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();

   class="kw">public MetaRegistry() {
   }

   @Override
   class="kw">public <T> MetaKey<T> registerMetaObject(Function<K, T> var1, boolean var2, String var3, @Nonnull Codec<T> var4) {
      this.lock.writeLock().lock();

      try {
         if (var2 && var4 == null) {
            throw new IllegalStateException("Codec cannot be null if persistence is enabled.");
         }

         int var5 = this.suppliers.size();
         MetaKey var6;
         if (var2) {
            var6 = new PersistentMetaKey<>(var5, var3, var4);
         } else {
            var6 = new MetaKey<>(var5);
         }

         MetaRegistry.MetaRegistryEntry var7 = new MetaRegistry.MetaRegistryEntry<>(var1, var6);
         this.suppliers.add(var7);
         if (var2) {
            if (this.parameterMapping.containsKey(var3)) {
               throw new IllegalStateException("Codec key is already registered. Given: " + var3);
            }

            this.parameterMapping.put(var3, var7);
         }

         class="kw">return var7.getKey();
      } class="kw">finally {
         this.lock.writeLock().unlock();
      }
   }

   @Override
   class="kw">public <T> T newMetaObject(@Nonnull MetaKey<T> var1, K var2) {
      this.lock.readLock().lock();

      try {
         class="kw">return (T)this.suppliers.get(var1.getId()).getFunction().apply(var2);
      } class="kw">finally {
         this.lock.readLock().unlock();
      }
   }

   @Override
   class="kw">public void forEachMetaEntry(@Nonnull IMetaStore<K> var1, @Nonnull class="kw">final IMetaRegistry.MetaEntryConsumer var2) {
      var1.forEachMetaObject(new IMetaStore.MetaEntryConsumer() {
         @Override
         class="kw">public <T> void accept(int var1, T var2x) {
            MetaRegistry.MetaRegistryEntry var3 = MetaRegistry.this.suppliers.get(var1);
            var2.accept(var3.getKey(), var2x);
         }
      });
   }

   @Nullable
   @Override
   class="kw">public PersistentMetaKey<?> getMetaKeyForCodecKey(String var1) {
      MetaRegistry.MetaRegistryEntry var2 = this.parameterMapping.get(var1);
      class="kw">return var2 == null ? null : (PersistentMetaKey)var2.getKey();
   }

   class="kw">private class MetaRegistryEntry<T> {
      class="kw">private class="kw">final Function<K, T> function;
      class="kw">private class="kw">final MetaKey<T> key;

      class="kw">public MetaRegistryEntry(Function<K, T> nullx, MetaKey<T> nullxx) {
         this.function = nullx;
         this.key = nullxx;
      }

      class="kw">public Function<K, T> getFunction() {
         class="kw">return this.function;
      }

      class="kw">public MetaKey<T> getKey() {
         class="kw">return this.key;
      }
   }
}