/// <summary>
        ///   Adds the <paramref name="sourceState" /> and all of its <see cref="transitions" /> to the state graph.
        /// </summary>
        /// <param name="sourceState">The state that should be added.</param>
        /// <param name="isInitial">Indicates whether the state is an initial state.</param>
        /// <param name="transitions">The transitions leaving the state.</param>
        /// <param name="transitionCount">The number of valid transitions leaving the state.</param>
        internal void AddStateInfo(int sourceState, bool isInitial, TransitionCollection transitions, int transitionCount)
        {
            Assert.That(transitionCount > 0, "Cannot add deadlock state.");

            Dictionary <EnrichedTargetState, double> container;

            if (isInitial)
            {
                container = _initialStates;
            }
            else
            {
                if (_transitions.ContainsKey(sourceState))
                {
                    container = _transitions[sourceState];
                }
                else
                {
                    container = new Dictionary <EnrichedTargetState, double>();
                    _transitions[sourceState] = container;
                }
            }

            // Search for place to append is linear in number of existing transitions of state linearly => O(n^2)
            foreach (var transition in transitions)
            {
                var probTransition = (LtmcTransition *)transition;
                Assert.That(TransitionFlags.IsValid(probTransition->Flags), "Attempted to add an invalid transition.");

                var enrichedTargetState = new EnrichedTargetState(transition->TargetStateIndex, transition->Formulas);

                if (container.ContainsKey(enrichedTargetState))
                {
                    //Case 1: Merge
                    var currentProbability = container[enrichedTargetState];
                    container[enrichedTargetState] = currentProbability + probTransition->Probability;
                }
                else
                {
                    //Case 2: Append
                    container.Add(enrichedTargetState, probTransition->Probability);
                }
            }
        }
 public bool Equals(EnrichedTargetState other)
 {
     return(TargetState == other.TargetState && Formulas.Equals(other.Formulas));
 }