/// <summary> /// Adds a new mapping between a value in the first finite domain to a value in the second finite domain /// </summary> /// <param name="first"></param> /// <param name="second"></param> public void Add(T1 first, T2 second) { int forwardIndex = Start.IndexOf(first); int backwardIndex = End.IndexOf(second); _mapping[forwardIndex] = _mapping[forwardIndex] | BitHelper.GetMask(backwardIndex); _backwardMapping[backwardIndex] = _backwardMapping[backwardIndex] | BitHelper.GetMask(forwardIndex); }
/// <summary> /// Constrains <paramref name="variable"/> to <paramref name="value"/> /// </summary> public static void Equal <T>(FiniteDomainVariable <T> variable, T value) { variable.BackdoorSet(variable.AllowableValues & BitHelper.GetMask(variable.FiniteDomain.IndexOf(value))); }