package util.prover.aima.substitution;
import java.util.HashMap;
import java.util.Map;
import util.gdl.grammar.GdlTerm;
import util.gdl.grammar.GdlVariable;
public final class Substitution
{
private final Map<GdlVariable, GdlTerm> contents;
public Substitution()
{
contents = new HashMap<GdlVariable, GdlTerm>();
}
public Substitution compose(Substitution thetaPrime)
{
Substitution result = new Substitution();
result.contents.putAll(contents);
result.contents.putAll(thetaPrime.contents);
return result;
}
public boolean contains(GdlVariable variable)
{
return contents.containsKey(variable);
}
@Override
public boolean equals(Object o)
{
if ((o != null) && (o instanceof Substitution))
{
Substitution substitution = (Substitution) o;
return substitution.contents.equals(contents);
}
return false;
}
public GdlTerm get(GdlVariable variable)
{
return contents.get(variable);
}
@Override
public int hashCode()
{
return contents.hashCode();
}
public void put(GdlVariable variable, GdlTerm term)
{
contents.put(variable, term);
}
/**
* Creates an identical substitution.
*
* @return A new, identical substitution.
*/
public Substitution copy()
{
Substitution copy = new Substitution();
copy.contents.putAll(contents);
return copy;
}
@Override
public String toString()
{
StringBuilder sb = new StringBuilder();
sb.append("{ ");
for (GdlVariable variable : contents.keySet())
{
sb.append(variable + "/" + contents.get(variable) + " ");
}
sb.append("}");
return sb.toString();
}
}