65 lines
1.4 KiB
Java
65 lines
1.4 KiB
Java
package net.minecraft.util.parsing.packrat;
|
|
|
|
import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap;
|
|
import it.unimi.dsi.fastutil.objects.Object2ObjectMap;
|
|
import java.util.Objects;
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
public final class Scope {
|
|
private final Object2ObjectMap<Atom<?>, Object> values = new Object2ObjectArrayMap<>();
|
|
|
|
public <T> void put(Atom<T> atom, @Nullable T value) {
|
|
this.values.put(atom, value);
|
|
}
|
|
|
|
@Nullable
|
|
public <T> T get(Atom<T> atom) {
|
|
return (T)this.values.get(atom);
|
|
}
|
|
|
|
public <T> T getOrThrow(Atom<T> atom) {
|
|
return (T)Objects.requireNonNull(this.get(atom));
|
|
}
|
|
|
|
public <T> T getOrDefault(Atom<T> atom, T defaultValue) {
|
|
return (T)Objects.requireNonNullElse(this.get(atom), defaultValue);
|
|
}
|
|
|
|
@Nullable
|
|
@SafeVarargs
|
|
public final <T> T getAny(Atom<T>... atoms) {
|
|
for (Atom<T> atom : atoms) {
|
|
T object = this.get(atom);
|
|
if (object != null) {
|
|
return object;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
@SafeVarargs
|
|
public final <T> T getAnyOrThrow(Atom<T>... atoms) {
|
|
return (T)Objects.requireNonNull(this.getAny(atoms));
|
|
}
|
|
|
|
public String toString() {
|
|
return this.values.toString();
|
|
}
|
|
|
|
public void putAll(Scope scope) {
|
|
this.values.putAll(scope.values);
|
|
}
|
|
|
|
public boolean equals(Object object) {
|
|
if (this == object) {
|
|
return true;
|
|
} else {
|
|
return object instanceof Scope scope ? this.values.equals(scope.values) : false;
|
|
}
|
|
}
|
|
|
|
public int hashCode() {
|
|
return this.values.hashCode();
|
|
}
|
|
}
|