public void ConstrainVars(string s1, string s2) { if (s1.Equals(s2)) { return; } ConstraintList a1 = GetConstraints(s1); ConstraintList a2 = GetConstraints(s2); if (a1 == a2) { return; } Trace.Assert(a1 != null); Trace.Assert(a2 != null); Log("Constraining var: " + s1 + " = " + s2); foreach (Constraint c in a2) { AddConstraintToList(c, a1); } ConstrainQueuedItems(); }
public void AddConstraintToList(Constraint c, ConstraintList a) { if (c is Var) { // Update the constraint list associated with this particular variable // to now be "a". string sVar = c.ToString(); Trace.Assert(mLookup.ContainsKey(sVar)); ConstraintList list = mLookup[sVar]; if (list == a) { Err("Internal error, expected constraint list to contain constraint " + c.ToString()); } mLookup[sVar] = a; } if (a.Contains(c)) { return; } foreach (Constraint k in a) { AddSubConstraints(k, c); } a.Add(c); }
ConstraintList GetConstraints(string s) { if (!mLookup.ContainsKey(s)) { ConstraintList a = new ConstraintList(); a.Add(CreateVar(s)); mLookup.Add(s, a); } Trace.Assert(mLookup[s].ContainsVar(s)); return(mLookup[s]); }