AbstractMetaStore class

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

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

implements: IMetaStoreImpl<K>

Поля (12)

МодификаторыТипИмя
final K parent
boolean var1
BsonValue var2
final BsonDocument var2
Codec var3
Object var4
var4
var4
String var5
BsonValue var6
PersistentMetaKey var7
Object var8

Методы (10)

МодификаторыВозвратСигнатура
public <T> void acceptpublic <T> void accept(MetaKey<T> var1x, T var2x)
protected <T> T decodeOrNewMetaObject<T> T decodeOrNewMetaObject(MetaKey<T> var1)
abstract abstract <T> T get0<T> T get0(MetaKey<T> var1)
if if(var2 != null)
if if(var3 instanceof DirectDecodeCodec)
if if(!this.bypassEncodedCache && this.cachedEncoded != null)
if if(var1x instanceof PersistentMetaKey var3)
if if(!this.bypassEncodedCache)
if if(var7 == null)
protected <T> boolean tryDecodeUnknownKey<T> boolean tryDecodeUnknownKey(@Nonnull PersistentMetaKey<T> var1)

Исходный код

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

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.DirectDecodeCodec;
class="kw">import com.hypixel.hytale.codec.ExtraInfo;
class="kw">import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
class="kw">import it.unimi.dsi.fastutil.ints.IntSet;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.function.BiConsumer;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonDocument;
class="kw">import org.bson.BsonValue;

class="kw">public class="kw">abstract class AbstractMetaStore<K> class="kw">implements IMetaStoreImpl<K> {
   class="kw">protected class="kw">final K parent;
   class="kw">protected class="kw">final IMetaRegistry<K> registry;
   @Nonnull
   class="kw">private class="kw">final BsonDocument unknownValues;
   @Nonnull
   class="kw">private class="kw">final IntSet notUnknownKeys;
   @Nullable
   class="kw">private BsonDocument cachedEncoded;
   class="kw">private boolean dirty;
   class="kw">private boolean bypassEncodedCache;

   class="kw">public AbstractMetaStore(K var1, IMetaRegistry<K> var2, boolean var3) {
      this.parent = var1;
      this.registry = var2;
      this.unknownValues = new BsonDocument();
      this.notUnknownKeys = new IntOpenHashSet();
      this.dirty = false;
      this.bypassEncodedCache = var3;
   }

   class="kw">protected class="kw">abstract <T> T get0(MetaKey<T> var1);

   @Nonnull
   @Override
   class="kw">public IMetaStoreImpl<K> getMetaStore() {
      class="kw">return this;
   }

   @Override
   class="kw">public IMetaRegistry<K> getRegistry() {
      class="kw">return this.registry;
   }

   @Override
   class="kw">public void forEachUnknownEntry(BiConsumer<String, BsonValue> var1) {
      this.unknownValues.forEach(var1);
   }

   @Override
   class="kw">public class="kw">final void markMetaStoreDirty() {
      this.dirty = true;
      this.cachedEncoded = null;
   }

   @Override
   class="kw">public class="kw">final boolean consumeMetaStoreDirty() {
      boolean var1 = this.dirty;
      this.dirty = false;
      class="kw">return var1;
   }

   class="kw">protected <T> T decodeOrNewMetaObject(MetaKey<T> var1) {
      class="kw">return var1 class="kw">instanceof PersistentMetaKey && this.tryDecodeUnknownKey((PersistentMetaKey<T>)var1)
         ? this.get0(var1)
         : this.registry.newMetaObject(var1, this.parent);
   }

   class="kw">protected <T> boolean tryDecodeUnknownKey(@Nonnull PersistentMetaKey<T> var1) {
      if (!this.notUnknownKeys.add(var1.getId())) {
         class="kw">return false;
      }

      BsonValue var2 = this.unknownValues.get(var1.getKey());
      if (var2 != null) {
         Codec var3 = var1.getCodec();
         Object var4;
         if (var3 class="kw">instanceof DirectDecodeCodec) {
            var4 = this.registry.newMetaObject(var1, this.parent);
            ((DirectDecodeCodec)var3).decode(var2, var4, null);
         } else {
            var4 = var3.decode(var2, null);
         }

         this.unknownValues.remove(var1.getKey());
         this.putMetaObject(var1, var4);
         class="kw">return true;
      } else {
         class="kw">return false;
      }
   }

   @Nonnull
   @Override
   class="kw">public BsonDocument encode(class="kw">final ExtraInfo var1) {
      if (!this.bypassEncodedCache && this.cachedEncoded != null) {
         class="kw">return this.cachedEncoded;
      }

      class="kw">final BsonDocument var2 = new BsonDocument();
      var2.putAll(this.unknownValues);
      this.getRegistry().forEachMetaEntry(this, new IMetaRegistry.MetaEntryConsumer() {
         @Override
         class="kw">public <T> void accept(MetaKey<T> var1x, T var2x) {
            if (var1x class="kw">instanceof PersistentMetaKey var3) {
               var2.put(var3.getKey(), var3.getCodec().encode(var2x, var1));
            }
         }
      });
      if (!this.bypassEncodedCache) {
         this.cachedEncoded = var2;
      }

      class="kw">return var2;
   }

   @Override
   class="kw">public void decode(@Nonnull BsonDocument var1, ExtraInfo var2) {
      if (!Codec.isNullBsonValue(var1)) {
         for (Entry var4 : var1.entrySet()) {
            String var5 = var4.getKey();
            BsonValue var6 = var4.getValue();
            PersistentMetaKey var7 = this.getRegistry().getMetaKeyForCodecKey(var5);
            if (var7 == null) {
               this.unknownValues.put(var5, var6);
            } else if (var7.getCodec() class="kw">instanceof DirectDecodeCodec) {
               Object var8 = this.registry.newMetaObject(var7, this.parent);
               ((DirectDecodeCodec)var7.getCodec()).decode(var6, var8, var2);
               this.putMetaObject(var7, var8);
            } else {
               this.putMetaObject(var7, var7.getCodec().decode(var6, var2));
            }
         }
      }
   }
}