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