/// <summary> /// Constrains <paramref name="variable"/> to one element of <paramref name="values"/> /// </summary> public static void ElementOf <T>(FiniteDomainVariable <T> variable, IEnumerable <T> values) { ulong mask = 0UL; foreach (var value in values) { mask = mask.SetBit(variable.FiniteDomain.IndexOf(value)); } variable.BackdoorSet(variable.AllowableValues & mask); }
/// <summary> /// Prohibits <paramref name="variable"/> from assuming <paramref name="value"/> /// </summary> public static void NotEqual <T>(FiniteDomainVariable <T> variable, T value) { UInt64 newValue = variable.AllowableValues.ClearBit(variable.FiniteDomain.IndexOf(value)); variable.BackdoorSet(newValue); }
/// <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))); }