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