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, Object> values = new Object2ObjectArrayMap<>(); public void put(Atom atom, @Nullable T value) { this.values.put(atom, value); } @Nullable public T get(Atom atom) { return (T)this.values.get(atom); } public T getOrThrow(Atom atom) { return (T)Objects.requireNonNull(this.get(atom)); } public T getOrDefault(Atom atom, T defaultValue) { return (T)Objects.requireNonNullElse(this.get(atom), defaultValue); } @Nullable @SafeVarargs public final T getAny(Atom... atoms) { for (Atom atom : atoms) { T object = this.get(atom); if (object != null) { return object; } } return null; } @SafeVarargs public final T getAnyOrThrow(Atom... 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(); } }