MetaRegistry class

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

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

implements: IMetaRegistry<K>

Поля (10)

МодификаторыТипИмя
private final Function<K, T> function
private final MetaKey<T> key
final Map<String, MetaRegistry.MetaRegistryEntry> parameterMapping
MetaRegistry.MetaRegistryEntry var2
MetaRegistry.MetaRegistryEntry var3
int var5
MetaKey var6
var6
var6
MetaRegistry.MetaRegistryEntry var7

Методы (9)

МодификаторыВозвратСигнатура
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Codec cannot be null if persistence is enabled.")
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Codec key is already registered. Given: " + var3)
public MetaRegistryEntrypublic MetaRegistryEntry(Function<K, T> nullx, MetaKey<T> nullxx)
public <T> void acceptpublic <T> void accept(int var1, T var2x)
public Function<K, T> getFunctionpublic Function<K, T> getFunction()
public MetaKey<T> getKeypublic MetaKey<T> getKey()
if if(var2 && var4 == null)
if if(var2)
if if(var2)

Исходный код

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