/// <summary> /// Loads a SAS+ mutexes section. /// </summary> private void LoadMutexGroups() { int mutexGroupsCount = ParseAndCheckNumber(GetNextLine()); for (int i = 0; i < mutexGroupsCount; ++i) { CheckExpected(GetNextLine(), "begin_mutex_group"); MutexGroup mutexGroup = new MutexGroup(); int mutexGroupSize = ParseAndCheckNumber(GetNextLine()); for (int j = 0; j < mutexGroupSize; ++j) { var numberPair = ParseAndCheckNumberPair(GetNextLine()); mutexGroup.Add(new Assignment(numberPair.Item1, numberPair.Item2)); } if (mutexGroup.Count > 0) { Problem.MutexGroups.Add(mutexGroup); } CheckExpected(GetNextLine(), "end_mutex_group"); } }
/// <summary> /// Visits the given input data node. /// </summary> /// <param name="data">Input data node.</param> public override void Visit(MutexGroup data) { Location = "Mutex groups"; HashSet <Tuple <int, int> > uniqueFacts = new HashSet <Tuple <int, int> >(); data.ForEach(mutexFact => uniqueFacts.Add(Tuple.Create(mutexFact.Variable, mutexFact.Value))); if (uniqueFacts.Count != data.Count) { throw GetException("Some mutex group contains duplicated mutex facts, which is invalid."); } }
public virtual void Visit(MutexGroup data) { }