Example #1
0
        /// <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");
            }
        }
Example #2
0
        /// <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.");
            }
        }
Example #3
0
 public virtual void Visit(MutexGroup data)
 {
 }