package models.terms.meta;
import java.util.HashMap;
import java.util.Map;
import lombok.EqualsAndHashCode;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
import models.algebra.Variable;
import models.terms.RDLTerm;
@RequiredArgsConstructor
@EqualsAndHashCode
@ToString
public class MatchConstraint {
private final Map<Variable, RDLTerm> binding;
private final Map<Variable, OrderVariableConstraint> orderConstraint;
public MatchConstraint(MatchConstraint constraint) {
this.binding = constraint.getBinding();
this.orderConstraint = constraint.getOrderConstraint();
}
public Map<Variable, RDLTerm> getBinding() {
return new HashMap<>(binding);
}
public void setBinding(Variable key, RDLTerm value) {
this.binding.put(key, value);
}
public Map<Variable, OrderVariableConstraint> getOrderConstraint() {
Map<Variable, OrderVariableConstraint> res = new HashMap<>();
for (var key : orderConstraint.keySet()) {
res.put(key, (OrderVariableConstraint) orderConstraint.get(key).clone());
}
return res;
}
public void putOrderConstraint(Variable key, OrderVariableConstraint value) {
this.orderConstraint.put(key, value);
}
public void setOrderConstraint(Variable key, OrderConstraint constraint, int value) {
this.orderConstraint.get(key).setConstraint(value, constraint);
}
public static MatchConstraint createDefault() {
return new MatchConstraint(new HashMap<>(), new HashMap<>());
}
}