package edu.neu.ccs.evergreen.model; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; /** * Tracks all of the variables in the system. * */ public class Variables { private List> foundIn; private List constraints = new LinkedList(); private int maximumVariable; /** * Create a new instance which supports the given number of variables. * * @param maximumVariable * Maximum variable */ public Variables(int maximumVariable) { this.maximumVariable = maximumVariable; foundIn = new ArrayList>(maximumVariable + 1); for (int i = 0; i <= maximumVariable; i++) { foundIn.add(new ArrayList()); } } /** * Add a link between the constraint and the variables in it. * * @param constraint * Constraint */ public void addConstraint(Constraint constraint) { constraints.add(constraint); for (int i = 0; i < constraint.getRank(); i++) { int variable = constraint.getVariable(i); if (variable > maximumVariable) { for (int j = maximumVariable + 1; j <= variable; j++) { foundIn.add(new ArrayList()); } maximumVariable = variable; } List relations = foundIn.get(variable); relations.add(constraint); } } /** * Return the maximum variable seen so far. * * @return Maximum variable */ public int getMaximumVariable() { return maximumVariable; } /** * Return a list of constraints that the given variable is in. * * @param variable * Variable * @return List of constraints */ public List getConstraints(int variable) { return foundIn.get(variable); } /** * Return all of the constraints in the system. * @return List of constraints */ public List getConstraints() { return constraints; } }